LangChain提示词工程最新十大技巧排行榜:快速提升模型性能的实战策略

2026-06-19阅读 0热度 0
ai 人工智能

LangChain提示词模板:提高语言模型输出质量的关键技术。

核心内容:

  • 提示词模板的定义和基本组成
  • 提示词模板在LangChain中的作用与应用
  • 实战案例:字符串提示词模板与聊天消息提示词模板的创建和使用

二、LangChain提示词工程

先聊一个基础但非常关键的概念:提示词模板。很多刚接触LangChain的朋友会觉得它有点抽象,其实说白了,它跟咱们平时用的邮件模板、信息模板本质上一模一样。就是一个字符串,里面预定义了一些占位符,运行时用实际参数替换进去,就生成了最终发给语言模型的提示。

那么,一个提示词模板具体能装些什么?一般来说三样东西:

  • 发给大语言模型(LLM)的指令——告诉模型你要干什么。
  • 一组问答示例——给模型“打个样”,让它知道该怎么输出。
  • 具体的问题——就是你想让模型回答的那句话。

有了模板,开发者就能保证每次输入给模型的格式都是统一、清晰、没有歧义的。你猜怎么着?就这么一个简单的结构化管理手法,往往能让模型输出质量上一个台阶。

1 提示词模板简介

在LangChain中,提示模板扮演着至关重要的角色——它让开发者以结构化的方式向语言模型提供输入,从而引导模型生成所需的输出。说到底,这是一个“输入质量决定输出质量”的工程问题。

1.1 提示词模板的内容

强调一下,提示词模板本质上就是一个包含模板参数的字符串。你用花括号把参数名括起来,然后通过参数值去替换它。就这么简单,没有任何黑魔法。比如一个模板可以同时包含指令、示例和问题三个部分,组装起来就是一条完整的请求。

1.2 提示模板在LangChain中的作用

作用很直接:定义一个结构化的输入格式,确保模型在生成输出时获得所有必要信息。换句话说,有了模板,你就不会漏掉关键部分,也不会因为每次手写格式不一致而让模型“迷惑”。这是LangChain里最常用、也最容易被低估的工具之一。

2 提示词模板实战

2.1 字符串提示词模板

最简单的用法是用 PromptTemplate 类。比如你想让模型讲一个故事,故事要有风格和主题:

from langchain.prompts import PromptTemplate

# 定义一个提示模板,包含adjective和content两个模板变量,模板变量使用{}包括起来
prompt_template = PromptTemplate.from_template(
    "给我讲一个关于{content}的{adjective}故事。"
)

# 通过模板参数格式化提示模板
result = prompt_template.format(adjective="童话", content="一千零一夜")
print(result)

执行后,模板就会被填充成“给我讲一个关于一千零一夜的童话故事。” 是不是很直观?

2.2 聊天消息提示词模板

聊天模型不太一样——它接收的是聊天消息列表,每条消息都带有一个“角色”标签。在OpenAI的体系里,角色分为三种:

  • 系统(system)消息:通常用来描述AI的身份或行为准则。
  • 用户(user)消息:你发给AI的内容。
  • 助手(assistant)消息:AI回复的内容。

ChatPromptTemplate 可以轻松管理这些带角色的消息:

from langchain_core.prompts import ChatPromptTemplate

chat_template = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一位人工智能助手,你的名字是{name}。"),
        ("human", "你能做什么"),
        ("ai", "设计课程,谢谢!"),
        ("human", "{user_input}"),
    ]
)
messages = chat_template.format_messages(name="教学助手",
                                         user_input="你的名字叫什么?")
print(messages)

注意这里,系统消息里用了一个 {name} 参数,用户最后的提问也用了 {user_input}。模板帮你组装成完整的对话上下文。

2.4 MessagesPlaceholder

有时候我们希望在某一个位置插入一整个消息列表,而不是固定的一条消息。这时就用得上 MessagesPlaceholder。看这个例子:

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.prompts import MessagesPlaceholder
from langchain_core.messages import HumanMessage

prompt_template = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful assistant"),
    #可以传入一组消息
    MessagesPlaceholder("msgs")
])
result = prompt_template.invoke({"msgs": [HumanMessage(content="您好!"),
                                         HumanMessage(content="langchain!")]})
print(result)

这里的 MessagesPlaceholder("msgs") 就像一个占位洞,你往里塞多少条消息,它就展开多少条。特别适合处理动态对话历史。

3.2 提示词追加示例

最后说一个进阶技巧:少样本提示。在提示词里附带一两个交互示例,能帮助模型更快理解你期望的问答格式。比如你希望模型能拆解复杂问题,先推理再回答,可以给一个范例:

examples = [
    {
        "question": "电话和电灯的发明者是否毕业于同一所大学?",
        "answer":
            """
            这里需要跟进问题吗:是的。
            跟进:电话的发明者是谁?
            中间答案:电话的发明者是Alexander Graham Bell。
            跟进:Alexander Graham Bell毕业于哪所大学?
            中间答案:Alexander Graham Bell没有正式大学学位,他在爱丁堡大学短暂学习过。
            跟进:电灯的发明者是谁?
            中间答案:电灯的发明者是Thomas Edison。
            跟进:Thomas Edison毕业于哪所大学?
            中间答案:Thomas Edison没有大学学位,他是自学成才的发明家。
            所以最终答案是:不是
            """
    }
]

然后用 FewShotPromptTemplate 把这个示例嵌入到模板里:

from langchain.prompts import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate

from prompt_example import examples # examples是交互示例

example_prompt = PromptTemplate(input_variables=["question", "answer"], 
                                template="问题:{question}\n{answer}")
print(example_prompt.format(**examples[0]))

这样,模型在回答新问题时就会模仿示例中的推理链条,输出质量自然更可控。总之,提示词模板不是什么高深玩意儿,但它能让你的LLM应用从“随缘输出”变成“稳定输出”。把握好模板化思路,后面写再复杂的链都不会跑偏。

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策