分布式AI Agent网络架构:从单体智能到群体协作的实战指南

分布式AI Agent网络架构:从单体智能到群体协作的实战指南

1. 项目概述:从单体智能到群体协作的范式跃迁

最近几年,AI Agent(智能体)的概念火得一塌糊涂,从AutoGPT到Devin,大家似乎都在追求一个“全自动”的终极目标。但作为一个在分布式系统和AI交叉领域摸爬滚打了十来年的从业者,我越来越清晰地看到一个趋势:单个Agent再强大,其能力边界和可靠性天花板也显而易见。真正的未来,在于如何让一群各有所长的Agent像一支训练有素的团队一样,高效、可靠、安全地协同工作。这正是“分布式通用智能体网络”这个项目试图回答的核心命题。

简单来说,它不是一个具体的应用,而是一套架构蓝图和运行机制。你可以把它想象成构建一个“AI社会的操作系统”。在这个系统里,每个Agent都是一个独立的、具备特定技能的“公民”,它们通过网络发现彼此,通过标准协议进行沟通,通过共识机制协调任务,最终共同完成任何单个Agent都无法独立处理的复杂目标。这听起来有点宏大叙事,但拆解开来,其核心就是解决三个问题:怎么让Agent找到彼此并建立连接(架构)?怎么让它们安全、高效地“对话”与“协作”(关键机制)?以及,这套理论到底行不行得通(原型验证)?

我之所以对这个方向如此着迷,是因为它直击了当前AI应用落地的几个核心痛点。首先,任务复杂性与模型能力单一性的矛盾。一个大语言模型或许能写诗、编程、分析数据,但让它去实时监控服务器日志并自动扩容,或者控制机械臂完成精密装配,就力不从心了。我们需要专精于不同领域的Agent。其次,可靠性问题。单个Agent一旦“宕机”或产生“幻觉”,整个任务链就断了。分布式网络通过冗余和协作,能极大提升系统的鲁棒性。最后,也是最重要的,可扩展性与生态。一个开放、标准的网络架构,能吸引无数开发者贡献各式各样的Agent,就像手机应用商店一样,快速形成一个繁荣的生态,这是任何封闭系统都无法比拟的优势。

接下来的内容,我将结合自己搭建原型系统的经验,深入拆解分布式通用Agent网络的架构设计、那些让协作成为可能的关键“齿轮”是如何咬合的,并分享从零搭建一个最小可行原型(MVP)的实战过程与踩坑记录。无论你是想了解前沿趋势的开发者,还是正在寻找下一代AI产品形态的创业者,相信这些来自一线的思考都能给你带来启发。

2. 网络架构设计:构建Agent社会的基石

设计一个分布式Agent网络,首要任务就是定义它的组织结构。这决定了Agent如何被发现、如何交互以及整个系统的扩展能力。经过多次迭代,我认为一个健壮的架构必须包含以下几个层次。

2.1 核心组件与分层模型

一个典型的分布式Agent网络架构可以划分为四层,从下到上分别是基础设施层、通信层、协调层和应用层

基础设施层是Agent的“肉身”和“住所”。这包括运行Agent所需的计算资源(CPU、GPU、内存)、存储以及网络环境。一个关键设计点是:Agent应该以何种形式存在?是容器(如Docker)、虚拟机、还是直接运行在物理服务器上的进程?在我们的原型中,我们选择了Docker容器作为Agent的标准化运行时环境。原因很直接:Docker提供了极好的隔离性、可移植性和资源控制能力。每个Agent被打包成一个包含其代码、模型权重(如果较小)和依赖项的镜像,通过Kubernetes或Docker Swarm这样的编排工具进行部署和管理。对于需要大模型的Agent,我们通常采用“轻量Agent客户端 + 远程模型API服务”的模式,Agent容器内只包含轻量的逻辑代码,通过网络调用云端或本地的模型服务。

注意:镜像的轻量化至关重要。一个动辄几十GB的镜像会严重拖慢部署和调度速度。我们的经验是,基础镜像尽可能使用Alpine Linux等超小型系统,并通过多阶段构建只打包必要的运行文件。

