返回資料庫
A2A

在 Hermes Agent 上部署 A2A:Docker 閘道參考堆疊

最後更新:2026年7月23日

在生產環境中運行 A2A 意味著橋接兩個從未被設計為相互通訊的協定——並在一個閘道後面完成認證、租戶隔離和串流傳輸而不丟失 token。這個參考堆疊解決了阻止 A2A 部署的三個問題:協定轉換(JSON-RPC 2.0 到 OpenAI 相容的 chat completions)、串流協調(A2A 工件 SSE 到 Hermes 執行事件 SSE)以及多租戶安全(每次查詢的 PostgreSQL 行級安全)。如果你需要不同框架上的代理相互委託工作,這裡的模式就是部署路徑。

關鍵要點

  • 3 層、1 個 Docker Compose 堆疊 — SilvaEngine Gateway 負責傳輸與驗證,A2A Daemon Engine 負責協定邏輯,HermesAgentHandler 橋接至 Hermes Agent 的 OpenAI 相容 API。docker-a2a-hermes-agent-gateway 儲存庫封裝了這三層。
  • 單一連接埠上的 5 個協定介面 — JSON-RPC 2.0、GraphQL、SSE 串流、SSE 推送與 Agent Card 探索,全數位於連接埠 8765 上單一閘道之後,並採用 JWT 或 AWS Cognito 驗證。
  • PostgreSQL 列層級安全強制租戶隔離partition_key = "{endpoint_id}#{Part-Id}" 複合鍵透過 RLS 政策在資料庫層級於所有四張 A2A 資料表上強制執行,而非僅在應用程式碼中。
  • A2A SDK v2 的單一訊息限制形塑了串流架構 — 橋接器即時將 token 分塊推送至 SSE,並在串流完成後將單一累積 Message 推送至 SDK EventQueue,避免 InvalidAgentResponseError
  • 跨 5 個指令稿的 15 項 E2E 測試檢查 — 從非串流冒煙測試到具備 HTTP 回退驗證的完整 SSE 串流管線,皆可透過 pip install requests 執行。

Agent2Agent Protocol(A2A)定義了 AI 代理彼此之間如何透過 JSON-RPC 2.0 進行探索、委派與任務串流。Hermes Agent(由 Nous Research 開發)在 /v1/chat/completions 暴露了 OpenAI 相容 API 伺服器,以及在 /v1/runs/v1/runs/{id}/events 提供基於 run 的 SSE 串流介面。兩者並非使用相同語言。A2A 發送帶有結構化 parts 的 message/send;Hermes 接收聊天補全承載。A2A 透過 SSE 串流任務產物;Hermes 透過 run 事件串流 token 增量。

docker-a2a-hermes-agent-gateway 儲存庫在單一容器映像與 docker compose 堆疊中彌合了這一鴻溝。它運行 SilvaEngine Gateway,僅註冊 a2a_daemon_engine 模組,暴露完整的 A2A 協定介面,並透過 HTTP + SSE 將 A2A 任務橋接至 Hermes Agent API 伺服器實例。狀態持久化至內建的 PostgreSQL 後端,並以列層級安全實現租戶隔離。

本文描繪三層架構、從 A2A 用戶端到 Hermes 再返回的請求生命週期、配置與部署模式,以及在正式環境中於 Hermes Agent 上運行 A2A 的營運考量。這是一份參考部署導覽 — 一般模式(閘道居間的 A2A 橋接至任何代理框架)為主題;Docker 堆疊則為實作範例。

三層架構

該堆疊將職責分為三層,每層由不同元件負責:

