dsh-a2a: DeepSeek Harness 的 Agent2Agent v1.0.1 双向连接插件

前言

DeepSeek Harness (DSH) 的核心理念是“一切皆插件”。在构建多智能体系统时,接入 Agent2Agent (A2A) 协议是常见需求。dsh-a2a 是一个独立的开源插件,它将 DSH 的一个 Profile 变身为一个多面孔的 Agent-to-Agent 实体:它既能同时对外提供多个入站 A2A 服务器,又能建立多个出站连接。所有服务器实例的生命周期(创建、启动、停止、编辑)均通过 GUI 管理,无需手动编辑配置文件。

插件定位

  • 名称: dsh-a2a (NPM 包: @hanphone/dsh-a2a)
  • 维护者: HanphoneJan
  • 核心价值: 将 DSH 转变为支持 A2A v1.0.1 双向协议的网关,支持多预设、多技能、持久化任务存储。
  • 许可: MIT

核心功能

插件实现了 A2A v1.0.1 的完整协议表面,并在此基础上构建了完整的生命周期管理:

  1. A2A v1.0.1 协议支持

    • 实现了 SendMessage、SendStreamingMessage、GetTask、ListTasks、CancelTask、GetExtendedAgentCard 和 SubscribeToTask。
    • 基于 JSON-RPC 2.0 传输,支持 SSE 流式传输。
    • 完整使用官方的 TASK_STATE_* 和 ROLE_* 枚举。
  2. 多入站服务器

    • 支持为每个 Persona 创建独立的入站服务器。
    • 每个入站实例绑定一个具体的 Agent Preset(如 ptc、standard 等)。
    • 技能声明自动衍生: AgentCard 的 skills 直接取自绑定 Preset 的 skill 目录,无需手动定义 typed skill。
  3. 多出站连接

    • 每个连接可独立配置远程 URL、认证环境变量、超时时间和绑定的 Preset。
    • 远程调用的 skills 会被映射为模型工具(如 a2a__<name>__<skill>)。
  4. 持久化与执行

    • 任务存储: 任务存储在 a2a 域中(默认 JSON 后端,可选 SQLite)。
    • 执行器: 提供 session(基于 contextId)和 subagent(代理调用子智能体)两种执行模式。
    • 入站治理: 每个入站任务经过 a2a/inbound-task 水瀑布流程,支持策略插件干预。
  5. GUI 全生命周期管理

    • 入站管理: 创建服务器(选择 Preset,可选设置 Auth Env,Bearer Token 通过 Harness 凭证服务管理),查看实时 AgentCard。
    • 出站管理: 导入远程 AgentCard,预览技能,建立连接。
    • 监控面板: 查看 Inbound Peer 状态、Context Session 状态(支持取消活跃任务或关闭会话)。

安装与启用

安装过程依赖 npm registry。

dsh plugin --profile web add @hanphone/dsh-a2a

安装后需要重启 GUI 以扫描并加载新插件。重启命令根据 Profile 不同而异(例如 pnpm dsh web)。

典型用法

启用插件后,进入 DeepSeek Harness 的浏览器界面,路径为 Settings → A2A 连接。

  1. 创建入站服务器
    在“入站 Servers”标签页中创建新实例。选择一个已存在的 Agent Preset,其技能声明将自动填充到 AgentCard 中。可选设置认证环境变量。创建后该实例会立即启用,监听配置的端口。

  2. 发送 A2A 任务
    假设入站服务器 ID 为 my-agent,监听地址为 http://127.0.0.1:3080,使用 chat 技能发送消息:

    curl -X POST http://127.0.0.1:3080/a2a/my-agent \
      -H "content-type: application/json" \
      -d '{
        "jsonrpc": "2.0",
        "id": "1",
        "method": "SendMessage",
        "params": {
          "message": {
            "role": "user",
            "parts": [{"text": "hello"}],
            "metadata": {"skill": "chat"}
          }
        }
      }'

配置与注意事项

  • 配置方式: 插件仅提供宿主机级别的默认配置(如 baseUrl、subagentProvider、defaultTimeoutMs),这些通过 Profile 的 cordis.patch.yml 设置。实例的具体配置(如名称、Preset、Token)均通过 GUI 创建并持久化到 a2a 域,不支持通过补丁文件配置实例。
  • 依赖服务: 运行此插件需要宿主机挂载以下服务:webServer、storage stack、tools registry、agent loop、presets 以及 subagent(如果使用 subagent 执行器)。
  • 认证管理: Bearer Token 不会直接保存在插件数据域,而是写入 Harness 的凭证服务(管理 .env 或凭证存储),插件运行时通过凭证服务解析。
  • 存储后端: 默认使用 JSON 存储任务和实例数据,可通过配置切换为 SQLite。

结语

dsh-a2a 提供了一个从协议实现到运维管理的完整闭环。它解决了在 DSH 生态中构建多智能体网关的痛点,适合需要同时作为 A2A 服务器接收请求,又作为客户端调用其他服务的场景。更多实现细节与架构设计,可参考项目文档。

  • GitHub: https://github.com/HanphoneJan/dsh-a2a
  • 目录: https://www.skillhub.cn/plugins/HanphoneJan/dsh-a2a
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