通信层是Agent社会的“语言”和“邮政系统”。Agent之间必须有一种统一的、高效的方式交换信息。这里我们放弃了让每个Agent自行定义API的混乱做法,而是采用了基于异步消息队列标准化消息格式的通信模式。具体来说,我们使用NATS(一个高性能的云原生消息系统)作为消息总线。每个Agent可以订阅自己关心的“主题”,也可以向特定主题发布消息。消息格式则统一采用JSON Schema进行定义和验证。例如,一个“文本总结Agent”可能订阅requests.summarization主题,它期望收到的消息体必须包含“text”: string“max_length”: integer字段。这种设计实现了Agent间的解耦:发送者不需要知道接收者的具体地址,只需要知道消息协议。

协调层是网络的“大脑”和“交通警察”,这是最复杂也最核心的一层。它主要负责三件事:服务发现、任务调度与编排、以及共识与状态管理。

  1. 服务发现与注册中心:新启动的Agent如何告知网络“我来了,我能做什么”?我们引入了一个轻量级的注册中心(例如使用etcd或Consul实现)。每个Agent启动后,会向注册中心注册自己的元数据,包括:唯一ID、能力描述(如:{"capabilities": ["image_classification", "object_detection"]})、当前负载、健康状态以及其订阅的消息主题。其他Agent或协调器可以通过查询注册中心来找到能提供所需服务的Agent。
  2. 任务编排器:当用户提交一个复杂任务(如“分析这份财报PDF并生成一份投资建议简报”)时,任务编排器负责将其分解为子任务,并规划执行流程。我们借鉴了工作流引擎的思想,使用有向无环图来定义任务流程。每个节点代表一个子任务(由某个特定能力的Agent执行),边代表任务间的依赖关系。编排器根据DAG和注册中心的信息,动态地将子任务分配给合适的、负载较低的Agent。
  3. 共识与分布式事务:对于需要多个Agent共同修改共享状态的任务(例如,多个Agent协同编辑一份文档),需要简单的共识机制来保证一致性。我们采用了基于乐观锁事件溯源的模式。每次状态变更都作为一个“事件”发布到消息总线上,感兴趣的Agent可以监听并据此更新自己的本地视图。对于关键操作,通过一个轻量级的分布式锁服务(如基于etcd的锁)来避免冲突。

应用层是用户与网络交互的界面。它可以是命令行工具、Web API网关、或者图形化的工作流设计器。用户通过应用层提交任务、监控执行状态、查看最终结果。

2.2 去中心化与混合架构的权衡

纯粹的P2P(点对点)去中心化架构听起来很美好,每个Agent完全对等,但实践中会遇到服务发现效率低下、难以实现全局协调等问题。而完全的中心化调度又成了单点故障。因此,我们的原型采用了一种混合架构通信是去中心化的(通过消息总线),但协调是部分中心化的。注册中心和任务编排器作为“基础设施服务”存在,它们本身也是高可用的集群,并非单一节点。Agent之间在获得任务后,可以直接通过消息总线交换中间数据,无需每次都经过中心节点转发,这既保证了协调的统一性,又避免了中心节点的通信瓶颈。

这种设计带来的一个直接好处是弹性伸缩。当某个类型的任务请求激增时(例如图像处理),协调器可以感知到队列堆积,并触发Kubernetes自动扩容更多该类型的Agent实例。反之,在空闲时自动缩容以节省资源。整个网络像一个有机体,能够根据“工作量”自动调节“细胞”的数量。

3. 关键机制剖析:让协作智能真正运转起来

有了骨架,还需要神经和韧带才能让身体动起来。分布式Agent网络的“智能”与“协同”,就体现在以下几个关键机制中。

3.1 能力描述与动态发现机制

Agent如何向网络宣告“我能做什么”?我们设计了一套结构化的能力描述语言。这不仅仅是一个字符串标签,而是一个详细的“服务说明书”。它基于JSON Schema,包含以下核心字段:

  • agent_id: 唯一标识符。
  • capabilities: 能力列表,每个能力是一个对象,如{"name": "sentiment_analysis", "input_schema": {...}, "output_schema": {...}}。这里input_schemaoutput_schema严格定义了该能力所需的输入和输出格式。
  • endpoints: 该Agent监听的消息主题。
  • metadata: 元数据,如版本号、计算资源需求、平均处理延迟、计费单价等。