A2A on Hermes Agent — 三層堆疊 docker-a2a-hermes-agent-gateway 參考部署 1 A2A 用戶端 任何使用 JSON-RPC 2.0 的代理或應用程式 message/send · tasks/get · SSE 2 SilvaEngine Gateway 傳輸 · 驗證 · 路由 · SSE 用戶端生命週期 JWT / Cognito 驗證 Part-Id 租戶路由 SSE 用戶端登錄 速率限制 3 A2A Daemon Engine 協定邏輯 · 任務狀態機 · 處理器分派 Agent Card 供應 任務生命週期 HermesAgentHandler 雙路徑串流 Hermes Agent API 伺服器 OpenAI 相容 · SSE run /v1/chat/completions /v1/runs + /events PostgreSQL 持久化 · RLS 租戶隔離 a2a_agents / tasks messages / settings 閘道是唯一常駐服務 — Hermes 與 PostgreSQL 為設定檔控制的兄弟元件 — ideabosque.com/library

閘道是唯一常駐服務。Hermes 與 PostgreSQL 皆為設定檔控制的兄弟元件 — 將它們打包以獲得自足堆疊,或關閉設定檔並將 HERMES_API_URLPG_HOST 指向外部實例。這對正式環境相當重要:您可以在自己的 VPC 中運行閘道,並將其指向受管的 Postgres(RDS、Cloud SQL)與運行於其他 GPU 節點的 Hermes 實例。

第 1 層:SilvaEngine Gateway — 傳輸與驗證

SilvaEngine Gateway 是一個 FastAPI 閘道,用於對已安裝模組進行已驗證的同程序存取。它透過可配置的 YAML 路由清單暴露模組的 GraphQL 與 REST 路由 — 新增模組僅需變更清單,無需修改任何閘道 Python 程式碼。在此堆疊中,僅註冊了 A2A Daemon Engine。

閘道負責:

  • 驗證 — 本地 JWT(HS256)或 AWS Cognito(RS256 + JWKS),由 GATEWAY_AUTH_PROVIDER 選擇
  • 路由 — YAML 清單將 URL 路徑對應至模組分派函式
  • SSE 用戶端生命週期sse_manager 依模組解析並管理長生命用戶端連線
  • 速率限制 — 依 IP 的記憶體內速率限制(每 GATEWAY_RATE_WINDOWGATEWAY_RATE_LIMIT 個請求)
  • 執行緒池分派 — 同步模組分派函式在可配置的執行緒池中運行(GATEWAY_DISPATCH_WORKERS,Docker 映像中預設為 32)

閘道從 URL 路徑區段與 Part-Id 請求標頭建構 partition_key = "{endpoint_id}#{Part-Id}"。每個租戶範圍請求都需要該標頭。位於 /{ep}/.well-known/agent-card.json 的 Agent Card 端點依 A2A 規範為公開(無驗證),但仍需要 Part-Id,因為卡片是依分區解析的。

第 2 層:A2A Daemon Engine — 協定邏輯

a2a_daemon_engine 不是獨立服務。它透過 main.py 中的 deploy() 作為已註冊的閘道模組載入,該函式宣告了三個面向閘道的進入點:

