提示工程与上下文3580 字
LangChain提示词工程应用实践
·全库 424 / 611
《LangChain提示词工程应用实践》共 0.4 万字,通篇围绕 提示词、prompt、LangChain、向量 展开,归在「提示工程与上下文」这一层。
覆盖提示词promptLangChain向量数据库
适合天天在写提示词、想把输出调稳的人
目录骨架(8 节)
- 什么是提示词模板?
- 创建一个提示词模板(prompt template)
- 聊天消息提示词模板(chat prompt template)
- MessagesPlaceholder
- 使用示例集
- 使用示例选择器
- 创建示例集
- 创建小样本示例的格式化程序
示例代码
注:将ppt后缀名改为zip后解压
python版本:3.12.4
Prompt templates(提示词模板)
语言模型以文本作为输入 - 这个文本通常被称为提示词(prompt)。在开发过程中,对于提示词通常不能直接硬编码,不利于提示词管理,而是通过提示词模板进行维护,类似开发过程中遇到的短信模板、邮件模板等等。

什么是提示词模板?
提示词模板本质上跟平时大家使用的邮件模板、短信模板没什么区别,就是一个字符串模板,模板可以包含一组模板参数,通过模板参数值可以替换模板对应的参数。
一个提示词模板可以包含下面内容:
- 发给大语言模型(LLM)的指令。
- 一组问答示例,以提醒AI以什么格式返回请求。
- 发给语言模型的问题。
创建一个提示词模板(prompt template)
可以使用 PromptTemplate 类创建简单的提示词。提示词模板可以内嵌任意数量的模板参数,然后通过参数值格式化模板内容。
from langchain.prompts import PromptTemplate
# 定义一个提示模板,包含adjective和content两个模板变量,模板变量使用{}包括起来
prompt_template = PromptTemplate.from_template(
"给我讲一个关于{content}的{adjective}笑话。"
)
# 通过模板参数格式化提示模板
result = prompt_template.format(adjective="冷", content="猴子")
print(result)
模板输出结果:
给我讲一个关于猴子的冷笑话。
聊天消息提示词模板(chat prompt template)
聊天模型(Chat Model)以聊天消息列表作为输入,这个聊天消息列表的消息内容也可以通过提示词模板进行管理。这些聊天消息与原始字符串不同,因为每个消息都与“角色(role)”相关联。
例如,在OpenAI的Chat Completion API中,Openai的聊天模型,给不同的聊天消息定义了三种角色类型分别是助手(assistant)、人类(human)或系统(system)角色:
- 助手(Assistant) 消息指的是当前消息是AI回答的内容
- 人类(user)消息指的是你发给AI的内容
- 系统(system)消息通常是用来给AI身份进行描述。
创建聊天消息模板例子
from langchain_core.prompts import ChatPromptTemplate
# 通过一个消息数组创建聊天消息模板
# 数组每一个元素代表一条消息,每个消息元组,第一个元素代表消息角色(也成为消息类型),第二个元素代表消息内容。
# 消息角色:system代表系统消息、human代表人类消息,ai代表LLM返回的消息内容
# 下面消息定义了2个模板参数name和user_input
chat_template = ChatPromptTemplate.from_messages(
[
("system", "你是一位人工智能助手,你的名字是{name}。"),
("human", "你好"),
("ai", "我很好,谢谢!"),
("human", "{user_input}"),
]
)
# 通过模板参数格式化模板内容
messages = chat_template.format_messages(name="Bob", user_input="你的名字叫什么?")
print(messages)
另外一种消息格式例子:
from langchain.prompts import HumanMessagePromptTemplate
from langchain_core.messages import SystemMessage
from langchain_core.prompts import ChatPromptTemplate
# 使用langchain定义的SystemMessage、HumanMessagePromptTemplate等工具类定义消息,跟前面的例子类似,下面定义了两条消息
chat_template = ChatPromptTemplate.from_messages(
[
SystemMessage(
content=(
"你是一个乐于助人的助手,可以润色内容,使其看起来起来更简单易读。"
)
),
HumanMessagePromptTemplate.from_template("{text}"),
]
)