Prompt
提示(Prompt)是与大模型交互的指令。在实际开发中,我们很少直接发送原始字符串,而是使用 提示模板(Prompt Template) 来动态构建提示。
提示模板
提示模板可以帮助我们将用户输入与上下文提示有机结合。对于聊天模型,我们通常使用 ChatPromptTemplate。
prompt_template.ts
import { ChatPromptTemplate } from "@langchain/core/prompts";
// 创建一个聊天提示模板
const prompt = ChatPromptTemplate.fromMessages([
["system", "你是一个专业的{topic}助手。请使用{language}进行回答。"],
["human", "{input}"],
]);
// 格式化提示
const formattedMessages = await prompt.formatMessages({
topic: "烹饪",
language: "中文",
input: "如何写出完美的红烧肉?",
});
console.log("--- 格式化后的消息列表 ---");
console.log(JSON.stringify(formattedMessages, null, 2));
// 也可以直接使用管道将提示传递给模型(将在 LCEL 章节详细介绍)
console.log("\n提示模板已就绪,可用于生成结构化输入。");
核心特性
1. 变量插值
使用 {variable_name} 语法在模板中定义占位符,并在运行时通过对象传入具体取值。
2. 多种消息角色
ChatPromptTemplate 支持定义不同角色的消息:
system: 设定 AI 的角色或背景。human: 代表用户的问题或指令。ai: 代表 AI 的预期回复(常用于 Few-shot 示例)。
3. 组合与嵌套
可以通过数组形式轻松组合多条指令,或者使用 .pipe() 将提示传递给后续组件。
最佳实践
- 清晰性: 确保模板中的指令明确无歧义。
- 少样本示例(Few-shot): 在模板中加入 1-2 个示例,可以显著提升模型在复杂任务上的表现。
- 动态性: 对于大型应用,可以根据用户上下文动态选择不同的 Prompt 模板。