進入點 閘道路由 方法 用途
a2a_core_graphql POST /{ep}/a2a_core_graphql POST 代理、任務、訊息、設定的 GraphQL CRUD
a2a POST /{ep}/a2a POST A2A JSON-RPC 協定(message/sendtasks/gettasks/canceltasks/list
sse_message POST /{ep}/a2a_sse POST A2A JSON-RPC 訊息 + 推送至 SSE 用戶端

閘道額外暴露 GET /{ep}/a2a_sse 以供 SSE 串流。daemon 在正式環境中不監聽自己的連接埠,也不運行自己的 HTTP 伺服器。所有傳輸、驗證與 SSE 用戶端生命週期皆由閘道負責。

daemon 提供:

  • A2A SDK v1.0 — 透過 HTTP 的 JSON-RPC,建基於官方 A2A SDK 伺服器模式
  • 公開 Agent Card 位於 /.well-known/agent-card.json,支援 ETag 與 Last-Modified
  • 任務狀態機submittedworkinginput-required | completed | failed | canceled
  • 雙後端持久化 — DynamoDB(PynamoDB)或 PostgreSQL(SQLAlchemy + Alembic)。Docker 映像強制使用 PostgreSQL。
  • 多租戶隔離 — 複合分區鍵({endpoint_id}#{part_id})搭配 PostgreSQL 列層級安全
  • 可插拔 LLM 處理器 — 在代理登錄中以每個代理的 module_name / class_name 選擇

第 3 層:HermesAgentHandler — 橋接器

Hermes 橋接處理器(a2a_daemon_engine/handlers/a2a_hermes_handler.py)是唯一框架專屬的程式碼。它實作了 ask_model() 介面:接受 A2A 訊息 parts 與情境、呼叫 Hermes Agent API 伺服器、將回應轉換回 A2A 訊息 parts,並在串流時將 token 增量轉發至 SSE 通道。

處理器支援兩種執行模式:

非串流對應至 Hermes API 伺服器上的 POST /v1/chat/completions — OpenAI 相容端點。請求將轉換後的 A2A 訊息 parts 作為聊天補全承載攜帶。Hermes 處理請求並回傳單一回應。處理器將回應轉換為帶有 ROLE_AGENT 的 A2A Message 並推送至 SDK EventQueue。用戶端收到單一 JSON-RPC 回應,其中包含完整代理文字。

串流對應至 POST /v1/runs 以建立 run,然後開啟 SSE 連線至 GET /v1/runs/{id}/events。Hermes 隨事件發生而串流:token 增量(message.delta)、推理元資料(reasoning.available)、工具呼叫/結果通知、核准請求(approval.required)與生命週期事件(run.createdrun.completedrun.failed)。處理器在背景執行緒中執行排空迴圈。每個 message.delta 事件被推送至閘道的 SSE 管理器以即時傳遞給已連線的用戶端。當 run.completed 到達時,累積的文字以單一 A2A Message 推送至 SDK EventQueue。

請求生命週期

單一帶有 stream=truemessage/send 歷經八個步驟:

1. 用戶端       POST /{ep}/a2a  {jsonrpc, method:"message/send", params}
                標頭: Authorization: Bearer *** Part-Id: 
2. 閘道         驗證 (本地 JWT / Cognito) → 從 routes.yaml 路由匹配
                → partition_key = "{ep}#{Part-Id}"
3. a2a_daemon   dispatch_a2a → A2ADaemonExecutor
                → resolve_agent(): 代理元資料 (DB) > 設定 dict > Config (env)
4. 處理器        HermesAgentHandler (A2A_AI_AGENT_MODULE / _CLASS)
5. Hermes       POST {HERMES_API_URL}/v1/runs   (Bearer HERMES_API_KEY)
                GET  {HERMES_API_URL}/v1/runs/{id}/events   (SSE)
6. 廣播         token 分塊 → GET /{ep}/a2a_sse 上的訂閱者
7. 持久化        task + messages 寫入 PostgreSQL (a2a_* 資料表,RLS 範圍)
8. 回應         累積回覆亦在 HTTP JSON-RPC 結果中回傳

步驟 8 至關重要:即使串流時,HTTP 回應也攜帶完整回覆。錯過 SSE 幀的用戶端仍可回退至 HTTP 回應。E2E 測試套件(test_hermes_sse_live.py)在其步驟 06 中明確驗證此回退。

代理解析優先順序

配置解析遵循優先鏈:代理元資料(DB)→ 設定 dict → Config 預設值(環境變數)。每個代理的覆寫優先於全域預設值。兩個代理可指向不同框架 — 一個指向 Hermes 處理推理密集任務,另一個指向不同處理器處理工作流程編排任務 — 而 A2A 協定介面對呼叫代理看來完全相同。

對於以 Hermes 為後盾的代理,儲存在 a2a_agents 資料表中的元資料如下:

{
  "module_name": "a2a_daemon_engine.handlers.a2a_hermes_handler",
  "class_name": "HermesAgentHandler",
  "hermes_api_url": "http://127.0.0.1:8642",
  "hermes_api_key": "hermes-local-key",
  "hermes_model": "hermes-agent",
  "hermes_timeout": 300.0
}

環境變數預設值(HERMES_API_URLHERMES_API_KEYHERMES_MODEL)讓橋接器在沒有 DB 代理記錄時仍能觸及 Hermes — a2a_ai_agent_utility.py 中的 resolve_agent() 函式在沒有代理記錄時回退至環境變數。這表示您可以啟動堆疊並在未註冊任何代理的情況下發送 message/send,它將使用環境預設值路由至 Hermes。

A2A 狀態對應

橋接器將 Hermes SSE 事件對應至 A2A 任務狀態。此表是橋接器的核心 — 每個框架整合都會產生一張等效表格:

Hermes SSE 事件 A2A 任務狀態 橋接器動作
run.created(回傳 run_id) WORKING 註冊 run_id 以支援取消
message.delta WORKING 累積 token;逐塊推送至 SSE
reasoning.available WORKING 推理元資料 — 無 token 推送
tool.call / tool.result WORKING 僅工具執行元資料
approval.required INPUT_REQUIRED 推送核准分塊;儲存 pending_approval
run.completed COMPLETED 設定串流事件;累積最終文字
run.failed FAILED 推送錯誤分塊;設定 FAILED 狀態
POST /v1/runs/{id}/stop CANCELED 透過 tasks/cancel 外部取消
POST /v1/runs/{id}/approval (繼續 run) 透過 operation="approval_response" 解析

a2a_daemon_engine 儲存庫中的 HERMES_INTEGRATION.md 文件記錄了確切的 Hermes 事件格式、配置鍵與端對端流程細節。

跨代理邊界的人工介入核准

Hermes 支援人工介入核准閘道 — 當代理需要權限以執行敏感動作時,它會暫停並發出核准請求。橋接器將此轉譯為 A2A INPUT_REQUIRED 狀態,向呼叫代理(或人工操作員)發出需要輸入的信號。回應透過 POST /v1/runs/{id}/approval 傳回,run 繼續進行。

此處展現了橋接器模式的價值。A2A 將 INPUT_REQUIRED 定義為一等任務狀態。Hermes 有自己的核准機制。橋接器將兩者相互對應,而呼叫代理 — 它本身可能是運行於完全不同框架上的 A2A 用戶端 — 看到的是標準協定狀態轉換,而非 Hermes 專屬細節。代理委派鏈可包含需要人工核准的步驟(採購授權、資料存取決策、報價核准),而 A2A 協定透明地跨框架邊界承載該閘道。

A2A SDK v2 限制與雙路徑修正

A2A SDK v2(a2a-sdk==1.0.2)對 on_message_send 路徑施加了兩項限制,形塑了橋接器實作:

  1. 僅單一 Message。 向 SDK EventQueue 發出多個 Message 物件會引發 InvalidAgentResponseError: Multiple Message objects received.
  2. 無 TaskStatusUpdateEvent。 狀態事件引發 InvalidAgentResponseError: Received TaskStatusUpdateEvent in message mode.

樸素的橋接器會為每個 token 增量發出一個 Message — 自然的串流模式。SDK 拒絕此行為。它也拒絕 message/send 路徑上的狀態事件(WORKING、COMPLETED)。

修正方式為雙路徑輸出通道:

  • SSE(閘道管理): Token 分塊即時推送至 SSE。已連線的用戶端看到串流輸出即時發生。狀態事件(WORKING、COMPLETED、FAILED)也僅送往 SSE。
  • SDK EventQueue: 串流完成後,包含完整回應文字的單一累積 Message 被推送至 SDK EventQueue。這就是 JSON-RPC message/send 回應所回傳的內容。

用戶端透過 SSE 獲得即時串流,並透過 SDK 獲得乾淨的單一訊息 JSON-RPC 回應。兩個通道皆運作;兩者皆不違反 SDK 限制。

單一連接埠上的協定介面

閘道在單一連接埠(預設 8765)上暴露五個協定介面:

協定 路由 驗證 用途
GraphQL POST /{ep}/a2a_core_graphql A2A 核心查詢/變更(代理、任務、訊息、設定)
JSON-RPC 2.0 POST /{ep}/a2a A2A 協定:message/sendtasks/gettasks/canceltasks/list
SSE(串流) GET /{ep}/a2a_sse 長生命、依分區的 A2A 任務事件串流
SSE(推送) POST /{ep}/a2a_sse JSON-RPC 訊息 + 推送至已連線 SSE 用戶端
Agent Card GET /{ep}/.well-known/agent-card.json 公開 A2A 探索文件(仍需 Part-Id 標頭)

測試套件使用的 JSON-RPC message/send params 形狀:

{
  "message": {
    "role": "ROLE_USER",
    "parts": [{ "text": "Say hello from A2A" }]
  },
  "metadata": {
    "operation": "task_execution",
    "agent_uuid": "a2a-hermes-agent",
    "stream": true,
    "task_data": { "task_id": "my-task-001", "task_type": "hermes_test" },
    "system_prompt": "You are a concise assistant.",
    "conversation_history": []
  }
}

metadata.operation 欄位選擇執行路徑:task_execution 用於支援串流的代理 run,message_response 用於非串流聊天。agent_uuid 指向登錄中的特定代理。stream 旗標啟用 SSE 廣播。task_data.task_id 是呼叫端提供的 id,供 tasks/gettasks/cancel 使用。

SSE 是依分區而非依任務。{ep}#{Part-Id} 中的每個任務廣播至該分區的所有訂閱者。操作順序很重要:在發送訊息前先連線 SSE 監聽器,否則早期的 token 分塊會遺失。

持久化與多租戶

Docker 映像強制 db_backend=postgresql — 不支援 DynamoDB。daemon 使用字面、無前綴的資料表名稱:

資料表 持有
a2a_agents 代理記錄 + 每個代理的處理器/模型元資料
a2a_tasks 任務生命週期 + 狀態
a2a_messages 每個任務的訊息回合
a2a_settings 依分區的設定 dict

因為名稱無前綴,請勿將 PG_DB 與另一個使用相同名稱的模組共用。

租戶隔離使用 PostgreSQL 列層級安全。工作階段變數 app.tenant_id 被設為請求的 partition_key"{endpoint_id}#{Part-Id}"),而 RLS 政策將每個查詢範圍限定於此。當 initialize_tables=1 時,資料表與政策在閘道啟動時自動建立。這表示應用程式碼中被遺忘的 partition_key 過濾器無法洩漏跨租戶列 — 資料庫強制執行邊界。

RLS 實作位於 a2a_daemon_engine/utils/rls.pyset_rls_contextcreate_rls_policies)以及遷移 0005_enable_rls_policiesset_rls_context 函式在連線上執行每個請求的 SET app.tenant_id,而 create_rls_policies 在所有四張 A2A 資料表上啟用並強制 RLS,採用 tenant_isolation 政策。RLS 在 DynamoDB 模式下不生效。

