评估使您可以在隔离环境中,使用签入的 Harbor 任务来运行您的托管深度代理。托管深度代理会将您的代理编译成一个 Harbor 就绪的构件;您需要自己使用 Harbor 运行试运行(默认是本地 Docker,或者您配置的其他 Harbor 环境)。 每个任务描述了代理应该做什么,Harbor 运行编译后的代理一次,然后使用 Harbor 验证器对结果进行评分。
托管深度代理目前处于私有测试阶段,仅在LangSmith Cloud的美国区域提供。加入等待列表以申请访问权限。

前提条件

  • 使用 mda init 创建的托管深度代理项目(或已有代理入口的现有项目)。
  • evals/ 目录下的 Harbor 任务(如需要,使用 mda evals init 脚手架化)。
  • 当使用 Harbor 默认的 docker 环境时,本地运行的 Docker。
  • 项目 .env 文件或您的 shell 中的模型凭据(例如,对于 openai:… 模型是 OPENAI_API_KEY)。
  • 来自 managed-deepagents 的 mda CLI(安装方式同 CLI 参考文档)。
  • 您的 PATH 环境变量中有 Harbor,或者安装了 uv,以便运行 uv run --with harbor …。

概念

脚手架化任务

在您的项目根目录下运行:
如果不指定路径(或指定为 evals),当 evals/ 目录不存在时,该命令会在其下创建起始任务。mda init 也会为新项目脚手架化起始的评估任务。 要稍后添加一个新任务:

任务布局

每个任务都是 evals/ 下的一个 Harbor 任务目录。其布局符合 Harbor 的 任务结构:

指令

instruction.md 是 Harbor 向代理展示的自然语言任务描述。请保持其具体且可验证。

验证器

代理完成后,Harbor 通过运行您的验证器脚本来评分这次试运行:在 Linux 上是 tests/test.sh(在 Windows 上是 tests/test.bat)。在评分运行结果的容器内,路径如下所示: 您的脚本检查 /app(或其他输出),然后必须写入一个奖励文件: 使用任一格式均可。Harbor 两者都接受。建议使用绝对路径(/app/...、/tests/...),这样脚本就不会依赖于工作目录。您可以用 shell 实现检查、调用测试运行器或运行自定义评分逻辑——只要能写出奖励文件即可。 最小化示例:
关于多指标奖励、task.toml 中的验证器环境变量以及 LLM 作为评判者的模式,请参阅 Harbor 的任务结构和 LLM 作为评判者文档。

身份感知项目

如果项目导出了身份(identity.ts 或 identity.py),则每个评估任务都必须包含 identity.json。脚手架化会自动添加一个默认的固定数据。当您的代理或测试依赖于特定的参与者、租户或声明时,可以自定义该固定数据。
identity.json
该固定数据会作为试运行的身份信封被注入。它不会作为代理可写的文件留在 /app 下。

编译 Harbor 交付物

在您的项目根目录下运行:
编译要求 evals/ 下至少有一个 Harbor 任务(一个包含 instruction.md 和 tests/ 的子目录)。它会在 .mda/evals/ 下写入一个交付物: 可选的编译标志: .mda/evals/ 是本地输出。请勿提交它,它也不属于部署存档的一部分。

使用 Harbor 运行试运行

mda evals compile 会打印一条可复制粘贴的 Harbor 命令。在项目根目录下运行:
如果您的 PATH 中已有 harbor,则打印的命令会直接使用 harbor run,而不是 uv run --with harbor。 编辑 .mda/evals/harbor-job.json 可以更改任务、模型、环境类型、并发数或尝试次数。Harbor 负责试运行编排、后端和报告——而不是 mda CLI。关于 Harbor 标志和作业配置字段,请参阅 Harbor 文档。 在您更改代理或想要一个新的示例作业配置后,请重新运行 mda evals compile(每次编译都会在 .mda/evals/harbor-jobs/ 下使用一个新的 Harbor 作业目录)。

沙箱设置脚本

如果项目包含 sandbox/setup.sh,托管深度代理 Harbor 适配器会在准备试运行环境时运行它一次(使用 bash,因此支持 set -o pipefail 等 bash 特性)。在评估期间,编写的沙箱提供程序配置会被忽略;试运行环境负责隔离。

后续步骤