ARTICLE DETAIL

资讯详情

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

多人多AI协同系统架构设计:从消息总线到混合部署的完整实践

多人多AI协同系统架构设计:从消息总线到混合部署的完整实践 最近一直在做AI代理相关的系统设计有个很深的感触单代理的玩法已经不太够用了。你让一个Agent去查资料、写报告它能干得挺好但一旦涉及到多人协作、多任务并行、多个专业Agent配合问题立刻就不一样了。我这次要聊的项目是个偏研究的架构课题名字叫“基于AI代理代为交互的多人多AI协同系统架构研究”简单说就是研究一套能支撑多个人、多个AI代理同时在线、互相协作、共同完成任务的系统架构。这个课题的核心关键词就是AI代理、多AI协同、系统架构看起来是三个词其实拆开全是坑代理之间的消息怎么传任务怎么分谁来决定最终结果多个用户和多个Agent之间又怎么匹配如果你正打算搭一套多Agent平台或者已经在跑单Agent版本但发现扩展性跟不上这篇文章值得花十分钟看完。我会把整套架构的设计思路、关键取舍、落地原型和一些实测踩坑记录都整理出来尽量写得可复制少走弯路。1. 多人多AI协同系统到底在解决什么问题把问题看清楚了架构才不会跑偏。先说说我理解的场景传统AI助手是“一人一机”用户问一句Agent回一句。但真到了项目协作场景比如一个产品团队要出方案有负责市场分析的、有盯技术路线的、有抓成本预算的如果每个人各开一个Agent自己聊最后的结果很难拼到一起中间还会出现大量重复劳动和口径冲突。“多人多AI协同”要解决的就是这类问题多个用户共享一批AI代理资源代理与代理之间可以按规则交换信息任务能从一个人手里流转到另一个人手里Agent之间还能互相调用结论、接力完成复杂流程。说得再直白一点这就是把“一个Agent干活”升级成“一支Agent团队干活”然后让一支团队同时服务多个项目组。这个“多人”和“多AI”一旦叠起来架构复杂度的上升不是加法是乘法。1.1 从“单代理助手”到“代理团队”的演进很多人对AI代理的理解还停留在“一个会调用工具的大模型”。确实单代理的基本循环就三步接收指令、调用工具/检索知识、输出结果。这个循环单人单机跑起来非常顺市面上大量AI助手产品就是这么做的。但代理团队模式就完全不是一回事了。首先代理要有“身份”就是你在系统里得能分清楚谁是谁代码代理、文档代理、财务代理、运维代理每个代理的职责、权限、可用工具各不相同。其次代理之间要有“语言”A代理产出的结构化结果B代理能不能直接读懂并继续加工这涉及消息格式和协议约定。最后整体还得有“规则”多个用户在同一个系统里提交任务谁的任务优先代理并发冲突时听谁的我在设计初期犯过一个典型错误想直接把单代理的调用逻辑硬塞到多代理环境里。结果很快就发现你根本分不清一条报错是哪个环节出的——是用户的Prompt有问题还是某个代理内部工具调用挂了或者是代理之间传数据时格式丢了。所以说多AI协同不是单AI的简单叠加它需要一套专门的结构来管理和调度。1.2 多代理协同常见的三大坑第一个坑是“消息风暴”。代理数量一多如果每两个代理之间都直接互发消息请求量会爆炸式增长。比如5个代理两两互通是10条链路10个代理就是45条链路这还没算消息内容的转发和放大。解决思路可以参考分布式交换机系统架构里“核心集中交换”的思路让所有消息走一条总线代理之间不直接建立网状连接而是统一挂到总线上收发。第二个坑是“上下文割裂”。多人多AI环境下同一个任务可能被多个代理接力处理每个代理都带有自己的局部上下文。A代理分析完市场数据输出给B代理做技术方案B代理看不到A的原始数据和推理过程只能拿到一个结论那它很可能会基于不完整信息做错误决策。这个问题在设计阶段必须解决要么让消息带上完整的上下文切片要么给代理提供共享记忆区的读取权限。第三个坑是“责任真空”。任务一旦由多个代理协作完成出了错很难追责。用户看到的是最终结果但中间某一步某个代理产生了幻觉怎么定位我对这个坑尤其有感触后面写了一个“代理链追踪”的机制每个代理在接收任务时打上时间戳和来源代理ID所有中间结论都留痕这样回溯出问题时能精确锁定是哪一环跑偏了。1.3 协同系统架构的核心设计目标针对上面那些坑我给自己这套系统定了四个设计原则。第一是解耦。代理与代理之间不直接依赖统一通过消息总线通信这样新增一个代理不影响现有代理。第二是可观测。任何一条消息、任何一个任务的状态要能被追踪能在界面上看到任务走到了哪个代理手里。第三是弹性。用户数量、任务数量会波动系统要能扛住并发峰值不能因为某几个代理响应慢就把整个流程拖死。第四是安全隔离。不同的用户、不同的项目之间数据要隔离代理权限要可控不能出现A项目的Agent顺手就把B项目的资料读走了。这四个原则听起来抽象落到架构上就变成了三个核心模块消息总线、调度编排、权限与状态管理。接下来我就逐个拆开讲。2. 架构设计的关键拆解通信、编排与状态架构设计里最花时间的不是写代码是确定模块之间的边界。我现在的方案可以概括成一句话以消息总线为核心以调度器为大脑以共享状态库为记忆中枢。这个结构也是从分布式交换机系统架构里借鉴了不少思路控制平面与数据平面分离路由规则统一维护业务模块之间通过标准接口交互。2.1 代理间通信以“消息总线”为核心先讲通信层。我的设计里有一个叫“代理总线”的模块所有代理实例都注册到总线上总线维护一张“路由表”。这张路由表不记录代理的物理地址只记录代理的“能力标签”。比如“代码审查”、“市场分析”、“SQL查询”、“日志解析”。用户提交任务时调度器从总线拿到能力列表再把任务分发给匹配能力的代理。这个路由表的设计是核心它吸取了分布式交换机里“路由信息不再逐台维护而是集中同步”的思路。代理注册时上报自己的能力标签和负载状态总线定期广播路由表变更所有代理手里都有一份完整的“能力地图”。某个代理下线或过载总线马上更新路由表调度器下次分发自然绕开它。我在实际实现里给每个代理设了一个心跳机制每10秒上报一次状态连续30秒没上报就标记为异常从可用列表里摘除。代理之间传输消息也不是裸传大模型输出而是统一走一种结构化消息格式。每条消息自带几个关键字段消息ID、来源代理ID、目标代理ID或目标能力标签、任务ID、时间戳、正文内容和上下文引用编号。这样做的直接好处是消息可追踪、可过滤、可审计。坏处是写起来烦但你想想多代理并发跑起来以后如果没有一套统一格式日志里全是乱七八糟的JSON排查一次问题能把你逼疯。2.2 任务编排三种常用调度模式调度编排是多人多AI协同的另一个大头。我在实验里试了三种模式各有用处。第一种是“单主模式”所有任务先到一个主控代理手里由它拆解、分配、汇总结果。这个模式简单可靠适合任务链路短、职责边界清晰的场景比如“写一份会议纪要并提取待办事项”。缺点是主控容易成为瓶颈一个主控代理崩了底下全跟着停。第二种是“流水线模式”任务按照固定流程在多个代理之间流转。比如数据处理数据清洗代理 → 特征提取代理 → 分析代理 → 报告生成代理每个代理只处理自己的环节下一环节的输入是上一环节的输出。这个模式效率高但容错差如果中间某个代理处理结果格式不符合约定整条流水线就卡住。我的解决方案是在每个环节之间加一个“格式校验代理”专门检查上一个环节的输出格式不合格就退回重做。第三种是“黑板模式”这个是我比较推荐在研发型项目里用的。黑板模式简单理解就是多个代理不直接交谈而是共同读写一块共享“黑板”也就是共享内存区。谁有结论就往黑板上写谁缺依赖就从黑板读取任务不会因为某个代理没准备好就一直阻塞。这个模式特别适合多个Agent从不同角度分析同一个复杂问题比如市场、技术、成本三个方向同时开跑各自往黑板上写结论最后统一汇总。我在多AI协同里默认使用黑板模式因为它天然支持多人并发提交任务冲突概率低。2.3 上下文与状态管理共享记忆与私有记忆多人多AI协同最麻烦的其实是“记忆管理”。我把它分成两层共享记忆和私有记忆。共享记忆是一个全局状态库存所有代理都可以读取的中间结论、项目背景数据、决策记录。但读权限不是无条件的我在设计里加入了一个“最小权限读取”的约束每个代理只允许读取与自己的任务标签相关的记忆条目。比如数据分析代理只能读数据集和统计结论不该去读HR代理的记录。私有记忆属于单个用户或单个代理包括对话历史、个人偏好、敏感信息。私有记忆默认隔离只有用户显式共享给其他代理时才能被读取。这个设计不只是为了隐私也是为了减少无效上下文。大模型的上下文窗口是稀缺资源你把无关信息一股脑全塞进去不仅浪费token还会让模型生成质量下降。我在实测里发现在上下文里塞入与当前任务无关的多个项目资料测试模型的推理准确率明显下降而且响应变慢。状态管理的技术方案上我推荐用事务性数据库来存任务状态而不是用内存变量硬扛。因为系统要支持多人并发任务状态随时可能被多个代理同时更新数据一致性问题不能回避。事务和行级锁在这种场景下是必需品。我自己用的是PostgreSQL任务表按状态字段待分配、执行中、已完成、已失败建了索引后端查询任务进度很流畅。3. 混合部署本地模型与云端大脑的分工聊完软件层面的设计说说部署形态。我这次的架构方案里有一个很重要的决策不是所有代理都用同一个模型而是采用“云上大模型做大脑本地小模型做兜底”的混合部署策略。这个决策跟“ai代理助手加本地模型”这个热点方向其实是一回事。3.1 为什么一定要有本地模型兜底很多人问我直接用大模型API不就行了吗为什么要费劲再部署一个本地模型我给出三个理由。第一个理由是成本。在多Agent协作场景里代理之间会产生大量内部消息这些内部消息如果全部走云端大模型API按照目前的市场价格每轮深度协作的成本不低。我把高频、低难度的内部消息直接交给本地小模型处理只有复杂任务才路由到云端大模型实测整体token开销能降不少。第二个理由是隐私。企业内部的项目计划、产品数据、客户信息很多是不能发到云端API的。本地模型兜底的意义在于敏感任务可以在内网完成推理只有脱敏后的结果才会进入外部服务。这个设计在实践中有多重要做过企业内部AI应用的人都懂。第三个理由是可用性。云端API偶尔会超时、限流如果整个系统完全依赖云高峰期任务积压是必然的。我在架构里做了一个“降级策略”云端大模型超时后自动切到本地模型处理虽然本地模型的能力天花板低一些但至少能保证流程不断。实际部署时本地模型的选型有几个硬指标显存占用、推理速度和中文能力。我用的是主流的开源对话模型做本地推理量化版本加上推理框架跑在普通工作站上效果不错。如果你是新手先别贪模型太大优先选7B到14B参数量级的量化模型把部署跑通再升级。3.2 部署形态选择边缘盒子的可行性我这次在项目里特意测试了ARM架构边缘设备的部署方案。这部分的经验来自一个实际需求客户那边希望把一套协同系统装在本地机房设备比较老旧还想尽量省电不想为AI应用单独上高功耗服务器。最终方案是用一台ARM架构的边缘盒子作为“本地代理网关”负责调度和消息转发同时在盒子上运行一个量化后的小模型专门处理消息摘要、意图分类、格式校验这类轻量任务。简化的流程就是用户的请求先到网关网关先判断任务难度简单任务直接用本地模型处理复杂任务再转发给云端大模型。这块落地有几个细节值得注意。ARM架构的很多Python库依赖是需要单独编译的比如一些原生扩展库直接用x86那一套离线依赖包装不上需要在设备上重新编译耗时比较长。第一次踩这个坑的时候我直接在设备上编译了几个小时后来学乖了先通过系统自带的包管理器安装基础编译工具再编译指定的依赖版本一次过。另外Windows和Linux的基础检查命令也不同在Linux下最常用的就是uname -m和arch查看机器架构确保装对安装包版本。这个看似琐碎的步骤在多设备部署时特别重要。如果你手边有闲置的小主机或者开发板我建议试试这么玩装一个轻量Linux发行版用U盘制作启动盘来安装选好ARM架构对应版本系统起来以后先检查内存和磁盘分配然后手动部署模型推理服务。整个过程不值钱但攒下来的经验在后续扩展项目时非常值钱。3.3 算力分配与成本控制的参考参数算力分配这块我总结了一套属于自己的“经验参数”大家可以根据实际资源调整。云端大模型的调用只放“关键决策型”任务比如方案评审、代码逻辑检查、长文深度分析。这类任务对推理质量要求高参数设置偏保守温度设低一些尽量让输出稳定。本地模型负责“事务型”任务比如分类、摘要、格式转换、意图识别这类任务对创造性要求低可以适当放宽参数追求速度。我在实测本地模型跑事务型任务的响应时间在普通GPU环境下摘要类任务大概几百毫秒到一秒多格式校验类任务基本在百毫秒级别完全能满足人机交互的基本预期。对比同量级任务走云端API的耗时网络传输和排队时间省掉了体感会快很多。真机多代理的并发部署还有一个关键指标内存分配。每个代理实例都要加载模型或者保留上下文缓存如果一台机器上跑很多代理内存很快吃紧。我在容器配置里给每个代理实例做了内存上限跑满自动重启避免某个代理内存泄漏拖垮整台机器。这些都是很低级但很实的工程细节。4. 实操落地搭建一个可运行的多人多AI协同原型理论讲了这么多不落地都是空中楼阁。我带你过一遍我搭建原型的过程。因为篇幅原因我只讲最核心的几个模块代理注册、任务分发、工具集成、以及带一点思考的沙箱隔离设计。整体代码不复杂但你跑通之后后续扩展的骨架就有了。4.1 基础架构选型与目录设计原型我用了Python作为主力语言一是AI生态成熟二是写起来快。后端主要是一个异步服务负责HTTP接口和内部消息转发代理是独立的进程通过消息总线通信。目录结构大致是这样multi-agent-system/ ├── bus/ # 消息总线与路由模块 │ ├── registry.py # 代理注册表 │ ├── router.py # 消息路由与能力匹配 │ └── message.py # 消息格式定义 ├── scheduler/ # 任务调度模块 │ ├── dispatcher.py # 任务分发 │ ├── strategies.py # 订阅/流水线/黑板模式 │ └── state_store.py # 任务状态存储 ├── agents/ # 具体代理实现 │ ├── base_agent.py # 代理基类封装收发消息逻辑 │ ├── code_review.py # 代码审查代理 │ ├── data_analysis.py # 数据分析代理 │ └── report_writer.py # 报告生成代理 ├── memory/ # 记忆管理 │ ├── shared_memory.py # 共享黑板存储 │ └── private_memory.py# 私有用户记忆 └── api_gateway/ # 用户入口 ├── ws_server.py # WebSocket服务 └── auth.py # 用户权限校验代理基类是我单独封装的原因是所有代理的行为模式都一样从总线收消息 → 处理 → 回写结果。基类里把消息接收、心跳上报、结果回传封装好开发具体代理的时候只需要实现一个process()方法极大减少了重复代码。4.2 存储设计存储层面我按消息特性和状态查询特性做了分区内容型数据长文本、结构化输出、文档放到对象存储类的文件服务里每条消息保留检索用的元数据索引状态型数据放到带事务的PostgreSQL里任务状态、代理状态都走SQL查询开发时排查问题方便。异步消息的归档和短时缓存用Redis主要解决两个问题一是给代理消息做短暂缓冲二是作为轻量级分布式锁的载体防止多实例重复消费同一条消息。这里给一个很实在的建议消息队列的消费要做好“幂等”。代理从总线拿到消息后哪怕因为网络抖动重复收到同一条消息也只能处理一次。我在代理基类里加了消息ID去重表消费过的消息ID直接跳过。没有这个机制多代理并发跑的时候大概率会出现重复执行任务的问题。4.3 代理注册与消息路由的实现代理启动时先向总线注册。注册信息包括代理ID、代理名称、能力标签列表、当前负载。注册表的实现可以很简单一个内存字典加一个锁就行但生产环境记得把注册表做持久化否则总线重启所有代理状态全丢了还得全部重新注册一遍。路由的核心逻辑是“能力匹配 负载均衡”。任务提交时带有目标能力标签比如“data_analysis”路由器在注册表里找到所有具备这个能力的代理从中选一个当前负载最低的进行投递。这里有个小经验能力标签最好做成层级结构。比如“data_analysis.calculate”和“data_analysis.visualize”这样后续扩展细粒度代理的时候路由匹配更精准不会出现“任务被一个全能代理抢走但它单项能力不如专业代理”的情况。这段路由逻辑用伪代码表示就是def route_task(task, registry): candidates registry.find(capabilitytask.required_capability) if not candidates: return None # 按负载升序排选负载最低的代理 selected min(candidates, keylambda agent: agent.current_load) return selected别小看这简简单单几十行它决定了整个系统的横向扩展能力。以后你新增代理只需要注册自己的能力标签不需要改任何其他模块的代码。4.4 任务分发与多代理接力调度器从用户侧拿到任务之后先做一个“任务解析”把用户口语化的需求拆成结构化任务列表。比如用户说“帮我分析销售数据并生成一份报告”调度器会拆成两步第一步是数据分析第二步是报告生成然后按顺序先后投递给不同的代理。这个拆解动作在实际落地时可以交给大模型来完成我测试下来效果不错。但有一个坑大模型拆出的任务步骤有时候会“超前”比如连用户没要求的事项也加进去结果就是系统多干了活还可能做出用户不想要的假设。我的解决办法是加一道“人工确认”步骤调度器拆解完任务列表后把结构化结果推给用户确认确认通过以后才真正投递执行。这一步看着多耗了一次交互但极大减少了“代理自由发挥”带来的问题。多代理接力的时候比较推荐上面的黑板模式。我内部实现的共享黑板条件很简单代理处理完结果后往共享存储里写入条目条目包含result_id、task_id、content、timestamp。下游代理需要上游结果时通过指定task_id从共享存储拉取依赖的数据。这样代理之间完全解耦谁依赖谁不需要在代码里写死非常灵活。4.5 工具集成让AI代理真正去“做”事情AI代理最大的价值在于“代理”这个词它能替人做事而不只是回答问题。所以在我的架构里代理必须具备工具调用能力。我给代理封装了通用的工具调用接口搜索、执行代码、读取文件、调用企业内部API。工具通过OpenAPI描述文件注册到代理上代理在收到任务后自主决定调用哪些工具以及调用的顺序。工具调用的一个关键点是权限控制。我强烈建议你在工具调用层加一层“操作预审”每个工具都带有一个“规格声明”标明这个工具能做什么、不能做什么、需要什么权限级别。代理调用工具时系统先检查代理是否具备该工具的权限再执行。比如普通员工代理默认没有权限执行“删除数据库记录”这类高危工具哪怕大模型生成了这个调用系统也要拦截下来。这个设计逻辑的底层其实可以追溯到Linux系统里面的I/O隔离与权限分组精神即使某个模块出了问题也不能让它影响整个系统的边界和稳定性。我在原型里也顺手接了一个执行外部命令的“执行器”代理用来测试工具调用的链路。结果很快就发现一个大问题代理自己造出来的命令五花八门有时候它会想着“优化”一下本来很清晰的命令把简单事情搞复杂。解决办法就是两个一是给代理发送命令前先强制做语法校验二是把命令执行限制在一个预先设置好的白名单目录里不允许访问其他路径。本质上是“最小权限”思想在工具层的落地。如果你要集成机器人控制器这类硬件设备思路也是一样的把控制接口封装成标准工具代理通过工具调用发送控制指令底层由专门的驱动服务去执行而不是让代理直接操作硬件。这样即使代理生成错误的控制参数驱动服务这层还能做边界校验避免直接造成损坏。4.6 安全与隔离容器、沙箱和权限边界最后说安全和隔离这是多人多AI系统绕不开的部分。我在这块的设计经验是不要相信任何一个代理“不会犯错”要在架构上假设任何代理都可能出轨。代理解耦带来的一个直接好处是失败隔离一个代理崩溃后其它代理还能继续工作。我在测试里做了个实验把其中一个代理直接kill掉消息总线只是标记它下线其他代理照常处理自己的任务整体服务没有中断。这是解耦设计给你带来的最大红利之一。但是想让代理之间的数据隔离做到位光靠代码层面的身份认证还不够。我的做法是每个代理跑在独立的容器里通过容器的网络策略来控制代理间的访问边界共享存储层通过项目的访问控制列表做权限校验。内存、临时文件、临时会话这些资源随着容器销毁一起清理不给下一次任务留痕。这套逻辑和Linux系统对设备I/O的隔离思路很像都是把“资源访问边界”画清楚内部随便闹腾边界不能破。容器的资源限制也要设好。CPU、内存、文件描述符数量全部限定防止某个代理因为工具调用失控把宿主机的资源吃光。我实际碰到过一次一个数据分析代理在处理超大文件时内存占用猛涨把宿主机整个拖卡。从那以后“每个代理容器的资源配额”成了我建系统的默认配置没有例外。5. 常见问题与排查技巧实录这个项目做完我踩了不少坑每次排查的过程都挺值得记录。我整理几个出现频率最高的问题附带排查链路希望能帮大家省点折腾时间。5.1 代理任务发出去没反应这是最常见的问题。现象是调度器把任务投递出去了但代理一直不执行像消失了一样。排查第一步先查代理状态是不是掉线了。我一般在总线上开一个“代理实时状态”的调试接口直接看每个代理的最后心跳时间。如果代理已经下线任务当然发不进去。第二步查消息是不是被路由到了错误的能力标签上。比如你传的是“data_analysis.calculate”但代理注册的是“data_analysis”标签层级不匹配路由可能匹配不上。我后来在路由逻辑里加了“父级标签兜底”匹配也就是如果精确标签没命中就尝试往上层找这样兼容性好了很多。第三步查消息序列化问题命令行跑代理时如果代理端反序列化失败会静默丢弃这种情况在日志里要特别留意有没有异常堆栈。5.2 多人协作时的上下文漂移系统里多个用户同时操作时容易出现“任务上下文混乱”。比如A用户的项目任务结果被B用户的下游代理读到这属于我前面提到的安全边界被突破的问题通常不是代码逻辑错而是共享黑板的条目权限没设对。我的排查方法是先抓任务ID。给每个用户的每次任务生成一个全局唯一的task_id所有共享黑板条目都带这个字段。出现问题时直接按task_id过滤共享存储的读写日志看是谁写入了不该写的条目、谁读取了不该读的条目。定位到具体环节后再调权限配置。这里有个实践经验默认情况下共享黑板的所有权应该绑定到“项目”这个维度不绑定到“用户”因为同一个项目内部多个代理共享上下文是合理的跨项目读取则必须显式授权。5.3 基础系统排查技巧本地部署尤其是ARM设备上部署我建议先学会系统架构检查。装任何依赖之前都先跑一下基础命令uname -a uname -m arch getconf LONG_BIT然后用系统原生的包管理工具去更新软件源再安装编译工具链。在ARM架构上很多依赖如果直接装预编译包装不上那大概率就是版本架构不匹配需要手动编译安装。需要提前规划好磁盘空间因为模型文件占空间很大。我有一次U盘安装好系统之后发现给根分区分配的空间太小放完模型就报警了。如果你也遇到空间问题可以考虑用符号链接把模型目录挪到外接存储上。5.4 任务超时与代理死锁最后一个是“代理死锁”问题。具体表现是多个代理互相等待对方的结果整个任务链路卡住。这种情况在流水线模式里最容易出现尤其是代理A需要代理B的结果才能继续代理B又在等代理A的数据形成循环依赖。我的解决方案是在任务系统里加“超时熔断”机制每个任务从创建开始就设置整体的执行时间上限比如5分钟另外每个代理环节单独设置单步超时比如90秒。超时以后调度器强制标记该任务为失败并向用户返回当前已经完成的部分结果避免整个系统无限期挂起。如果任务经常超时要留意是不是“任务拆解得太碎”了。拆解的步骤越多代理与代理之间的传递损耗越大超时概率越高。我实际使用时的一般原则是单次任务在三步以内最稳定超过五步就必须拆成多个独立子任务并发执行而不是一条链走到黑。5.5 排查代理链路问题的三个核心思路之前聊了不少具体问题我总结成三条普适的排查思路遇到任何多人多AI协同的故障都可以套用。第一先看链路再看数据。很多人出问题第一反应是翻数据其实应该先看任务从创建到执行的整条链路是否完整、哪一环断了。链路走不通数据再对也没有意义链路没问题了再看数据格式、内容是否异常。第二记录要完整日志要到“代理级”。网络请求的日志、代理收发的消息、工具调用的入参出参都要留痕。没有这些日志等于闭着眼睛修系统。第三先把系统跑起来再逐项优化。原型阶段最忌讳一步到位设计大而全的系统。我建议第一版先不加权限系统、不做复杂路由所有代理用最简单的方式跑通一条任务链路再逐步加“保险丝”。踩过几次坑之后我现在养成一个习惯任何环节的改动先想想“如果这个模块崩溃其他模块能不能不受影响”这个测试在我重构系统时帮了大忙。个人体会是做多人多AI协同系统最大的敌人不是模型能力不足而是架构的脆弱性——一个不起眼的环节挂了整条任务链就卡住。所以设计时把边界划清楚、把链路盯住才是真正要紧的事。这套原型也可以继续往下扩展比如接入更精细的权限审计、做代理市场、支持更多模态的工具调用每一块都能单独拎出来研究很久。
返回列表