1. 概念

提示词模板就是一个可复用的提示词蓝图,它允许我们动态地生成提示词,而不是每次都手动编写完整的提示词。它类似于编程中的字符串格式化功能。你创建一个带有“占位符”的模板,然后在运行时,用具体的值(变量)填充这些占位符,从而生成一个最终发送给 LLM 的完整提示词。
提示词模板解决了以下几个核心问题:

  1. 可复用性: 只需定义一个模板,就可以用于无数个类似的查询。
  2. 关注点分离: 将提示词的结构和逻辑(工程)与具体的内容和数据分离开。提示工程师可以专注于
    优化模板,而应用程序则负责提供变量值。
  3. 一致性: 确保发送给LLM的提示词结构统一,这有助于获得更稳定、可预测的输出结果。
  4. 可维护性: 如果需要修改提示词的风格或结构,只需修改一个模板文件,而不用在代码的无数个地
    方进行修改。

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={})]
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