当一个“任务规划Agent”需要找一个能“翻译英文到中文”的助手时,它不会广播喊话,而是向注册中心发起一次查询。查询语言可以是类似SQL的表达式,例如:SELECT * FROM agents WHERE capabilities.name = 'translation' AND capabilities.input_schema.properties.src_lang.const = 'en' AND capabilities.output_schema.properties.tgt_lang.const = 'zh' AND metadata.avg_latency < 1000。注册中心返回匹配的Agent列表,规划器再结合负载、延迟等元数据,选择最优的一个。这个过程是完全动态的,新Agent上线或旧Agent下线,网络能自动感知并调整。

3.2 任务分解与流式编排机制

用户的一个模糊指令如何变成Agent可执行的具体步骤?这依赖于任务分解编排。我们实现了一个两阶段流程:

  1. 语义解析与规划:首先,一个专用的“规划Agent”(通常是一个提示词工程精调过的大模型)负责理解用户意图。用户输入“帮我分析一下公司Q3的销售数据,找出问题并做份PPT”。规划Agent会将其分解为一系列原子操作:[“从数据库提取Q3销售数据”, “进行数据清洗和聚合”, “执行趋势分析和异常检测”, “生成分析报告文本”, “根据报告生成PPT大纲”, “设计PPT图表”, “合成最终PPT文档”]。每一步都对应一个或多个网络中的能力。
  2. DAG构建与资源绑定:规划器输出的步骤列表被转换为一个DAG。有些步骤可以并行(如生成文本和设计图表),有些必须有先后顺序(必须先分析数据才能生成报告)。编排器拿到DAG后,遍历每个节点,根据其所需的能力描述,调用上述发现机制,为每个节点绑定一个具体的Agent实例,并估算整个流程的关键路径和预计完成时间。

实操心得:让大模型做规划时,最大的坑在于其输出的步骤可能不精确或无法映射到现有能力。我们的解决方案是提供一份详细的“能力目录”作为上下文给规划Agent,并让它在规划时,每个步骤都尽量引用目录中已有的能力名和输入输出格式。同时,设计一个“验证与回退”环节:如果某个步骤找不到匹配的Agent,规划器需要尝试重新规划或向用户请求澄清。

3.3 通信协议与会话管理机制

Agent间的对话不是一次性的请求-响应,复杂的任务往往需要多轮交互。我们设计了基于会话的通信协议。每一条消息都包含一个全局唯一的session_id,用于关联同一任务下的所有消息交换。消息体基本结构如下:

