系列文章目录

揭秘Node+Langchain技术组合的魔法(一)快速开始

揭秘Node+Langchain技术组合的魔法(二)提示词

揭秘Node+Langchain技术组合的魔法(三)工程化

揭秘Node+Langchain技术组合的魔法(四)RAG

揭秘Node+Langchain技术组合的魔法(五)RAG2


文章目录

前言

前面一篇文章讲了如何快速搭建系统,这篇文章就介绍下Langchain中的提示词相关的东西


一、SystemMessage 系统提示词

SystemMessage 用于设置模型的基础行为和角色定位。在实际应用中,可以先通过 SystemMessage 设置模型的基础行为,这点儿就有点像智能体的概念了。

1.如何理解

简单来说就是大模型是个全能的分析模型,你给了他一个角色,它就能根据这个角色进行特定方向的分析,而不用耗费性能的全量分析

💡 举个例子:

比如你想在学校里面找一个叫张三的人,而大模型就会帮你在全校范围内去一个个找,加入你告诉他你要找五年级三班的张三,它就会忽略其它班直接在五年级三班去找,非常的快捷高效

2.如何使用

继续使用上篇文章中的代码进行开发

import { ChatOllama } from '@langchain/ollama';
import { SystemMessage, HumanMessage } from '@langchain/core/messages';

// 创建模型实例,设置基础参数
const model = new ChatOllama({
  baseUrl: "http://localhost:11434",
  model: "deepseek-r1:8b",
  temperature: 0.7, // 控制输出的随机性
});

// 创建系统提示,设定模型角色和行为
const systemMessage = new SystemMessage(
  "你是一个专业的笑话生成器。你只生成笑话,不做其他事情。"
);

// 创建用户提示
const userMessage = new HumanMessage(
  "给我讲一个笑话"
);

// 组合消息链并调用模型
const res = await model.invoke([
  systemMessage,
  userMessage
]);

console.log('AI助手的回答:');
console.log(res);

3.效率对比

同样的让它讲笑话时间效率上来说对比如下

不加提示词 加提示词
50018953800 24963733300

原图

很明显效率上快了很多

4.进阶

为了兼容多角色,或者多类型的分析,我们一般要对系统提示词做一些封装,关键的类如下

  • SystemMessagePromptTemplate

  • HumanMessagePromptTemplate

  • ChatPromptTemplate

代码如下

const { SystemMessagePromptTemplate, HumanMessagePromptTemplate, ChatPromptTemplate } = require('@langchain/core/prompts');
// 定义系统消息模板
const SYSTEM_MESSAGES = {
  chat: "我是一个专业的AI助手,我会提供准确、有帮助的回答,并保持友好和专业的态度。",
  qa: "我是一个专业的问答助手,我会基于提供的上下文准确回答问题,如果问题超出上下文范围,我会明确指出。",
  summarize: "我是一个专业的文本摘要助手,我会准确提取文本中的关键信息,生成简洁而全面的摘要。"
};

// 定义常用的提示词模板
const TEMPLATES = {
  // 通用聊天模板
  chat: ChatPromptTemplate.fromMessages([
    SystemMessagePromptTemplate.fromTemplate(SYSTEM_MESSAGES.chat),
    HumanMessagePromptTemplate.fromTemplate("{input}")
  ]),
  
  // 问答模板
  qa: ChatPromptTemplate.fromMessages([
    SystemMessagePromptTemplate.fromTemplate(SYSTEM_MESSAGES.qa),
    HumanMessagePromptTemplate.fromTemplate("上下文: {context}\n\n问题: {question}")
  ]),
  
  // 文本摘要模板
  summarize: ChatPromptTemplate.fromMessages([
    SystemMessagePromptTemplate.fromTemplate(SYSTEM_MESSAGES.summarize),
    HumanMessagePromptTemplate.fromTemplate("请为以下文本生成摘要:\n\n{text}")
  ])
};

二、HumanMessage 用户提示词 

用户提示词就是对用户输入的信息做一个格式化处理,下面以FewShotPromptTemplate为例做分析

1.如何理解

顾名思义,它就是个提示词模板,没有太多高深的意义,可以理解成一个Java或者C#中的一个StringBuilder,类似

"my name is {name}".replace("{name}",张三)

 前面是模板,后面是变量用于填充,它存在的意义感觉更多的是对用户输入的信息做一些限制

2.如何使用

import { ChatOllama } from '@langchain/ollama';
import { SystemMessage, HumanMessage } from '@langchain/core/messages';
import { FewShotPromptTemplate, PromptTemplate } from '@langchain/core/prompts';

// 创建模型实例,设置基础参数
const model = new ChatOllama({
  baseUrl: "http://localhost:11434",
  model: "deepseek-r1:8b",
  temperature: 0.7, // 控制输出的随机性
});

// 定义示例提示
const examples = [
  {
    question: "讲个笑话",
    answer: "问:为什么程序员总是分不清万圣节和圣诞节?\n答:因为 Oct 31 和 Dec 25 是一样的!(程序员懂得都懂)"
  },
  {
    question: "给我讲个笑话",
    answer: "问:一个程序员去买面包,老板说要2块钱,程序员给了老板10块钱。\n答:老板:找您8块。\n程序员:不,这是二进制,1010一共是10,刚刚好。"
  }
];

// 创建示例模板
const examplePrompt = new PromptTemplate({
  template: "{question}\n{answer}",
  inputVariables: ["question", "answer"]
});

// 创建 FewShotPromptTemplate
const fewShotPrompt = new FewShotPromptTemplate({
  examples,
  examplePrompt,
  prefix: "以下是一些程序员相关的笑话示例:",
  suffix: "现在,请根据以下问题生成一个笑话:\n{input}",
  inputVariables: ["input"],
});

// 创建系统消息
const systemMessage = new SystemMessage(
  "你是一个专业的笑话生成器。你擅长讲述与程序员和技术相关的笑话。请保持幽默、专业且有趣的风格。"
);

// 生成用户消息的提示
const userPrompt = await fewShotPrompt.format({
  input: "请讲一个程序员和产品经理之间的笑话"
});

// 创建用户消息
const userMessage = new HumanMessage(userPrompt);
console.log('用户的问题:', userMessage);

// 调用模型
const res = await model.invoke([
  systemMessage,
  userMessage
]);

console.log('AI助手的回答:');
console.log(res);

 打印的userMessage如下

可以看出来,它最终生成的其实就是一个大字符串,把这个大字符串送给大模型,就能得出结果

 

总结

🚀1.系统提示词对系统的性能提升作用还是挺大的

🚀2.用户提示词的意义更多的在于限制用户的输入,防止方向跑偏

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