动态

详情 返回 返回

基於 Spring AI Alibaba + Nacos 的分佈式 Multi-Agent 構建指南 - 动态 详情

作者:如漫、席翁

AI Agent 的構建模式正在從“單個智能體做所有事”走向“多個專精智能體協作”,以更好地拆解並解決複雜任務、更精準的選取和使用工具。A2A(Agent-to-Agent)協議作為統一的通信層,旨在為跨進程、跨語言的智能體互操作提供標準化語義與傳輸通道,從而解決智能體數量增加引起的運維、管理和部署成本過高等問題。

為了讓開發者能夠高效、便捷的構建分佈式多智能體系統,同時更專注於 Agent 本身功能的構建和調試。Spring AI Alibaba 與 Nacos 在今年的雲棲大會上協同發佈了 1.0.0.4 與 3.1.0 版本。

其中,Nacos 3.1.0 引入 A2A 了註冊中心功能,提供了輕量化的 Agent 服務註冊與發現能力;Spring AI Alibaba 通過集成 Nacos,提供了開箱即用的 Agent 註冊、Agent 發現與負載均衡能力,讓開發者能夠快速構建使用 A2A 標準協議通信的分佈式多智能體系統。

本文將針對 Spring AI Alibaba + Nacos 的分佈式多智能體構建方案展開介紹,同時結合 Demo 説明快速開發方法與實際效果。

為什麼需要分佈式多智能體?

從單智能體到多智能體

隨着開發者期望智能體解決的問題複雜性和專業性提高,伴隨着工具數量的增加、多輪會話導致的消息上下文膨脹,我們發現單智能體很難作為一個“全面的超級專家”,來解決多種複合類型的問題。

為了有效解決這個問題,工程上提出了多智能體模式,在這種模式下,系統由多個具備一定自治能力的 Agent 組成,每個 Agent 有自己的角色、能力或工具使用範圍。它們之間可以通過消息或上下文進行交互,協同完成複雜目標。多智能體模式具有較強的靈活性和適應性,在研究型問答、複雜數據分析或跨領域問題求解等複雜任務場景下能夠取得更好的效果,已經得到越來越多開發者的青睞。

image

多智能體的分佈式演進趨勢

在過去的一段時間裏,AI 應用框架支持的多智能體構建模式,主要以單進程、多線程模式為主。從代碼形態上來看,多個 Agent 被實現在同一個倉庫;從部署形態上來看,多個智能體被整合到一個服務中,每個智能體以線程的方式存在於服務內並互相通信。這種實現方式在原型驗證階段,能夠快速實現並調試功能,但在企業級落地和持續生產迭代過程中,逐漸暴露出以下問題:

  1. 組織協同困難。 企業內部的組織主要以職能或領域劃分,在一個多智能體系統中,交易智能體和搜索智能體作為領域專精智能體,更適合由支付團隊和搜索團隊獨立維護,但在上述模式下,兩個團隊需要共同維護同一份代碼、同一個服務,這些無疑會給跨團隊協同帶來極大的困難,更不符合企業組織拆分的初衷和原則。
  2. 可用性難保證。 由於所有智能體共享同一進程資源,一個智能體出現問題引起的服務崩潰,可能會導致其他智能體均不可用,無法有效隔離故障;同時,也無法按智能體維度進行水平擴縮容,難以實現細粒度的資源配額和限流。
  3. 存在安全風險。 內存與上下文共享導致權限邊界模糊,難以對不同智能體實施最小權限與數據隔離策略,存在一定的安全風險。

因此,將多智能體系統拆解成分佈式架構,一方面適配於組織架構、便於各自領域的智能體獨立開發和迭代,一方面便於提升系統的整體可用性和安全性,正在逐漸成為複雜多智能體系統企業級落地的必要選擇。

基於 A2A 協議的分佈式多智能體構建方案

Agent2Agent (A2A) [ 1] 協議是由 Google 開發並捐贈給 Linux 基金會的一項開放標準,旨在實現 AI Agent 之間的無縫通信與協作,從而解決智能體數量增加引起的運維、管理和部署成本過高等問題,實現像構建微服務架構一樣構建 Multi Agent 系統。

