Agentic 设计模式详解 - 提示词链 (Prompt Chaining)

核心思想

用一个巨大的 Prompt 让 LLM 一步到位地解决复杂问题,往往效果不好。模型会顾此失彼,例如,一个要求分析市场调研报告、总结发现、用数据点识别趋势并起草邮件的查询,可能总结做得不错,但数据提取就乱了;或者前半段还行,后半段开始"编造"内容。

提示词链(Prompt Chaining)的思路很简单:把大问题拆成一串小问题,每一步只做一件事,上一步的输出作为下一步的输入。 这就像工厂的流水线------每个工位只负责一道工序,最终组装出完整的产品。

为什么单个 Prompt 不够用?

当你在一个 Prompt 里塞入太多指令时,LLM 容易出现以下问题:

  • 指令忽略:部分要求被跳过
  • 上下文漂移:写着写着就偏离了原始目标
  • 错误传播:前面出了错,后面越错越离谱
  • 幻觉:认知负荷过大,模型开始编造信息

拆开来做,效果立刻不同

让我们回到刚开始那个例子:你让 LLM "分析这份市场报告、总结发现、识别趋势、起草邮件"------四件事塞在一起,模型很可能总结还行,但趋势提取和邮件撰写就一塌糊涂。 同样的任务用提示词链来处理:

  1. Prompt 1(摘要):"总结这份市场报告的关键发现。"
  2. Prompt 2(趋势识别):"根据上面的摘要,提取前三个新兴趋势及其数据支撑。"
  3. Prompt 3(邮件撰写):"根据这些趋势,起草一封给营销团队的邮件。" 每一步都很简单、很聚焦,模型的准确率自然就上去了。你甚至可以在每一步给模型分配不同的角色------第一步是"市场分析师",第二步是"数据分析师",第三步是"文案专家"。

步骤之间用结构化数据传递

提示词链的可靠性取决于步骤之间传递数据的质量。如果上一步输出的是模糊的自然语言,下一步很容易"理解偏了"。最佳实践是让每一步输出结构化格式(如 JSON):

json 复制代码
{
  "trends": [
    {
      "trend_name": "AI-Powered Personalization",
      "supporting_data": "73% of consumers prefer brands that use personal information to make shopping more relevant."
    },
    {
      "trend_name": "Sustainable and Ethical Brands",
      "supporting_data": "ESG-related products sales grew 28% over the last five years, vs 20% for others."
    }
  ]
}

结构化输出让数据可以被精确解析,消除了自然语言的歧义。 所以拆分后的每一步不一定都是 LLM 给出的回答,也可以是外部的知识库、数据库等外部数据源提供的结构化数据。

典型应用场景

信息处理流水线: 提取文本 → 生成摘要 → 识别关键实体 → 查询知识库 → 生成报告。适用于自动化内容分析和研究助手。

数据提取与转换: 从发票、表单等非结构化文档中提取字段,验证格式,缺失则重新提取,最终输出结构化数据。处理 OCR 场景时尤其有效------先提取文本,再规范化数据(如将"一千零五十"转为 1050),遇到计算则委托给外部工具。

内容生成: 构思主题 → 生成大纲 → 逐段撰写(每段都带上前文作为上下文) → 整体审校。比一次性让模型"写一篇完整文章"可靠得多。

代码生成与优化: 理解需求 → 生成伪代码 → 编写初稿 → 检查错误 → 优化重写。关键优势在于可以在步骤之间插入确定性逻辑(如静态分析、单元测试),而不是完全依赖 LLM。

实际项目中,独立的数据收集步骤可以并行 执行以提高效率,而综合和完善等有依赖关系的步骤则通过提示词链串行处理。

代码示例

以下用 LangChain 实现一个两步提示词链:先从文本中提取技术规格,再将其转换为 JSON。

bash 复制代码
pip install langchain langchain-community langchain-openai langgraph
python 复制代码
import os
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

llm = ChatOpenAI(temperature=0)

## --- Prompt 1: Extract Information ---
prompt_extract = ChatPromptTemplate.from_template(
    "从以下文本中提取技术规格信息:\n\n{text_input}"
)

## --- Prompt 2: Transform to JSON ---
prompt_transform = ChatPromptTemplate.from_template(
    "将以下规格信息转换为一个 JSON 对象,使用 'cpu'、'memory' 和 'storage' 作为键:\n\n{specifications}"
)

## --- Build the Chain using LCEL ---
extraction_chain = prompt_extract | llm | StrOutputParser()

full_chain = (
    {"specifications": extraction_chain}
    | prompt_transform
    | llm
    | StrOutputParser()
)

## --- Run the Chain ---
input_text = "这款新笔记本电脑配备了 3.5 GHz 八核处理器、16GB 内存和 1TB NVMe 固态硬盘。"
final_result = full_chain.invoke({"text_input": input_text})

print("\n--- Final JSON Output ---")
print(final_result)

extraction_chain 负责提取规格信息,full_chain 将提取结果喂给第二个 Prompt 做 JSON 格式化。两步各司其职,通过 LCEL(LangChain Expression Language)用 | 管道符串联起来。

Context Engineering 与 Prompt Engineering

Prompt Engineering 关注的是"怎么措辞才能让模型给出好答案"。而 Context Engineering 关注的是更大的问题:在模型生成回答之前,给它构建一个怎样的信息环境?

如上图所示,Context Engineering 是构建丰富信息环境的概念,上下文的质量直接决定了 Agentic 系统的表现。 一个经过 Context Engineering 的 Agent,在回答你的问题之前,会先整合多层信息:

  • System Prompt:定义 AI 的角色和行为规范(如"你是一名技术撰稿人,语气正式精确")
  • 检索文档:从知识库主动获取的相关资料
  • 工具输出:调用外部 API 获得的实时数据(如日历、数据库查询结果)
  • 隐式数据:用户身份、交互历史、当前环境状态

核心原则是:即使是最强的模型,如果给它的上下文不够好,输出也会很差。 Context Engineering 把重心从"优化一句话"转移到了"构建完整的操作图景"。

参考文献

  1. LangChain Documentation on LCEL
  2. LangGraph Documentation
  3. Prompt Engineering Guide - Chaining Prompts
  4. OpenAI API Documentation (General Prompting Concepts)
  5. Crew AI Documentation (Tasks and Processes)
  6. Google AI for Developers (Prompting Guides)
  7. Vertex Prompt Optimizer
相关推荐
ljq4 小时前
关于Agent开发的阶段性思考———从基础原理理解到高阶应用实践的谜思解构
agent·ai编程
gyx_这个杀手不太冷静5 小时前
OpenCode 进阶使用指南(第一章:Agent 模式)
前端·javascript·ai编程
前端双越老师6 小时前
Skills 是什么?如何用于 Agent 开发?
人工智能·node.js·agent
草梅友仁6 小时前
OpenClaw AI 助手实测与墨梅博客更新 | 2026 年第 10 周草梅周报
开源·github·ai编程
vjmap16 小时前
全新唯杰WebCAD编辑平台发布:全面拥抱AI,WebCAD智能体(Agent)来了
前端·gis·ai编程
GitLqr17 小时前
AI - Antigravity 不认全局 skills 怎么办?
agent·ai编程·gemini
哈里谢顿18 小时前
agent中的Function Calling详细解释
agent
周末程序猿18 小时前
Veri-ReActAgent:让 AI 写代码前先学会写测试
aigc·agent·ai编程