在 Hermes Agent 上部署 A2A:Docker 閘道參考堆疊
在生產環境中運行 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 堆疊則為實作範例。
三層架構
該堆疊將職責分為三層,每層由不同元件負責:
閘道是唯一常駐服務。Hermes 與 PostgreSQL 皆為設定檔控制的兄弟元件 — 將它們打包以獲得自足堆疊,或關閉設定檔並將 HERMES_API_URL 與 PG_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_WINDOW秒GATEWAY_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/send、tasks/get、tasks/cancel、tasks/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 - 任務狀態機 —
submitted→working→input-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.created、run.completed、run.failed)。處理器在背景執行緒中執行排空迴圈。每個 message.delta 事件被推送至閘道的 SSE 管理器以即時傳遞給已連線的用戶端。當 run.completed 到達時,累積的文字以單一 A2A Message 推送至 SDK EventQueue。
請求生命週期
單一帶有 stream=true 的 message/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_URL、HERMES_API_KEY、HERMES_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 路徑施加了兩項限制,形塑了橋接器實作:
- 僅單一 Message。 向 SDK EventQueue 發出多個
Message物件會引發InvalidAgentResponseError: Multiple Message objects received. - 無 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-RPCmessage/send回應所回傳的內容。
用戶端透過 SSE 獲得即時串流,並透過 SDK 獲得乾淨的單一訊息 JSON-RPC 回應。兩個通道皆運作;兩者皆不違反 SDK 限制。
單一連接埠上的協定介面
閘道在單一連接埠(預設 8765)上暴露五個協定介面:
| 協定 | 路由 | 驗證 | 用途 |
|---|---|---|---|
| GraphQL | POST /{ep}/a2a_core_graphql |
是 | A2A 核心查詢/變更(代理、任務、訊息、設定) |
| JSON-RPC 2.0 | POST /{ep}/a2a |
是 | A2A 協定:message/send、tasks/get、tasks/cancel、tasks/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/get 與 tasks/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.py(set_rls_context 與 create_rls_policies)以及遷移 0005_enable_rls_policies。set_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=postgres 與 HERMES_API_URL=http://hermes:<API_SERVER_PORT>。當兄弟元件為外部時,將這些指向您自己的實例(例如 PG_HOST=host.docker.internal、HERMES_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_gateway 與 a2a_daemon_engine 皆透過 pip 從 git 安裝至映像中(無主機原始碼掛載)。映像是通用的且完全由環境驅動 — 未內建任何密鑰。模組透過 git+https 從 ideabosque 下的公開 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/send、tasks/get、tasks/list、tasks/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_gateway 與 a2a_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=dynamodb、GATEWAY_RATE_LIMIT_BACKEND=dynamodb,加上 region_name 與 aws_* 憑證)並對 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 儲存庫記錄了路由清單系統、驗證提供者與模組自動初始化。
相關閱讀
- MCP + A2A:每個正式環境代理式 AI 系統背後的兩個協定 — MCP(代理到工具)與 A2A(代理到代理)在雙層協定堆疊中的互補角色
- 將 A2A 與既有代理框架整合:Hermes Agent 示範 — 一般橋接器模式及其如何應用於 OpenClaw 與 Hermes 之外的其他框架
- MCP 模組程式碼標準 — 生產就緒代理模組的結構模式,亦適用於 A2A 處理器程式碼
中型市場經銷商需要能與型錄代理對話、型錄代理能與庫存代理對話的報價代理 — 每個由不同框架支撐,每個由不同團隊擁有。A2A 為這些代理提供共享協定。橋接層讓 Hermes Agent 無需重寫內部即可參與。docker-a2a-hermes-agent-gateway 將該橋接器封裝進單一容器映像,具備 PostgreSQL 持久化、RLS 多租戶,以及 15 項 E2E 測試檢查。
請求範圍限定的建置
一週探索。您將獲得系統盤點、工作流程圖與固定範圍 — 無論您是否與我們一同建置。
想為您的系統建構這個嗎?
這裡的每份文件都來自真實的生產工作。如果您有目標系統和工作流程想法,我們可以在一週內確定範圍。
申請客製開發為期一週的發掘階段。您會拿到系統清單、工作流程地圖和固定範圍——無論您最終是否與我們合作開發。