我觉得这道题本质上问的是,怎么让一个大模型从只会聊天对话,变成一个能真正动手解决问题的[[智能体]]。核心就是给模型加上规划、工具和记忆这三个能力,形成一个感知、规划、行动、记忆的闭环。
我先说规划模块。它的任务是把一个复杂目标拆成可执行的小步骤。常见的有几种做法:[[Chain-of-Thought]] 就是让模型一步步推理,适合那种路径比较明确、不需要太多探索的任务,比如算个简单的数学题。[[ReAct]] 更灵活一些,它让模型推理和行动交替进行,想一步做一步,做完看结果再想下一步。而 [[Tree-of-Thoughts]] 就更强了,它同时探索多条路径,像下棋时评估不同走法,适合需要全局搜索的复杂问题。但落地的时候,我一般不会只用一种。比如做一个客服退款 Agent,简单场景用 CoT 就够了,但一旦遇到商品状态异常、需要查物流和库存价格,我就会上 ReAct,让模型动态决定先查哪个系统。ToT 成本太高,通常只在策略类场景才用。
再一个是工具调用模块。这个说白了就是模型通过 [[Function Calling]] 输出一个结构化的 JSON,告诉系统要调什么函数、传什么参数,系统执行完再把结果喂回去。这里有个常见的坑:模型可能会幻构出根本不存在的函数名或参数,尤其是参数类型或范围容易错。所以上线前一定要做参数校验和 schema 约束,不能完全信任模型的输出。另外,工具返回的结果格式不稳定,模型可能会误解,所以我会在 prompt 里明确告诉它每个字段的含义。
记忆模块我分两种。短期记忆就是当前对话的上下文,直接塞进 prompt 就行。长期记忆就复杂一点,需要把历史对话、用户画像、领域知识存到 [[Vector Database]] 里,通过 [[RAG]] 检索出来。这里有个取舍:短期记忆受限于上下文窗口,太长会稀释注意力;长期记忆依赖检索质量,如果检索不准,反而会引入噪声。所以我会把关键信息放在短期记忆里,辅助信息走长期记忆。
举个例子,用户问“深圳明天天气怎么样,适合穿什么”。Agent 先思考,然后调用天气 API,拿到结果 25 度、多云有雨。接着它根据这个观察再思考,有雨要带伞,温度适中穿薄外套。最后回答。整个过程就是 ReAct 循环。
这里我多说一句,其实很多复杂任务需要多个 Agent 协同,比如一个负责规划,一个负责工具调用,一个负责记忆管理。但多 Agent 的通信和一致性成本很高,不是所有场景都划算。
所以我的整体看法是,Agent 不是一个固定的架构,而是一套组合能力。我更倾向于根据业务场景灵活搭配,把规划、工具、记忆看成可插拔的模块,而不是一个黑盒。上线前我会特别关注工具调用的错误处理、长期记忆的检索质量,以及 ReAct 循环会不会死循环。这些点踩住了,Agent 才能真正稳定落地。