以 Docker Compose 部署

堆疊有一個常駐服務與兩個可選的設定檔控制兄弟元件:

服務 容器名稱 常駐? 設定檔 用途
a2a-gateway a2a-hermes-gateway SilvaEngine Gateway(僅 A2A 路由)+ Hermes 橋接器
postgres a2a-postgres 可選 postgres 內建 PostgreSQL 持久化後端
hermes container-hermes 可選 hermes 內建 Hermes Agent(OpenAI 相容 API + 儀表板)

COMPOSE_PROFILES 是兩個兄弟元件的單一開關:

啟動服務
僅閘道(外部 Postgres + 外部 Hermes)
postgres 閘道 + 內建 Postgres
hermes 閘道 + 內建 Hermes(外部 Postgres)
postgres,hermes 閘道 + 內建 Postgres 與 Hermes(預設)

當兄弟元件被內建時,將其主機參考指向服務名稱:PG_HOST=postgresHERMES_API_URL=http://hermes:<API_SERVER_PORT>。當兄弟元件為外部時,將這些指向您自己的實例(例如 PG_HOST=host.docker.internalHERMES_API_URL=http://host.docker.internal:8642)。

快速開始

cp .env.example .env

# 填入: JWT_SECRET_KEY, ADMIN_PASSWORD, API_SERVER_KEY,
# HERMES_API_KEY (= API_SERVER_KEY), HERMES_MODEL_PROVIDER + provider key, HERMES_MODEL