{ "header": { "message_id": "uuid", "session_id": "uuid", "from_agent": "agent_a_id", "to_agent": "agent_b_id", "timestamp": "2023-10-27T10:00:00Z", "message_type": "request|response|error|heartbeat" }, "payload": { // 具体内容,符合对应能力的JSON Schema } }

对于需要多轮对话的能力(例如一个需要反复追问以澄清需求的客服Agent),我们在能力描述中增加了supports_multi_turn: true的标志。调用方在发起请求后,需要维持会话状态,并处理可能的后续追问消息。

错误处理与重试是通信可靠性的保障。我们定义了标准的错误码和重试策略。对于瞬态错误(如网络超时),系统会自动指数退避重试。对于业务逻辑错误,错误消息会沿着任务链向上传递,最终可能触发整个任务的重新规划或向用户报错。

3.4 共识、安全与信任机制

多个Agent协作,难免涉及“谁说了算”和“能不能信”的问题。

  • 轻量级共识:对于简单的状态同步,我们采用“最终一致性”模型。对于需要强一致性的关键操作(如分配一个全局唯一的任务ID),我们使用注册中心(etcd)提供的分布式锁和原子操作来实现。
  • 安全与权限:不是所有Agent都能互相调用。我们引入了基于能力的访问控制。每个Agent在注册时声明其提供的“能力”和需要的“权限”。网络中存在一个“策略执行点”,在任务绑定阶段检查调用方Agent是否有权使用目标Agent的某个能力。通信通道全部使用TLS加密,消息内容也可选择性地进行端到端加密。
  • 信任与声誉系统:这是更高级的机制,在我们的初级原型中仅做了简单模拟。我们为每个Agent维护一个“信誉分”,基于其任务完成成功率、响应时间、结果质量(可通过人工反馈或与其他Agent结果交叉验证得到)动态调整。任务编排器在绑定时,会优先选择信誉分高的Agent。这形成了一个简单的市场经济和淘汰机制,激励Agent提供可靠服务。

4. 原型系统搭建实战:从零到一的踩坑之旅

理论说得再多,不如动手搭一个。下面我就分享我们搭建一个最小可行分布式Agent网络原型的具体步骤和遇到的真实问题。

4.1 技术栈选型与基础环境搭建

我们的目标是快速验证架构,因此技术栈选择遵循“成熟、轻量、云原生”的原则。

  • 容器与编排:Docker + Kubernetes (Minikube用于本地开发,生产环境可用k3s)。K8s的Deployment和Service为我们管理Agent的生命周期提供了极大便利。
  • 消息总线:NATS。它轻量、高性能,支持多种消息模式(发布订阅、请求响应、队列),非常适合微服务或Agent间的通信。相比Kafka,它更简单,运维成本低。
  • 注册中心:etcd。它是K8s的事实标准,强一致性,提供可靠的键值存储和Watch机制,非常适合做服务发现。
  • 编排引擎:自定义Go服务。我们没有用现成的如Airflow,因为需要深度集成我们的能力发现和Agent通信模型。核心逻辑其实不复杂:解析DAG,查询etcd,发布任务消息。
  • Agent开发框架:Python + FastAPI。Python在AI领域生态丰富,FastAPI能快速构建提供HTTP健康检查和管理接口的Agent容器。每个Agent核心是一个消息处理循环,监听NATS主题。

环境搭建步骤

  1. 启动Minikube:minikube start --cpus=4 --memory=8192
  2. 在K8s中部署NATS和etcd集群。这里强烈建议使用Helm Chart,一键部署非常方便:helm install nats nats/natshelm install etcd bitnami/etcd
  3. 构建一个通用的Agent基础镜像。这个镜像包含Python、FastAPI、NATS客户端和etcd客户端库,以及一个标准的启动脚本。

4.2 实现一个简单的多Agent协作场景

我们设计了一个经典场景:智能内容创作。任务描述是:“基于关键词‘量子计算’和‘人工智能’,生成一篇技术博客的标题、大纲和引言段落。”

我们创建了四个Agent:

  1. Planner Agent:接收用户原始指令,进行任务分解。它本身是一个大模型Agent(我们用了ChatGPT API),提示词被设计为输出一个符合我们内部DSL的JSON规划。
  2. TitleGenerator Agent:专精于生成吸引人的博客标题。
  3. OutlineGenerator Agent:专精于生成结构清晰的文章大纲。
  4. IntroWriter Agent:专精于撰写文章引言。

工作流程实现

  1. 用户通过REST API向网关提交任务{“task”: “generate blog content”, “keywords”: [“quantum computing”, “AI”]}
  2. 网关将请求转发给Orchestrator(编排器)。
  3. Orchestrator 调用Planner Agent。Planner分析后返回规划:
    { "steps": [ {"id": "1", "capability": "generate_title", "input": {"keywords": ["quantum computing", "AI"], "tone": "technical"} }, {"id": "2", "capability": "generate_outline", "input": {"keywords": ["quantum computing", "AI"], "title": "$[1].output.title"]} }, {"id": "3", "capability": "write_introduction", "input": {"keywords": ["quantum computing", "AI"], "title": "$[1].output.title", "outline": "$[2].output.sections"]} } ], "dependencies": {"2": ["1"], "3": ["1", "2"]} // 步骤2依赖1,步骤3依赖1和2 }
    注意$[1].output.title这种语法,表示引用步骤1的输出中的title字段。这是我们的上下文传递机制。
  4. Orchestrator 解析规划,构建DAG。它首先查询etcd,发现TitleGenerator Agent。然后通过NATS向requests.title_generation主题发布消息,消息头中携带本次任务的session_id
  5. TitleGenerator Agent 处理请求,生成标题,然后将结果发布到responses.<session_id>.title主题。Orchestrator 订阅该主题,收到结果后,更新任务上下文。
  6. 由于步骤2依赖步骤1,Orchestrator 在收到标题后,才触发OutlineGenerator。它将标题和关键词一起作为输入发送。
  7. 同理,在收到大纲后,触发IntroWriter。
  8. 所有步骤完成后,Orchestrator 将三个结果聚合,通过网关返回给用户。

4.3 核心代码片段与配置解析

Agent通用启动模板(Python)

import asyncio import json import nats from etcd3 import Client as EtcdClient from fastapi import FastAPI import uvicorn app = FastAPI() # 1. 从环境变量获取配置 AGENT_ID = os.getenv('AGENT_ID') CAPABILITY = json.loads(os.getenv('CAPABILITY')) # 能力描述JSON NATS_URL = os.getenv('NATS_URL', 'nats://nats:4222') ETCD_HOST = os.getenv('ETCD_HOST', 'etcd') # 2. 连接到NATS和etcd nc = await nats.connect(NATS_URL) etcd = EtcdClient(host=ETCD_HOST, port=2379) # 3. 向etcd注册自己 lease = etcd.lease(ttl=30) # 30秒TTL,需要定期续约 registration_key = f"/agents/{AGENT_ID}" etcd.put(registration_key, json.dumps({ 'status': 'healthy', 'capability': CAPABILITY, 'endpoint': f'requests.{CAPABILITY["name"]}' # 订阅的主题 }), lease=lease.id) # 4. 订阅消息主题并处理 async def message_handler(msg): data = json.loads(msg.data.decode()) session_id = data['header']['session_id'] # 处理业务逻辑... result = process(data['payload']) # 发布响应 await nc.publish(f"responses.{session_id}.{CAPABILITY['name']}", json.dumps({ 'header': {'session_id': session_id, 'from_agent': AGENT_ID}, 'payload': result }).encode()) subscription = await nc.subscribe(CAPABILITY['endpoint'], cb=message_handler) # 5. 启动一个后台任务定期续约和健康检查 async def heartbeat(): while True: await asyncio.sleep(20) etcd.refresh_lease(lease.id) # 续约 # 可以更新负载信息等 etcd.put(registration_key, json.dumps({...}), lease=lease.id) # 6. 提供HTTP健康检查端点(供K8s用) @app.get("/health") def health(): return {"status": "ok"} if __name__ == "__main__": asyncio.run(main()) uvicorn.run(app, host="0.0.0.0", port=8000)

Orchestrator 的任务调度核心逻辑(伪代码)

func executeTask(plan Plan) { ctx := createTaskContext(plan.SessionID) dag := buildDAG(plan.Steps, plan.Dependencies) // 拓扑排序遍历DAG for node in topologicalSort(dag) { // 等待所有依赖完成 waitForDependencies(node, ctx) // 发现可用Agent agentList := discoverAgents(node.CapabilityRequirement) if len(agentList) == 0 { ctx.RecordError(fmt.Errorf("no agent found for capability: %s", node.Capability)) break } // 选择最优Agent(基于负载、延迟等) selectedAgent := selectBestAgent(agentList) // 准备输入数据,处理变量引用如 $[1].output.title inputData := renderInputTemplate(node.Input, ctx.GetOutputs()) // 通过NATS发送请求 msg := buildRequestMessage(ctx.SessionID, selectedAgent.Endpoint, inputData) natsClient.Publish(msg) // 异步等待响应,设置超时 responseChan := subscribeToResponse(ctx.SessionID, node.Capability) select { case resp := <-responseChan: ctx.SetOutput(node.ID, resp.Payload) node.Status = "completed" case <-time.After(30 * time.Second): ctx.RecordError(fmt.Errorf("timeout for node %s", node.ID)) node.Status = "failed" // 触发重试或故障转移 handleFailure(node, selectedAgent, ctx) } } // 所有节点完成后,聚合结果 if ctx.IsSuccess() { finalResult := aggregateResults(ctx) sendToUser(finalResult) } else { sendErrorToUser(ctx.Errors()) } }

5. 常见问题、调试技巧与性能优化

在开发和测试原型的过程中,我们遇到了无数坑。这里把最具代表性的问题和解决方案整理出来,希望能帮你绕过这些弯路。

5.1 网络通信与一致性难题

问题1:消息丢失或重复处理。在分布式异步系统中,网络分区、Agent重启都会导致消息问题。我们的NATS配置了持久化,但对于关键任务,仅靠消息队列的“至少一次”投递语义不够。

  • 解决方案:在应用层实现幂等性处理。每个消息携带唯一的message_id,Agent在处理前,先检查本地是否已处理过该ID(可以维护一个近期已处理ID的缓存)。对于重复消息,直接返回之前的处理结果。对于任务请求,我们在Orchestrator侧实现了简单的确认和重试机制,只有收到明确响应或超时后,才认为失败并重试。

问题2:Agent状态不一致。Agent在etcd注册了,但可能因为网络延迟或处理阻塞,实际已无法提供服务。

  • 解决方案:强化健康检查心跳机制。每个Agent除了定期续约etcd租约,还提供一个/healthHTTP端点。Orchestrator或一个独立的“健康监控Agent”会定期探测。如果连续失败,则将其标记为不健康并从可用列表中剔除。同时,我们在任务消息中增加了超时设置,避免长时间等待一个僵死的Agent。

问题3:任务上下文传递复杂。在DAG执行中,后续步骤需要前面步骤的输出。如何高效、清晰地传递这些数据?

  • 解决方案:我们设计了一个集中式的任务上下文存储。Orchestrator维护一个以session_id为键的上下文对象,存储在Redis中。每个步骤完成后,将其输出写入Redis。后续步骤需要时,Orchestrator从Redis中取出并组装输入。这样避免了在消息中传递大量数据,也使得任务状态可以持久化,支持从失败点恢复。

5.2 资源管理与调度优化

问题4:某些能力类型的Agent成为瓶颈。例如,所有任务都需要调用“大语言模型Agent”,导致其负载过高,队列堆积。

  • 解决方案:实现基于负载的智能路由。在Agent注册时,除了能力描述,还要上报实时负载指标(如CPU使用率、内存使用率、待处理队列长度)。Orchestrator在选择Agent时,采用加权轮询或最少连接数算法,优先将任务分配给负载低的实例。同时,我们设置了自动扩缩容规则(Horizontal Pod Autoscaler),当某个Agent类型的平均负载超过阈值时,自动增加Pod副本数。

问题5:任务优先级和资源抢占。高优先级的紧急任务需要尽快得到执行。

  • 解决方案:在任务消息和Agent队列中引入优先级概念。NATS支持带优先级的队列。Orchestrator在发布消息时指定优先级。高优先级的任务可以被排到队列前面。对于正在执行低优先级任务的Agent,我们目前没有做抢占(这很复杂),但可以通过为高优先级任务预留专用Agent实例池来实现。

5.3 调试与监控实践

调试一个动态的、分布式的Agent网络是巨大的挑战。

技巧1:全链路追踪。我们集成了OpenTelemetry。每个任务从网关入口开始,生成一个唯一的Trace ID,并随着消息在Agent间传递。每个重要的操作(发送消息、处理消息、调用外部API)都生成Span。最终可以在Jaeger这样的界面上看到整个任务流的完整时序图,哪个环节耗时最长、哪里出了错,一目了然。

技巧2:结构化日志与集中收集。每个Agent都将日志以JSON格式输出,包含agent_id,session_id,trace_id等关键字段。使用Fluentd或Filebeat收集所有容器的日志,发送到Elasticsearch。在Kibana中,我们可以轻松地通过session_id过滤出单个任务在所有相关Agent中的日志,重现整个执行过程。

技巧3:定义清晰的Agent状态和度量指标。我们为每个Agent暴露了Prometheus指标,包括:请求总数、成功/失败数、平均响应时间、当前并发数等。为Orchestrator暴露了:任务吞吐量、各阶段排队任务数、DAG执行成功率等。通过Grafana仪表盘,可以实时监控整个网络的健康度和性能瓶颈。

一个典型的排错流程

  1. 用户报告任务失败。
  2. 在运维面板通过session_id查询到该任务的Trace,发现是在IntroWriter Agent处超时。
  3. 在日志系统中用同一个session_id过滤,查看IntroWriter当时的日志,发现它在调用外部GPT API时发生了网络异常。
  4. 检查该IntroWriterPod的资源监控,发现其网络连接数异常。进一步排查,可能是节点网络问题或Pod配置错误。
  5. 根据错误,决定重启Pod、迁移到其他节点,或者优化其重试机制。

搭建和运营一个分布式Agent网络,就像管理一个数字化的团队。架构是组织架构,通信机制是工作流程和会议制度,关键机制是绩效考核和协作规范。这个领域还在飞速演进,我们的原型也只是揭开了冰山一角。但可以肯定的是,当单个模型的智力增长进入平台期,通过协同与组织来提升整体智能,将是下一个重要的突破口。