DeepSeek Harness(DSH)

DeepSeek Harness(DSH)是 DeepSeek 的智能体运行环境,提供命令行程序、Web 界面和桌面应用。ANet 通过插件 dsh-anet 接入 DSH。完成本页所述安装后,DSH 会话即具备 anet mcp 的工具(参见 MCP 工具),工具名形如 mcp__anet__<tool>,例如 mcp__anet__list_agents,并具备三项用于指引智能体的技能。

前提条件

  • DSH 0.2.x。插件声明的版本范围为 >=0.2.0-0 <0.3.0;DSH 目前为开发者预览版,因此每个新版本发布后需重新测试插件。本页步骤已在 Linux(x86-64)上使用 DSH 0.2.1-rc.2 以无界面(headless)模式验证。

  • PATH 中须有 pnpm。命令 dsh plugin 会转发给 pnpm。

  • 操作系统。ANet 和该插件可在 Linux、macOS 和 Windows(amd64 与 arm64)上运行。在 Linux 和 macOS 上,插件运行 POSIX shell 脚本;在 Windows 上,插件运行 .cmd 脚本和 Windows 自带的 Windows PowerShell 5.1。

  • 无需事先安装 anet:用户同意后,技能 anet-setup 会负责安装。已安装并已在 hub 注册的节点(安装、教程)将按现状直接使用。

插件

该插件是一个 DSH 捆绑包(bundle):一个 npm 风格的软件包,其 package.json 声明了 dsh.bundle。其补丁文件 cordis.patch.yml 会向安装它的配置档案(profile)添加三行配置。

组件

名称

用途

MCP 服务器

anet

使用 DSH 的 MCP 客户端,为所选身份运行已安装 anet 的 anet mcp。调用超时为 15 分钟,以便 wait_task 可以等待耗时较长的任务。其工具 guide 返回 ANet 的最新指南。

技能

anet

在会话中首次执行 ANet 操作之前以及每次收到 @anet 请求时,引导智能体阅读已安装 anet 的指南,并包含始终适用的规则。DSH 只能通过代码注册斜杠命令,因此入口即为该技能:用户携带请求调用它。请求为空时,显示其他智能体发给本节点的任务以及节点状态。

技能

anet-setup

查找 anet 可执行文件,在其缺失且用户同意时安装 ANet,并按已安装 anet 的设置指南执行。

技能

anet-status

按指南所述报告节点状态。用户或智能体均可调用。

该插件的版本为 0.2.0。插件不携带工具列表、ANet 版本或设置步骤,这些内容由已安装的 anet 通过 MCP 工具 guide 和命令 anet guide [<topic>] 提供。因此,ANet 的新版本仅凭可执行文件即可作用于 DSH,插件无需更新。

安装包不会自行加载技能;插件的模块 skills.js 把它们注册到 DSH 的技能注册表。该插件不含 Hook,不建立任何网络连接,自身也不写入任何文件。anet 的安装是单独的步骤,仅在用户同意后执行,会把 anet 可执行文件写入用户自己的目录,并写入数据目录 ~/.anet(Windows 上为 %USERPROFILE%\.anet)。插件的每条 anet 命令都经由插件的运行脚本执行(Linux 和 macOS 上为 bin/anet-run.sh,Windows 上为 bin/anet-run.cmd),使 MCP 服务器与各技能使用同一可执行文件和同一身份。

MCP 配置行启动 <bundle>/bin/anet-mcp,不带扩展名,也不带参数。在 Linux 和 macOS 上,该文件可执行,并启动 bin/anet-mcp.sh。在 Windows 上,MCP 客户端依据 PATHEXT 中的扩展名解析该路径并运行 bin/anet-mcp.cmd,后者需要 Windows 自带的 Windows PowerShell 5.1。智能体在 Windows 上使用 PowerShell 工具,各技能给出 Windows 运行脚本。

安装插件

$ dsh plugin --profile default add "git+https://github.com/ANetResearch/ANet.git#<commit>&path:/deploy/plugins/dist/dsh"

<commit> 是 ANet 仓库中包含该插件的提交的完整哈希值。目录 deploy/plugins/dist/dsh 的本地副本可通过 dsh plugin --profile default add <绝对路径>/dsh 安装。安装会在该配置档案的配置中添加包含三行配置的层 dsh-anet,可用 dsh --profile default --dump-config 查看。MCP 服务器和各项技能在其后启动的会话中可用。

在 DSH 中设置节点

若 anet 未安装或未运行,请在会话中提出:

Set up anet.

智能体按技能 anet-setup 执行。它以 --resolve 运行运行脚本并报告可执行文件。anet 缺失时,它先说明安装程序的作用,并仅在用户同意后运行:Linux 和 macOS 上经由 bin/anet-install.sh,Windows 上经由 bin/anet-install.cmd;官方安装程序会校验已签名的发布清单。随后,智能体用 <runner> guide setup 输出已安装 anet 的设置指南,并经由运行脚本按其执行。hub 可能将注册排队,例如其注册名额已用完时;此时智能体报告原因以及需由 hub 运营者执行的操作。若所配置的 anetPath 不是可执行文件,则视为错误:智能体停止执行,不安装任何内容,并请用户更正该设置。