為了管理這些 Agent,Nacos 從 3.1.0 版本開始,提供了 Agent 註冊中心(A2A Registry),實現 Agent 的註冊、發現、命名空間隔離、版本管理等功能。Spring AI Alibaba 作為一款高代碼 AI 應用開發框架,形態上天然適合構建分佈式多智能體系統,從 1.0.0.4 版本開始,支持通過 Agentic API 便捷定義和構建 Agent,同時集成 Nacos 進行分佈式 Agent 之間的 A2A 協議通信。

基於 Spring AI Alibaba + Nacos 的實現方案示意如下圖所示。Server Agent 在啓動時,會將 Agent 信息與端點信息註冊到 Nacos 中;Client Agent 監聽並獲取 Agent 信息,同時發現對應 Agent 的端點列表;在需要訪問 Server Agent 時,會通過負載均衡選取 Agent 端點,並採用 A2A 協議進行通信。

image

快速開發指南

Demo 介紹

為了方便開發者參考和使用,我們基於 Spring AI Alibaba + Nacos 構建並開源了“雲邊奶茶鋪智能助手” 分佈式多智能體 Demo,讓消費者一站式諮詢、點單與反饋,持續根據用户行為和喜好推薦並下單產品, 從而實現“越來越懂我”,“越用越好用”的用户體驗。

構建 Demo 所使用到的 AI 技術包括 A2A、MCP、RAG、Memory、Prompt 管理、AI 觀測等,支持集成 Nacos、Higress AI 網關、Spring AI Alibaba Admin、百鍊知識庫 、Mem0 等。本文將主要圍繞 A2A 能力展開介紹。

Demo 工程地址請參見:spring-ai-alibaba-multi-agent-demo [ 2]

完整的 Demo 效果演示和介紹,可以觀看視頻瞭解↓

分佈式多智能體 Demo 演示——基於 Spring AI Alibaba Agentic API 構建:https://www.bilibili.com/video/BV12Kniz2EE6/

Demo 的整體 Agent 依賴關係如下圖所示。用户的會話首先會傳遞給 Supervisor Agent,Supervisor Agent 根據對話屬性,委託 Consult Agent、Business Agent 和 Feedback Agent 子智能體處理不同類型的問題,這些子智能體通過多輪模型對話交互以及使用各自的工具完成任務後,將結果返回給 Supervisor Agent,並最終返回給用户。

四個 Agent 分別在不同的進程中獨立部署,支持水平擴展。Supervisor Agent 與 Sub Agents 集成 Nacos 進行 Agent 註冊與發現,並通過 A2A 協議進行分佈式通信。

接下來,我們將以 Feedback Agent 與 Supervisor Agent 為例,分別介紹作為 AI 應用開發者,如何開發實現 A2A Server Agent 與 A2A Client Agent。

image

構建 A2A Server Agent

以 Feedback Agent 為例,介紹使用 Spring AI Alibaba 構建 A2A Server Agent 的關鍵步驟。

  • 引入 Pom 依賴
<!-- Spring AI Alibaba版本1.0.0.4及以上 -->
<properties>
    <spring.ai.alibaba.version>1.0.0.4</spring.ai.alibaba.version>
</properties>
<dependencies>
    <!-- 引入A2A Server starter -->
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-starter-a2a-server</artifactId>
        <version>${spring-ai-alibaba.version}</version>
    </dependency>
    <!-- 引入A2A Nacos 註冊中心 -->
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-starter-a2a-registry</artifactId>
        <version>${spring-ai-alibaba.version}</version>
    </dependency>
    <!-- 引入A2A 百鍊大模型客户端,可以用其他的spring ai大模型客户端代替,如openai -->
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
        <version>${spring-ai-alibaba.version}</version>
    </dependency>
</dependencies>
  • 構建 Agent

通過 Spring AI Alibaba 中定義的 Agentic API 快速定義及構建 Agent 運行邏輯,如下所示,使用幾十行代碼即可創建用於處理用户反饋的 ReAct Agent。

