ARTICLE DETAIL

资讯详情

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

从零手写大模型Agent:核心循环、工具调用与部署实战

从零手写大模型Agent:核心循环、工具调用与部署实战 最近一段时间“大模型Agent开发”这个词在技术圈里几乎被刷屏了无论是群里讨论、社区分享还是招聘需求都绕不开它。但我也发现一个很普遍的现象很多人看了一堆论文解读和框架文档记住了一堆名词真到自己动手写一个Agent的时候反而不知道第一行代码该怎么敲。这篇博文就是我自己从零入门大模型Agent开发时走通的完整路径——不堆砌概念只讲从原理到落地、从选型到部署的实操过程。不管你是后端转AI、前端想扩展技能栈还是刚毕业准备进入这个方向只要能写基础Python这篇文章就能帮你把第一个Agent跑起来并且理解它为什么这么工作。1. 先把Agent是什么这件事搞清楚不然代码全是抄的很多入门的同学最容易踩的坑就是把Agent简单理解成“ChatGPT套了个壳”。这个理解不能说全错但它会让你在设计架构时走很多弯路。我建议你在动手写代码之前先花半小时想清楚Agent和传统AI应用之间那条分界线到底在哪里。1.1 Agent的本质一个循环而不是一次问答传统的LLM应用比如一个问答机器人、一个文本总结工具本质上都是“一次性处理”你传入一段Prompt模型返回一段文字流程就结束了。就算你做了很复杂的前端界面、加了很多Prompt模板底层交互模式还是“请求-响应”的单次回合。Agent则完全不同。它的核心是一个循环Loop模型输出内容程序解析这个内容如果发现模型想调用某个工具程序就执行这个工具并把结果返回给模型模型再根据结果生成下一步动作如此往复直到模型认为任务已经完成。这个循环才是Agent的灵魂而不是某个特定的模型或框架。我用一个生活化的类比来解释你让一个实习生去整理一摞发票。传统AI应用的做法是你写一段很详细的说明“请按时间排序、金额汇总、提取公司名”然后把发票扫描件塞给它它一次性给你一个结果。而Agent的做法更像是你雇了一个真的实习生你只说“把这摞发票整理好”他会自己打开票夹一张张看遇到看不清的数字会拿放大镜再确认发现有几张是收据不是发票会先分开放整理完还会列个清单给你检查。整个过程里这个实习生是在不断“看情况做决定”的而不是你预先给他写死每一步。这个区别解释了为什么Agent能处理复杂任务——因为它在执行过程中能根据中间结果动态调整自己的行为。1.2 一个请求在Agent内部的实际旅程我们拆解一次Agent从接收任务到输出最终结果的完整过程只有搞清楚这个你后面调试代码时才有方向感。整个流程包括四个阶段感知、规划、行动、反思它们在一个循环里反复进行。先说感知。用户的任务不会自动变成模型的输入你要做的事情包括决定哪些信息进入System Prompt、当前对话历史保留多少、外部检索到的资料要不要拼进上下文。很多人忽略这一步直接把所有信息一股脑塞进模型结果Token爆炸、模型注意力被稀释后面出了问题都不知道怎么排查。规划阶段是这个循环里最有意思的部分。模型根据当前上下文输出它的“想法和计划”可能是一段自然语言推理也可能是一组结构化的JSON指令表明某个函数是否要调用、调用时传什么参数。在经典的ReAct模式里这一步就是模型显式地输出“Thought”和“Action”。行动阶段是Agent与外部世界产生交互的地方。程序解析模型的输出按照约定调用真实的函数查数据库、请求API、执行Python代码、搜索网页等。这里有一个非常关键的细节工具执行是Agent自己不能控制的它只能生成“调用指令”真正执行的是我们的代码。最后是反思。工具返回的结果会作为一条新的系统消息或用户消息拼回对话历史模型看到这个结果后决定下一步怎么做。如果结果符合预期它就输出最终回复不符合它就调整计划再次进入循环。1.3 为什么Agent是这两年才火起来的很多人会问LLM已经发布好几年了为什么Agent的概念直到现在才被大规模讨论在我个人看来最核心的引爆点是Function Calling函数调用能力的成熟。早期GPT-3.5时代想让模型调用工具只能靠Prompt引导它输出特定格式的文本再自己写正则去解析成功率很低稍微复杂一点的格式模型就乱了。到了GPT-4和后续国产大模型模型在训练阶段就被强化了“根据函数Schema输出结构化调用指令”的能力模型收到一组工具定义后可以直接生成一个包含函数名和精确参数的JSON对象。这一下子把工具调用的可靠性提升到了工程可用的水平。再往后长上下文、更便宜的Token价格、向量数据库的普及这些因素叠加起来才让“Agent可落地”这件事真正成为现实。所以你现在入门正好踩在了所有底层能力都具备的时间窗口上。2. 环境准备和框架选型决定你后面三个月的幸福感工欲善其事必先利其器。Agent开发的技术栈选择直接决定你的开发效率和项目可维护性。这一节我会结合自己踩过的坑从语言、框架、模型三个维度给出选型建议。2.1 开发语言怎么选Python是绝对的主流但不是唯一答案Agent开发生态目前是Python一家独大的局面。如果你去看LangChain、AutoGen、LlamaIndex这些主流框架的文档和示例代码90%以上都是Python写的社区里的最佳实践、各种工具的集成SDK也是Python支持最全。我自己认识的一些做Java后端的朋友转型做Agent时第一反应是“我用Java也能写”但实际做起来就发现每个工具都要自己封装很痛苦。做一个简单的对比Python生态最完善、框架支持最好、学习曲线平缓。缺点是性能一般、部署时依赖管理麻烦。适合绝大多数场景。TypeScript/Node.js如果你是前端团队成员都熟悉TS那用它也完全没问题。尤其是做浏览器端、插件类Agent产品时TS是自然选择。各大AI工具的TS SDK这两年也在快速补齐。Java企业级项目里常见尤其是需要和Spring生态深度集成的场景。但论AI原生开发体验Java确实不如Python顺滑很多第三方库的封装质量也参差不齐。Rust高性能、极低资源占用适合做轻量级推理网关、嵌入式计算设备上的Agent Runtime。但开发效率低适合对延迟和资源极其敏感的项目不属于入门首选。我的个人建议是如果是自学入门或做产品原型直接用Python。等你把核心逻辑跑通了、验证了产品价值之后再根据性能需求用Go或Rust重写核心链路也不迟。不要一上来就搞语言层面的性能优化那是把时间浪费在了错误的地方。2.2 框架选型一句话结论别被“框架焦虑”绑架现在市面上的Agent框架非常多LangChain、LangGraph、AutoGen、CrewAI、LlamaIndex以及国内的一些新框架每个都有大量教程很多人陷入“选择困难症”。我用一张表帮你快速建立判断基准框架核心理念适合场景我的使用感受LangChain模块化组件Chain为主快速搭建RAG、基础LLM应用抽象层次多入门时容易“知其然不知其所以然”LangGraph图状态机显式控制循环需要精细控制Agent流程、分叉、条件的项目比LangChain清晰适合有状态的多步骤AgentAutoGen多Agent对话式学术研究、多Agent仿真、群体协作调试起来比较考验耐心自由度太高时反而难控制CrewAI角色化多Agent想以“团队分工”的方式管理多个Agent上手快但深入定制时会感觉受限于框架约定不用框架自己写主循环Function Calling想真正理解原理、或者Agent逻辑很简单我最推荐的入门方式下一节详细讲我不太建议一上来就直接上框架。原因很简单框架帮你解决了80%的重复劳动但它同时也是一个黑盒你在调试Agent不按预期工作时会被框架自身的抽象层挡住了视野。我自己的路径是先手写一个最小循环跑通之后再去读LangGraph的源码这时候看源码的理解深度和直接拿框架用的同学完全不同。2.3 模型选择云API还是本地部署用哪个模型模型的选择在入门阶段同样关键。先说结论入门阶段优先用云API等你的Agent逻辑稳定了、对成本和隐私有了明确要求后再考虑本地部署。云API的优势在于不需要GPU资源、模型能力天花板高、工具调用和长上下文等特性都很成熟。我平时用得比较多的几个选项包括OpenAI的GPT-4系列工具调用最标准、Anthropic的Claude系列长文档和代码理解很强以及国产的Kimi、通义千问、DeepSeek等它们的API价格更低很多还有免费额度对学习者非常友好。如果你的场景要求数据不出内网、或想长期控制成本可以走本地部署路线。当前开源模型性价比很高的选择是通义千问的Qwen系列和Meta的Llama系列用Ollama或vLLM都能比较方便地做单机部署。一台A100或4090就能跑一个不错规模的模型配合本地向量数据库可以支撑小团队内部工具级别的Agent应用。我们的经验是本地部署模型要特别注意一个容易被忽视的点——不同模型对Function Calling的支持质量参差不齐。有些开源模型虽然声称支持工具调用但生成的参数JSON经常顺序不一致、字段名发飘。如果你准备用本地模型做Agent一定先用一个稳定的测试集把工具调用的准确率测一遍再来谈业务搭建。3. 手写第一个最小Agent不依赖框架一行行把核心循环敲出来这一节是整个博文最核心的部分。我会带着你写一个不依赖任何框架的最小Agent它的全套运行逻辑只有几十行代码但包含Agent的全部关键环节。相信我亲手写完这个循环之后你对Agent的理解深度会远超那些直接看LangChain文档的同学。3.1 最小循环让模型自己决定何时结束我们先明确我们要实现的Agent行为用户提出一个任务模型可以选择调用计算工具也可以直接回答。这个过程循环执行直到模型不再请求工具。我是用的Python调用OpenAI API来演示但其实逻辑是完全通用的换成任何支持Function Calling的模型都成立。核心代码如下from openai import OpenAI client OpenAI() def add(a, b): 简单的加法工具 return a b # 工具定义告诉模型“你可以调用什么函数、参数是什么格式” tools [ { type: function, function: { name: add, description: 计算两个数字的和当你需要做加法时使用, parameters: { type: object, properties: { a: {type: number, description: 第一个加数}, b: {type: number, description: 第二个加数} }, required: [a, b] } } } ] def run_agent(user_input, max_iterations5): messages [{role: system, content: 你是一个计算助手可以调用工具完成任务。}] messages.append({role: user, content: user_input}) for step in range(max_iterations): response client.chat.completions.create( modelgpt-4o-mini, messagesmessages, toolstools, tool_choiceauto, # 让模型自己决定是否需要调工具 ) message response.choices[0].message if message.tool_calls: # 模型决定调用工具我们在这里执行工具 messages.append(message) # 先把模型这条消息放进历史 for tool_call in message.tool_calls: # 拿到函数名和参数 JSON fn_name tool_call.function.name args json.loads(tool_call.function.arguments) # 把参数映射到真实的 Python 函数 if fn_name add: result add(aargs[a], bargs[b]) else: result f未知工具: {fn_name} # 把工具执行结果作为一条 tool 消息放回历史 messages.append({ role: tool, tool_call_id: tool_call.id, content: str(result) }) else: # 模型不再调用工具输出最终回答循环结束 return message.content return 达到最大迭代次数任务未完成。这段代码的核心逻辑就三件事循环里把模型输出追加到消息历史检测到工具调用就执行并把结果回填模型停止请求工具时就返回答案。你注意看第4行我给循环加了一个max_iterations限制这是非常关键的一个工程兜底——在真实项目中你永远要假设模型可能会陷入无限循环所以必须设置上限。我用一个具体的执行过程帮你理解这段代码的内部流转。假设用户输入“计算123乘以4再加56”完整的一次循环是这样跑的第1次调用模型模型收到用户问题后决定先调用add函数计算123加4生成一个tool_calls结构程序解析后执行了add(123, 4)得到127把结果放回历史。第2次调用模型模型看到了计算结果127决定再调用add(127, 56)执行得到183。第3次调用模型模型看到了最终结果183确认这就是最终答案不再请求工具直接输出“结果是183”。通过这个简例你应该已经理解了“循环”二字的分量。模型其实并不知道自己的计算步骤具体是怎么执行的它只是不断发指令、查看结果、再发指令整个过程的“行动”都由你的程序代劳。3.2 给Agent加记忆上下文不是一个无限大的口袋第一个示例里我们把每一步的模型回复和工具结果都追加到messages里这就是最简单的“短时记忆”。但真实场景下你会立刻遇到一个问题对话变长以后Token成本飙升而且模型可能被淹没在历史里忘了最开始的任务。你不需要一开始就上复杂的记忆架构。我建议你先采用一个非常朴素的策略固定上下文窗口只保留System Prompt和最近的几轮消息。伪代码如下def trim_history(messages, max_rounds5): system_prompt messages[0] recent messages[-max_rounds * 2:] # 每轮包含user和assistant两条 return [system_prompt] recent这个策略的思维起点很简单越近的消息对当前决策越重要早期历史里就算漏掉了一些细节影响也不大。如果你发现截断历史会导致Agent“失忆”再去考虑做历史摘要或接入长期记忆原理我会在第4章展开。对入门来说先活下来再考虑活得舒服。3.3 工具的输入输出设计定义Schema时最容易踩的三个坑手写Function Calling的时候踩坑率最高的就是工具定义这一环我建议你从一开始就注意三个问题。第一个问题是函数名和参数名要写成人话。模型是靠名字和描述来理解工具的你如果写一个函数名a3b9_process、参数叫p1模型压根猜不到这是干什么的反过来你用语义化的名字加清楚的描述比如“calculate_shipping_fee”配上“根据省份和重量计算快递费用”模型的工具选择准确率会明显上升。这个规律我测试过很多次工具描述写得越细选错工具的概率越低。第二个问题是参数尽量扁平化。试想你的工具需要一个嵌套的配置对象模型要生成一个复杂JSON才能调用它出错的概率会指数级上升。我见过的成熟方案都是把参数拆成平铺的多个字段实在需要结构时宁可在程序里做二次组装也不要让模型直接生成复杂嵌套结构。第三个问题是一定要返回能被模型读取的结果字符串。工具函数的返回值如果是一个复杂对象你需要在返回前做序列化把对象转成简洁的JSON字符串。更重要的是你可以在返回内容里附带一些模型便于决策的信息比如“操作成功当前库存余量为5”这相当于帮模型做了数据预处理比让它从原始数据里自己判断要稳定得多。4. 进阶的三个关键技术点规划能力、持久记忆和多智能体协作跑通最小Agent之后你自然就会想怎么让Agent完成更复杂的任务怎么让它记住不同会话之间的事情怎么用多个Agent配合解决一个大问题这一节我会按照我自己的进阶顺序来讲解每个技术点都给出可直接用的方案。4.1 ReAct模式让Agent“边想边做”的提示词工程前文提到的最小循环其实已经暗含了ReAct的思想但真正的ReAct模式会要求模型在每步中显式输出两个部分Thought为什么做这个决策和Action具体执行哪个动作。这种做法的好处是让模型的决策过程变得可解释你从日志里就能看出来它每一步都在想什么排查问题比直接看工具调用结果要高效得多。实现ReAct的方式就是调整System Prompt并不需要改代码。我自己常用的模板如下你是任务执行助手。你的工作流程是明确目标 - 拆解步骤 - 逐步行动 - 最终总结。 每轮输出格式 Thought: 这一步我打算做什么以及为什么 Action: 需要调用的工具名如果不调用工具则写 Final Answer Action Input: 传给工具的JSON参数你让模型严格按这个格式输出程序再按格式解析这样就把不可见的模型决策变成了可见的推理记录。这不仅是用于提示还能为后面的日志监控打基础这一步投入的时间我认为非常值得。4.2 长期记忆把重要的信息存进向量数据库对话记忆解决的是“同一会话内的短时记忆”而长期记忆解决的是“跨会话的持久知识”。例如一个客服Agent它需要记住用户上次买过什么产品甚至记住用户偏好的沟通语气这就要靠长期记忆了。工程上最常用的方案是双轨把用户的基础偏好和事实存成结构化记录放在普通的数据库表里把大量非结构化的历史对话经Embedding处理后存入向量数据库在需要时做相似度检索后拼进上下文。你可能会发现这套组合跟RAG很像实际上长期记忆的设计思路确实和检索增强生成RAG有共通之处区别只在记忆的更新频率和写入来源。如果你不想为了入门去专门部署一套向量库我建议可以先用轻量级的方案磨合业务逻辑用SQLite存结构化信息用Session记录关键信息抽取模拟长期记忆。也就是对话结束时把模型“记住用户偏好”这件事作为Agent的一个动作让它自己把重要信息提取成结构化记录存进去。等数据量真的大了再平滑切换到向量数据库。4.3 多Agent协作编排和自由对话两种路线怎么选多Agent不是多个Agent复制粘贴那么简单。当任务复杂度超过了单个Agent的能力时分解角色往往比塞给一个Agent更有效。实际开发中我常用两种模式编排模式和自由协作模式。编排模式也有叫“Supervisor模式”的意思是有一个主管Agent负责把大任务拆解成子任务分发给不同的专项Agent每个Agent完成自己的部分后把结果交回主管汇总。这个模式的结构清晰、可控性强、每一环都能单独测试和修bug适合工作流相对固定的业务场景。如果业务是“给用户一个定制化报告”你可以让“信息收集Agent”负责查资料“数据分析Agent”负责做统计“报告撰写Agent”负责润色成文主管负责调度。自由协作模式则更像个开源社区多个Agent围在一起讨论同一个问题各抒己见通过对话收敛出结论。AutoGen就是这类思路的典型代表。这个模式适合开放性强的任务比如头脑风暴、多角度分析但缺点是输出结果不确定性高、收敛慢你调试它的时候会感觉像在管理一群性格迥异的同事。给出一句话选型建议入门阶段不要碰自由协作模式。先把编排模式吃透因为它本质上就是“一个中心化的循环多组工具”。等到你发现单个Agent确实无法覆盖所有技能时再以编排模式为基础逐步引入多个角色Agent这个演进路径会让你的系统始终保持稳定。5. 常见问题排查实录我把入门阶段踩过的坑全列在这里研究完原理、写完第一个Agent之后真正折磨人的是调试阶段。Agent不是传统软件它的行为是概率性的——同样一段代码这次跑通了下一次可能就失败了。这一节我梳理了入门阶段最高频的几类问题和对应的排查方案每一类都是我自己或身边同事实际踩过的。5.1 Agent陷入死循环不退出怎么办这是Agent开发里最经典也最让人头疼的问题。现象是Agent一直在重复调用同一个工具或者在不同的工具之间来回切换就是不输出最终答案。我排查过很多次主要原因通常是三类工具返回给模型的信息不足模型下一步无从判断只能反复尝试任务的终局条件不清晰模型不知道什么情况算“完成”System Prompt里没写“你已经可以获得答案了就停止”。我给出的工程解法是三层保险。第一层是代码层设置max_iterations硬性拦截这个不能少。第二层是在提示词里写明“如果你已经收集到足够答案请直接给最终结论不要过度调用工具”。第三层是给工具调用设置“幂等检查”让程序在检测到短时间内对相同参数反复调用同一函数时输出一条提示给模型“你已经执行过这个操作了基于已有结果直接回答吧”。三层叠加之后死循环概率可以降到很低。5.2 Token消耗暴涨成本控制不住一个Agent跑一个任务可能来回调用模型几十次每次都要拼上全部历史Token开销自然不低。我印象很深的是有个同学刚接了一个2000行的项目文档让Agent改结果每轮工具调用都把全部文档拼进上下文单次任务烧了几百万Token。控制Token消耗的核心手段是减少拼入上下文的冗余信息。具体做法有几个工具返回结果做截断和摘要只返回和任务相关的字段历史消息按轮次裁剪并自动总结早期对话拆分任务让Agent分阶段处理不要试图让一个Agent看完所有资料。我们实际测试下来在效果大致不变的前提下把这些策略组合使用能把Token成本降低一半以上。你也可以在每条工具的返回结果里额外加一个token_warning字段当返回过长时让Agent主动请求摘要工具来压缩相当于让Agent自己学会控制成本。这是一种比较进阶但非常实用的模式。5.3 模型经常生成格式错误的工具调用参数原因我说过模型对复杂参数结构的解析能力有限参数嵌套越多越容易出错。典型场景是工具Schema里写了一个多层嵌套对象模型每次都给你少写一个字段或者顺序颠倒。这里建议你把工具定义想象成“给一个不太聪明的同事写操作说明”——能拆成两步就不写一步写作要直白。把嵌套参数扁平化把枚举值全部列出来在描述里给出具体示例。如果这些还解决不了加一个基础的JSON Schema校验逻辑校验失败时不要把错误直接抛给用户而是把错误信息翻译成“参数格式不对请重新生成”提示再送回给模型让它自己修正一遍。这个“纠错重试”机制能救回来不少失败案例。5.4 Agent“工具选错了”该从哪里看起模型明明能做加法却去调用乘法工具这种工具选择错误排查起来最费神。我的排查路径通常是从三个方向入手先检查工具描述是否足够具体有没有包含使用边界、数据格式和“什么时候不要用这个工具”的说明然后检查返回结果是不是不同工具的返回格式太像了导致模型误解当前状态最后再确认模型本身是否支持工具调用以及当前温度参数设置是否过高——温度太高会让模型的决策随机性变大。要说明的是这类问题没有一劳永逸的解法本质上是提示词工程加上一些产品层的约束。我的经验是建立一个固定的工具调用测试集每次改动工具定义就自动跑一遍回归出问题就走上面的方向排查。这个动作虽然初期需要投入一点时间但能让你在后期新增工具时心里有底。6. 部署上线与安全护栏Agent从演示到生产的关键一跃很多初学者写出来的Agent在本地跑得很好最终却上不了线因为生产环境比本地多了一堆麻烦事并发、安全、可观测性、依赖管理、成本控制等。这一节我重点讲安全、可观测性和部署选型三个我认为最关键的环节。6.1 安全和权限让Agent“能做但不能乱做”Agent最大的隐患在于它获得了调用外部工具的权限而权限一旦失控后果不堪设想。当你的Agent能访问邮箱发送邮件、能操作数据库、能调用支付接口时一个被恶意Prompt注入的Agent可能会执行危险操作。在开发环境中这类风险不容易暴露但在生产环境里这是安全事故的高发点。第一条防线是工具的最小权限原则任何工具默认拒绝只有在白名单里批准的示例才放行。敏感操作如删除、提现、批量修改必须经由人工审批流程上还应该做二次确认。第二条防线是输入校验所有用户输入和外部工具返回的数据在拼进模型上下文前先过滤危险指令把“忽略之前指令”这类Prompt注入模式提前拦截。第三条防线是审计Agent每次工具调用的参数、结果、触发源全部留痕方便事后追查。入门阶段你不用把企业级安全方案全做上我建议你至少做到两件事一是工具执行的敏感操作加一个require_confirmationTrue参数程序发现需要确认的操作时先返回给用户确认再真正执行二是在Prompt里明确告诉模型工具结果的来源让模型区分“用户指令”和“来自网页的不可信内容”这两种内容的信任级别应当分开。6.2 可观测性没有日志的Agent相当于盲人骑瞎马普通软件的日志一般是围绕请求和异常来打的Agent的日志则完全不同因为它的执行路径是动态分支的。调试一个Agent时你需要知道的是它在每一轮看到了什么消息、它在思考什么、它调用了哪个工具、参数是什么、结果是什么、为什么它没在这个工具返回后收敛。我的做法是给循环里的关键节点打结构化日志每一步都把thought、tool_call、tool_result、token_usage记录下来并写入同一个trace_id标识的任务上下文。然后对这些日志做简单的统计分析比如平均每轮工具调用次数、失败率最高的工具、Token消耗的趋势找到瓶颈后再优化提示词或工具设计。你也不用一开始就接完整的OpenTelemetry体系最简单的方式是用Python的logging模块按JSON格式输出日志先保证能回溯后面再平滑升级到链路追踪工具。6.3 部署方案从跑通到稳定按场景选路线最后说说部署。如果你只是做个Demo或内部工具最简单的方案是直接写一个基于FastAPI的服务把Agent的主循环包成异步接口配合一个简单的任务队列——注意这里有一个关键点因为Agent单次运行耗时可能几十秒甚至几分钟不能做成同步阻塞请求正确做法是提交任务后通过WebSocket或轮询获取进度。如果面向生产环境的高并发场景建议把Agent的“路由层”和“执行层”分离。路由层负责鉴权、限流、负载均衡执行层用Celery或消息队列把任务分发给多个Worker每个Worker跑一个Agent实例。模型API的重试和降级机制也要提前想好比如主模型不可用时自动切到备用模型。基础设施无论怎么搭都要记住一条原则Agent的运行时间比常规API长得多架构设计必须围绕异步、队列、水平扩展来展开。我和团队在实际开发Agent项目时最深的两个体会是第一Agent的开发模式和传统后端差异很大调试工作要习惯从“确定性逻辑”切换到“概率性协作”的思维方式第二初期一定别过度设计先用最简单的方式把核心闭环验证掉真正有用户需求后再逐步加框架、加多Agent、加复杂记忆。这一行变化太快但底层的那条“循环”永远不会变——理解它、掌握它你就能在任何框架出现消失之后都能快速适应新的生态。
返回列表