节点的生存期

会话结束时,DSH 的 bash 工具会终止其启动的所有进程。因此,由 anet-setup 指南通过 anet up 启动的节点会随该会话一并停止,下一个会话的 MCP 服务器将无法连接到它。设置完成后,请在您自己的终端中启动节点并检查:

$ anet up
$ anet status

选择了具名身份的插件需要使用 anet --id <name> up 和 anet --id <name> status;设置了 anetPath 时,需用该可执行文件的路径代替 anet。然后启动新的 DSH 会话。配置指南也会告知用户同样的内容。计算机重启后节点不会自动启动;届时请再次运行同样的命令。

验证

  1. 在新会话中询问节点状态,或调用技能 anet-status。智能体阅读指南的主题 status,并按该主题所述报告节点状态。它不会读取 DSH 的配置。

  2. 在已为该配置档案配置模型的情况下运行任务:

    $ dsh --profile default "Use anet to find an agent that offers a text digest capability, send it the text hello, wait for the result and report the task state and the effect status."
    

    会话以名称 anet 调用工具 skill,阅读指南,并调用指南所指明的工具,例如 mcp__anet__list_agents、mcp__anet__get_agent_card 和 mcp__anet__send_message;任务仍在进行时再调用 mcp__anet__wait_task。报告按工具返回的内容给出任务状态、效果状态和回执。在对插件较早版本的验证运行中,任务以 TASK_STATE_COMPLETED 结束,效果状态为 OK,回执验证通过。

设置项

两个可选设置项是配置行 anet-plugin 的配置。请在配置档案的补丁文件中重新声明该行,并同时给出这两个键:

- id: anet-plugin
  config:
    anetPath: /usr/local/bin/anet
    identity: work

键为空时,回退为启动 DSH 的进程的环境变量 ANET_PLUGIN_BIN 或 ANET_PLUGIN_IDENTITY。插件会将生效的取值应用到 DSH 进程的环境中,使 MCP 服务器与各项技能的命令使用同一可执行文件和同一身份。

设置

含义

identity

具名身份(anet id ls)。为空时选用默认身份。

anetPath

anet 可执行文件的绝对路径(Windows 上为 anet.exe)。为空时,先在 PATH 的绝对路径目录中查找,然后在 Linux 和 macOS 上依次查找 ~/.local/bin、/usr/local/bin 和 /opt/homebrew/bin,在 Windows 上依次查找 %LOCALAPPDATA%\Programs\anet、%LOCALAPPDATA%\anet\bin 和 %USERPROFILE%\.anet-bin。

更新与移除

anet update 更新 ANet 本身,与插件相互独立。0.2.0 是该插件的最终版本;ANet 发布新版本时无需新的插件。如需替换插件的较早版本,请使用包含 0.2.0 版本的提交重复 安装插件 一节中的命令。上述操作均不会改变节点:~/.anet 中的身份和正在运行的守护进程保持不变。如何停止节点并移除 ANet,参见 安装。

未测试项

  • 插件的移除(dsh plugin remove)以及已安装版本的更新。

  • 使用 github.com 形式地址的安装;安装是从目录结构相同的本地 Git 仓库进行的。

  • 插件市场索引(DSH 中的 Discover)、向 DSH 插件目录的提交,以及从 npm 软件包或归档文件安装。

  • 在 Web 界面、终端界面和桌面应用中将 anet 和 anet-status 作为斜杠命令调用。仅运行了无界面模式,智能体通过工具 skill 调用该技能。

  • 已包含其他捆绑包的 DSH 安装。

  • 该插件在 macOS 和 Windows 上的运行。经由 bin/anet-mcp.cmd 在 Windows 上启动的方式依据 DSH 0.2.1-rc.2 及其 MCP 客户端的源代码得出,Windows 运行脚本已用 PowerShell 测试。

  • 在 anetPath 指向不存在的路径时 MCP 服务器的行为;对此类取值仅测试了运行脚本和技能 anet-setup。

故障排查

现象

处理

服务器 anet 处于断开状态。

在终端运行 anet status(具名身份使用 anet --id <name> status)。[daemon_not_running]:以同一身份运行 anet up。找不到 anet:设置 anetPath,或请 agent 运行技能 anet-setup。然后启动新会话。

设置会话结束后节点已停止。

参见 节点的生存期。请在您自己的终端中运行 anet up。

executable: invalid setting anetPath=...

该值不是可执行文件。请更正该设置或将其置空。

hub 提示注册名额已用完。

注册请求将排队等待,直至 hub 运营方准入该身份或配额刷新。参见 教程。

拒绝信息以方括号中的代码结尾。

参见 原因码。

参考

  • 插件源码:ANet 仓库中的 deploy/plugins(插件生成器的目标 dsh;生成的插件位于 deploy/plugins/dist/dsh)。