【LangChain.js学习】 提示词模板

核心说明

LangChain.js 提供多种提示词模板(PromptTemplate),用于规范化构建大模型输入,替代硬编码的字符串拼接,提升交互的精准性、复用性和可维护性。以下结合通义千问翻译场景,讲解三类核心模板的用法和适用场景。

基础提示词模板(PromptTemplate)

核心特点

最基础的模板类型,通过 {变量名} 占位符动态填充内容,语法简洁,学习成本低,适用于单轮、无复杂格式要求的指令构建。

调用代码

javascript 复制代码
import { PromptTemplate } from "@langchain/core/prompts"
import { ChatOpenAI } from "@langchain/openai"
​
// 1. 定义基础模板,通过{text}占位符指定动态参数
const promptTemplate = PromptTemplate.fromTemplate("请帮我将中文翻译成英文:{text}")
​
// 2. 填充模板参数,生成最终提示词
const promptTemplateStr = await promptTemplate.format({ text: "你好" })
​
// 3. 初始化通义千问对话模型
const chatModel = new ChatOpenAI({
    // 模型版本:qwen-max(旗舰版)/qwen-plus(标准版)
    model: "qwen-max",
    configuration: {
        // 阿里百炼OpenAI兼容接口固定地址,不可修改
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
        // 替换为个人有效阿里百炼API Key(从阿里云灵积平台获取)
        apiKey: "[你的阿里百炼API Key]",
    },
})
​
// 4. 调用模型并输出结果(await需包裹在async函数中)
async function callBasicTemplate() {
    const response = await chatModel.invoke(promptTemplateStr)
    console.log(response.content) // 输出示例:Hello
}
​
callBasicTemplate();

少样本提示词模板(FewShotPromptTemplate)

核心特点

通过「示例(examples)」引导模型学习输出格式/风格,解决模型输出不规范的问题,适合固定格式翻译、结构化输出、风格对齐等场景。

调用代码

javascript 复制代码
import { FewShotPromptTemplate, PromptTemplate } from "@langchain/core/prompts"
import { ChatOpenAI } from "@langchain/openai"
​
// 1. 定义少样本模板
const fewShotPromptTemplate = new FewShotPromptTemplate({
    // 前缀:定义任务核心要求(固定文本)
    prefix: "请帮我将中文翻译成英文",
    // 后缀:定义动态输入的占位符
    suffix: "中文:{text}",
    // 示例模板:定义单个示例的展示格式
    examplePrompt: PromptTemplate.fromTemplate("中文:{text}\n英文:{translation}"),
    // 示例数据:提供参考示例,引导模型输出风格
    examples: [
        { text: "你好", translation: "Hello" },
        { text: "你好吗?", translation: "How are you?" },
    ],
    // 输入变量:声明需要动态填充的参数名(必填)
    inputVariables: ["text"],
})
​
// 2. 填充模板参数
const promptTemplateStr = await fewShotPromptTemplate.format({ text: "你好" })
​
// 3. 初始化模型
const chatModel = new ChatOpenAI({
    model: "qwen-max",
    configuration: {
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
        apiKey: "[你的阿里百炼API Key]",
    },
})
​
// 4. 调用模型
async function callFewShotTemplate() {
    const res = await chatModel.invoke(promptTemplateStr)
    console.log(res.content) // 输出示例:Hello
}
​
callFewShotTemplate();

对话提示词模板(ChatPromptTemplate)

核心特点

专为对话模型设计,原生支持 system/human/ai 多角色设定,能精准预设模型行为和上下文,是多轮对话、角色化交互的首选模板。

调用代码

javascript 复制代码
import { ChatPromptTemplate } from "@langchain/core/prompts"
import { ChatOpenAI } from "@langchain/openai"
​
// 1. 定义对话模板,指定多角色消息
const chatPromptTemplate = ChatPromptTemplate.fromMessages([
    // system角色:预设模型身份、能力和行为规则
    ["system", "你是一个专业的翻译,将用户输入的中文翻译成英文,仅返回翻译结果"],
    // human角色:定义用户输入的占位符
    ["human", "{text}"]
])
​
// 2. 填充模板参数
const promptTemplateStr = await chatPromptTemplate.format({ text: "你好" })
​
// 3. 初始化模型
const chatModel = new ChatOpenAI({
    model: "qwen-max",
    configuration: {
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
        apiKey: "[你的阿里百炼API Key]",
    },
})
​
// 4. 调用模型
async function callChatTemplate() {
    const res = await chatModel.invoke(promptTemplateStr)
    console.log(res.content) // 输出示例:Hello
}
​
callChatTemplate();

三类模板对比与选型建议

模板类型 核心优势 适用场景 核心参数/语法
PromptTemplate 简单易用、轻量化 单轮简单指令、无格式要求的文本生成 fromTemplate + 单个占位符
FewShotPromptTemplate 示例引导、输出格式可控 固定格式翻译、结构化输出、模型风格对齐 prefix/suffix + examples
ChatPromptTemplate 多角色设定、上下文感知 多轮对话、精准预设模型行为(如翻译/客服) fromMessages + system/human角色

核心总结

  • 所有模板的核心逻辑是「模板定义 → 参数填充 → 模型调用」,通过占位符实现提示词的动态复用,避免硬编码字符串;
  • ChatPromptTemplate 是对话模型的最佳搭配,支持多角色设定,能精准约束模型行为,交互性和实用性最强;
  • FewShotPromptTemplate 适合需要模型学习示例的场景,示例越多,输出格式越规范,尤其适合结构化输出需求;
  • PromptTemplate 作为基础模板,适合快速实现简单需求,是学习其他复杂模板的基础;
相关推荐
梦帮科技10 小时前
GRAVIS v4.0:基于Web的极速套利架构设计与实时数据流实现
前端·人工智能·rust·自动化·区块链·智能合约·数字货币
爱勇宝10 小时前
办公资料反复修改、补传、交接混乱,我做了个桌面工具来解决这件事
前端·后端·程序员
微信开发api-视频号协议11 小时前
企业微信外部群开发自动化实践过程
java·前端·微信·自动化·企业微信·ipad
甲维斯11 小时前
Fable5:20美金的顶级设计师!
前端·人工智能
kyriewen11 小时前
我同时用了 Claude Code、Cursor 和 Codex,说说三个工具的真实差距——2026 年选错工具比不用 AI 更浪费时间
前端·ai编程·claude
Jackson__12 小时前
为了拯救我的腰椎和颈椎,我做了款浏览器插件!
前端·javascript·开源
闲猫12 小时前
Python FastAPI + SQLAlchemy 入门教程:从零搭建你的第一个 Web 应用
前端·python·fastapi
林小帅12 小时前
NestJS v11 + Prisma v7 ESM 迁移配置解析
前端·javascript·后端
IT_陈寒12 小时前
React的setState竟然不是立刻生效的,害我调试半天
前端·人工智能·后端
简简单单就是我_hehe13 小时前
前端埋点日志解决方案:完整 User-Agent 解析工具实现,爬虫识别、设备品牌、操作系统、浏览器版本全解析(附完整源码)
前端·爬虫