news 2026/10/22 2:23:24

【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining

上一篇介绍了 Agent 常见的任务编排模式,包括提示链、路由、并行、反思、规划和多智能体协作。本篇从最容易落地的Prompt Chaining(提示链)开始,讨论如何将复杂任务拆分为多个独立、可验证的处理步骤。

在实际开发中,我们经常希望大模型一次完成多项工作。例如,读取一份技术故障报告,提取关键事实、分析事故影响、识别潜在风险,最后生成整改建议。最直接的实现方式,是向模型发送一个包含所有要求的 Prompt。但当原始文档较长、分析维度较多、输出结构复杂时,一次调用往往容易出现事实遗漏、分析与原文不一致、输出字段缺失等问题,而且很难定位错误究竟发生在哪个环节。

提示链提供了另一种实现方式:将复杂任务拆成多个具有明确输入输出的步骤,前一步的结果经过必要校验后,再交给下一步处理。它并没有改变大模型的能力,而是通过调整任务执行结构,提高结果的可控性和可维护性。

一、Prompt Chaining 的基本原理

Prompt Chaining 是一种顺序编排模式,也被称为流水线模式(pipline pattern)。每个步骤只处理任务中的一部分,并将结果作为后续步骤的输入,这种信息传递建立了一种依赖链,这也正是提示链模式名称的由来。例如,一份技术故障报告可以按照以下方式处理:

阶段主要任务输出结果
文档解析获取正文、章节和来源信息Document
事实提取提取故障时间、影响范围、处置过程FactSet
原因分析根据事实识别问题和风险AnalysisResult
建议生成根据分析结果生成整改措施ActionPlan
结果校验检查结构、来源和业务规则ValidationResult

文档解析、字段校验等环节可以使用确定性代码,而事实提取、原因分析和建议生成则更适合调用模型。因此,一条提示链不要求所有节点都是 LLM。它可以由LLM 调用、普通函数、数据校验和业务规则共同构成。这种模式与自由 Agent Loop 的区别在于:

Prompt ChainingAgent Loop
处理步骤通常预先确定执行路径可以动态调整
每个步骤有明确的输入输出模型可以动态选择工具和行动
适合流程清晰、结果可验证的任务适合开放式探索和不确定任务
容易定位具体步骤的错误更依赖执行轨迹分析

LangGraph 当前也将 Prompt Chaining 定义为一系列顺序 LLM 调用,适用于能够拆成较小、可验证步骤的任务,并支持在步骤之间加入 Gate 检查。

二、任务拆分的依据

并不是把一个 Prompt 随意拆成三段,就能提高结果质量。合理的拆分应该依据任务职责、数据依赖和校验方式。以前面的故障报告为例,如果直接要求模型同时完成“提取事实、判断原因、评估风险和生成建议”,模型可能在生成建议时引入原文并未明确支持的结论。更合理的设计是区分三个阶段。

第一阶段:提取事实。只要求模型从文档中提取客观信息,例如故障开始时间、影响系统、异常现象和已执行的处置操作,并保留对应的原文引用。此时不允许模型自行推测故障原因。

第二阶段:分析事实。根据第一阶段已经确认的信息识别风险和可能原因,对缺少证据的结论明确标记为待确认,而不是补充假设性事实。

第三阶段:生成结果。基于确认后的事实和分析结论生成整改建议、处理优先级和待确认事项。

这三个阶段分别回答:发生了什么、意味着什么、下一步应该怎样处理。

拆分以后,每个步骤的职责更加明确,也更容易针对不同问题优化 Prompt 或更换模型。不过,任务并不是拆得越细越好。每增加一个 LLM 节点,都会增加请求延迟、Token 消耗以及数据传递和异常处理成本。因此,拆分应以是否存在独立职责、明确的数据契约和可验证的中间结果为主要依据,而不是以步骤数量衡量。


三、在步骤之间增加校验关口

提示链真正有工程价值的地方,不只是分阶段调用模型,而是可以在中间结果不满足要求时阻止后续执行。例如:

实际实现时,修复或重试应返回具体失败节点,而不是一律重新提取全部事实。这些 Gate 可以分为三个层次:

