LangChain学习之提示词模板 Prompts(2/8)

模块 2: 提示词模板 (Prompts)

2.1 提示词 (Prompts) 概述

在与大型语言模型(LLM)交互时,提示词 (Prompt) 是向模型发出的指令或问题。一个好的提示词能够引导模型生成高质量、符合预期的输出。LangChain 提供了强大的提示词管理功能,允许开发者创建可复用、动态的提示词模板 1

2.2 PromptTemplate

PromptTemplate 是 LangChain 中最基础的提示词模板。它允许您定义一个包含一个或多个变量的字符串模板。在实际调用模型时,这些变量会被具体的值填充。这使得提示词可以根据不同的输入动态生成。

2.2.1 基本用法

typescript 复制代码
import { PromptTemplate } from "@langchain/core/prompts";

// 定义一个包含变量 `product` 的提示词模板
const promptTemplate = PromptTemplate.fromTemplate(
  "请为以下产品名称生成一个吸引人的营销口号:{product}"
);

// 格式化提示词,填充变量
const formattedPrompt = await promptTemplate.format({
  product: "智能咖啡机",
});

console.log(formattedPrompt);
// 输出: 请为以下产品名称生成一个吸引人的营销口号:智能咖啡机

2.2.2 多个输入变量

PromptTemplate 可以处理多个输入变量,只需在模板字符串中定义它们即可。

typescript 复制代码
import { PromptTemplate } from "@langchain/core/prompts";

const promptTemplate = PromptTemplate.fromTemplate(
  "请根据以下主题和受众,生成一篇短文。主题:{topic},受众:{audience}"
);

const formattedPrompt = await promptTemplate.format({
  topic: "未来科技",
  audience: "青少年",
});

console.log(formattedPrompt);
// 输出: 请根据以下主题和受众,生成一篇短文。主题:未来科技,受众:青少年

2.3 ChatPromptTemplate

ChatPromptTemplate 专门用于聊天模型 (Chat Models)。与 PromptTemplate 处理纯文本不同,ChatPromptTemplate 允许您定义一系列消息,这些消息可以包含不同的角色(如系统、人类、AI)和变量。这对于构建复杂的对话系统至关重要 2

2.3.1 基本用法

ChatPromptTemplate 通过 fromMessages 方法接收一个消息数组,每个消息可以是 SystemMessagePromptTemplateHumanMessagePromptTemplateAIMessagePromptTemplate

typescript 复制代码
import { ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate } from "@langchain/core/prompts";

const chatPrompt = ChatPromptTemplate.fromMessages([
  SystemMessagePromptTemplate.fromTemplate("你是一个友好的助手,你的名字是 {name}。"),
  HumanMessagePromptTemplate.fromTemplate("你好,我的名字是 {user_name}。请问你有什么可以帮助我的吗?"),
]);

const formattedChatPrompt = await chatPrompt.formatMessages({
  name: "小智",
  user_name: "张三",
});

console.log(formattedChatPrompt);
/*
输出:
[
  SystemMessage { content: '你是一个友好的助手,你的名字是 小智。', name: undefined },
  HumanMessage { content: '你好,我的名字是 张三。请问你有什么可以帮助我的吗?', name: undefined }
]
*/

2.4 少样本提示 (Few-shot Prompts)

少样本提示是一种通过在提示词中提供少量示例来引导模型行为的技术。这对于模型理解任务的意图和期望的输出格式非常有效。LangChain 提供了 FewShotPromptTemplate 来方便地实现少样本提示 3

2.4.1 示例定义

首先,需要定义一些示例。这些示例通常是输入-输出对。

typescript 复制代码
const examples = [
  {
    input: "开心",
    output: "😄",
  },
  {
    input: "悲伤",
    output: "😢",
  },
];

2.4.2 创建 FewShotPromptTemplate

FewShotPromptTemplate 结合了 PromptTemplate 和示例。它会根据提供的示例和输入变量动态生成提示词。

typescript 复制代码
import { FewShotPromptTemplate, PromptTemplate } from "@langchain/core/prompts";

const examplePrompt = new PromptTemplate({
  inputVariables: ["input", "output"],
  template: "输入: {input}\n输出: {output}",
});

const fewShotPrompt = new FewShotPromptTemplate({
  examples: examples,
  examplePrompt: examplePrompt,
  prefix: "请将以下文本转换为表情符号:",
  suffix: "输入: {input}\n输出:",
  inputVariables: ["input"],
  exampleSeparator: "\n\n",
});

const formattedPrompt = await fewShotPrompt.format({
  input: "生气",
});

console.log(formattedPrompt);
/*
输出:
请将以下文本转换为表情符号:
输入: 开心
输出: 😄

输入: 悲伤
输出: 😢

输入: 生气
输出:
*/

参考文献

1 LangChain.js Prompts. (n.d.). Docs by LangChain. Retrieved from https://js.langchain.com/docs/modules/prompts/

2 LangChain.js Chat Prompts. (n.d.). Docs by LangChain. Retrieved from https://js.langchain.com/docs/modules/prompts/chat_prompts/

3 LangChain.js Few-shot Prompts. (n.d.). Docs by LangChain. Retrieved from https://js.langchain.com/docs/modules/prompts/few_shot_prompts/

相关推荐
天国梦4 小时前
实测天学网AI作文批改:三篇作文,语法纠错与语篇逻辑的真实表现
人工智能·学习
m4Rk_4 小时前
【论文阅读】Agent 记忆机制(75):TiMem——用时间记忆树实现长期记忆的层级巩固
论文阅读·人工智能·学习·开源·github
外收内放4 小时前
Python与AI应用(项目开发实战:AI智能伴侣第三版)
python·学习·ai编程
pddqjd5 小时前
顺德区中考美术集训画室概念释义与核心服务要点梳理
学习
传奇开心果编程5 小时前
【Jetpack Compose基础语法学与练】第7课 if条件渲染 + 列表基础(LazyColumn)
学习·ui·kotlin·android jetpack
王国强20095 小时前
如何通过 Deep Agents、LangChain 与 LangGraph 构建生产级智能体:从 Deep Agents Code 源码看 Agent 工程实
langchain
Rabitebla6 小时前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法
小贺儿开发6 小时前
Unity 结合百度AI开放平台 手写文字识别
人工智能·科技·学习·unity·云服务·文字识别·手写文字
传奇开心果编程6 小时前
【SwiftUI入门练中学】第1课 从零开始
学习·ui·ios·swiftui·swift
是隼人6 小时前
buuctf-pwn ciscn_2019_sw_1(32位只有一次格式化机会)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门