一架梯子,一头程序猿,仰望星空!
LangChain教程(JS版本) > 内容正文

提示词模板


提示模板

语言模型以文本作为输入 - 这个文本通常称为提示。通常,这不仅仅是一个硬编码的字符串,而是模板、例子和用户输入的组合。LangChain提供了几个类和函数,使得构建和处理提示变得容易。

什么是提示模板?

提示模板是生成提示的可复制的方式。它包含一个文本字符串(”模板”),它可以从最终用户的一组参数中获取输入,并生成一个提示。

提示模板可以包含:

  • 对语言模型的指令,
  • 一组少量示例,帮助语言模型生成更好的响应,
  • 对语言模型的问题。

这是一个简单的例子:

import { PromptTemplate } from "langchain/prompts";

// 如果传递了一个模板,输入变量将自动从模板中推理出来。
const prompt = PromptTemplate.fromTemplate(
  `You are a naming consultant for new companies.
What is a good name for a company that makes {product}?`
);

const formattedPrompt = await prompt.format({
  product: "colorful socks",
});

/*
  You are a naming consultant for new companies.
  What is a good name for a company that makes colorful socks?
*/

创建提示模板

您可以使用PromptTemplate类创建简单的硬编码提示。提示模板可以接受任意数量的输入变量,并可以进行格式化以生成提示。

import { PromptTemplate } from "langchain/prompts";

// 一个没有输入变量的示例提示
const noInputPrompt = new PromptTemplate({
  inputVariables: [],
  template: "Tell me a joke.",
});
const formattedNoInputPrompt = await noInputPrompt.format();

console.log(formattedNoInputPrompt);
// "Tell me a joke."

// 一个带有一个输入变量的示例提示
const oneInputPrompt = new PromptTemplate({
  inputVariables: ["adjective"],
  template: "Tell me a {adjective} joke."
})
const formattedOneInputPrompt = await oneInputPrompt.format({
  adjective: "funny",
});

console.log(formattedOneInputPrompt);
// "Tell me a funny joke."

// 一个带有多个输入变量的示例提示
const multipleInputPrompt = new PromptTemplate({
  inputVariables: ["adjective", "content"],
  template: "Tell me a {adjective} joke about {content}.",
});
const formattedMultipleInputPrompt = await multipleInputPrompt.format({
  adjective: "funny",
  content: "chickens",
});

console.log(formattedMultipleInputPrompt);
// "Tell me a funny joke about chickens."

如果您不想手动指定inputVariables,您还可以使用fromTemplate类方法创建PromptTemplate。LangChain会根据传入的template自动推断出inputVariables

import { PromptTemplate } from "langchain/prompts";

const template = "Tell me a {adjective} joke about {content}.";

const promptTemplate = PromptTemplate.fromTemplate(template);
console.log(promptTemplate.inputVariables);
// ['adjective', 'content']
const formattedPromptTemplate = await promptTemplate.format({
  adjective: "funny",
  content: "chickens",
});
console.log(formattedPromptTemplate);
// "Tell me a funny joke about chickens."

您可以创建自定义的提示模板,以任何您想要的方式格式化提示。有关更多信息,请参阅自定义提示模板。

聊天提示模板

聊天模型以聊天消息列表作为输入,这个列表通常被称为prompt。与原始字符串(您将传递给LLM模型的字符串)不同的是,每条消息都与一个角色相关联。

例如,在OpenAI的Chat Completion API中,聊天消息可以与AI、人类或系统角色关联。模型应更加密切地遵循系统聊天消息的指导。

LangChain提供了几个提示模板,以便于构建和处理提示。鼓励您在调用聊天模型时使用这些与聊天相关的提示模板,以充分发掘模型的潜力。

import {
  ChatPromptTemplate,
  PromptTemplate,
  SystemMessagePromptTemplate,
  AIMessagePromptTemplate,
  HumanMessagePromptTemplate,
} from "langchain/prompts";
import {
  AIMessage,
  HumanMessage,
  SystemMessage,
} from "langchain/schema";

创建与角色相关联的消息模板时,您可以使用相应的MessagePromptTemplate

为了方便起见,您还可以将消息提示模板声明为元组。它们将被强制转换为适当的提示模板类型:

const systemTemplate = "您是一个帮助翻译 {input_language} 到 {output_language} 的助理。";
const humanTemplate = "{text}";

const chatPrompt = ChatPromptTemplate.fromPromptMessages([
  ["system", systemTemplate],
  ["human", humanTemplate],
]);

// 格式化消息
const formattedChatPrompt = await chatPrompt.formatMessages({
  input_language: "英语",
  output_language: "法语",
  text: "我喜欢编程。",
});

console.log(formattedChatPrompt);

/*
  [
    SystemMessage {
      content: '您是一个帮助翻译英语到法语的助理。'
    },
    HumanMessage {
      content: '我喜欢编程。'
    }
  ]
*/

您还可以使用ChatPromptTemplate.formatPrompt()方法,它返回一个PromptValue,您可以将其转换为字符串或消息对象,具体取决于您是否希望将格式化的值用作LLM或聊天模型的输入。

如果您更喜欢使用消息类,这些类上公开了一个fromTemplate方法。这是它的用法:

const template = "您是一个帮助翻译 {input_language} 到 {output_language} 的助理。";
const systemMessagePrompt = SystemMessagePromptTemplate.fromTemplate(template);
const humanTemplate = "{text}";
const humanMessagePrompt = HumanMessagePromptTemplate.fromTemplate(humanTemplate);

如果您希望更直接地构建MessagePromptTemplate,可以在外部创建一个PromptTemplate,然后传入,例如:

const prompt = new PromptTemplate({
  template: "您是一个帮助翻译 {input_language} 到 {output_language} 的助理。",
  inputVariables: ["input_language", "output_language"],
});
const systemMessagePrompt2 = new SystemMessagePromptTemplate({
  prompt,
});

注意:如果使用TypeScript,您可以通过传递一个类型参数来为.fromPromptMessages创建的提示添加类型,像这样:

const chatPrompt = ChatPromptTemplate.fromPromptMessages([
  systemMessagePrompt,
  humanMessagePrompt
]);


关联主题