校验层次主要检查内容实现方式
Schema Validation字段、类型、枚举是否符合约定JSON Schema / DTO
Business Validation日期、状态、业务约束是否正确确定性程序
Semantic Validation结论是否具有充分证据规则检查 + 必要的模型审查

其中,Schema 校验只能保证数据结构符合契约,并不能证明模型提取的事实正确。例如,模型返回的故障时间符合日期格式,但该时间根本没有出现在原始报告中,仍然属于事实错误。

因此,对于事实提取任务,建议保留原文片段及其来源标识,并由程序验证引用是否能够对应到真实文档。结构校验保证结果可以被程序处理,证据和业务校验进一步判断结果是否值得信任。

四、代码示例:生成故障整改报告

这里不引入完整 Agent Framework,而是使用 Java 21 展示提示链的核心逻辑。为简化代码,假设已经封装好统一的模型适配接口,能够根据 Java 类型生成结构化结果。首先定义三个阶段的数据结构:

record Fact( String id, String quote ) {} record FactSet( List<Fact> facts ) {} record Finding( String description, String factId ) {} record AnalysisResult( List<Finding> findings ) {} record Report( String summary, List<String> actions ) {}

其中,Fact保存从文档中提取的事实,Finding保存基于事实得到的分析结论。factId用于将分析结果关联到对应证据。为了避免绑定具体模型 SDK,定义一个简单接口:

interface ModelGateway { <T> T generate( String instruction, Object input, Class<T> resultType ); }

接下来完成三个模型处理步骤:

Report buildReport( String source, ModelGateway model) { // Step 1:事实提取 FactSet facts = model.generate( "只提取原文明确存在的事实,保留原文片段", source, FactSet.class ); // Gate 1:检查事实来源 if (facts.facts().isEmpty() || facts.facts().stream().anyMatch( f -> !source.contains(f.quote()) )) { throw new IllegalStateException( "事实证据校验失败" ); } // Step 2:原因与风险分析 AnalysisResult analysis = model.generate( "仅依据已有事实进行分析,不得新增事实", facts, AnalysisResult.class ); // Gate 2:检查分析结果的证据引用 Set<String> ids = facts.facts().stream() .map(Fact::id) .collect(Collectors.toSet()); if (analysis.findings().stream().anyMatch( f -> !ids.contains(f.factId()) )) { throw new IllegalStateException( "分析结果存在无效证据引用" ); } // Step 3:生成整改报告 return model.generate( "根据已确认事实和分析结论生成整改报告", Map.of("facts", facts, "analysis", analysis), Report.class ); }

这是一段用于说明编排逻辑的简化代码,并非完整的生产实现。其中使用原文包含关系进行证据检查,只适合演示;正式项目应根据文档解析结果保存documentId、sectionId、文本位置等信息,并继续校验最终报告中的结论和整改措施。

这段代码最重要的是三个模型调用之间的关系:FactSet→AnalysisResult→Report。每个阶段都有清晰的数据类型,前两个阶段设置了必要的校验关口,上一阶段没有通过检查时,不会继续生成下一阶段的结果。相比把所有要求拼接在一个 Prompt 中,这种实现更容易定位故障、编写测试并维护业务规则。

五、上下文隔离与中间结果管理

提示链的一个常见实现问题,是将此前所有步骤的 Prompt、模型回答和原始文档不断累积到下一阶段。例如,第一步提取了 50 条事实,第二步分析时又加入大量历史消息,第三步生成报告时继续附带前面所有内容。随着流程增加,上下文可能不断膨胀,最终削弱拆分步骤带来的收益。更合理的方式是每个步骤只接收完成当前工作所需的数据。在故障报告案例中:

阶段主要输入不必重复传入
事实提取原始文档、字段定义历史分析过程
风险分析已确认事实、相关业务规则无关文档章节、提取过程日志
建议生成分析结论、关键证据、整改约束前面完整的模型对话

这与此前介绍的 Context Engineering 并不冲突,而是将上下文管理落实到多个独立模型调用中。此外,中间结果应该以结构化对象保存,而不是只能存在于模型对话历史里。对于执行时间较长、成本较高的任务,还可以持久化每个阶段的结果,以支持断点恢复、结果回放和独立重试。

需要注意:摘要不能天然替代原始证据。如果后续步骤需要核对精确事实,应同时保留必要的原文引用,避免在多次模型转述过程中逐渐偏离原始资料。

六、失败处理与局部重试

提示链引入多个执行步骤以后,失败处理也应该从“整个任务重新执行”转为“识别失败位置并针对性恢复”。例如事实提取阶段出现格式错误,可以修正输出格式或有限次数重新提取;风险分析阶段产生无效证据引用,可以重新执行分析,而不必重新解析整份文档。不同错误适合不同处理方式:

错误类型推荐处理
网络超时、限流有界重试与退避
JSON 格式错误校验后针对性重试
Schema 不匹配修正结构或重新生成
引用不存在返回原步骤重新分析
原始资料缺失请求补充资料
业务规则冲突拒绝继续或转人工
多次生成仍不合格终止并保留失败状态

这里最重要的是区分可重试错误和信息本身不充分。如果原始报告没有明确故障发生时间,无论重复调用多少次模型,也不应该要求它生成一个确定时间。系统应明确保留缺失项,必要时请求补充。另外,对于涉及数据库写入、审批提交等有副作用的步骤,重试必须考虑幂等性,不能因为上一次调用超时就直接重复执行。

因此,工程实现中除了 Prompt 和数据契约,还应该明确每个阶段的超时、最大重试次数、失败状态和恢复策略。

七、2026 年主流框架与模型接口的实现方式

随着模型接口和 Agent Framework 的发展,Prompt Chaining 已经不再依赖纯字符串拼接。

结构化输出成为中间数据契约

OpenAI Responses API 支持通过text.format配置 JSON Schema,并使用strict模式约束输出结构;SDK 还支持将结果直接映射为类型化对象。

DeepSeek 当前 Responses API 同样提供json_schema输出选项,而 Chat Completions 中的 JSON Output 则仍采用json_object。不同接口和模型对 Schema 的支持范围需要分别确认,不能简单假设行为完全一致。

这使得提示链可以采用:Java DTO / JSON Schema → Model Output → Runtime Validation的方式构建中间结果,而不必依赖 Prompt 中反复强调“严格按照以下格式输出”。不过,原生结构化输出仍然不等于业务内容正确,因此程序校验和证据检查依然不可省略。

Workflow 框架负责执行编排

LangGraph 当前提供 Graph API 和 Functional API 两种组织方式。对于包含明确节点、分支和状态依赖的提示链,可以采用 State Graph;对于步骤较少、逻辑相对简单的任务,也可以通过普通函数或 Functional API 编排。对于 Java 企业应用,使用 Spring AI、LangChain4j 或已有 Workflow Engine 同样可以实现类似逻辑。具体框架并不是 Prompt Chaining 成立的前提。

评估从最终结果扩展到中间结果

随着可观测和 Evaluation 能力的完善,现在还可以分别评价事实提取、分析和报告生成等步骤,而不是只在最后检查一份报告。例如,事实提取阶段关注召回率和原文匹配率,风险分析阶段关注证据支持程度,最终报告阶段关注完整性和可执行性。这种分阶段评估方式能够帮助开发者更准确地定位问题,而不是在最终结果不理想时反复修改整条 Prompt。

八、性能、成本与模式选型

Prompt Chaining 提高了任务执行过程的可解释性,但也引入了额外的模型请求。假设一个任务拆成三个顺序执行的 LLM 阶段,总耗时通常接近各阶段耗时之和,再加上数据校验和其他处理开销。因此,它并不天然比单次模型调用更快。设计时应该同时评估:

维度关注重点
结果质量是否减少遗漏、错误和无依据结论
响应时间串行调用增加了多少延迟
Token 成本多阶段 Prompt 是否增加消耗
可维护性是否可以独立调整某个阶段
失败恢复是否能够局部重试
可观测性是否可以定位到具体失败步骤

其中一个常见优化方式,是针对不同步骤选择不同模型。例如,简单分类或字段提取使用成本较低的模型,复杂分析阶段使用推理能力更强的模型。但这种模型分工应通过评估数据验证,不能假设小模型一定能可靠完成所有提取任务。对于能够一次调用完成、输出结构简单的任务,没有必要强行引入提示链;对于存在多个相互独立子任务的情况,后续介绍的 Parallelization 往往更加合适。

因此:Prompt Chaining 更适合步骤明确、存在顺序依赖、能够检查中间结果的任务,而不是所有复杂任务的默认实现。

九、小结

Prompt Chaining 是 Agent 设计模式中最基础的一种任务编排方式,它通过把复杂任务拆成多个独立步骤,使每次模型调用承担更加明确的职责。但它的工程价值并不只是将一个 Prompt 拆成多个 Prompt,而在于建立一套完整的多阶段处理机制:明确职责、类型化输出、中间结果校验、上下文隔离、局部重试与过程评估。

与自由 Agent Loop 相比,提示链的执行路径通常是预先确定的,因此更容易控制、测试和维护;但这也意味着它不适合执行路径高度不确定的开放式任务。在生产系统中,提示链完全可以与 RAG、Tool Calling、Structured Output 和 Workflow 结合,而不必为了使用它专门创建一个复杂 Agent。最终可以概括为:提示链的重点不是增加模型调用次数,而是将复杂任务组织成多个可验证、可维护的处理阶段。

上一篇回顾:

【第四部分:Agentic 智能体设计模式】15.为什么 Agent 也需要设计模式-CSDN博客

下一篇将继续介绍Routing(路由模式)——根据任务类型选择不同处理路径。

Prompt Chaining 解决的是多个步骤如何顺序执行,而 Routing 将进一步解决:面对不同类型的用户请求,系统应该选择哪一条处理流程、哪一个模型或者哪一种 Agent 能力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 2:22:57

矿区用的雷达测速仪参数核对:五项指标对应现场动作

矿区雷达测速仪在粉尘、逆光、震动三种工况下的表现&#xff0c;拉开了参数表以外的差距。CF12的摄像机像素800W&#xff0c;抓拍率95%以上&#xff0c;西晒时段的画面仍然可用。FUP雷达测速仪把这类工况的验证做进了参数里。一、矿区三种工况把参数卡在哪 矿区车辆限速管理的抽…

作者头像 李华
网站建设 2026/10/22 2:21:10

Open-Design - 开源AI设计平台

OpenDesign&#xff1a;一款开源本地优先的AI设计协作工作台当我们在使用 Claude Design 这类AI设计工具时&#xff0c;经常会遇到数据上云、模型绑定、订阅收费等问题。本文介绍一款开源的AI设计工作台 OpenDesign&#xff0c;可以在本地环境完成原型、仪表盘、PPT等物料生成&…

作者头像 李华
网站建设 2026/10/22 2:18:15

小白程序员必看:用4B小模型让AI Agent便宜86%又快2.5倍

本文介绍了如何通过使用小模型来优化大模型在AI Agent中的应用&#xff0c;降低成本并提升效率。核心思想是&#xff1a;将智能体决策中的选择题部分交给小模型处理&#xff0c;而将大模型用于处理小模型不确定的情况。文章详细阐述了决策模型的训练方法、部署策略以及在不同场…

作者头像 李华
网站建设 2026/10/22 2:17:27

LEASH:面向计算机操作智能体的感知不确定性弱‑强升级与监督框架

LEASH:面向计算机操作智能体的感知不确定性弱‑强升级与监督框架 原文网页:https://arxiv.org/html/2610.22280v1 PDF链接:https://arxiv.org/pdf/2610.22280v1 arXiv编号:arXiv:2610.22280v1 [cs.AI] 摘要 计算机操作智能体需要处理长视界GUI自动化任务。每一步都调用前沿…

作者头像 李华
网站建设 2026/10/22 2:17:11

软考系统架构设计师论文涉及知识点之Grafana(2)

接前一篇文章:软考系统架构设计师论文涉及知识点之Grafana(1) 本文内容参考: 【知识】7.Prometheus-可视化工具Granafa介绍和监控MySQL和主机实践-腾讯云开发者社区-腾讯云 Grafana 全维度技术深度解析_grafana底层用的是什么技术 可以拖拽控件形成画布-CSDN博客 特此致…

作者头像 李华