资讯详情

从聊天到干活:拆解MANUS式智能体架构与最小实现

📅 2026/10/21 8:31:00 | 华诺云谱 👁 阅读
从聊天到干活:拆解MANUS式智能体架构与最小实现
最近一年大家都在讨论一个变化AI不再只是聊天框里的“嘴替”而是开始真正上手做事。前阵子圈子里不少人在传一个叫MANUS的智能体系统案例说它能把大模型从“会聊天”变成“能干活”。我花了不少时间把一个类似架构的开源工程吃透又做了两轮二次改造今天这篇不聊产品名字只聊原理把我理解到的MANUS式智能体工作机制一次讲明白。如果你做过对话机器人或者正在纠结“大模型接入业务系统到底怎么接”这篇内容适合你。我会从“聊天”和“干活”的本质差异开始拆解智能体的整体架构、核心工作流、记忆系统再给一套最小可复现的代码骨架最后把我踩过的坑整理成速查表。全程不堆名词按“为什么要这么做”来讲。1. 先搞清楚聊天机器人和“能干活”的智能体差在哪很多人以为给聊天机器人加几个API接口就是智能体了实际差得远。聊天机器人输出的是“文本答案”智能体输出的是“行动结果”。前者到“你说完了”就结束了后者要到“事办完了”才算完。1.1 从“说”到“做”的关键跨越聊天场景里模型读完用户问题在上下文窗口里生成一段话直接返回就算完成任务。可“干活”不一样。用户说“帮我把最新一期的行业报告整理成PPT”模型如果直接吐一段文字那这件事根本没办成。真正要办成至少需要查资料、读文档、提炼要点、生成PPT文件、存到指定位置。这里面每一步都是一个“动作”每个动作都要依赖外部工具或系统每执行完一步还要看一眼结果对不对再决定下一步怎么走。这正是“干活的AI”和“聊天的AI”的分水岭模型能不能在一个多步骤任务里持续决策、调用工具、观测结果、修正动作。这不是模型变聪明了那么简单是外部多了一层“执行闭环”的架构把这个闭环补齐了模型才从“嘴巴”变成了“手脚”。1.2 聊天模型为什么“干不了活”单靠一个聊天模型很难干活原因有三个层面。第一模型天然没有“行动接口”。它不会打开浏览器不会写数据库不会发HTTP请求。它只会生成字符串。想让模型“干活”你必须给字符串赋予可执行含义让模型可以输出“我要调用某个工具传什么参数”再由外部程序去真正执行。这是聊天模型不具备的协议层。第二上下文是瞬时的。聊天结束后对话记录就停了模型没有“任务进行到这里了”的持续状态。干活需要状态哪些步骤做完了哪些产物生成了哪些分支失败了。这些状态必须由外部系统维护不能指望模型只靠一个深度有限的上下文硬扛。第三模型会一本正经地胡说。聊天说错一句话可能只是受点嫌弃干活的场景里模型说错一句话就可能导致报错、数据污染甚至更严重的问题。所以干活型AI必须有一层“执行校验错误反馈”机制让模型能看见实际执行结果而不是靠猜。1.3 MANUS这类智能体到底干了什么MANUS架构做的事可以概括成一句话把大模型从一个“内容生成器”改造成一个“任务执行器”。它的核心不是某个单独的模型能力而是一整套外部配套包括任务规划器、工具注册表、执行沙箱、记忆库、反思模块和可观测日志。用大白话说以前你请了个“顾问”他只管动嘴现在你请了个“员工”他不光会动嘴还有手有脚做事有流程做完还跟你回报。MANUS这类智能体做的工作就是把“员工”需要的办公桌、电脑、资料柜、工作台账全部搭好让模型这只“大脑”能坐进来办公。有个比喻我很喜欢聊天模型像一位只有“言论自由”的博主智能体则像配备了一整间办公室的团队大脑负责下指令工具层负责动手状态层负责记账反思层负责复查。理解了这层后面所有技术细节才有落点。2. MANUS整体架构三层结构把大模型变成“工作者”我见过不少团队做智能体第一版往往很简单给模型发一个Prompt模型输出内容程序拿到内容去调API。这种方案跑通一两个演示还行一上真实任务就崩。因为它缺少分层把“感知”“决策”“执行”“存储”全部挤在一个循环里没有独立模块出了问题都分不清是哪一层的事。MANUS这类架构给我的启发是它把系统拆成了三个清晰的层次。2.1 认知层大模型和它的“思考工具”认知层是最上面的一层负责理解、拆解、决策和表达。它通常由一个基座模型加一套提示模板组成还可能挂上一些推理增强组件。比如让模型先“想”再“说”或者让模型在多个方案里做选择。这一层并不直接执行工具它只产出一个结构化结果要么是“我下一步要调用某个工具参数是什么”要么是“任务已完成我来回答用户”。为了让模型稳定输出这种结构化结果现在的主流做法是让模型走函数调用协议function calling模型在训练阶段见过很多“调用工具”的样本推理时就可以从一个候选工具列表里挑一个并生成符合参数要求的JSON。我的实操建议认知层的Prompt要尽量把“工具列表、执行边界、输出格式、失败时的处理策略”都写清楚。不要只写“你是智能助手”要写“你可以使用以下工具工具名单如下必须按JSON格式调用。如果找不到合适的工具请直接回复不知道禁止自己编造参数”。这些约束看起来简单实际对后续解析的成功率影响巨大。2.2 执行层工具不是“接口”而是“能力单元”执行层是智能体的手脚包括一切可以被调用的外部能力代码解释器、浏览器模拟、数据库查询、文件读写、第三方服务API、定时任务、数据图表生成等。关键点是工具不能随随便便挂上去。每个工具都要有明确的“元信息”能干什么、不能干什么、输入参数是什么样的、返回结果长什么样、会不会改变外部状态、失败时会抛什么错。我见过很多翻车事故根本原因是工具说明写得含糊模型理解错了工具用途于是拿着搜索工具去算算术或者拿着写入工具去干只读的事。为了让模型准确理解工具工具描述要像“给新同事写的岗位说明书”而不是“给机器写的接口文档”。要写场景举例说明“这个工具适合在用户想查找商品时使用它接收关键词和页数返回商品列表不负责下单。”描述越贴近业务语言模型选工具的准确率越高。执行层还有一个隐形需求隔离与限额。工具要跑在沙箱里限制网络权限、磁盘写入范围、内存占用和调用次数否则模型一旦误判指令可能把整个宿主环境搞乱。真实生产里代码解释器我都是放在容器化隔离环境里跑的文件系统只暴露一个临时目录给Agent使用。2.3 控制层让整个流程“可控可管可复盘”控制层是很多人忽略的一层却是MANUS这类系统真正成熟的关键。它的职责主要有四个一是维护任务状态机。任务从“创建”到“执行中”到“待确认”到“完成”到“失败”每一步都在状态机里有记录。二是做步骤调度。多步骤任务往往有依赖关系第2步依赖第1步的产物控制层要负责做这种流程编排而不是全扔给模型自发穿插。三是做资源预算控制比如限制总调用次数、限制总token消耗、限制运行时长。四是记录全量日志模型每次决策、每个工具的输入输出、每一步的耗时全部留档。没有控制层的智能体就像没有项目经理的团队每个人都很能干但没人排期、没人验收、没人兜底。我见过一些团队在演示时看起来很炫一问“如果某一步执行失败会怎样”就答不上来——因为没有控制层处理回退和重试。MANUS式架构里控制层就是那个“项目经理”它的存在让智能体从演示品变成了可以交付的系统。3. 核心工作流从收到任务到交付结果的完整链路分层架构讲的是“房间布局”工作流讲的是“员工一天怎么干活”。一个标准的MANUS式智能体从收到用户请求到产出结果大概会经历下面这个链路。3.1 第一步任务接收与上下文打包用户进来的可能只是一句话比如“查一下X行业今年的市场规模整理成PPT”。这句话对模型来说信息远远不够。智能体要做的是把任务放进一个上下文包里系统指令、可用工具列表、用户画像、历史记忆、本次任务的附加约束、预期输出格式。这个“上下文打包”动作非常关键很多人不做这一步直接把用户原话丢给模型模型全靠猜。打包完不一定更重但信息密度完全不同。比如“PPT”这个词模型在聊天模式下可能理解成“写PPT文案”但在任务模式下你应该在上下文里明确“PPT文件需要生成到本机/云存储使用模板A每页不超过80字”。这样模型才知道干活的边界在哪里。实操中我会维护一套“任务上下文模板”不同任务类型填不同的槽位。比如调研类任务有“目标行业、报告时间范围、数据来源列表、输出格式”数据清洗类任务有“源表结构、目标结构、脏数据样例、幂等要求”。模板化节省了大量token也大大减少了模型跑偏的概率。3.2 第二步任务规划与步骤拆解模型拿到任务后会先生成一个“行动计划”不是直接闷头执行。这个规划过程借用了一个很经典的框架把复杂任务拆成子步骤每个子步骤对应一个意图并标注依赖关系。比如“整理行业报告”可以拆成搜索最近一年的行业报告关键词取前10条链接访问前5个链接提取正文内容对正文做摘要整理出市场规模、增长趋势、竞争格局三部分生成PPT框架填充内容并渲染文件校验文件是否生成成功。这个拆解动作可以让一个大任务变成一串小任务每个小任务都有明确终点模型不必一次性把答案算出来而是一步步逼近结果。规划还可以配合“计划-执行-反思”循环执行一部分后回顾一下“我是不是偏了”再修正后续计划。有两种主流做法一种是让模型在每次循环前输出“当前进度下一步计划”另一种是先把全量计划列出来再逐项执行。我的经验是复杂任务用后者更稳简单任务用前者更省MANUS这类系统通常两种都支持由控制层根据任务token量自动切换。3.3 第三步大模型-工具-大模型的循环这是整个曼努斯核心中的核心专业叫ReAct循环Reasoning Acting。我理解它就是一句话想一下做一下看一眼结果再想下一步。循环里的“看一眼结果”是最容易被忽略但最要命的环节。模型工具调用往往走“工具调用协议”即模型输出一个结构化指令比如“调用函数search参数是query‘行业报告’”程序接管这个指令真正执行工具调用然后把结果作为一条“工具返回消息”再喂回给模型。模型结合工具返回的真实数据决定下一步动作。这个循环跟聊天最大的区别在于模型说的每一句话都要被外部程序验证。它说“我已经查到了来源”系统就真的把来源信息抓回来然后在下一轮里让模型基于真实来源生成总结。也就是说模型不再凭空输出答案而是必须基于工具结果来输出答案这就极大削弱了“一本正经胡说”的风险。我在落地时喜欢把“大模型-工具-大模型”循环单独封装成Runner类每循环一轮就记录一轮的token成本、工具耗时、决策时长。示例代码如下class AgentRunner: def __init__(self, llm, tool_registry, logger): self.llm llm self.tool_registry tool_registry self.logger logger def run(self, task_context: str, max_steps: int 8): steps 0 messages [{role: system, content: SYTSTEM_PROMPT}] messages.append({role: user, content: task_context}) while steps max_steps: response self.llm.chat(messages, toolsself.tool_registry.schema()) messages.append(response.model_dump()) if response.tool_calls: for call in response.tool_calls: self.logger.info(f调用工具: {call.name}, 参数: {call.args}) tool_result self.tool_registry.execute(call.name, call.args) messages.append({ role: tool, tool_call_id: call.id, content: tool_result }) steps 1 continue final_text response.content if final_text: return final_text raise RuntimeError(超过最大步骤上限)这段代码只展示了骨架真实项目里还要补三样东西失败重试、中途容错、人类确认。注意每一次循环都把工具结果原样塞回上下文是为了让模型在“事实约束”下做决策而不是靠记忆自由发挥。3.4 第四步执行结果校验与收尾交付任务不能做完就跑MANUS这类系统在最后通常会有一层“结果校验”。校验分两层工具层校验比如文件是否真的生成了、数据库是否真的写入并返回了行数业务层校验比如生成的PPT是否包含标题、关键数据是否存在、摘要是否超过字数限制。有些系统还会启动一个“反思器”让模型自己审视一遍产出看有没有明显错误或遗漏再决定是否返工。这一步很像人类交作业前自己检查一遍没有校验的智能体是“做完就算”有了校验的智能体才是“做对才算”。在这个阶段我通常会把校验结果和最终交付物一起反馈给用户并给出“本次执行使用了多少步、调用哪些工具、耗时多少、消耗多少token”的完整台账。好的Agent不只是结果可靠过程可审计同样重要。4. 动手实现搭一个“最小可用MANUS”的四个关键模块原理讲多了容易飘直接上点能落地的。我建议想做智能体的朋友先不要追求豪华功能按下面的四个模块搭一个“最小可用闭环”跑通以后再加复杂度。4.1 模块一工具注册表设计工具注册表就是所有手和脚的通讯录。每个工具在注册表里有一条记录至少包含name、description、参数schema、执行函数、安全标签只读/写操作/走网络、超时时间。TOOL_REGISTRY { search_web: { description: 在互联网搜索信息接收关键词和条数返回结果列表, params: {query: {type: string, required: True}}, handler: search_web_impl, connector: read_only, timeout: 10 }, write_file: { description: 将内容写入本地文件接收路径和内容, params: {path: {type: string}, content: {type: string}}, handler: write_file_impl, connector: write, timeout: 5 } }设计要点是“安全标签”一定要有。写操作工具必须单独标记执行层根据标签决定是直接跑还是进入人工审核通道。我见过把“删除文件”和“搜索网页”放在同一权限级别的项目这是自杀式设计。4.2 模块二任务上下文与状态管理任务状态不等于聊天记录而是一份可以在每一步都查询的“工作台账”。我用一个字典保存goal、plan_steps、current_step、status、artifacts、errors。不断状态推进时控制层负责更新它。状态管理有两条铁律状态必须存在于Agent循环之外不能让Agent自己“记得”状态状态更新必须先于工具调用否则一旦崩溃就相当于没有记录。MANUS这类系统的稳定感主要就是靠这套状态台账撑起来的。4.3 模块三安全沙箱与权限控制工具不是裸跑必须沙箱化。我建议至少做到这三项一是文件系统隔离。Agent只能看到一个临时目录所有写操作只落在这个目录里外面的文件一律不可见不可写。二是网络访问列表。默认拒绝外网需要哪个域名再放行哪个。三是配额控制。单个工具最多跑多少秒单个任务最多调用多少次工具超了就强制截停。沙箱听起来麻烦但能救你无数次。我踩过一次很深的坑某个模型在连续执行多个查询后莫名其妙尝试调用一个系统路径操作工具如果不是沙箱拦截那个错误指令可能把一台临时服务器直接弄瘫。沙箱是智能体的安全气囊平时用不上用上的时候就是救命。4.4 模块四可观测日志与执行回放日志是智能体系统里最容易省但是最后追悔莫及的部分。我从一开始就坚持全量记录模型的每一轮决策原文、工具调用的入参和返回体、每一轮的消耗token数、每一步耗时、最终交付物路径。这些日志一方面用于排查问题另一方面用来复盘“是不是很多步骤白跑了”。日志格式我用JSON Lines按任务ID分目录每行一条事件。事件类型有agent_decision、tool_call_start、tool_call_end、state_change、error_raised。有了这份日志用户说“结果不对”的时候我能把整个执行过程拉出来回放看到底是模型拆错了还是工具报错把后续带崩了。这一点对生产环境的体验提升是质的。最小闭环搭完后再逐渐加入记忆系统、反思模块、并行工具调用、人工审批流。但请记住前面这条路没走稳之前别急着加花活否则出问题时排查会非常痛苦。5. 常见问题与排查我把踩过的坑整理成了故障速查表智能体的问题往往不像普通后端bug那么确定因为它多了一个“模型行为不确定”的变量。下面这些坑我基本都踩过整理成速查表按“症状-原因-解法”来写可以直接对照排查。5.1 工具调用格式不合法或频繁报错症状是模型偶尔输出非法的工具调用指令比如JSON缺括号、参数类型不对或者拿着不存在的工具名硬调。原因是基座模型在长上下文里对格式约束的保持能力会衰减。解法有几个一是把工具参数设计得尽量简单能用一个字符串就绝不用嵌套对象二是在系统提示里放一个“正确示例”和“错误示例”三是程序层做容错解析失败时不是直接崩掉而是把错误信息喂回模型让它重新生成绝大多数情况下模型会自我修正。5.2 上下文爆炸越跑越慢越来越贵症状是执行到后面模型响应越来越慢token越烧越多原因是每一轮的工具返回结果都在累积上下文只增不减。解法一是给工具返回体做截断只保留关键字段二是定期做摘要压缩把前面的过程总结成几句话再把详细历史移到外部存储三是设定最大循环轮数和token预算超了就强制停止进入人工接管。我比较推荐“截断中途摘要”组合可以在不影响质量的情况下把成本压到原来的三分之一。5.3 Agent陷入循环反复执行同一个工具症状是任务卡在某一步来回挣扎。原因是模型没有有效的“跳出机制”。解法一是记录最近N个工具调用的指纹如果一模一样连续出现3次以上控制层要介入并主动问大模型“你连续做了同样的事请说明原因或换一种策略”二是给每个工具调用加一个“结果不为空则不要强制重试”的逻辑三是对严重循环做熔断直接结束任务并把中间状态返回给用户欠着总比僵死好。5.4 幻觉导致选错工具症状是任务明明是查天气模型却调用计算器算了个数字。原因是工具描述不贴业务场景“经验不足”。解法工具描述要从业务语言而非接口语言写工具名也要有业务语义比如“get_weather_today”就比“api_weather_parse”友好得多此外在系统提示里把“哪些场景禁止使用哪些工具”写死能大大减少误选。5.5 结果校验缺失导致“做完”和“做对”是两回事症状是Agent说“完成”结果文件是空的或者数据库只有半条记录。原因是只校验了“动作发出”没有校验“动作结果”。解法每个工具返回时都要带状态字段在执行完之后增加一个“验收工具”主动检查产物完整度。我当时给一个数据处理Agent加了一个“生成后读取文件并统计行数”的自动验收步骤问题率直接从20%降到5%以下。5.6 真实生产部署的其他提醒生产环境里还有几件容易被忽略的事一是要给不同租户做数据隔离Agent的记忆和工具权限不能搞混二是所有写操作必须留审批痕迹尤其是删除、批量修改、跨系统写入三是模型版本升级后要重新跑一遍全量回归用例因为模型行为会因版本变化而漂移四是做好“人机协同”重要任务在关键节点上要有人确认比如“确认下单”“确认发送邮件”而不是让模型全自动完成一切。6. 成本、安全与效率生产化运营的几条经验一个智能体从Demo到生产最难的不是让它跑通而是让它稳定、便宜、安全地跑着。这一块我没有标准答案但有一些反复验证过的方法。6.1 成本控制别让模型重复劳动大模型是成本大头省token就是省真金白银。我的策略按优先级排列第一工具返回结果尽量短能返回ID就绝不返回全文第二相似子任务做缓存比如多次查询同一关键词第一次之后走缓存第三使用两个模型分层复杂规划用高性能模型执行简单操作时切换成轻量模型第四对定时类Agent任务设置每日预算上限超了就降级或者暂停。6.2 安全控制给智能体上四道锁第一道锁是用例权限每个Agent实例只允许访问它的业务需要的少数工具不开放全部权限。第二道锁是数据脱敏任何工具返回里的手机号、身份证、密码字段必须先清洗再喂给模型。第三道锁是人工审批手套高风险操作改库、删除、转账、对外发送消息必须走审批流。第四道锁是审计追溯所有决策日志保存至少60天必要情况下可重建当时的执行顺序。如果没有这四道锁Agent越能干越危险这不是技术问题而是管理问题。给模型越大的执行权力就要配越重的校验体系这是绕不开的权衡。6.3 效率优化并行调用和流水线化一个环节一个环节顺序执行确实很稳但也确实很慢。任务里有互相独立的子步骤时可以并行执行。比如“搜索三份资料”可以一次性发三个搜索请求而不是一个一个来。但并行也要注意依赖关系有依赖的步骤必须等前置完成。控制层里我会为每个任务维护一张DAG用“就绪队列执行中集合已完成集合”来调度。要注意的是并行确实省时间但不一定省钱因为多个工具同时返回大结果会快速撑大上下文。所以并行更适合数据量小、结果精简的任务。6.4 模型选型不要盲目追大很多项目一上来就用参数最大的模型认为“聪明就行”。实际生产里我更推荐“模型分级”规划类、反思类任务用复杂模型单步工具调用、信息提取、格式转换用轻量模型。比如“从一段HTML里提取日期”这种任务模型太大了成本浪费太小了容易出错测几轮就能找到平衡点。模型选型不要一步到位拿最典型的100个任务样例做回归测完再定。7. 把“会聊天”变成“能干活”的本质回到标题MANUS这类智能体的核心进化不是模型突然学会了所有工具而是外部系统把“意图-行动-反馈”闭环补全了。模型是大脑工具是手脚控制层是协调中枢记忆是资料库日志是作业本这五者缺一不可。我早年做聊天机器人时重心全在“怎么让回复更自然”做了智能体之后才意识到真正有价值的是“怎么让任务更确定”。聊天模型可以把话说满但“干活”必须留出校验和纠错空间。让AI干活本质上是在给AI搭“脚手架”搭得越完整它越不容易摔倒。最后分享一个我坚持了很久的小习惯给自己的Agent项目准备一套“最小验收集”哪怕只有20个任务也要覆盖搜索、写文件、调用API、失败重试、超时熔断这几种典型场景。每次改动架构先用这套验收集拉一遍过了再上线。别看这个小习惯简单它至少帮我拦下了十几次回归事故。如果你准备做自己的智能体系统我建议你先从这套最小验收集开始搭建而不是一上来就追复杂功能。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