LangChain Prompts 深度解析

0 阅读3分钟

LangChain Prompts 深度解析

在 LangChain 体系中,Prompt 是一切行为的起点。Chain 决定流程,Agent 决定策略,而 Prompt 决定模型如何思考。如果把模型当成推理引擎,那么 Prompt 就是它的“控制程序”。


Prompt 在 LangChain 中的位置

image.png

image.png

image.png 结构逻辑:

用户输入
   ↓
Prompt 模板
   ↓
模型(ChatModel / LLM)
   ↓
输出

关键点:Prompt 不只是字符串、它是“可组合、可参数化、可结构化”的对象、它决定模型输出的稳定性


Prompt 的核心类型

LangChain 中主要有三类 Prompt:

普通 PromptTemplate

适用于传统 LLM,即字符串输入

from langchain.prompts import PromptTemplate

template = PromptTemplate.from_template(
    "请将以下内容翻译为英文:{text}"
)

prompt = template.format(text="今天天气很好")

特点:本质是字符串格式化、支持变量、不区分角色

适合:简单任务、非对话场景


ChatPromptTemplate

适用于 Chat 模型

from langchain.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的数据分析专家"),
    ("human", "分析以下数据:{data}")
])

结构本质:

[  {role: "system", content: "..."},  {role: "user", content: "..."}]

优势:支持多轮、支持角色区分、支持工具调用

生产环境推荐全部使用 ChatPromptTemplate。


Few-shot Prompt

用于增强稳定性。

from langchain.prompts import FewShotPromptTemplate

结构思想:

示例1
示例2
示例3
新问题

用途:结构化输出、分类任务、代码生成

本质:通过示例约束模型行为


PromptTemplate 的底层原理

模板渲染机制

LangChain 默认使用:

f-string 模式

例如:

"你好,{name}"

内部过程:

变量注入
→ 生成最终字符串
→ 发送给模型

重要特性:input_variables 自动校验、支持部分变量 partial、支持组合


Prompt 组合

在复杂系统中,Prompt 需要模块化。

部分变量绑定

prompt = template.partial(role="GIS专家")

适合:固定系统角色、多场景复用


Prompt 管道式组合

LangChain Expression Language(LCEL)支持:

chain = prompt | model

执行流程:

输入
  ↓
Prompt
  ↓
Model
  ↓
输出

这种表达式是 LangChain 2.x 的核心。


结构化输出 Prompt

生产环境中最重要的能力之一。

JSON 输出约束

system = """
你必须以JSON格式输出:
{
  "title": "",
  "summary": ""
}
"""

问题:模型可能输出无效 JSON、容易出现解释性文字

解决方案:

OutputParser

from langchain.output_parsers import JsonOutputParser

结合 Pydantic

from pydantic import BaseModel

class Report(BaseModel):
    title: str
    summary: str

LangChain 可自动生成格式提示:

format_instructions

优势:自动校验、自动重试、降低解析错误率


动态 Prompt

在 RAG 中,Prompt 不再固定。

image.png

image.png

image.png 结构:

系统指令
+
检索到的文档
+
用户问题

示例:

template = """
你只能根据以下文档回答问题:

{context}

问题:
{question}
"""

关键点:context 控制回答边界、文档长度影响成本、需要做截断策略


Prompt 设计原则

角色清晰

System 中必须明确:身份、输出格式、行为约束、禁止行为


少歧义

不要写:

详细回答

要写:

用 3 条 bullet point 输出

结构大于修辞

模型更理解结构化约束:

步骤1:
步骤2:
步骤3:

而不是:

请认真思考


避免过长指令

Token 越多:成本越高、噪声越多、稳定性下降


Prompt 的工程化问题

Prompt 版本管理

推荐:使用文件存储、Git 版本控制、标记版本号、不要把 Prompt 写死在代码里。


Prompt 测试

可以做:单元测试、对比测试(A/B)、自动回归测试、LangSmith 可以记录 Prompt 变化。


Prompt 漂移

模型升级后:旧 Prompt 可能失效、输出格式可能变化

解决:加强格式约束、加入校验机制


Prompt 、Chain 、Agent

很多人误解 Prompt 是“随便写几句话”。

实际关系:

Prompt = 语义控制
Chain = 流程控制
Agent = 决策控制

Prompt 决定:模型怎么思考、模型输出什么格式、模型能否稳定

如果 Prompt 不稳定:Chain 再好也没用、Agent 会频繁出错,统一使用 ChatPromptTemplate,所有输出必须结构化,使用 OutputParser 做校验,Prompt 文件化管理,用低 temperature 保证稳定性,在 RAG 中严格控制 context

在 LangChain 中,Model 决定能力上限,Prompt 决定输出质量,Chain 决定系统稳定性

更多精彩内容请关注微信公众号 “学GIS的小宝同学”