前端开发者玩转AI编程:揭秘Node+Langchain技术组合的魔法(二)
揭秘Node+Langchain技术组合的魔法-提示词
系列文章目录
揭秘Node+Langchain技术组合的魔法(一)快速开始
揭秘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.用户提示词的意义更多的在于限制用户的输入,防止方向跑偏
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)