摘要:另外还有个 Learn Claude Code 的项目也不错,准备边学边改着玩~ 这个系列学习是开胃菜。吃完后,拿自己的项目开刀,做完整重构——打造全栈 + AI Agent Resume 项目,从头到尾一条龙: AI辅助产品 + UI设计 → NestJS 后端 + 数据库 → 前端 + AI 交互 → 部署上线 先立个 Flag:接下来的文章认真打磨,竭尽所能,打造精品,要是太监了请来评论区骂醒我 😄 当然要是你感兴趣的话,点个赞 + 关注,我们一起干——行动起来,就不会焦虑了不是吗?amp;& result.length > 20) return result; } catch (e) { console.error([${stepName}] 第${attempt}次失败:, e); } } throw new Error(`[${stepName}] 重试${maxRetries}次后仍失败
[${stepName}] 第${attempt}次失败:
📌 系列简介:「AI Agent学习」系统学习 21 个 Agent 设计模式。 ⏱️ 预计阅读时间:15 分钟 📖 原书地址:adp.xindoo.xyz 发现本好书,建议配合原书阅读。我是前端转JS全栈,正在学习 AI,理解难免有偏差,欢迎批评指正 ~
📌 系列简介:「AI Agent学习」系统学习 21 个 Agent 设计模式。
⏱️ 预计阅读时间:15 分钟
📖 原书地址:adp.xindoo.xyz 发现本好书,建议配合原书阅读。我是前端转JS全栈,正在学习 AI,理解难免有偏差,欢迎批评指正 ~
大势所趋,前端想继续深钻确实越来越难——这不是在制造焦虑,是我自己在认真想这件事:前端想转 JS 全栈 + AI,到底该怎么走? 以前写过一篇 学习 TailwindCSS 顺便打造个性化在线简历项目——没有 AI 帮我生成文章,自己查资料、折腾项目、踩坑填坑。那篇文章给我留下了土壤,也真的对找工作有所帮助。 现在同样的思路,不一样的是多了 AI 当队友 ^_^
前端或者程序员未来该怎么走?这个系列文章算是我的答案吧!先自己糙,不焦虑,相信自己,前端老油条 + AI = 产品、UI、前后端、测试运维全干。
另外还有个 Learn Claude Code 的项目也不错,准备边学边改着玩~
这个系列学习是开胃菜。吃完后,拿自己的项目开刀,做完整重构——打造全栈 + AI Agent Resume 项目,从头到尾一条龙: AI辅助产品 + UI设计 → NestJS 后端 + 数据库 → 前端 + AI 交互 → 部署上线
先立个 Flag:接下来的文章认真打磨,竭尽所能,打造精品,要是太监了请来评论区骂醒我 😄
当然要是你感兴趣的话,点个赞 + 关注,我们一起干——行动起来,就不会焦虑了不是吗?
Promise.all
Promise.allSettled
刚开始做 AI 应用的时候,我踩过这些坑:
这些问题都有对应的解法,它们有一个统一的名字:Agent 设计模式。
就像软件工程里的设计模式(单例、工厂、观察者……)一样,Agent 设计模式是前人踩坑总结出来的最佳实践。学会它们,你就能系统性地构建高质量的 AI 应用,而不是每次都在瞎摸索。
本篇覆盖最基础也最常用的三个模式:提示链、路由、并行化。 掌握这三个,能解决 80% 的 Agent 开发场景。
说实话,学这本书之前,我对 Agent 的理解停留在"给 AI 一个任务,它自己搞定"这个层面。
打开第一章,第一个概念就是提示链。书里的定义是:
将复杂任务分解为一系列更小、更易管理的子问题,每个子问题通过专门设计的提示词单独处理,一个提示词的输出会作为输入策略性地传递给链中的下一个提示词。
读完第一遍,我的第一反应是:这不就是流水线吗?
工厂流水线、CI/CD 流水线、前端的数据处理管道……本质都是同一件事:每个环节只做一件事,专注且可控。只不过这里的"工位"换成了 LLM 调用。
输入 → [步骤1] → 中间结果1 → [步骤2] → 中间结果2 → [步骤3] → 最终输出
理解了"是什么",我开始想"为什么"。
书里列了一堆单一提示词的问题:指令忽略、上下文偏离、错误传播、幻觉……看完感觉有点抽象,就自己想了个更直接的解释:
LLM 同时处理太多事,就像一个开发同时接了五个需求——每件事都做了,但每件事都没做好。
这四个问题,其实是同一件事的四个面:任务边界不清晰。提示链做的,就是把边界划清楚。
学到这里,我突然想到一个类比,觉得比书里的解释更好记:
提示词就像 PRD(产品需求文档)。
PRD 写得越清晰,开发偏差越小,返工越少;提示词写得越精准,AI 输出越符合预期,"幻觉"越少。
这个类比是我自己推导出来的——因为我是前端开发,经常遇到 PRD 写得模糊导致开发返工的情况。某一刻读到"提示词要精准"这句话,脑子里直接蹦出来了:这不就是 PRD 吗?
提示链的每一步,本质上都是在给 AI 一份更小、更清晰的"PRD"。
💡 写不好提示词的时候,不妨问自己:如果这是一份需求文档,你的开发会知道要做什么吗?
以我自己的 my-resume 项目重构为例,一个完整的 AI 辅助重构规划可以拆成四步:
my-resume
梳理现状 → 确定架构 → 技术选型 → 里程碑规划
每一步专注一件事,输出结果作为下一步的上下文,最终得到一份完整的重构方案。
import { ChatOpenAI } from "@langchain/openai"; import { PromptTemplate } from "@langchain/core/prompts"; import { StringOutputParser } from "@langchain/core/output_parsers"; import { RunnableSequence } from "@langchain/core/runnables"; const llm = new ChatOpenAI({ modelName: "gpt-4o-mini", temperature: 0.7 }); const parser = new StringOutputParser(); // 带重试机制的单步执行器 async function runStep( chain: RunnableSequence, input: Record<string, string>, stepName: string, maxRetries = 3 ): Promise<string> { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { const result = await chain.invoke(input); if (result && result.length > 20) return result; } catch (e) { console.error(`[${stepName}] 第${attempt}次失败:`, e); } } throw new Error(`[${stepName}] 重试${maxRetries}次后仍失败`); }
书里提到了错误处理的重要性,但没有给出具体的分层结构。我结合自己写Nestjs后端服务的经验,把它补充完整了:
Level 1:原地重试(Retry) ← 大多数临时错误在这里解决 ↓ 失败 N 次 Level 2:修正上一步输出后重试 ← 上下文质量问题 ↓ 仍失败 Level 3:降级处理(Fallback) ← 返回兜底结果 ↓ 仍失败 Level 4:人工介入 ← 高风险场景的最后防线
这个分层思路,和写后端服务的容错逻辑是一样的——先自救,再降级,最后才是报警。书里的思路给了方向,工程经验补上了细节。
读到路由这章,第一反应非常直接:这不就是后端路由吗?
用户输入 → 判断意图 → 分发到对应的处理链。和 NestJS 里 @Get('/user') @Post('/order') 的逻辑一模一样嘛。
@Get('/user')
@Post('/order')
但我多想了一秒,感觉哪里不太对。
HTTP 路由的判断依据是 URL 路径,是你自己定义的规则,边界清晰、精确。但 Agent 路由的判断依据是用户说的话——你永远不知道用户会怎么表达同一件事。
"我要退款"、"我想申请退款"、"这个东西我不想要了能退吗"、"退款流程是什么"——这四句话意图相同,但表达完全不同。规则路由根本兜不住。
这就是两者本质的区别:
想清楚这一点,书里后面讲的"规则路由 vs LLM 路由"就很好理解了。
书里给了四种路由实现方式(基于LLM、基于嵌入、基于规则、基于ML模型),实际开发中用得最多的是前两种,用一句话概括它们的区别:
规则路由:你告诉它边界在哪里。LLM 路由:它自己理解边界在哪里。
适合意图明确、流程固定的场景,比如退款、账号注销。
优点:快速、可控、零幻觉 缺点:无法处理模糊边界
适合意图模糊、内容开放的场景,比如技术咨询、品牌对话。
优点:理解语义、处理模糊 缺点:有延迟、有成本
// LLM 路由判断器 // 注意:temperature=0,确保分类结果稳定,不能让它"发挥创意" const classifyChain = RunnableSequence.from([ PromptTemplate.fromTemplate(` 将用户输入分类为:TECH / REFUND / COMPLAINT / OTHER 只输出标签,不解释。 用户输入:{input} `), new ChatOpenAI({ temperature: 0 }), new StringOutputParser(), ]); async function smartRouter(userInput: string): Promise<string> { // 规则路由优先:确定性流程,零延迟,零幻觉 if (userInput.includes("退款")) { return refundChain.invoke({ input: userInput }); } // LLM 路由:语义理解,处理模糊意图 const intent = await classifyChain.invoke({ input: userInput }); switch (intent.trim()) { case "TECH": return techChain.invoke({ input: userInput }); case "COMPLAINT": return complaintChain.invoke({ input: userInput }); default: return fallbackChain.invoke({ input: userInput }); } }
💡 黄金原则:确定性流程用规则,开放性问题用 LLM。 两者不是对立的,而是互补的——规则路由兜住确定性,LLM 路由处理模糊性。大多数真实场景,都是两者混用的。
💡 黄金原则:确定性流程用规则,开放性问题用 LLM。
两者不是对立的,而是互补的——规则路由兜住确定性,LLM 路由处理模糊性。大多数真实场景,都是两者混用的。
书里的定义很直接:识别工作流中不依赖其他部分输出的环节,将它们并行执行。
串行(慢):A → B → C → D 耗时:T(A)+T(B)+T(C)+T(D) 并行(快):A ─┐ B ─┼──→ 汇总 → D 耗时:max(T(A),T(B),T(C)) + T(D) C ─┘
用函数式编程来理解,就是先 fan-out(扇出)再 fan-in(汇聚):
fan-out
fan-in
// 提示链 = pipe(串行) pipe(stepA, stepB, stepC)(input) // 并行化 = 先 fan-out 再 fan-in pipe( fanOut(taskA, taskB, taskC), // 同时执行,各自独立 merge, // 汇聚结果 stepD // 依赖汇聚结果的后续步骤 )(input)
一个输入 → 多个并行任务 → 汇总输出
典型场景:简历多维度评估(同时分析技术栈、项目经验、表达能力)
用户简历 ↓ ┌─────────────────────────────┐ │ ① 提取技术栈 │ ← 并行执行 │ ② 评估项目经验 │ ← 并行执行 │ ③ 分析表达能力 │ ← 并行执行 └─────────────────────────────┘ ↓ 汇总 综合评估报告
同一问题交给多个 Agent 独立回答,取最优解,提升准确率
单个模型有自己的"思维定势",多个模型投票相当于让多个专家各自给意见,再综合判断——比只听一个人靠谱得多。
大任务切片 → 并行处理每片 → 合并结果
典型场景:长文档摘要、大规模数据分析。熟悉 Hadoop 或函数式编程的同学,这个模式一眼就懂。
这里有个细节是我自己推导出来的,书里没有直接讲。
一开始我的直觉是用 Promise.all——等所有并行任务完成再汇总。但写着写着意识到一个问题:AI 调用天然不稳定,某一个维度分析偶尔超时或报错是正常的。Promise.all 的行为是一个失败就全军覆没——一个维度挂了,整份报告作废。
这明显不对。一个维度分析失败,不代表整份报告没价值。
于是想到了 Promise.allSettled——等所有任务都结束(不管成功还是失败),对失败的单独降级处理,其余照常返回。
Promise.race
Promise.any
🎯 核心原则:容忍部分失败是常态,而不是异常。
import { RunnableParallel } from "@langchain/core/runnables"; // RunnableParallel:LangChain 原生并行执行,底层等价于 Promise.allSettled const parallelAnalysis = RunnableParallel.from({ techStack: techStackChain, experience: experienceChain, expression: expressionChain, }); async function evaluateResume(resume: string) { // 三链并行执行 const results = await parallelAnalysis.invoke({ resume }); // 汇总生成综合报告 return summaryChain.invoke(results); }
书里有一句话说得很准:核心思想是识别工作流中不依赖其他部分输出的环节。
所以并行化的本质不是"让所有任务都并行",而是识别依赖关系:
动手之前,先画一张任务依赖图——哪些任务之间有箭头,哪些没有,一目了然。
学完这三章,你手里已经有了三把利器:
三者组合的决策流程:
新任务来了 ↓ 能拆成独立子任务吗? ├─ 能 → 子任务间有依赖吗? │ ├─ 有依赖 → 提示链(串行) │ └─ 无依赖 → 并行化 └─ 不能(单一任务) ↓ 输入类型固定吗? ├─ 是 → 路由(分发到专属链) └─ 否 → 单链处理
我正在用 NestJS + Drizzle ORM + SQLite 重构 my-resume 项目,三个模式都有直接对应:
边学边做,是我觉得最快的方式。理论看懂了,不等于会用——只有落到真实项目里,才知道哪里还没想清楚。
这三个模式是 Agent 开发的地基,掌握它们之后:
说到底,这三个模式解决的都是同一个问题:如何让 AI 在复杂场景下,稳定地做对事情。
这件事和写软件没什么本质区别——拆任务、管流程、做容错,工程师早就在做了。只不过现在执行者从代码变成了模型。
💬 系列地址:持续更新中 📖 原书地址:adp.xindoo.xyz 🛠️ 实战项目:占个位,敬请期待 如果这篇对你有帮助,欢迎点赞收藏,我们下篇见 👋
💬 系列地址:持续更新中
📖 原书地址:adp.xindoo.xyz
🛠️ 实战项目:占个位,敬请期待
如果这篇对你有帮助,欢迎点赞收藏,我们下篇见 👋
暂无回复,快来抢沙发吧!
本次需消耗银元:
100
当前账户余额: 0 银元
前言
大势所趋,前端想继续深钻确实越来越难——这不是在制造焦虑,是我自己在认真想这件事:前端想转 JS 全栈 + AI,到底该怎么走? 以前写过一篇 学习 TailwindCSS 顺便打造个性化在线简历项目——没有 AI 帮我生成文章,自己查资料、折腾项目、踩坑填坑。那篇文章给我留下了土壤,也真的对找工作有所帮助。 现在同样的思路,不一样的是多了 AI 当队友 ^_^
前端或者程序员未来该怎么走?这个系列文章算是我的答案吧!先自己糙,不焦虑,相信自己,前端老油条 + AI = 产品、UI、前后端、测试运维全干。
另外还有个 Learn Claude Code 的项目也不错,准备边学边改着玩~
这个系列学习是开胃菜。吃完后,拿自己的项目开刀,做完整重构——打造全栈 + AI Agent Resume 项目,从头到尾一条龙: AI辅助产品 + UI设计 → NestJS 后端 + 数据库 → 前端 + AI 交互 → 部署上线
先立个 Flag:接下来的文章认真打磨,竭尽所能,打造精品,要是太监了请来评论区骂醒我 😄
当然要是你感兴趣的话,点个赞 + 关注,我们一起干——行动起来,就不会焦虑了不是吗?
🗺️ 系列导航
📖 读这篇,你可以带走什么
Promise.all到Promise.allSettled——AI 调用的失败处理思路前端视角,为什么要学 Agent 设计模式?
刚开始做 AI 应用的时候,我踩过这些坑:
这些问题都有对应的解法,它们有一个统一的名字:Agent 设计模式。
就像软件工程里的设计模式(单例、工厂、观察者……)一样,Agent 设计模式是前人踩坑总结出来的最佳实践。学会它们,你就能系统性地构建高质量的 AI 应用,而不是每次都在瞎摸索。
本篇覆盖最基础也最常用的三个模式:提示链、路由、并行化。 掌握这三个,能解决 80% 的 Agent 开发场景。
📖 第一章:提示链(Prompt Chaining)
这是我接触到的第一个 Agent 概念
说实话,学这本书之前,我对 Agent 的理解停留在"给 AI 一个任务,它自己搞定"这个层面。
打开第一章,第一个概念就是提示链。书里的定义是:
读完第一遍,我的第一反应是:这不就是流水线吗?
工厂流水线、CI/CD 流水线、前端的数据处理管道……本质都是同一件事:每个环节只做一件事,专注且可控。只不过这里的"工位"换成了 LLM 调用。
输入 → [步骤1] → 中间结果1 → [步骤2] → 中间结果2 → [步骤3] → 最终输出为什么不能一步到位?
理解了"是什么",我开始想"为什么"。
书里列了一堆单一提示词的问题:指令忽略、上下文偏离、错误传播、幻觉……看完感觉有点抽象,就自己想了个更直接的解释:
LLM 同时处理太多事,就像一个开发同时接了五个需求——每件事都做了,但每件事都没做好。
这四个问题,其实是同一件事的四个面:任务边界不清晰。提示链做的,就是把边界划清楚。
「提示词 = PRD」——我自己推导出来的类比
学到这里,我突然想到一个类比,觉得比书里的解释更好记:
提示词就像 PRD(产品需求文档)。
PRD 写得越清晰,开发偏差越小,返工越少;提示词写得越精准,AI 输出越符合预期,"幻觉"越少。
这个类比是我自己推导出来的——因为我是前端开发,经常遇到 PRD 写得模糊导致开发返工的情况。某一刻读到"提示词要精准"这句话,脑子里直接蹦出来了:这不就是 PRD 吗?
提示链的每一步,本质上都是在给 AI 一份更小、更清晰的"PRD"。
实战场景:项目重构规划
以我自己的
my-resume项目重构为例,一个完整的 AI 辅助重构规划可以拆成四步:每一步专注一件事,输出结果作为下一步的上下文,最终得到一份完整的重构方案。
核心代码
import { ChatOpenAI } from "@langchain/openai"; import { PromptTemplate } from "@langchain/core/prompts"; import { StringOutputParser } from "@langchain/core/output_parsers"; import { RunnableSequence } from "@langchain/core/runnables"; const llm = new ChatOpenAI({ modelName: "gpt-4o-mini", temperature: 0.7 }); const parser = new StringOutputParser(); // 带重试机制的单步执行器 async function runStep( chain: RunnableSequence, input: Record<string, string>, stepName: string, maxRetries = 3 ): Promise<string> { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { const result = await chain.invoke(input); if (result && result.length > 20) return result; } catch (e) { console.error(`[${stepName}] 第${attempt}次失败:`, e); } } throw new Error(`[${stepName}] 重试${maxRetries}次后仍失败`); }错误处理:分层降级——书里的结构 + 我的工程经验
书里提到了错误处理的重要性,但没有给出具体的分层结构。我结合自己写Nestjs后端服务的经验,把它补充完整了:
Level 1:原地重试(Retry) ← 大多数临时错误在这里解决 ↓ 失败 N 次 Level 2:修正上一步输出后重试 ← 上下文质量问题 ↓ 仍失败 Level 3:降级处理(Fallback) ← 返回兜底结果 ↓ 仍失败 Level 4:人工介入 ← 高风险场景的最后防线这个分层思路,和写后端服务的容错逻辑是一样的——先自救,再降级,最后才是报警。书里的思路给了方向,工程经验补上了细节。
📖 第二章:路由(Routing)
"这不就是 NestJS 路由吗?"——然后发现哪里不对
读到路由这章,第一反应非常直接:这不就是后端路由吗?
用户输入 → 判断意图 → 分发到对应的处理链。和 NestJS 里
@Get('/user')@Post('/order')的逻辑一模一样嘛。但我多想了一秒,感觉哪里不太对。
HTTP 路由的判断依据是 URL 路径,是你自己定义的规则,边界清晰、精确。但 Agent 路由的判断依据是用户说的话——你永远不知道用户会怎么表达同一件事。
"我要退款"、"我想申请退款"、"这个东西我不想要了能退吗"、"退款流程是什么"——这四句话意图相同,但表达完全不同。规则路由根本兜不住。
这就是两者本质的区别:
想清楚这一点,书里后面讲的"规则路由 vs LLM 路由"就很好理解了。
两种路由方式
书里给了四种路由实现方式(基于LLM、基于嵌入、基于规则、基于ML模型),实际开发中用得最多的是前两种,用一句话概括它们的区别:
规则路由:你告诉它边界在哪里。LLM 路由:它自己理解边界在哪里。
规则路由(if/else)
适合意图明确、流程固定的场景,比如退款、账号注销。
优点:快速、可控、零幻觉 缺点:无法处理模糊边界
LLM 路由
适合意图模糊、内容开放的场景,比如技术咨询、品牌对话。
优点:理解语义、处理模糊 缺点:有延迟、有成本
路由决策矩阵
核心代码
// LLM 路由判断器 // 注意:temperature=0,确保分类结果稳定,不能让它"发挥创意" const classifyChain = RunnableSequence.from([ PromptTemplate.fromTemplate(` 将用户输入分类为:TECH / REFUND / COMPLAINT / OTHER 只输出标签,不解释。 用户输入:{input} `), new ChatOpenAI({ temperature: 0 }), new StringOutputParser(), ]); async function smartRouter(userInput: string): Promise<string> { // 规则路由优先:确定性流程,零延迟,零幻觉 if (userInput.includes("退款")) { return refundChain.invoke({ input: userInput }); } // LLM 路由:语义理解,处理模糊意图 const intent = await classifyChain.invoke({ input: userInput }); switch (intent.trim()) { case "TECH": return techChain.invoke({ input: userInput }); case "COMPLAINT": return complaintChain.invoke({ input: userInput }); default: return fallbackChain.invoke({ input: userInput }); } }📖 第三章:并行化(Parallelization)
什么是并行化?
书里的定义很直接:识别工作流中不依赖其他部分输出的环节,将它们并行执行。
串行(慢):A → B → C → D 耗时:T(A)+T(B)+T(C)+T(D) 并行(快):A ─┐ B ─┼──→ 汇总 → D 耗时:max(T(A),T(B),T(C)) + T(D) C ─┘用函数式编程来理解,就是先
fan-out(扇出)再fan-in(汇聚):// 提示链 = pipe(串行) pipe(stepA, stepB, stepC)(input) // 并行化 = 先 fan-out 再 fan-in pipe( fanOut(taskA, taskB, taskC), // 同时执行,各自独立 merge, // 汇聚结果 stepD // 依赖汇聚结果的后续步骤 )(input)三种并行模式
模式一:扇出-汇聚(Fan-out / Fan-in)
典型场景:简历多维度评估(同时分析技术栈、项目经验、表达能力)
模式二:投票/共识(Voting)
单个模型有自己的"思维定势",多个模型投票相当于让多个专家各自给意见,再综合判断——比只听一个人靠谱得多。
模式三:Map-Reduce
典型场景:长文档摘要、大规模数据分析。熟悉 Hadoop 或函数式编程的同学,这个模式一眼就懂。
失败处理:从
Promise.all到Promise.allSettled的思维转变这里有个细节是我自己推导出来的,书里没有直接讲。
一开始我的直觉是用
Promise.all——等所有并行任务完成再汇总。但写着写着意识到一个问题:AI 调用天然不稳定,某一个维度分析偶尔超时或报错是正常的。Promise.all的行为是一个失败就全军覆没——一个维度挂了,整份报告作废。这明显不对。一个维度分析失败,不代表整份报告没价值。
于是想到了
Promise.allSettled——等所有任务都结束(不管成功还是失败),对失败的单独降级处理,其余照常返回。Promise.allPromise.allSettledPromise.racePromise.any核心代码
import { RunnableParallel } from "@langchain/core/runnables"; // RunnableParallel:LangChain 原生并行执行,底层等价于 Promise.allSettled const parallelAnalysis = RunnableParallel.from({ techStack: techStackChain, experience: experienceChain, expression: expressionChain, }); async function evaluateResume(resume: string) { // 三链并行执行 const results = await parallelAnalysis.invoke({ resume }); // 汇总生成综合报告 return summaryChain.invoke(results); }💡 并行化的本质
书里有一句话说得很准:核心思想是识别工作流中不依赖其他部分输出的环节。
所以并行化的本质不是"让所有任务都并行",而是识别依赖关系:
动手之前,先画一张任务依赖图——哪些任务之间有箭头,哪些没有,一目了然。
🔗 三章串联:基础三件套全景图
学完这三章,你手里已经有了三把利器:
三者组合的决策流程:
新任务来了 ↓ 能拆成独立子任务吗? ├─ 能 → 子任务间有依赖吗? │ ├─ 有依赖 → 提示链(串行) │ └─ 无依赖 → 并行化 └─ 不能(单一任务) ↓ 输入类型固定吗? ├─ 是 → 路由(分发到专属链) └─ 否 → 单链处理🛠️ 实战:三个模式在 my-resume 项目中的应用
我正在用 NestJS + Drizzle ORM + SQLite 重构
my-resume项目,三个模式都有直接对应:边学边做,是我觉得最快的方式。理论看懂了,不等于会用——只有落到真实项目里,才知道哪里还没想清楚。
📝 总结
这三个模式是 Agent 开发的地基,掌握它们之后:
说到底,这三个模式解决的都是同一个问题:如何让 AI 在复杂场景下,稳定地做对事情。
这件事和写软件没什么本质区别——拆任务、管流程、做容错,工程师早就在做了。只不过现在执行者从代码变成了模型。