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

简介: 本文介绍 Prompt Chaining(提示链模式)的基本原理与工程实践,重点说明如何将复杂任务拆分为多个职责明确、结果可验证的处理阶段。结合技术故障报告分析案例,介绍任务拆分、结构化输出、Schema 与业务校验、上下文隔离、局部重试及中间结果管理,并结合 OpenAI、DeepSeek 和 LangGraph 的最新能力,分析提示链与 Agent Loop 的区别、适用场景及性能成本,帮助开发者构建更加稳定、可维护的多阶段 AI 工作流。

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

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

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

一、Prompt Chaining 的基本原理

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

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

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

Prompt Chaining Agent 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。最终可以概括为:提示链的重点不是增加模型调用次数,而是将复杂任务组织成多个可验证、可维护的处理阶段。

上一篇回顾:

https://developer.aliyun.com/article/1770497?spm=a2c6h.13148508.setting.16.354f4f0eLaGZAk

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

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

相关文章
|
2月前
|
人工智能 Java API
【第三部分:第一个 Agent 应用】11.Spring AI、LangChain4j、LangGraph 到底帮我们封装了什么?
本文承接“手写最小 Agent”,从框架抽象层级出发,分析 Spring AI、LangChain4j、LangGraph 等主流 Agent Framework 究竟封装了什么。Spring AI 更适合将 AI 能力融入 Spring 应用,LangChain4j 强调 Java Service 化与类型化开发,LangGraph 则擅长状态、分支、循环、检查点和长任务编排。文章同时结合 Qwen-Agent、AgentScope 等国内开源框架,说明 Agent Framework 并没有改变 Agent Loop 的本质,而是在其外围补齐 Memory、RAG、State、Retry、
357 3
|
2月前
|
人工智能 自然语言处理 安全
【AI时代软件项目管理系列】开篇:当软件项目团队中多了 AI,我们需要怎样的项目管理
AI正深度融入软件研发全流程,从代码生成到AI Agent协同作业,推动项目管理从“管人”转向“管人+AI”。本文探讨AI提效背后的新型挑战——范围膨胀、责任模糊、质量风险等,并提出重构项目管理体系的方法论,聚焦人机协作边界、审核机制与落地工具。
236 2
【AI时代软件项目管理系列】开篇:当软件项目团队中多了 AI,我们需要怎样的项目管理
|
2月前
|
人工智能 前端开发 Java
【第三部分:第一个 Agent 应用】10. 不使用框架,手写一个最小 Agent
本文通过手写一个最小 Agent,拆解 Agent Loop 的核心机制:模型基于 Messages 判断下一步,必要时通过 Function Calling 选择 Tool,程序执行后将 Tool Result 作为 Observation 写回上下文,再次交给模型继续决策,直到任务完成。文章结合天气查询与计算示例,说明终止条件、异常处理和执行轨迹的重要性,并进一步对照 DeepSeek Harness,展示最小 Loop 如何逐步演进为具备 Session、Tool Registry、权限、恢复和可观测能力的 Agent Runtime。
263 2
|
2月前
|
人工智能 算法 API
【第二部分:大模型应用开发基础】9. RAG 是什么,它与 Agent 有什么关系?——从知识库问答到 Agentic RAG
RAG 通过文档解析、切分、Embedding、混合检索、Rerank 与引用机制,让大模型在回答问题时能够按需获取企业知识,而不是依赖训练数据“记住一切”。文章进一步介绍 RAG 如何从固定的检索增强生成流程演进到 Agentic RAG:由 Agent 判断是否需要检索、如何规划 Query、证据是否充分,并在必要时继续改写和多轮检索。同时梳理 RAG、Memory、Tool 与 Agent 的边界,强调知识库问答系统并不等同于 Agent,RAG 只是 Agent 获取外部知识的一种能力。
350 2
|
2月前
|
JSON 自然语言处理 Java
【第二部分:大模型应用开发基础】8.Structured Output——让模型输出可被程序可靠处理的数据
Structured Output 是 Agentic AI 连接大模型与业务系统的重要基础能力。相比仅要求模型返回 JSON,它进一步通过 JSON Schema、DTO、运行时校验和业务规则校验,把概率性的模型输出转化为程序可解析、可验证、可执行的数据契约。文章结合 OpenAI 原生 Structured Outputs 与 DeepSeek JSON Output,介绍枚举、日期、金额、嵌套对象、异常修复、有限重试及 Java/TypeScript 类型映射,并强调:JSON 合法、Schema 合法并不等于业务合法,生产级 Agent 必须在结构化输出之后继续进行业务与权限校验。
221 0
【第二部分:大模型应用开发基础】8.Structured Output——让模型输出可被程序可靠处理的数据
|
2月前
|
JSON 自然语言处理 前端开发
【第二部分:大模型应用开发基础】7.Function Calling:让大模型调用真实程序能力
Function Calling 让大模型从“生成文本”走向“调用真实程序能力”。模型根据工具名称、描述和 JSON Schema 选择工具、生成参数,应用程序再完成校验、鉴权、执行和结果回传。文章结合天气查询、销售数据与计算 Agent,说明并行调用、失败处理、前后端调用及权限控制,并梳理 Function Calling 与 ReAct、Tool、Skill、MCP 的关系:ReAct 负责执行循环,Tool 提供能力,Skill 沉淀方法,MCP 统一连接外部工具和数据
315 1
|
2月前
|
缓存 文字识别 安全
【第二部分:大模型应用开发基础】6. Prompt Engineering 与 Context Engineering:生产级 Agent 如何管理上下文
本文从 Agent 开发实践出发,分析 Prompt Engineering 的作用与边界,说明复杂 Agent 为什么不能依赖超长 Prompt,并系统介绍 Context Engineering 对系统指令、用户目标、业务数据、工具结果、历史消息和任务状态的动态选择、组装、裁剪与压缩。文章结合合同审查 Agent 与 Java 示例,进一步讨论 Context Rot、Token 预算、Prompt Cache、可观测性及 Prompt Injection 防护,帮助开发者建立生产级 Agent 的上下文管理思路。
244 1
|
2月前
|
人工智能 架构师 安全
【AI时代软件项目管理系列】2. 从工具到数字员工:AI 在项目团队中的角色演进
AI 正从个人助手演进为能够规划、调用工具并完成任务的 Agent,进一步形成多 Agent 协作与软件工厂。角色变化带来的不只是效率提升,更是团队结构、任务分配、进度衡量和质量管理方式的重构。项目经理需要把模型、Agent、知识库和自动化流程纳入统一管理,通过明确任务契约、权限边界、质量门禁与人工验收,确保 AI 执行可控、结果可验证、责任可追溯。
340 0
|
4月前
|
人工智能 前端开发 程序员
小米送了我 16 亿 tokens,给我测爽了!手把手教你领取 附 Claude Code + MiMo-V2.5 实战测评
大家好,我是程序员鱼皮。 最近大模型圈儿一直在神仙打架,给我测的头发都快掉光了。。。 GPT5.5 放话:我理解力最强! DeepSeek V4 紧接着表示:我性价比最高! 这时候犄角旮旯里传来一个弱弱的声音:我。。。我免费送 16 亿 tokens。。。 定睛一看,是小米。 4 月 23 号,小米正式发布了 MiMoV2.5 系列大模型,旗舰版 MiMoV2.5Pro 是个万亿参数的 MoE 架
1554 0