在 LangChain 中,Prompt 模板 是定义发送给语言模型的提示的一种结构化方法。提示模板允许通过加入变量和格式选项,可以创建动态且灵活的提示,从而可以根据输入数据或特定任务灵活调整提示内容。
提示模板的关键特点- 动态更新的内容,
- 提示模板可以包含变量占位符,这些占位符在运行时会被填充。这使得提示可以根据用户输入或其他数据源进行动态调整。
- 例如,一个模板可能是:“将以下文本翻译成法语:{text}”,其中
{text}
是一个变量,会被实际内容替换。
2. 可重用性:
- 提示模版是可重复使用的组件,可以应用于不同的任务或数据集中的任务,而无需每次重写提示逻辑。
- 这促进了模块化的设计,并减少了代码中的重复,从而使其更容易维护和修改。
3. 一致的格式:
- 通过使用模板,您可以确保提示保持一致的格式化,这有助于从语言模型中生成可靠且可预测的响应,这一点非常重要。
- 一致的提示有助于在不同的实例和应用场景中保持一致性。
4. 自定义和灵活的选项:
- 模板可以为特定应用程序进行自定义,例如问答系统、摘要生成或创意文本生成,通过调整模板结构和内容。
- 这种灵活性使开发人员能够针对不同场景调整与语言模型互动的方式。
5. 实验的便利性:
- 使用模板让尝试不同的提示结构和措辞变得更加简单。你可以快速地替换或者调整模板中的部分内容,测试这些调整如何影响模型输出结果。
- 聊天机器人功能: 根据用户数据定制问候或回复。
- 翻译功能: 创建文本翻译模板。
- 摘要功能: 定义文档或文章摘要的模板。
- 创意写作功能: 使用模板生成故事线索或对话场景。
提示模板是 LangChain 中的一个强大功能,它让开发人员能够通过提供结构化且灵活的方式充分利用语言模型的全部潜力,与之互动。它们简化了提示创建过程,增强了自定义能力,并确保不同应用间的统一性。
我们来看几个例子用法吧。
导入所需的库文件
从langchain.prompts导入ChatPromptTemplate模块,并从langchain_core.messages导入HumanMessage类。
第1部分:包含一个占位符的聊天提示模板创建
template = "讲一个关于{话题}的笑话。"
prompt_template = ChatPromptTemplate.from_template(template)
print("-----来自模板的提示-----")
prompt = prompt_template.invoke({"topic": "狗"})
print(prompt)
- 目标: 创建一个包含单一占位符
{topic}
的提示模板。 - 解释: 模板字符串
"告诉我一个关于 {topic} 的笑话"
用于生成提示,通过将{topic}
占位符替换为给定值(例如,"狗"
)。 - 用法: 这允许通过将不同的话题插入模板来生成各种笑话。
第二部分:创建带有多个占位符的提示词
template_multiple = """你是个乐于助人的助手。
人:给我讲一个关于{animal}的搞笑的{adjective}故事吧。
助手:"""
prompt_multiple = ChatPromptTemplate.from_template(template_multiple)
prompt = prompt_multiple.invoke({"adjective": "搞笑的", "animal": "熊猫"})
print("\n----- 带有多个占位符的提示语 -----\n")
print(prompt)
- 目标: 在一个提示模板中使用多个占位符。
- 解释: 模板中包含
{adjective}
和{animal}
两个占位符,并分别用"funny"
和"panda"
填充。这会创建一个动态提示,用于请求特定类型的故事情节。 - 用法: 这种方法对于创建需要多个变量数据的更复杂提示非常有用。
第三部分:创建带有系统消息和人类消息的提示
messages = [
("system", "你是一个讲{topic}笑话的喜剧演员。"),
("human", "给我讲{joke_count}个关于律师的笑话。"),
]
prompt_template = ChatPromptTemplate.from_messages(messages)
prompt = prompt_template.invoke({"topic": "律师", "joke_count": 3})
print("\n----- 系统和人类消息(元组)的提示 -----\n")
print(prompt)
- 目标: 展示如何通过元组来区分系统消息和人类消息的提示。
- 解释: 这种设置使用元组定义角色(例如:系统,人类)及其相应消息。例如:{话题} 和 {笑话数量} 这样的占位符来自定义提示。
- 用法: 在需要在不同类型的消息之间保持上下文的对话应用程序中特别有用。这对于需要在不同类型消息间维持上下文的对话应用程序特别有帮助。
第四部分:使用带有固定人类消息的元组来创建带有系统消息和人类消息的提示
messages = [
("system", "你在讲有关{topic}的笑话。"),
HumanMessage(content="给我讲三个关于律师的笑话。"),
]
prompt_template = ChatPromptTemplate.from_messages(messages)
prompt = prompt_template.invoke({"topic": "律师"})
print("\n----- 包含系统和人类消息的Prompt (元组) -----\n")
print(prompt)
这使用了一个静态的人类信息 (HumanMessage(content="告诉我三个笑话。")
),成功地生成了一个提示。
一个不管用的场景
messages = [
("system", "你是个喜剧演员,专讲关于{topic}的笑话。"),
HumanMessage(content="给我讲{joke_count}个关于律师的笑话。"),
]
prompt_template = ChatPromptTemplate.from_messages(messages)
prompt = prompt_template.invoke({"topic": "律师", "joke_count": 3})
print("\n----- 使用系统和人类消息(元组)的Prompt -----\n")
print(prompt)
尝试使用带有占位符的动态消息 (HumanMessage(content="告诉我{joke_count}个笑话。")
) 并未如预期般工作,这说明模板格式和消息结构要兼容很重要。
如何使用聊天模型?
from dotenv import load_dotenv
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 从 .env 文件加载环境变量
load_dotenv()
# 创建一个 ChatOpenAI 模型实例
model = ChatOpenAI(model="gpt-4o-mini")
print("-----模板生成的提示-----")
template = "给我说一个关于 {topic} 的笑话。"
prompt_template = ChatPromptTemplate.from_template(template)
prompt = prompt_template.invoke({"topic": "狗"})
result = model.invoke(prompt)
print(result)
利用LangChain的ChatPromptTemplate
,开发人员可以创建既灵活又可重用的提示结构。通过使用占位符,他们可以根据不同的上下文和用户输入生成动态内容和个性化提示。这些技术对于创建对话机器人、内容生成器和交互式AI应用非常有帮助。
请鼓掌👏如果有帮助,别忘了留言哦 ❤️🙏
以下是参考:
- https://python.langchain.com/v0.2/docs/concepts/#prompt-templates (提示模板概念)
- https://python.langchain.com/v0.2/docs/integrations/chat/ (聊天集成)
- https://brandonhancock.io/langchain-master-class (Brandon Hancock 的 LangChain 课程)
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