@Configuration
public class FeedbackAgent {
    private static final Logger logger = LoggerFactory.getLogger(FeedbackAgent.class);
@Autowired
private FeedbackAgentPromptConfig promptConfig;
    @Bean
    public ReactAgent feedbackSubAgentBean(@Qualifier("dashscopeChatModel") ChatModel chatModel,
                                           @Autowired(required = false)
                                           @Qualifier("loadbalancedMcpSyncToolCallbacks")
                                           ToolCallbackProvider toolsProvider) throws Exception {
KeyStrategyFactory stateFactory = () -> {
            HashMap<String, KeyStrategy> keyStrategyHashMap = new HashMap<>();
            keyStrategyHashMap.put("messages", new ReplaceStrategy());
return keyStrategyHashMap;
        };
return ReactAgent.builder()
                .name("feedback_agent")
                .model(chatModel)
                .state(stateFactory)
                .description("用户反饋相關業務處理,支持從反饋中提取和記錄用户偏好")
                .instruction(promptConfig.getFeedbackAgentInstruction())
                .inputKey("messages")
                .outputKey("messages")
                .tools(Arrays.asList(toolsProvider.getToolCallbacks()))
                .build();
    }
}
  • 配置 Agent 註冊參數
spring:
  ai:
    alibaba:
      a2a:
        # 配置Nacos的地址和用户名密碼
        nacos:
          server-addr: ${NACOS_SERVER_ADDR:127.0.0.1:8848}
          username: ${NACOS_USERNAME:nacos}
          password: ${NACOS_PASSWORD:nacos}
        # 配置A2A server的額外信息,如版本號,agentCard中的Skills等
        server:
          version: 1.0.0
          card:
            # 配置Agent(AgentCard)的URL,若當前版本無可用端點,會使用此 URL
            url: http://localhost:9999/a2a
            name: feedback_agent
            description: 雲邊奶茶鋪反饋處理助手
            provider:
              organization: 雲邊奶茶鋪
              url: xxxxx

啓動 A2A Server 後,即可在 Nacos 控制枱上看到註冊的 Agent 信息。如下圖所示。

image

image

Feedback Agent 的完整的代碼實現請詳見:feedback-sub-agent [ 3]

構建 A2A Client Agent

以 Supervisor Agent 為例,介紹使用 Spring AI Alibaba 構建 Client Agent 的關鍵步驟。

  • 引入 Pom 依賴
<properties>
  <spring.ai.alibaba.version>1.0.0.4</spring.ai.alibaba.version>
</properties>
<dependencies>
  <!-- 引入A2A Client starter -->
  <dependency>
    <groupId>com.alibaba.cloud.ai</groupId>
    <artifactId>spring-ai-alibaba-starter-a2a-client</artifactId>
    <version>${spring-ai-alibaba.version}</version>
  </dependency>
  <!-- 引入A2A Nacos 註冊中心 -->
  <dependency>
    <groupId>com.alibaba.cloud.ai</groupId>
    <artifactId>spring-ai-alibaba-starter-a2a-registry</artifactId>
    <version>${spring-ai-alibaba.version}</version>
  </dependency>
  <!-- 引入A2A 百鍊大模型客户端,可以用其他的spring ai大模型客户端代替,如openai -->
  <dependency>
    <groupId>com.alibaba.cloud.ai</groupId>
    <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
    <version>${spring-ai-alibaba.version}</version>
  </dependency>
</dependencies>
  • 構建 Agent

通過 Spring AI Alibaba 中定義的 Agentic API 快速構建 A2aRemoteAgent 作為 Supervisor Agent 的 Sub Agent,其中 Agent 的 Card 和端點信息是從 Nacos 中發現並監聽;接下來構建 LlmRoutingAgent 作為 Supervisor Agent。

@Configuration
public class SupervisorAgent {
    @Autowired
    private SupervisorAgentPromptConfig promptConfig;
    @Bean
    public LlmRoutingAgent supervisorAgentBean(ChatModel chatModel,
                                               @Autowired AgentCardProvider agentCardProvider) throws Exception {
        KeyStrategyFactory stateFactory = () -> {
            HashMap<String, KeyStrategy> keyStrategyHashMap = new HashMap<>();
            keyStrategyHashMap.put("input", new ReplaceStrategy());
            keyStrategyHashMap.put("chat_id", new ReplaceStrategy());
            keyStrategyHashMap.put("user_id", new ReplaceStrategy());
            keyStrategyHashMap.put("messages", new ReplaceStrategy());
            return keyStrategyHashMap;
        };
        // 構建A2aRemoteAgent, AgentCard與端點信息實際是從Nacos發現並監聽
        A2aRemoteAgent consultAgent = A2aRemoteAgent.builder()
                .name("consult_agent")
                .agentCardProvider(agentCardProvider)
                .build();
        A2aRemoteAgent feedbackAgent = A2aRemoteAgent.builder()
                .name("feedback_agent")
                .agentCardProvider(agentCardProvider)
                .build();
        A2aRemoteAgent orderAgent = A2aRemoteAgent.builder()
                .name("order_agent")
                .agentCardProvider(agentCardProvider)
                .build();
        // 構建Supervisor Agent, 將上述創建的A2aRemoteAgent作為Sub Agent註冊
        return LlmRoutingAgent.builder()
                .name("supervisor_agent")
                .model(chatModel)
                .state(stateFactory)
                .description(promptConfig.getSupervisorAgentInstruction())
                .inputKey("input")
                .outputKey("messages")
                .subAgents(List.of(consultAgent, feedbackAgent, orderAgent))
                .build();
    }
}
  • 配置 Agent 發現參數
