【LangChain-AI】核心组件--提示词模板
·
1. 概念
提示词模板就是一个可复用的提示词蓝图,它允许我们动态地生成提示词,而不是每次都手动编写完整的提示词。它类似于编程中的字符串格式化功能。你创建一个带有“占位符”的模板,然后在运行时,用具体的值(变量)填充这些占位符,从而生成一个最终发送给 LLM 的完整提示词。
提示词模板解决了以下几个核心问题:
- 可复用性: 只需定义一个模板,就可以用于无数个类似的查询。
- 关注点分离: 将提示词的结构和逻辑(工程)与具体的内容和数据分离开。提示工程师可以专注于
优化模板,而应用程序则负责提供变量值。 - 一致性: 确保发送给LLM的提示词结构统一,这有助于获得更稳定、可预测的输出结果。
- 可维护性: 如果需要修改提示词的风格或结构,只需修改一个模板文件,而不用在代码的无数个地
方进行修改。
2. 文本提示词模板
LangChain 提供了 PromptTemplate 类来轻松实现这一功能。PromptTemplate 实现了标准的Runnable 接口。
方式一:创建类
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate
# 定义文本提示词模板, Runnable实例
# 方式一:创建类
prompt_template = PromptTemplate(
template="介绍{city}的历史",
input_variables=["city"],
)
# # 调用--将模板实例化
print(prompt_template.invoke({"city": "北京"}))
输出结果:
text='介绍北京的历史'
方式二:直接调用内部方法
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate
# 定义文本提示词模板, Runnable实例
# # 方式二:直接调用内部方法
prompt_template = PromptTemplate.from_template("将文本从{language_from}翻译为{language_to}")
# # 调用--将模板实例化
print(prompt_template.invoke({"language_from": "英文", "language_to": "中文"}))
输出结果:
text='将文本从英文翻译为中文'
3. 聊天消息提示词模板
from langchain.chat_models import init_chat_model
from langchain_core.prompts import ChatPromptTemplate
model = init_chat_model(model="deepseek-chat", model_provider="deepseek")
# 定义聊天消息的模板
chat_prompt_template = ChatPromptTemplate(
[
("system", "将文本从{language_from}翻译为{language_to}"), # 系统提示词
("user", "{text}",) # 用户提示词
# ("ai", "") # AI提示词
]
)
# 实例化
messages = chat_prompt_template.invoke(
{
"language_from": "英文",
"language_to": "中文",
"text": "Artificial intelligence is transforming the world."
}
)
model.invoke(messages).pretty_print()
输出结果:
================================== Ai Message ==================================
人工智能正在改变世界。
4. 消息占位符
from langchain.chat_models import init_chat_model
from langchain_core.messages import HumanMessage, AIMessage
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate, MessagesPlaceholder
model = init_chat_model(model="deepseek-chat", model_provider="deepseek")
chat_prompt_template = ChatPromptTemplate(
[
("system", "将文本从{language_from}翻译为{language_to}"),
MessagesPlaceholder("msgs"), # 消息占位符
("user", "{text}"),
# ("ai", "")
]
)
messages_placeholder = [
HumanMessage(content="hi, what is your name?"),
AIMessage(content="你好,你叫什么名字?")
]
messages = chat_prompt_template.invoke(
{
"language_from": "英文",
"language_to": "中文",
"text": "hi, what is your age?",
"msgs": messages_placeholder,
}
)
print(messages)
输出结果:
messages=[SystemMessage(content='将文本从英文翻译为中文', additional_kwargs={}, response_metadata={}), HumanMessage(content='hi, what is your name?', additional_kwargs={}, response_metadata={}), AIMessage(content='你好,你叫什么名字?', additional_kwargs={}, response_metadata={}, tool_calls=[], invalid_tool_calls=[]), HumanMessage(content='hi, what is your age?', additional_kwargs={}, response_metadata={})]
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)