提示词模板Prompt

当需要重复使用固定格式的提示词(仅动态内容变化)时,可通过 PromptTemplate 标准化提示词结构,避免重复编写模板内容,提升开发效率。适用于批量生成问题、标准化指令场景(如批量生成产品描述、统一格式的客服回复)。

from langchain_core.prompts import PromptTemplate
from langchain_ollama import ChatOllama

# 定义提示词模板({变量名}为动态参数)
template = "请为{product}写一句宣传语,风格{style}"
prompt = PromptTemplate.from_template(template)
# 填充动态参数
formatted_prompt = prompt.format(product="无线耳机", style="科技感")

# 初始化大模型
llm =ChatOllama(
    model="qwen3:4b",
    base_url = "http://127.0.0.1:11434",
    temperature=0.7,
)
print(llm.invoke(formatted_prompt).content)
  • 模板变量需用 {} 包裹,且名称需与 format 方法传入的参数名一致;
  • LangChain 1.0 中 PromptTemplate 仅处理文本模板,多轮对话场景需结合 ChatPromptTemplate 使用;
  • 模板内容中若包含{或}特殊字符,需用{{或}}转义(如{{name}})会被解析为文本{name})。

提示词模板Placeholder

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage, AIMessage
from langchain_ollama import ChatOllama

# 定义包含占位符的模板
template = [
    ("system", "基于历史对话回答用户新问题"),
    MessagesPlaceholder(variable_name="history"),  # 动态插入历史消息
    ("human", "{question}")
]
chat_prompt = ChatPromptTemplate.from_messages(template)

# 准备历史消息
history = [
    HumanMessage(content="推荐一部科幻电影"),
    AIMessage(content="《星际穿越》很经典")
]

# 填充参数(替换占位符)
formatted_prompt = chat_prompt.format_messages(
    history=history,
    question="再推荐一部类似的"
)

# 初始化大模型
llm =ChatOllama(
    model="qwen3:4b",
    base_url = "http://127.0.0.1:11434",
    temperature=0.7,
)

print(llm.invoke(formatted_prompt).content)

  • 需通过 variable_name 指定占位符名称,填充时传入对应的消息列表(Message 对象组成的列表);
  • 占位符插入的消息会严格遵循原有的角色顺序,无需手动维护对话逻辑;
  • 适用于动态上下文场景,避免手动拼接长消息列表,简化多轮对话模板维护。

提示词模板FewShot

通过提供少量示例(Few-Shot)引导大模型学习特定格式或逻辑,适用于需要标准化输出(如固定格式的分类、翻译、摘要)的场景,帮助模型快速理解任务要求。

from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_ollama import ChatOllama

# 定义示例
examples = [
    {"input": "苹果", "output": "水果"},
    {"input": "菠萝", "output": "水果"}
]

# 示例模板
example_template = "输入: {input}\n输出: {output}"
example_prompt = PromptTemplate.from_template(example_template)

# 构建FewShot提示
few_shot_prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    prefix="请按照示例格式分类:",
    suffix="输入: {input}\n输出:",
    input_variables=["input"]
)

# 生成提示并调用
prompt = few_shot_prompt.format(input="香蕉")

# 初始化大模型
llm =ChatOllama(
    model="qwen3:4b",
    base_url = "http://127.0.0.1:11434",
    temperature=0.7,
)

print(llm.invoke(prompt).content)  # 预期输出:水果

  • 示例需简洁明确,与目标任务格式一致,避免误导模型;
  • prefix 用于说明任务规则,suffix 用于触发当前输入的处理,两者需配合示例形成完整逻辑;
  • 输入变量需在 suffix 中显式引用,确保动态参数正确替换。

提示词模板FewShotChat

from langchain_core.prompts import FewShotChatMessagePromptTemplate
from langchain_core.messages import HumanMessage, AIMessage
from langchain_core.prompts import ChatPromptTemplate
from langchain_ollama import ChatOllama

# 示例(多轮消息对)
examples = [
    {
        "messages": [
            HumanMessage(content="推荐一首中文歌"),
            AIMessage(content="周杰伦的《晴天》很经典")
        ]
    },
    {
        "messages": [
            HumanMessage(content="再推荐一首"),
            AIMessage(content="林俊杰的《江南》")
        ]
    }
]

# 构建FewShot对话模板
few_shot_prompt = FewShotChatMessagePromptTemplate(
    examples=examples,
    example_messages_key="messages"  # 指定示例中消息列表的键名
)

# 组装最终对话模板
final_prompt = ChatPromptTemplate.from_messages([
    ("system", "你需要根据示例推荐中文歌曲"),
    few_shot_prompt,  # 插入示例
    ("human", "{question}")  # 用户当前问题
])

# 生成提示并调用
formatted = final_prompt.format_messages(question="再求一首")

# 初始化大模型
llm =ChatOllama(
    model="qwen3:4b",
    base_url = "http://127.0.0.1:11434",
    temperature=0.7,
)

print(llm.invoke(formatted).content)
  • 示例需包含完整的角色消息对(HumanMessage + AIMessage),模拟真实对话流程;
  • 通过example/messages_key指定示例中消息列表的键(需与examples中字典的键一致);
  • 适用于需要维持对话风格、格式连贯性的场景,示例数量不宜过多(避免 token 浪费)。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