Python----大模型(Langchain-Prompt提示词)
Prompt(提示)是一种指导语言模型生成特定类型输出的文本模板。 它通常包含一些预设的文本框架,以及一些变量占位符,当实际运行时,这些占位符 会被具体的值所替换。 Prompt的作用在于引导语言模型按照预期的方式生成回复,确保输出符合特定的格 式、语境或者目的。
Langchain使用Prompt
单个变量
PromptTemplate 是一个基础的模板类,用于构建格式化的提示字符串。它允许你 定义一个模板字符串,并在运行时根据传入的变量替换其中的占位符。 对于单个变量(句子里有一个占位符可以自定义)可以通过以下两种方式格式化 Prompt。
from langchain_core.prompts import PromptTemplate# 方式1:通过字符串模板自动提取变量
# 定义包含占位符的模板字符串(使用大括号{}表示变量)
template = """
今天{location}天气怎么样?
"""# 从模板字符串创建PromptTemplate(自动提取location变量)
prompt = PromptTemplate.from_template(template=template)# 格式化模板(传入具体值替换占位符)
print("北京天气预报提示词:")
print(prompt.format(location='北京')) # 输出:今天北京天气怎么样?
print('-' * 30)# 方式2:显式指定输入变量
# 重新创建PromptTemplate(显式声明input_variables)
prompt = PromptTemplate(input_variables=['location'], # 明确指定输入变量名template=template # 使用相同的模板字符串
)# 格式化模板
print("上海天气预报提示词:")
print(prompt.format(location='上海')) # 输出:今天上海天气怎么样?
特性 | from_template() 自动提取 | 显式声明 input_variables |
---|---|---|
变量检测 | 自动从模板字符串中提取 {var} 格式的变量 | 需要手动指定所有变量名 |
灵活性 | 适合简单模板 | 适合需要严格控制的复杂模板 |
错误检查 | 运行时才会发现变量不匹配 | 创建时会检查变量是否与模板匹配 |
典型使用场景 | 快速原型开发 | 生产环境代码 |
多个变量
PromptTemplate 是一个基础的模板类,用于构建格式化的提示字符串。 它允许你定义一个模板字符串,并在运行时根据传入的变量替换其中的占位符。 对于多个变量(句子里有多个占位符可以自定义)可以通过以下两种方式格式化 Prompt。
# 导入LangChain的提示模板类
from langchain_core.prompts import PromptTemplate# 定义模板字符串,包含两个变量占位符 {date} 和 {location}
template = """
{date}{location}天气怎么样?
"""# ========= 方式1:自动提取变量 =========
# 使用from_template自动从模板字符串提取变量(推荐简单场景使用)
prompt = PromptTemplate.from_template(template=template)# 格式化模板(必须提供所有自动提取的变量)
print("【自动变量提取】北京天气预报:")
print(prompt.format(date='今天', location='北京')) # 输出:今天北京天气怎么样?
print('-' * 40)# ========= 方式2:显式声明变量 =========
# 创建时显式指定input_variables(推荐生产环境使用)
prompt = PromptTemplate(input_variables=['date', 'location'], # 明确声明所有输入变量template=template # 使用相同的模板字符串
)# 格式化模板(必须提供所有声明的变量)
print("【显式变量声明】上海天气预报:")
print(prompt.format(date='明天', location='上海')) # 输出:明天上海天气怎么样?
特性 | from_template() 自动模式 | 显式声明 input_variables |
---|---|---|
变量检测 | 自动提取 {var} 格式变量 | 需手动声明所有变量 |
错误检查 | 只在调用format时发现缺失变量 | 实例化时立即检查变量完整性 |
代码可读性 | 较高(适合快速原型) | 更高(明确显示模板依赖) |
推荐场景 | 临时测试/简单模板 | 生产环境/复杂模板 |
聊天提示模板
ChatPromptTemplate 是一个用于创建复杂聊天对话提示的模板,它允许将多种 不同类型的消息(例如系统消息、AI 消息和用户消息)结合起来形成一个完整的 对话流。使用这个类,你可以动态创建一个聊天会话的提示,帮助机器人基于不 同的消息内容生成合适的回复。 SystemMessagePromptTemplate 是一种特殊的模板,用于创建系统消息。系 统消息通常用于设置聊天机器人的角色或定义对话的初始条件。例如,你可以用 它告诉模型它的角色是“一个专业的助理”。
AIMessagePromptTemplate 用于创建 AI 消息的模板,这类消息通常代表机器 人的回复内容。通过使用这个类,你可以为机器人的输出指定一个格式或结构, 确保生成的回复符合预期。
HumanMessagePromptTemplate 用于创建用户输入(也称为人类消息)的模 板。它帮助将用户的输入嵌入到聊天提示中,通常作为对话的起点或反馈信息。
AIMessage, HumanMessage, SystemMessage 这三种类是 langchain.schema 模块中的消息类,分别用于表示 AI 消息、人类消息和系统消息。这些类通常用于 标识对话中的消息来源,帮助构建更复杂的对话流
组件名称 | 类型 | 用途说明 | 使用场景示例 |
---|---|---|---|
ChatPromptTemplate | 组合模板 | 将多种消息模板组合成完整对话流 | 创建多轮对话提示,包含系统设定、用户问题和AI回复 |
SystemMessagePromptTemplate | 消息模板 | 创建系统角色设定的模板 | "你是一个专业医疗助手,用中文回答医学问题" |
AIMessagePromptTemplate | 消息模板 | 格式化AI回复内容的模板 | "根据以下格式回答:\n症状分析:{analysis}\n建议:{advice}" |
HumanMessagePromptTemplate | 消息模板 | 格式化用户输入的模板 | "患者咨询:{question}\n病史:{medical_history}" |
SystemMessage | 消息实例 | 表示系统角色设定的具体消息 | SystemMessage(content="你将扮演心理咨询师") |
AIMessage | 消息实例 | 表示AI生成的具体回复消息 | AIMessage(content="建议每天运动30分钟") |
HumanMessage | 消息实例 | 表示用户输入的具体消息 | HumanMessage(content="我最近总是失眠") |
# 导入LangChain的聊天模板相关类
from langchain.prompts import (ChatPromptTemplate, # 聊天对话组合模板SystemMessagePromptTemplate, # 系统消息模板AIMessagePromptTemplate, # AI回复模板 HumanMessagePromptTemplate # 用户消息模板
)# 1. 创建系统消息模板(设定AI角色)
system_messages = SystemMessagePromptTemplate.from_template('你是一个有用的助手,帮助学生学习编程' # 系统角色设定
)
# 为系统消息添加元数据(可选)
system_messages.additional_kwargs = {'timestamp': '2024', # 时间标记'source': 'system' # 消息来源标识
}# 2. 创建用户消息模板(处理用户输入)
human_messages = HumanMessagePromptTemplate.from_template('用户问:{user_question}' # 用户问题占位符
)# 3. 创建AI回复模板(留空让模型自由生成)
ai_messages = AIMessagePromptTemplate.from_template("") # 空模板# 4. 组合成完整的聊天提示模板
chat_message = ChatPromptTemplate.from_messages([system_messages, # 系统角色设定human_messages, # 用户输入 ai_messages # AI回复区域
])# 测试使用
userinput = '怎么学习python?'
# 格式化生成最终提示(自动填充user_question变量)
formatted_prompt = chat_message.format(user_question=userinput)
print("生成的完整提示:")
print(formatted_prompt)
聊天提示模板方式二