小杰-大模型(two)——RAG与Agent设计——Langchain-prompt提示词
1.1 Prompt(提示)是什么?
Prompt(提示)是一种指导语言模型生成特定类型输出的文本模板。
它通常包含一些预设的文本框架,以及一些变量占位符,当实际运行时,这些占位符会被具体的值所替换。
Prompt的作用在于引导语言模型按照预期的方式生成回复,确保输出符合特定的格式、语境或者目的。
1.2 Langchain使用Prompt
1.2.1 单个变量
PromptTemplate 是一个基础的模板类,用于构建格式化的提示字符串。它允许你定义一个模板字符串,并在运行时根据传入的变量替换其中的占位符。
对于单个变量(句子里有一个占位符可以自定义)可以通过以下两种方式格式化Prompt。
代码演示
#langchain 里面包含提示模板
from langchain_core.prompts import PromptTemplate
# 定义一个包含单个变量的模板字符串
#三个引号
template="""
今天{location}的天气如何?
"""
# 方式一
# 使用 PromptTemplate 类从模板字符串创建一个提示对象里包含
# from_template方法可以直接从字符串模板创建 PromptTemplate 对象
prompt=PromptTemplate.from_template(template)
print(prompt.format(location="济南"))
#方式二
# 另一种方式创建 PromptTemplate 对象
# 显式指定输入变量和模板字符串
prompt=PromptTemplate(input_variables=["location"],template=template)
print(prompt.format(location="北京"))
1.2.2 多个变量
PromptTemplate 是一个基础的模板类,用于构建格式化的提示字符串。
它允许你定义一个模板字符串,并在运行时根据传入的变量替换其中的占位符。
对于多个变量(句子里有多个占位符可以自定义)可以通过以下两种方式格式化Prompt。
代码演示
#langchain 核里面包含提示模板
from langchain_core.prompts import PromptTemplate
# 定义一个包含单个变量的模板字符串
#三个引号
template="""{date}的{location}天气如何?
"""
# 方式一
# 使用 PromptTemplate 类从模板字符串创建一个提示对象里包含
# from_template方法可以直接从字符串模板创建 PromptTemplate 对象
prompt =PromptTemplate.from_template(template)
# print(prompt)
#使用format 方法将变量值填入模板中
print(prompt.format(date="今天",location="南京"))#方式二
# 另一种方式创建 PromptTemplate 对象
# 显式指定输入变量和模板字符串
prompt=PromptTemplate(input_variables=["date","location"],template=template)
print(prompt.format(date="昨天",location="北京"))
1.2.3 聊天提示模板
- ChatPromptTemplate 是一个用于创建复杂聊天对话提示的模板,它允许将多种不同类型的消息(例如系统消息、AI 消息和用户消息)结合起来形成一个完整的对话流。使用这个类,你可以动态创建一个聊天会话的提示,帮助机器人基于不同的消息内容生成合适的回复。
- SystemMessagePromptTemplate 是一种特殊的模板,用于创建系统消息。系统消息通常用于设置聊天机器人的角色或定义对话的初始条件。例如,你可以用它告诉模型它的角色是“一个专业的助理”。
- AIMessagePromptTemplate 用于创建 AI 消息的模板,这类消息通常代表机器人的回复内容。通过使用这个类,你可以为机器人的输出指定一个格式或结构,确保生成的回复符合预期。
- HumanMessagePromptTemplate 用于创建用户输入(也称为人类消息)的模板。它帮助将用户的输入嵌入到聊天提示中,通常作为对话的起点或反馈信息。
聊天提示模板代码
from langchain.prompts import (ChatPromptTemplate,
SystemMessagePromptTemplate,AIMessagePromptTemplate,HumanMessagePromptTemplate)
# Step 1: 创建一个系统消息,用于定义机器人的角色
system_message=SystemMessagePromptTemplate.from_template("你是一个专业的助理,帮助用户学习编程。")
# additional_kwargs 的用途:增加参数
# 添加一些额外的需要存储的信息,例如消息的时间戳、消息来源、消息类型等。
system_message.additional_kwargs={
'timestamp': '2025-5-09T10:50:00Z',
'source': 'system'
}
# Step 2: 创建一个人类消息,用于接收用户的输入
human_message=HumanMessagePromptTemplate.from_template("用户问:{user_question}")
# Step 3: 创建一个AI消息,用于输出机器人的回复(一般可能用于工具调用)
ai_message=AIMessagePromptTemplate.from_template("")
# Step 4: 将这些模板结合成一个完整的聊天提示
chat_prompt=ChatPromptTemplate.from_messages([system_message,human_message,ai_message,
])
# Step 5: 格式化最终的对话
# 假设用户输入问题为 "怎么学习Python?"
user_input = "怎么学习Python?"
chat_format=chat_prompt.format_messages(user_question=user_input)
print(chat_format)
只有message方式
聊天提示模板代码2-只有message方式
from langchain.schema import (AIMessage,HumanMessage,SystemMessage)
from langchain.prompts import ChatPromptTemplate
who = "小明"
# additional_kwargs 的用途:可以用来存储消息的额外信息,例如消息类息的时间戳、消息来源、消型等。
# 将模板结合成一个完整的聊天提示
chat_prompt=ChatPromptTemplate.from_messages([
SystemMessage(content='你是一个专业的助理,帮助用户学习编程。',additional_kwargs={'timestamp': '2024-11-02T10:50:00Z','source': 'system'}),
HumanMessage(content=f"用户问: {who}如何开始学习Python?",additional_kwargs={}),
AIMessage(content='', additional_kwargs={})
])
# 格式化最终的对话
print(chat_prompt.format_messages())