mkdir -p www/hermes www/projects

DOCKER_BUILDKIT=1 docker compose build
docker compose up -d           # COMPOSE_PROFILES=postgres,hermes 為預設

docker compose ps              # 等待 (healthy)
curl -f http://localhost:8765/health

pip install requests
python test_hermes_hello.py    # 端對端冒煙測試

silvaengine_gatewaya2a_daemon_engine 皆透過 pip 從 git 安裝至映像中(無主機原始碼掛載)。映像是通用的且完全由環境驅動 — 未內建任何密鑰。模組透過 git+httpsideabosque 下的公開 GitHub 儲存庫複製 — 無需憑證或 SSH 部署金鑰。

.env 行內註解陷阱

Docker Compose 的 env_file 解析器不會去除行內註解。像這樣的一行:

HERMES_API_KEY=hermes-local-key   # token for Hermes

會將 HERMES_API_KEY 設為字面字串 hermes-local-key # token for Hermes(包含註解),這會悄悄破壞驗證。規則是:在任何 KEY=value 行的值之後不要放置任何內容。將註記放在變數上方獨立的 # 註解行。

驗證:跨 5 個指令稿的 15 項 E2E 檢查

堆疊隨附獨立的 Python 測試套件(唯一依賴:requests)。它們載入 ./.env,解析或鑄造閘道 JWT,並與運行中的堆疊對話:

