我构建了一个没有治理的 multi-agent system——这是我希望拥有的三层堆栈

发布: (2026年4月26日 GMT+8 10:54)
5 分钟阅读
原文: Dev.to

Source: Dev.to

问题

您已经构建了一个多代理系统。它能够运行:协调器向专职代理分配任务,它们调用外部 API,您就发布了它。
三周后,您发现您的支付代理:

  • 在周六凌晨 1:47 处理了一笔 $4,200 的退款,且没有获得批准;
  • 让本不应拥有该权限的代理访问了客户数据;以及
  • 留下 零日志,让您无法查明触发这些行为的原因。

这并非假设情景。当在生产环境中缺少保持安全的三层基础设施时,这就是默认的结果。

第1层 – 操作:Conduit

Conduit 用 可视化流水线工作室 替代临时脚本:

  • 只需一次连接您的 MCP 服务器,即可在画布上构建流水线。
  • 为每一步提供实时执行日志(延迟、令牌消耗、输入、输出)。
  • API 密钥存储在 AES‑256 加密金库 中,仅在内存中解密使用。
  • 流水线配置集中存储,不再分散在各台机器上。

实际区别 – 当工作流出现故障时,打开 Conduit 的追踪视图,而不是手动在各服务的日志中进行关联。每一步都会按执行顺序显示。

第2层 – 信任:Codios

Codios 为每个代理分配一个 Ed25519 身份did:key),并签发 签名合约,明确规定调用方在被调用方上可以执行的操作。

# 发行合约(服务器端)
contract = codios.contracts.issue(
    caller_did=order_agent.did,
    callee_did=payment_agent.did,
    scopes=["payment:charge:max_10000usd"],  # 故意排除退款
    ttl_seconds=3600,
)
# 验证合约(代理端,无网络请求)
contract = verify_contract(
    token=request.headers.get("X-Codios-Contract"),
    required_scope="payment:charge",
    platform_public_key=CODIOS_PUBLIC_KEY,
)
  • 范围限制 加密绑定 —— 支付代理即使在请求体中包含退款信息,也无法使用此合约进行退款。
  • 强制执行在验证时完成,而不是通过数据库查找。
  • 其他保护措施自动生效:重放攻击、配置错误的代理以及未授权调用都会被阻止。

第3层 – 治理:A2A

即使有可视化(Conduit)和信任(Codios),仍然需要一个监控代理行为并在出现异常时进行干预的层。A2A 增加了四个模块:

  1. 分布式追踪 – 包装任何代理循环(≈5 行)。每一次 LLM 调用、工具调用和交接都会成为一个带有时间和 I/O 的 span。
  2. YAML 规则 – 在动作执行前评估(≤5 ms)。示例:阻止超过 5 万美元的付款,标记读取 PII 的代理,拒绝未具备适当范围的外部 HTTP 调用。
  3. 人工审批工作流 – 代理创建审批请求,暂停,并在审阅者批准或拒绝后异步恢复。
  4. 消息扫描 – 每条发送到 LLM 的消息都会在本地进行扫描。
Message scanning – every message reaching an LLM is scanned locally
( $500? → [A2A Approval] → Human review → ✓ )
   ├─ Fulfillment Agent reads shipping address
   │       └─ [A2A Firewall] scans for injection → ✓ → LLM call
   └─ A2A Observe captures full trace of everything above

三层比较

工具阻止的内容
构建 / 运行Conduit不可见的管道、分散的配置、缺乏执行可视性
信任Codios未授权的代理调用、重放攻击、范围蔓延
治理A2A失控的操作、缺失审计轨迹、提示注入

你不需要在第一天就拥有全部三项,但在生产环境中运行代理而没有任何这些工具,就只差一次事故,就要向你的 CTO 解释为什么某个代理做了不该做的事——没有日志来支持你

免费层可用性

所有三个都在免费层可用:

  • Conduit –
  • Codios –
  • A2A –

如有实现方面的问题,欢迎在评论中提问。

0 浏览
Back to Blog

相关文章

阅读更多 »