ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI Coding实战:用ReAct架构从零搭建可运行的AI Agent系统

AI Coding实战:用ReAct架构从零搭建可运行的AI Agent系统 过去半年我最大的感受是AI Coding 已经从“能帮你补全代码的编辑器插件”变成了一整套可以承担架构设计、任务拆解、代码审查、自动化测试的研发协作方式。而我自己花时间最多的项目就是用它来搭建 AI Agent 系统。如果你也想用 AI Coding 把 Agent 从概念变成能跑通业务闭环的系统这篇文章应该是目前市面上最贴合实际落地的一条路径。我会从概念对齐、架构选型、工具链准备、实操步骤到踩坑复盘完整拆解一遍。内容不绕弯子每一步都是我自己跑过的。1. AI Coding 与 AI Agent两者到底是怎么结合的很多人把 AI Agent 想复杂了觉得它是个“超级智能体”给它一句话它就能自我进化。实际上我在项目里对 AI Agent 的定义非常朴素一个能感知环境、做出决策、调用工具并执行动作的 LLM 程序。它和普通聊天机器人的最大区别是聊天机器人只会“说”Agent 会“做”。1.1 AI Agent 不是“聊天机器人 Plus”我先用一张对照表帮你看清边界能力维度普通聊天机器人AI Agent输出形式生成文本回复生成决策并触发动作上下文来源用户输入的对话环境状态、工具返回、记忆系统工具调用不支持支持搜索、代码执行、API 调用、文件读写运行模式一次对话结束多轮循环ReAct直到任务完成或终止失败处理重新生成回答根据反馈自我修正、换策略这个区别决定了开发方式的差异。写聊天机器人核心是把 Prompt 调好写 Agent核心是设计它的“感知-决策-行动-反思”闭环。我在项目中搭的第一个 Agent 就是一个简单的“信息搜集助手”用户提出需求Agent 决定调用搜索 API 还是读取本地文档拿到结果后判断信息是否足够不够就继续搜索够了就生成报告。就这么一个看似简单的东西已经涉及工具注册、记忆管理、Token 成本控制、Agent 循环终止条件四个模块。任何一个环节设计不好系统就跑不稳。1.2 AI Coding 在 Agent 开发中到底帮了什么忙以及不帮什么忙用 AI Coding 开发 Agent最直观的爽点是框架代码、样板代码、接口对接这部分AI 可以替你完成 80%。比如写一个 LangChain 工具类、配置一个 Pydantic 模型、搭一个 FastAPI 服务这些重复性工作 AI Coding 工具做得又快又好。但你需要清醒AI Coding 不帮你做架构决策不帮你理解业务需求也不帮你调试 Agent 循环的逻辑问题。Agent 的本质是一个状态机状态流转的 bug 往往是你自己设计的 prompt 或者工具接口有缺陷AI 只能看到局部代码看不到整个系统的行为轨迹。所以 AI Coding 和 AI Agent 合作的正确姿势是人负责架构、需求拆解、灰度验证AI 负责代码生成、重构、写测试、修小 bug。让 AI 当“高级程序员”而不是“架构师”。这是我做完整个项目后最大的感悟。提示不要把 AI Coding 生成的所有代码直接信任。Agent 系统中每一处工具调用都涉及外部副作用必须 human-in-the-loop 的验证机制。后面我会专门讲怎么处理。2. AI Agent 的主流架构动手前先把方案想透网上讨论 AI Agent 架构的文章很多有说 ReAct 的有说 Plan-and-Execute 的有说多 Agent 协作的。我的建议是不要追求最复杂的架构先看你的任务类型。2.1 单 Agent 范式ReAct 是绕不开的基石ReActReasoning Acting是目前绝大多数 Agent 系统的内核。它的核心循环是接收用户的 query把 query 转为 Thought思考过程根据 Thought 选择 Action动作比如调用工具观察工具返回的 Observation重复循环直到积累足够信息输出 Final Answer用代码来表达大致长这样伪代码思路实际实现用 LangChain 或自写循环while not task_finished: response llm.generate(prompt) if response.type final_answer: return response.content tool tool_registry.get(response.action) observation tool.execute(response.action_input) prompt.append(observation)让我用一个例子帮你理解 ReAct 的“为什么”用户问“帮我查一下本季度产品 A 的销量并对比上季度”。如果是一个普通 Prompt你让模型直接回答它会“编”。但 ReAct 循环会让模型先决定调用销售数据库查询工具然后观察返回的数据再决定是否还需要调用对比分析工具最后才生成结论。每一步都有外部事实支撑而不是模型凭空猜。我在实际项目中用 ReAct 范式改造了团队内部的客服 Agent把“文档检索人工干预工单创建”串起来效果立竿见影。ReAct 最大的优点就是简单、可控、可观测——每走一步你都能看到模型当时的 Thought 是什么调用了什么工具返回了什么结果排查问题非常直接。2.2 Plan-and-Execute、Reflection 与多 Agent 协作ReAct 适合任务链路不算太长的场景。但如果你要 Agent 做的是一个包含子任务、需要拆解规划的复杂目标比如“帮我整理一份竞品分析报告包含产品功能、定价、市场定位三部分”ReAct 可能会在长循环中迷失方向或者反复做无用功。这时候要用 Plan-and-Execute 架构先让 Agent 生成完整计划Plan再把计划逐段执行Execute。我常用的实现方式是把 Agent 拆成两个模块Planner将用户目标拆成一个任务清单每个任务包含目标、输入、产出物Executor一个循环逐个执行任务并在执行完成后把结果交给 Planner 校验Reflection 机制则更“内省”一些。它让 Agent 在输出初步答案后再启动一个“批判者”角色检查自己的回答是否完整、是否有误然后重新修订。GitHub 上很火的 Self-RAG 和 Reflexion 论文都是这个思路。实际用的时候我通常只在答案质量要求高、容错率低的场景开 Reflection因为它的 Token 开销会增加 20%-50%速度还会慢一倍。至于多 Agent 协作我的态度是谨慎使用。几个 Agent 之间互相发消息听起来很美但实际调试难度呈指数上升。我的一个项目里用了三个 Agent用户意图代理、业务查询代理、反馈处理代理结果光消息格式对齐就改了三天最后发现很多问题其实单 Agent 加 Reflection 就能解决。多 Agent 的真正适用场景是子任务之间能清晰解耦、并行度要求高、单个 Agent 的上下文承载不了全部信息。所以我的架构选型建议很直接任务链路少于 5 步、工具调用不复杂 → 单 Agent ReAct任务需要规划拆解、链路较长 → Planner Executor答案质量要求高 → 单 Agent Reflection多个强隔离的子任务并行处理 → 多 Agent 协作2.3 Token 成本与 Agent 的“认知预算”热搜词里有“ai agent token 是什么意思”这是新手最容易懵的点。Token 是模型计费的基本单位大概 1 个英文单词约 1.3 个 token1 个中文字约 1-2 个 token。但对于 Agent 来说Token 不只是钱的问题更是“认知预算”的问题。因为 Agent 通过多轮 ReAct 持续工作每轮都要把历史上下文重新发给模型。如果一次任务有 10 轮循环每轮 2000 token单单上下文就已经消耗了 2 万 token。再叠加思考内容、工具返回的长文本很快就能把大模型的上下文窗口撑满并拖垮速度。这就是为什么 Agent 系统中Memory记忆模块不是加分项而是必选项。我在项目里常用的优化手段有三个滑动窗口裁剪只保留最近 4-6 轮的 Thought/Observation丢弃最早的历史摘要压缩用一个小模型把长对话历史总结成 200 字以内的摘要再塞回上下文外置存储把工具返回的大段数据写入本地文件或向量库上下文中只保留摘要和文件路径用这三板斧以后Agent 的长任务稳定度明显提升Token 成本也降了大概 40%。关于 Token 优化的更多细节后面踩坑章节我会展开讲。3. 开发环境与工具链准备AI Coding 之前必须先定的事这部分偏实操。很多人拿 AI Coding 工具上手就开干结果写一会儿就发现框架选错了、模型 API 没配好、Agent 的内存管理根本没考虑。你如果现在准备开始下面是踩完坑之后我觉得最合理的准备顺序。3.1 编程语言与框架选型Python 为主流Rust 是加分项Python 依然是 AI Agent 开发的绝对主力语言原因很简单生态最完整。LangChain、LlamaIndex、CrewAI、AutoGen 这些主流 Agent 框架都是 Python 出生的模型 SDK 的支持也最全。热词里提到“基于 rust 语言 ai agent”说明很多人开始关注性能问题。Rust 的优势在于并发和资源占用如果你要做高吞吐的 Agent 服务Rust 确实适合做底层的 Agent Runtime 或者工具调度层。但我不建议新手直接用 Rust 搞 Agent因为生态还不成熟像 LangChain 这样的框架用不了很多模型平台的 SDK 也不完善。我的建议是业务逻辑先用 Python 跑通如果后期遇到性能瓶颈再用 Rust 重写核心调度模块。框架选型上我实际体验过的几个主流方案的感受如下LangChain功能最全老牌框架教程多适合做复杂链路。缺点是抽象层太重出了 bug 排查起来很累LlamaIndex更偏数据检索和知识库问答场景如果你的 Agent 核心是 RAG这个框架效率更高CrewAI多 Agent 流水线设计极简角色扮演式的配置体验很好适合快速搭 Demo自写循环结构对于单 Agent 简单任务手写 ReAct 循环可能比任何框架都稳。代码量不多但可控性极强是我在核心业务系统里的首选一个重要的经验是框架只解决“通信骨架”的问题Agent 的核心永远是 Prompt 设计和工具实现。不要指望换个框架就能让 Agent 变聪明。3.2 模型接入与 API 成本计算模型接入相对直接。OpenAI、Anthropic、国内的通义、智谱、DeepSeek 都提供兼容的 API 接口。对小团队来说选模型时最需要关注三个指标上下文长度、单次调用价格、工具调用Function Calling的质量。Function Calling 是一个关键能力——它决定模型能不能稳定输出结构化的工具调用参数。做 Agent 开发不要用不支持 Function Calling 的模型否则你会把大把时间花在解析模型输出的 JSON 上非常痛苦。成本计算这一块我用一个实际公式来算单次任务成本 输入 token × 输入单价 输出 token × 输出单价举个具体例子假设用某模型输入价格为 0.5 元/百万 token输出价格为 2 元/百万 token。一次任务累计输入消耗 50 万 token输出消耗 5 万 token那成本就是 50×0.5 5×2 35 元。如果 Agent 一天跑 1000 次任务就是 3.5 万元/天。这个数字很多人听完会吓一跳——这恰恰说明不做 Token 优化的 Agent 系统根本没法商业化。所以我在每个 Agent 模块里都会加上 Token 计数器实时记录每次调用的 token 数并按任务汇总。这些数据是后续优化成本最有用的依据。3.3 Agent 可观测性没有日志你什么都干不成Agent 的开发调试和传统后端开发完全不同。传统后端是“请求-响应”模式出错看堆栈就行。Agent 是一连串的循环决策你根本不知道它在哪一步开始跑歪。所以从第一天就要搭建可观测性体系。我用的方案是给 Agent 循环打日志记录每一步的关键信息{ agent_id: tax_agent_001, step: 3, thought: 用户需要查询上季度销售额先调用sale_api, action: sale_api.get_quarterly_sales, action_input: {quarter: 2025Q4}, observation: success: 13500 units, token_cost: 2340, latency_ms: 380 }把这些结构化日志汇总到日志平台以后你就能复现 Agent 的任何一次行为。后面发现系统出 bug就不至于“无法定位”可以直接按 agent_id 拉全链路日志。这一步是我强烈建议所有 Agent 项目预留时间做的绝对比想象中值钱。4. AI Coding 实操从需求文档到能跑通的 Agent工具链准备好了下面进入正题用 AI Coding 快速搭建 Agent。这一部分的每一步我都以自己实际操作过的“报价查询 Agent”为例来讲。这个 Agent 要做的事很简单用户问某个商品的历史报价Agent 去查数据库、算均价、给出表格结果。4.1 先写 PRD再让 AI 写代码我发现大多数人用 AI Coding 效果不好原因往往不是工具不行而是需求没写清楚。AI Coding 生成代码的质量直接取决于你对需求的描述精度。描述“帮我写一个 Agent”和描述“帮我写一个报价查询 Agent输入商品 ID调用 get_quote_price API返回近 30 天均价若查询失败则返回指定错误码”效果完全不同。所以动手前先把 PRD 写清楚。我自己用的模板包含五个部分目标这个 Agent 要实现什么业务效果输入用户可能的输入形式工具清单Agent 可以调用的 API、数据库、文件异常处理工具失败、无权限、超时分别怎么处理输出格式最终呈现给用户的格式写完这个 PRD把内容丢给 AI Coding 工具让它先生成项目骨架。这一步非常爽因为基础的文件结构、依赖清单、启动脚本基本都是秒出。4.2 用 AI Coding 生成项目骨架然后逐模块迭代我在生成骨架的时候习惯用“脚手架迭代”的模式而不是一次性让它生成全部功能。完整代码一次生成太大AI 容易发挥过头分模块生成Review 和验证都更容易。具体操作上我会用 AI Coding 对 PRD 里的每个模块分别下达指令“根据 requirements.txt 生成项目目录结构Tech stack 使用 FastAPI LangChain”“实现 tools/get_quote_price.py输入参数为 product_id: str返回 JSON包括 price、currency、timestamp。需要加超时处理与重试机制”“实现 agent_core/agent.py使用 ReAct 模式。工具注册表里把 get_quote_price 放进去”“为 agent.py 编写 pytest 测试模拟一个成功场景和一个 API 超时场景”这种方式有几个好处可以逐一审查生成的代码是否符合预期每步生成的代码上下文更集中质量更高出问题时能快速定位是哪一轮生成的任务有问题。千万别把整个项目一次性塞给 AI让它“先生成全部代码”这种模式下你很快会被大量无法运行的代码淹没。4.3 让 AI Coding 生成工具注册和调用逻辑核心技巧工具调用是 Agent 的核心能力也是 AI Coding 生成的代码里最需要人工把关的部分。这里有一个关键细节工具的定义必须用“机器可读的 Schema 自然语言说明”双重描述。Schema 用于让模型知道调用的参数结构自然语言说明用于让模型理解工具的职责以及在什么情况下该用。我来给你看一个我项目里效果很好的工具定义格式from pydantic import BaseModel, Field class GetQuotePriceInput(BaseModel): product_id: str Field(descriptionProduct unique ID, e.g. SKU-2024-001) date_from: str | None Field(defaultNone, descriptionStart date, format YYYY-MM-DD) get_quote_price_tool { type: function, function: { name: get_quote_price, description: Query the historical quoted price of a product. Use this when user asks about price history, average price, or price trend., parameters: GetQuotePriceInput.model_json_schema(), }, }这个定义配合 Function Calling模型就能在合适的时机准确触发调用而不是靠“理解力”瞎蒙。在让 AI Coding 生成这部分时我反复强调一个要点一定要让 AI 在工具函数的 docstring 里写清楚“触发场景”和“常见错误输出”。我发现很多工具生成代码跑不稳就是因为模型无法判断该不该调用这个工具。docstring 里的语义描述就是解决这个问题的关键这一点普通教程很少有人讲。4.4 用 AI Coding 辅助测试和调试Agent 开发的核心环节Agent 写完之后第一件事不要急着部署先跑测试。但 Agent 的测试和传统单元测试差别很大——传统测试断言函数的输入输出Agent 测试要验证的是行为轨迹。我的做法是让 AI Coding 生成两类测试确定性测试Mock 掉外部 API 返回固定结果验证 Agent 在给定输入下是否走了预期路径。比如“用户询问均价时Agent 是否正确调用 get_quote_price 并生成查询结果”模糊性测试不 Mock真调 API输入一些边界情况比如不存在的商品 ID、超长输入、无权限用户观察 Agent 是否优雅处理在调试阶段我发现一个常见现象Agent 有时会用错误的工具参数去调用工具比如把“2025-03-01”传成了“March 1, 2025”。这时候不要直接改 Prompt 让它“小心点”而是要在工具输入上做 Pydantic 格式校验让工具自己能容错解析常见日期格式。否则你会在 Prompt 调优上陷入无底洞。5. 实际踩过的坑与排查过程这些教训值得你看完任何 Agent 项目都免不了踩坑关键是踩了之后怎么快速定位修复。我把项目过程中最有代表性的四类坑完整拆解一遍包括现象、排查链路和最终方案方便你复用排查思路。5.1 坑一上下文爆炸把 Agent 卡成“复读机”项目上线后的一次压测中Agent 连续运行 10 轮以后开始行为异常——不断重复调用同一个工具返回的 Observation 都没有变化但 Agent 就是停不下来。拉日志以后发现上下文里堆积了大量重复的历史 Observation模型被海量陈旧信息干扰开始“复读”。排查链路是这样的先看日志里每一轮的 token 数变化发现从第 7 轮开始输入 token 冲到了 1.5 万明显异常进一步看 Observation 内容发现工具返回的结果每次都一样但因为没有去重机制Agent 仍然以为有新信息最后确定问题出在“循环终止条件”太弱只设了最大轮数没设“重复反馈检测”。修复方案有两层第一层在工具层面做幂等判断如果连续三次 Observation 完全一致Agent 强制进入“信息已用尽”状态第二层在上下文管理上加滑动窗口只保留最近 6 轮同时把更早的历史压缩成摘要。修复之后复现测试再没出现“复读机”现象。5.2 坑二Agent 循环失控Token 分钟级烧穿预算这个坑更贵。有一次因为测试 Prompt 写得太开放“你有任何疑问都可以继续问”Agent 进入了一个“自我提问-自我回答”的循环每分钟烧掉几万 token。发现的时候账户余额已经告警了。排查时我发现Agent 的终止条件设计存在漏洞——它同时满足“用户目标已达成”和“上下文还有空间”时仍然会继续生成因为我只给了终止指令没有给“强制收敛”的规则。修复方案很重要我在 Agent 的终止条件里加了三层保险目标达成的判断由独立的“输出评估器”检查最终答案是否已经覆盖用户目标轮数硬上限不管如何最多 12 轮必须停止Token 预算软上限达到预算的 80% 时强制压缩历史并进入总结模式最后一条经验Agent 系统上线前一定要做“熔断测试”——故意把 Prompt 写模糊让 Agent 乱跑看熔断机制能不能及时拦住。这个测试我建议每个项目都做因为它保护的是你的钱包。5.3 坑三工具调用失败被无限重试系统雪崩服务上线后的某天外部报价服务出现异常响应时间从 300ms 飙升到 30 秒。结果 Agent 里的重试机制开始疯狂触发每次失败都重新发起调用多个用户的请求叠加直接把下游服务打垮了连带其他模块一起雪崩。排查链路查看 Agent 日志发现大量“timeout-retry”记录然后发现重试逻辑没有退避策略更严重的是多个 Agent 实例共享同一个重试配置等于对下游服务发起了 DDoS。修复方案有两个关键改动重试策略改为“指数退避抖动”初始 1s最大 30s随机抖动 20%增加熔断器连续失败 5 次直接短路不再发起调用返回“服务暂不可用”的错误信息折腾完以后我对 Agent 工程化有了更深的理解Agent 的容错不能只围绕模型本身还要为所有工具依赖做好系统层面的保护否则模型再聪明系统也稳不了。5.4 坑四AI Coding 生成的代码和我预期不符怎么办有一次让 AI Coding 写一个“商品报价导出”功能生成出来的代码多了个“数据脱敏模块”还把报警逻辑写反了有异常时不报警没异常时报警。这个例子很典型——AI Coding 工具生成代码时经常会自行发挥把需求描述里没有的东西加进来或者对“负向逻辑”理解错误。我的处理流程是把生成代码和 PRD 逐条对一遍标出所有偏离点将偏离点直接作为修改指令发回给 AI Coding 工具“删除数据脱敏模块报警逻辑改为仅在异常时触发”修改后重新跑测试用例验证行为是否符合 PRD这一轮下来AI 生成的代码质量已经能接近“可审查的初级工程师代码”水平。但要记住最终交付前你需要人工做一次完整的代码审查尤其是工具调用、权限校验、数据处理这些安全敏感的模块千万不要直接上线 AI 生成的代码。6. 部署形态与后续扩展Agent 从 Demo 到生产环境Agent 写好、测完、坑也踩得差不多了剩下就是部署上线和后续演进。这部分内容相对轻松但有几个决策我觉得值得分享。6.1 离线任务优先先做安全的 Agent再做实时的 Agent很多团队一上来就想做“实时对话式 Agent”体验很好但对资源消耗、延迟和稳定性要求极高。我建议第一代 Agent 系统从离线任务型 Agent开始用户提交任务Agent 后台运行完成后通知用户。离线模式有很多优势不需要极低的延迟可以排队Token 成本可控可以在非高峰时段跑Agent 出错时不会直接影响用户实时体验有足够时间修复。等离线 Agent 稳定跑通以后再逐步升级到在线实时模式。我的报价查询 Agent 上线初期就是离线任务模式 邮件通知稳定运行两周后再接了实时的对话入口。6.2 多模态能力与垂直领域数据是后续扩展的方向Agent 的第一阶段通常只处理文本和工具调用后续扩展建议聚焦两个方向一是增加多模态输入图像、语音二是沉淀垂直领域的数据闭环。我自己的规划是先把工具调用能力补强接入更多内部系统和第三方 API再逐步把垂直业务规则固化到 Agent 的记忆层里。这一步看似平淡实则决定了 Agent 能否真正从“通用聊天机器人”变成“业务能手”。还有一点部署过程中最好分环境隔离。开发、测试、生产环境的模型 API Key、Agent 参数、工具配置都不应该混在一起。我经历过一次生产环境用了测试 Key 导致线上任务全部失败的事故之后就把隔离这件事写进了团队的部署规范里。7. 几点个人体会给准备上手的你AI Coding 和 AI Agent 的结合本质上是一次“开发范式的转移”。但我想强调一句话Agent 能不能跑通和你用什么 AI Coding 工具关系不大和你对任务的理解、对架构的选择、对系统的可观测性建设关系最大。以我这次的报价查询 Agent 为例AI Coding 帮我省掉的大概是 50%-60% 的“体力活”——脚手架、基础 CRUD、单元测试、文档生成。但剩下 40% 的功夫全花在需求梳理、工具语义定义、Agent 循环逻辑调优上这部分 AI 帮不了太多必须有足够深的业务理解和系统思维。我的最终建议是如果你现在刚开始接触可以从一个非常小的 Agent 做起比如“定时拉取数据并生成日报”用 AI Coding 快速跑通然后逐步加工具、加记忆、加反思机制。你会发现每加一层能力对工程化的要求就跳一个台阶。这条路走完你对 “AI Agent” 的理解会比看一百篇架构文章都要深。
返回列表