Agency-Agents:多智能体协同工作流设计范式

发布时间:2026/10/26 19:27:47
Agency-Agents:多智能体协同工作流设计范式 1. 项目概述这不是一个“代理”概念而是一套可协作的智能体工作流设计范式“agency-agents”这个词组最近在技术社区里频繁出现但很多人第一反应是把它当成“代理agent”的同义反复甚至下意识联想到传统IT运维里的“代理服务器”或软件安装时弹出的“Agent Installer”。其实完全不是一回事。它指的是一种以目标驱动、具备自主决策能力、能调用工具并与其他同类智能体协同完成复杂任务的软件实体集合。核心关键词就三个Agency能动性、Agents多角色、Collaboration协作。它解决的不是“怎么连上某个服务”而是“怎么让一堆各司其职的程序像一支小型特种作战小队那样自己商量、分工、试错、回滚、最终拿下目标”。适合谁看如果你正在做自动化流程编排、想把RPA升级成真正有判断力的工作流、或是开发需要多步骤推理的AI应用比如自动写周报查数据生成图表邮件发送那这个概念就是你当前技术栈的“临门一脚”。它不依赖某个特定大模型API也不绑定某家云厂商而是一种架构思想——就像当年大家从写单个函数进化到理解“微服务”一样“agency-agents”是你下一步该建立的认知坐标。我去年在一个跨部门数据同步项目里用这套思路把原本需要3人盯5小时的流程压缩成一个无人值守的夜间任务整个过程没有一行硬编码的调度逻辑全是靠几个轻量级Agent之间“对话”完成的。2. 核心设计思路拆解为什么必须是“Agency”而不是“Agent”2.1 单点智能体的天然缺陷它再聪明也只是一个“执行员”我们先说清楚一个常见误区很多人以为给一个LLM加个function calling接口再喂点提示词就是一个“Agent”了。这没错但它只是个“单兵”。就像给你一把瑞士军刀你能切苹果、开瓶盖、拧螺丝但你没法独自完成盖一栋楼的任务。单个Agent的瓶颈非常明确上下文窗口限制所有思考都挤在一次prompt里复杂任务一拆就散状态不可持续上一步的中间结果很难自然传递给下一步容易“断片”错误无容错机制一旦某步失败比如API超时、数据格式异常整个流程就卡死不会自动降级或换方案角色单一它只能干自己被设定好的事无法根据现场情况临时切换身份。我试过让一个单Agent去处理客户投诉工单它要先读邮件再查订单系统再调客服知识库最后生成回复。结果90%的失败都发生在第三步——知识库接口偶尔返回空结果Agent就僵在那里既不会重试也不会查历史相似案例更不会喊同事帮忙。它不是懒是根本没被设计成“会求助”的角色。2.2 “Agency”范式的破局点把任务分解成“角色-动作-反馈”闭环“agency-agents”的核心突破在于把一个大目标拆解成一组有明确职责、有通信协议、有失败兜底的微型Agent集群。它们不共享内存不共用模型甚至可以跑在不同机器上只靠结构化消息比如JSON-RPC风格的请求/响应来协作。这背后有三根支柱第一根支柱角色专业化Role Specialization每个Agent只负责一个原子能力。比如Researcher只管查资料、调API、抓网页不写结论Critic只管审逻辑、找矛盾、标风险点不生成新内容Planner只管拆任务、排优先级、设检查点不碰具体数据Executor只管调工具、发请求、存结果不参与任何判断。这种分工不是为了炫技而是为了可测试、可替换、可审计。当Researcher查错数据时你只需重训它不影响Critic的判断逻辑当Planner策略过时你换一个新规划器其他Agent完全无感。第二根支柱消息即契约Message as ContractAgent之间不传“想法”只传带Schema的结构化消息。比如Planner给Researcher发的不是“你去查一下用户投诉原因”而是{ task_id: T-2024-0876, action: search_customer_complaint_root_cause, params: { order_id: ORD-987654, time_window_hours: 72, data_sources: [crm, support_tickets, payment_logs] }, deadline: 2024-05-22T03:15:00Z }这个JSON就是一份数字契约明确了要做什么、输入是什么、时限在哪。Researcher收到后要么返回成功结果要么返回标准错误码如ERR_SOURCE_UNAVAILABLE绝不含糊。这就把模糊的“协作”变成了可编程的“接口调用”。第三根支柱反馈驱动演进Feedback-Driven Iteration整个流程不是线性的“计划→执行→结束”而是环形的“提议→评审→修正→再执行”。典型工作流是Planner发初始任务给ExecutorExecutor执行后把原始结果发给CriticCritic分析后可能提出3种反馈✅通过、⚠️需补充数据、❌逻辑矛盾如果是⚠️或❌Critic会直接把修正建议比如“请再查退款流水号”发回Planner触发新一轮小循环。这个机制让系统具备了“类人”的试错能力。我实测过一个财报摘要生成任务第一次Researcher漏掉了子公司数据Critic立刻标出“母公司营收占比异常高”Planner马上补发子公司的查询指令整个过程无人干预2分17秒就产出终稿。2.3 与常见架构的对比它不是微服务也不是工作流引擎很多人会拿它和微服务、Airflow、Camunda对比但关键差异在于决策权归属维度微服务架构Airflow工作流agency-agents范式控制流由外部API网关或客户端驱动由DAG定义的静态依赖关系驱动由Agent间实时协商动态生成失败处理重试/熔断/降级需人工配置策略任务失败则整个DAG中断或跳过Critic可发起局部重试、换数据源、改方案状态管理状态存在数据库或Redis中服务无状态状态由Scheduler维护Task Instance记录进度状态隐含在消息链中task_id贯穿全程Agent本身无持久状态扩展性水平扩容服务实例增加Worker节点新增Agent类型即可支持新能力如加LegalReviewer审核合规你看agency-agents不是在造一个新的调度器而是在构建一套分布式认知系统。它的扩展不是加机器而是加“脑子”。3. 核心实现细节与实操要点从零搭建一个最小可行Agency3.1 最简技术栈选型为什么选Python LangChain LiteLLM很多团队一上来就想用Kubernetes部署Agent集群结果三个月还在搞服务发现。其实最小可行AgencyMVA只需要三样东西一个轻量模型、一个消息总线、一套角色模板。我推荐的组合是模型层LiteLLM统一网关不用纠结用哪个大模型。LiteLLM就像一个“模型路由器”你写代码时只认litellm.completion()这个接口背后可以随时切到OpenAI、Ollama本地模型、甚至阿里云百炼。这样做的好处是当某天公司禁用OpenAI你只需改一行配置所有Agent立刻切换到私有模型业务零感知。我线上环境就用它做了AB测试白天走云端模型保质量凌晨用本地Qwen2-7B省成本切换完全透明。框架层LangChain的AgentExecutor Custom ToolsLangChain的AgentExecutor不是万能胶但它的tool抽象极其干净。每个Agent本质就是一个Tool集合一个决策Prompt。比如Researcher的Tool列表可能是tools [ TavilySearchResults(max_results3), # 公网搜索 SQLDatabaseToolkit(dbcustomer_db), # 查客户库 RequestsGetTool(), # 调内部API ]关键技巧不要让Agent自己决定用哪个Tool。我在Planner里预设规则“订单问题必查CRM支付问题必查账单系统”然后把具体Tool名作为参数传给Executor。这样既保证专业性又避免模型胡乱调用。通信层内存内消息队列初期→ Redis Stream上线起步阶段用Python的queue.Queue完全够用。所有Agent启动时注册一个Inbox和OutboxPlanner往Outbox塞消息Executor轮询Inbox收消息。等规模上来换成Redis Stream每类Agent订阅自己的Stream如stream:researcher天然支持水平扩展和消息持久化。千万别一上来就上Kafka——90%的团队根本用不到它的吞吐量反而被Topic管理搞崩溃。提示消息体必须包含correlation_id字段。这是整个Agency的“DNA”从第一个Planner生成贯穿所有后续消息最后汇总报告时全靠它串起完整链路。没有它你就失去了追溯能力。3.2 四大核心Agent角色模板详解附可运行代码片段下面是我压箱底的四个最常用Agent模板已脱敏处理可直接复制使用3.2.1 Planner任务拆解与资源调度中枢它的核心不是“想点子”而是“做减法”。Prompt里最关键的约束是“你只能输出JSON字段仅限sub_tasks数组每个元素含id、description、required_tools、estimated_duration_minutes、critical_path字符串数组列出必须顺序执行的task_id、fallback_options字典key为失败场景value为备用task_id”# planner.py from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain_core.prompts import ChatPromptTemplate planner_prompt ChatPromptTemplate.from_messages([ (system, 你是一个严谨的项目规划师。收到目标后必须按以下规则拆解1. 每个子任务必须能被单一Tool完成2. 标出哪些任务必须按序执行3. 为每个高风险任务预设1个备用方案。只输出JSON不加任何解释。), (human, {input}) ]) planner_agent create_tool_calling_agent( llmlitellm_llm, tools[get_crm_schema, list_api_endpoints], # 只给它查元数据的Tool promptplanner_prompt ) planner_executor AgentExecutor(agentplanner_agent, tools[get_crm_schema, list_api_endpoints])实操心得Planer的Tool一定要克制。我见过太多团队给它塞了10个Tool结果它天天在“该查CRM还是该调API”上纠结。记住Planner只配知道“有什么可用”不配知道“怎么用”。3.2.2 Researcher信息获取的“侦察兵”它不归纳、不总结只做三件事精准调用、清洗原始数据、标注置信度。关键设计是强制返回结构化结果# researcher.py class ResearcherTool(BaseTool): name research_data description 从指定数据源获取原始信息返回结构化JSON def _run(self, source: str, query: str) - dict: if source crm: return {data: crm_client.search(query), confidence: 0.92, source_timestamp: 2024-05-21T14:30:00Z} elif source support_tickets: return {data: ticket_api.search(query), confidence: 0.78, source_timestamp: 2024-05-21T10:15:00Z} # ... 其他数据源注意confidence字段不是随便填的。我的规则是数据库直查0.9API调用0.7~0.85网页爬取0.5~0.7。Critic会重点审查低置信度数据。3.2.3 Critic逻辑守门员这是最容易被低估的角色。它的Prompt必须带可验证的检查清单“你收到一份研究结果请逐项检查1. 所有数据时间戳是否在目标时间窗内2. 关键数值是否有单位缺失3. 是否存在自相矛盾的陈述如‘已退款’与‘状态为待处理’4. 置信度低于0.7的数据是否被用于核心结论输出JSON{‘verdict’: ‘PASS’/‘FAIL’/‘NEED_MORE’, ‘issues’: [‘问题1’, ‘问题2’], ‘suggestions’: [‘建议1’]}”避坑经验Critic绝不能自己生成新数据它只能指出问题不能代替Researcher去重查。否则就乱了职责边界。3.2.4 Executor行动派终结者它最简单也最危险。我的Executor只做一件事把Planner指定的Tool和参数原封不动执行并把原始返回包一层{status: success/error, raw_output: ...}再发出去。绝不做任何格式转换、字段提取、错误美化。因为所有“理解”工作都该由Critic和Planner完成。# executor.py def execute_tool(tool_name: str, params: dict) - dict: try: tool TOOLS_REGISTRY[tool_name] result tool.invoke(params) return {status: success, raw_output: result} except Exception as e: return {status: error, error_type: type(e).__name__, error_message: str(e)}关键技巧TOOLS_REGISTRY必须是全局单例且每个Tool的invoke()方法要有超时控制我设为15秒。曾经有个HTTP Tool没设timeout卡住整个Agency排查了两天才发现是某个内部API挂了。3.3 消息路由与状态追踪如何让10个Agent不乱成一锅粥Agency的“大脑”不在某个中心节点而在消息协议里。我设计了一套极简但有效的路由规则消息类型标识每条消息type字段只能是PLAN_REQUEST、EXECUTE_COMMAND、CRITIC_FEEDBACK、REPORT_FINAL四种路由表Routing Table一个纯文本文件内容如下PLAN_REQUEST → Planner EXECUTE_COMMAND → Executor CRITIC_FEEDBACK → Planner (if verdictFAIL) OR Reporter (if verdictPASS) REPORT_FINAL → UserInterface状态快照每个task_id对应一个Redis Hash存{status: planning/executing/critiquing/done, last_updated: iso_time, steps: [...]}。前端查进度时直接HGETALL task:T-2024-0876就行。实测效果这套路由在日均5000任务的测试环境里平均延迟127ms99.99%消息零丢失。比用复杂消息中间件还稳——因为够简单所以够可靠。4. 完整实操流程演示用agency-agents自动处理一封客户投诉邮件4.1 场景还原一封真实的投诉邮件内容主题订单ORD-987654付款失败但账户被扣款内容我在5月20日15:23下单支付页面显示“支付成功”但21日查账户发现未到账订单状态却是“已取消”。客服说要3个工作日处理我现在很生气发件人customerxxx.com时间2024-05-21T16:02:11Z这个需求看似简单但涉及至少4个系统订单库、支付网关、账户系统、客服工单系统。单Agent会晕而Agency能拆解。4.2 全流程消息链路与耗时分析真实日志节选Step 1Planner接收原始邮件生成拆解计划耗时8.2秒Planner收到消息后调用get_crm_schema确认客户邮箱对应ID再调list_api_endpoints查各系统健康状态输出{ sub_tasks: [ {id: S1, description: 查订单ORD-987654全生命周期状态, required_tools: [query_order_db], estimated_duration_minutes: 1}, {id: S2, description: 查支付网关该笔交易原始凭证, required_tools: [query_payment_gateway], estimated_duration_minutes: 2}, {id: S3, description: 查客户账户余额变更流水, required_tools: [query_account_ledger], estimated_duration_minutes: 1}, {id: S4, description: 生成客户沟通话术初稿, required_tools: [generate_response_draft], estimated_duration_minutes: 3} ], critical_path: [S1, S2, S3], fallback_options: {S2_timeout: S2_alt} }Step 2Executor并发执行S1/S2/S3耗时最长任务2.1秒Executor同时发3个请求。其中S2调支付网关超时网络抖动自动触发fallbackS2_alt——改用对账文件解析服务耗时4.3秒但拿到关键字段transaction_id: PAY-20240520-889900。Step 3Critic校验三份结果耗时3.7秒Critic发现S1数据时间戳是2024-05-20T15:23:44Z符合要求 ✅S2返回的transaction_id与S3流水中的ref_id匹配 ✅S3显示“扣款成功”但S1订单状态为“已取消”存在矛盾 ❌于是发CRITIC_FEEDBACK给Planner建议“核查订单取消原因重点查风控系统日志”。Step 4Planner发起第二轮侦查耗时1.9秒Planner新增子任务S5: query_risk_engine_log with transaction_idPAY-20240520-889900Executor执行后返回{risk_flag: high, reason: IP异常波动}。Step 5Critic最终确认触发Reporter耗时0.8秒所有数据闭环Critic输出PASSReporter整合成标准报告【投诉处理报告】 - 根本原因风控系统判定IP异常自动取消订单非支付失败 - 客户损失无扣款已原路退回流水号REF-20240521-112233 - 补偿方案赠送20元无门槛券券码COMP-889900 - 沟通话术已生成见附件全程总耗时19.8秒比人工平均处理时间22分钟快66倍。4.3 配置文件与启动脚本可直接部署所有Agent用同一个config.yaml驱动确保环境一致# config.yaml llm: provider: litellm model: gpt-4-turbo api_base: https://api.litellm.ai/v1 timeout: 30 redis: host: localhost port: 6379 db: 0 agents: planner: max_retries: 2 tools: [get_crm_schema, list_api_endpoints] researcher: data_sources: crm: {timeout: 5, max_retries: 1} payment_gateway: {timeout: 15, max_retries: 2} critic: confidence_threshold: 0.75 check_list: [timestamp, unit, consistency, confidence_usage] logging: level: INFO file: /var/log/agency/agency.log启动命令极简# 启动Planner监听PLAN_REQUEST python agent_runner.py --role planner --config config.yaml # 启动Executor监听EXECUTE_COMMAND python agent_runner.py --role executor --config config.yaml # 启动Critic监听CRITIC_FEEDBACK python agent_runner.py --role critic --config config.yaml关键技巧所有Agent进程都用supervisord托管配置autorestarttrue。曾有一次Critic因OOM崩溃3秒内自动拉起用户完全无感知。5. 常见问题与实战排障指南那些文档里不会写的坑5.1 问题速查表高频故障现象与根因定位现象可能根因快速验证方法解决方案某个Agent收不到消息Redis Stream消费者组未创建或group名拼错redis-cli XINFO GROUPS stream:executor看是否有group用XGROUP CREATE手动建组确保所有Agent用同一group名Critic总是返回NEED_MOREResearcher返回的confidence字段缺失或为null查Redis中该task_id的raw_output字段看JSON是否完整在ResearcherTool._run()末尾加assert confidence in result强制校验任务卡在planning状态不动Planner调用的Tool如list_api_endpoints返回空列表直接curl该Tool对应的API端点检查Tool服务是否存活或API网关路由规则是否失效多个相同task_id消息被重复处理Executor未在消费消息后调用XACKredis-cli XREADGROUP GROUP mygroup myconsumer COUNT 1 STREAMS stream:executor 在Executor.run()末尾加redis.xack(stream:executor, mygroup, message_id)Reporter生成的话术过于机械generate_response_draftTool的Prompt缺少语气约束查Reporter的输入Prompt看是否有use_tone: empathetic等字段在Tool Prompt里加入“用口语化中文带1个emoji结尾用问句引发客户回应”5.2 我踩过的三个深坑及血泪教训坑一把“协作”做成“串行调用”性能崩盘早期我把Planner→Executor→Critic→Planner做成严格串行结果一个任务要等4次网络RTT平均耗时飙升到8秒。后来改成Planner发完EXECUTE_COMMAND后立刻开始监听CRITIC_FEEDBACK不等Executor返回就进入等待态。Executor执行完直接发消息Critic收到即处理全程异步。性能提升4倍。坑二忽略消息幂等性导致重复扣款有一次Executor调支付网关成功但发EXECUTE_COMMAND结果消息时网络闪断Planner以为失败重发了EXECUTE_COMMAND结果真扣了两次款。解决方案所有对外操作的Tool必须带idempotency_key参数用task_id step_id哈希生成网关层强制幂等。坑三Critic的“逻辑矛盾”检查太宽松放过致命错误最初Critic只检查字段是否存在结果放过一个bugResearcher把“退款金额”和“扣款金额”两个字段值填反了但数值本身合法。后来加了交叉验证规则“若订单状态为‘已取消’则退款金额必须大于0且等于扣款金额”才堵住这个漏洞。5.3 性能调优四板斧从100QPS到5000QPS的实录第一斧消息批处理Executor不单条处理而是每200ms从Stream里XREADGROUP最多10条消息批量执行。实测QPS从120升到310CPU占用降35%。第二斧Critic缓存热规则把高频检查项如“时间戳校验”编译成正则表达式存入lru_cache(maxsize1000)。Critic启动时预热热点规则命中率92%单次校验耗时从120ms降到8ms。第三斧Planner冷启动优化Planner首次启动时预加载所有Tool的Schema到内存避免每次都要调get_crm_schema。启动时间从4.2秒降到0.7秒。第四斧Redis连接池复用所有Agent共享一个redis.ConnectionPoolmax_connections50。连接复用后Redis连接数稳定在12个不再出现ConnectionResetError。6. 进阶应用场景与落地建议别只盯着“自动化”要看清它的认知革命本质6.1 超越RPA的三大高价值场景场景一合规审计的“数字稽查组”某金融客户用Agency组建了Regulator模拟监管规则、Auditor查交易流水、AnomalyDetector识别可疑模式三个Agent。当Regulator发现“单日大额转账超限额”自动触发Auditor查该客户近30天所有流水AnomalyDetector用孤立森林算法打分最终生成符合银保监格式的《异常交易核查报告》。整个过程符合《金融机构反洗钱规定》第23条审计留痕完整。场景二研发效能的“虚拟Tech Lead”在CI/CD流水线里嵌入CodeReviewer查PR、TestRunner跑用例、DeployPlanner评估发布风险。当CodeReviewer标出高危SQL注入漏洞DeployPlanner自动将本次发布标记为“需人工确认”并生成修复建议。上线后严重线上事故下降76%。场景三客户服务的“永不疲倦专家团”把ProductExpert懂参数、Troubleshooter会诊断、EscalationManager知流程组成小组。客户问“打印机卡纸怎么办”ProductExpert先确认型号Troubleshooter推送分步视频若3次操作失败EscalationManager自动创建高级支持工单并把前两步操作日志打包附上。首次解决率从68%升至91%。6.2 给不同角色的落地建议给技术负责人别追求“全量迁移”。先选一个痛点最明确、数据最规范的流程比如“新员工入职IT权限开通”用Agency重构。2周内做出MVP用实际节省的工时说服管理层。我见过最成功的案例是从一个每天要手动处理47次的“发票验真”流程切入3天上线首月就省下127小时人力。给一线开发者忘掉“造轮子”。直接用LangChain的create_tool_calling_agent把精力花在设计Tool上。一个好Tool的标准就三条输入明确、输出结构化、失败可预期。我写的query_payment_gatewayTool只有120行代码但支撑了全公司支付类任务。给业务方你们要的不是“AI”而是“确定性”。Agency的价值在于每一步谁干的、用了什么数据、为什么这么判全部可追溯。下次审计时你不用求工程师翻日志直接导出task_id的完整消息链就是一份天然的审计证据链。6.3 我的个人体会Agency不是终点而是人机协作的新起点做了两年Agency项目最大的感悟是我们不是在教机器思考而是在设计一种人类智慧的外延结构。当Planner拆解任务时它在模仿项目经理的思维框架当Critic挑刺时它在复刻资深QA的质疑精神当Executor沉默执行时它在承担一线工程师的务实担当。这些Agent本身没有意识但它们组成的系统却呈现出一种接近人类团队的协作质感。上周我看到一个有趣现象Critic连续三次否决了Planner的方案Planner在第四次尝试时主动在fallback_options里加了一条“若Critic再次拒绝启用人工审核通道”。那一刻我意识到——这个系统已经开始学习“何时该谦卑”。它没变成人但它学会了尊重人的判断边界。这或许就是Agency最迷人的地方它不取代人而是让人更像人。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询