指令稿 類型 功能
test_hermes_hello.py 冒煙 非串流 message/send,印出回覆
test_hermes_hello_sse.py 冒煙 一個提示透過 SSE 串流回傳
test_hermes_gateway_live.py E2E 套件 9 項檢查:Hermes 健康狀態、閘道健康狀態、agent card、GraphQL ping、message/sendtasks/gettasks/listtasks/cancel、失敗路徑
test_hermes_sse_live.py E2E 套件 6 項檢查:健康狀態 x2、SSE 連線、即時 token 分塊、COMPLETED 狀態、HTTP 回退
test_hermes_chatbot.py 互動 針對 A2A 介面的 REPL,具備即時 SSE 串流

所有非互動指令稿在每個步驟印出 PASS/FAIL,並在失敗時以非零值結束,因此可作為 CI 閘道。單元測試套件(test_hermes_handler.py)透過 httpx.MockTransport 以模擬 HTTP 執行 24 項測試 — 無需任何服務。

營運模式

免重建的路由變更

routes.yaml 以唯讀方式綁定掛載至容器。編輯主機檔案並重啟閘道程序 — 無需重建:

make restart

上游變更後

因為 silvaengine_gatewaya2a_daemon_engine 在建置時透過 pip 從 git 安裝,上游變更需要以 --no-cache 重建,以便 git 層重新複製最新的 @main

DOCKER_BUILDKIT=1 docker compose build --no-cache
docker compose up -d --force-recreate

沒有版本釘選 — @main 是移動目標。若需可重現性,請在 requirements-modules.txt 中釘選標籤或提交。

擴展至單一 worker 之外