spring:
  ai:
    alibaba:
      a2a:
        nacos:
          server-addr: ${NACOS_SERVER_ADDR:127.0.0.1:8848}
          username: ${NACOS_USERNAME:nacos}
          password: ${NACOS_PASSWORD:nacos}
          discovery:
            enabled: true  # 開啓從Nacos中自動發現Agent

完成 Agent 定義和構建後,可以將 Supervisor Agent 暴露到 API 中以支持對話調用,Supervisor Agent 將會根據會話內容,將任務按需分派給通過 Nacos 發現的子智能體,並通過 A2A 協議通信。

Supervisor Agent 完整的代碼實現請詳見:supervisor-agent [ 4]

運行效果演示

將上文所述 Demo 的全部組件完整運行起來之後,即可在瀏覽器中打開頁面並和雲邊奶茶鋪智能助手進行對話。

image

讓智能助手推薦奶茶產品時,Supervisor Agent 會基於 Nacos 的監聽和發現,通過 A2A 協議調用 Consult Agent 服務的一個實例進行處理,Consult Agent 在模型驅動下,通過使用百鍊知識庫檢索、數據庫搜索、記憶檢索等工具,獲取用户畫像和產品信息,並根據用户喜好生成推薦內容並返回結果。

image

同樣,讓智能助手下訂單或者查詢訂單時,Supervisor Agent 會基於 Nacos 的監聽和發現,通過 A2A 協議調用 Order Agent 服務的一個實例進行處理,Order Agent 在模型驅動下,通過訪問 Order Mcp Server 的一個實例調用創建訂單、查詢訂單等工具,完成訂單創建或查詢,並返回結果。

image

更完整的 Demo 效果演示和介紹,可以進一步觀看:

分佈式多智能體 Demo 演示——基於 Spring AI Alibaba Agentic API 構建(https://www.bilibili.com/video/BV12Kniz2EE6/)詳細瞭解。

講在最後

無論從業務角度,還是技術角度來看,智能體的分佈式架構都是必然選擇。本文介紹了基於 Spring AI Alibaba + Nacos 的實現方案,幫助開發者快速構建分佈式多智能體系統,實現智能體彈性伸縮與跨團隊解耦。同時以“雲邊奶茶鋪 Demo”為例介紹了具體開發方式。

目前,阿里雲 MSE 商業版 Nacos 也已經支持了 A2A Registry 的能力,同時還具備 MCP Registry、Prompt 動態配置管理等能力,和開源 Nacos 相比,具有更高的可用性,更適用於企業級 AI 應用的構建。

此外,AgentScope Java 將於近期發佈 1.0 版本,Spring AI Alibaba 後續會把內核升級為 AgentScope ,繼續為 Java 開發者打造一個自動裝配、開箱即用的 Agent 開發框架。

歡迎您一起參與探索並構建 Multi Agent 系統,讓分佈式多智能體加速走向更高規模的生產。

相關鏈接:

[1] Agent2Agent (A2A)

https://a2a-protocol.org/latest/

[2] spring-ai-alibaba-multi-agent-demo

https://github.com/spring-ai-alibaba/spring-ai-alibaba-multi-agent-demo

[3] feedback-sub-agent

https://github.com/spring-ai-alibaba/spring-ai-alibaba-multi-agent-demo/tree/main/feedback-sub-agent

[4] supervisor-agent

https://github.com/spring-ai-alibaba/spring-ai-alibaba-multi-agent-demo/tree/main/supervisor-ag

點擊此處,關注並瞭解 agentscope-java。

user avatar openfuyao 头像 dolphinscheduler 头像 apachekylin 头像 chunzhendexiaogou 头像 api7 头像 wangying_5e4b645338a98 头像
点赞 6 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.