記憶體內任務狀態、速率限制計數器與 SSE 用戶端登錄是每程序專屬。當 GATEWAY_WORKERS > 1 時,切換至共用後端(GATEWAY_TASK_BACKEND=dynamodbGATEWAY_RATE_LIMIT_BACKEND=dynamodb,加上 region_nameaws_* 憑證)並對 SSE 使用黏性工作階段。預設配置啟動一個 Uvicorn 程序。

需變更的安全預設值

  • JWT_SECRET_KEY=change-me-in-production — 以 openssl rand -hex 32 取代
  • ADMIN_PASSWORD=change-me — 以真實密碼取代
  • POSTGRES_PASSWORD=silvaengine — 以真實密碼取代
  • GATEWAY_CORS_ORIGINS=* 允許任何來源而不需憑證。若需要 cookie/憑證,請設定明確清單。
  • 內建的 Hermes 掛載主機 Docker socket(/var/run/docker.sock)。對該容器內的任何事物而言,這等同於主機上的 root。僅在您控制的主機上運行 hermes 設定檔,若代理不需要啟動容器則移除掛載。
  • Hermes 儀表板預設在連接埠 9119 上啟用,且基本驗證憑證為空。在暴露主機前設定 HERMES_DASHBOARD_BASIC_AUTH_* 或將連接埠綁定至 localhost。
  • RLS 是租戶邊界。能設定任意 Part-Id 的呼叫端可讀取該分區的資料 — 在您置於此閘道之前的任何前端中,將 Part-Id 視為與授權相關的輸入。

此堆疊帶來的能力

三層堆疊賦予您三項難以從零組裝的能力:

1. 無需重寫 Hermes 即可遵循 A2A 協定。 任何 A2A 用戶端皆可透過 Agent Card 探索以 Hermes 為後盾的代理,透過 message/send 發送任務,透過 SSE 串流回應,並透過標準 A2A 狀態追蹤任務生命週期。用戶端不知道遠端代理運行 Hermes — 它看到的是一個帶有 JSON-RPC 介面的 A2A 端點。

2. 從單一閘道提供多租戶代理服務。 Part-Id 標頭結合 PostgreSQL RLS,表示一個閘道實例以嚴格的資料庫層級隔離服務多個租戶。每個租戶擁有自己的代理登錄、任務歷史與訊息儲存 — 全數位於相同的四張資料表中,由 partition_key 範圍限定。

3. 跨代理邊界的人工介入核准。 Hermes 核准閘道對應至 A2A INPUT_REQUIRED 狀態。代理委派鏈可包含需要人工核准的步驟,而 A2A 協定將該狀態轉換攜回原始代理或操作員 — 無論鏈中每個代理運行於哪個框架。

參考實作亦支援 AWS Lambda 分派以實現無伺服器 A2A、具備雙向串流的實驗性 gRPC 傳輸,以及雙後端持久化(DynamoDB 或 PostgreSQL)。a2a_daemon_engine 儲存庫及其 Hermes 整合指南包含完整實作、配置參考與狀態對應細節。SilvaEngine Gateway 儲存庫記錄了路由清單系統、驗證提供者與模組自動初始化。

相關閱讀


中型市場經銷商需要能與型錄代理對話、型錄代理能與庫存代理對話的報價代理 — 每個由不同框架支撐,每個由不同團隊擁有。A2A 為這些代理提供共享協定。橋接層讓 Hermes Agent 無需重寫內部即可參與。docker-a2a-hermes-agent-gateway 將該橋接器封裝進單一容器映像,具備 PostgreSQL 持久化、RLS 多租戶,以及 15 項 E2E 測試檢查。

請求範圍限定的建置

一週探索。您將獲得系統盤點、工作流程圖與固定範圍 — 無論您是否與我們一同建置。

想為您的系統建構這個嗎?

這裡的每份文件都來自真實的生產工作。如果您有目標系統和工作流程想法,我們可以在一週內確定範圍。

申請客製開發

為期一週的發掘階段。您會拿到系統清單、工作流程地圖和固定範圍——無論您最終是否與我們合作開發。