☰
DeepSeek-V4.1-Flash 评测复现实战:用 Pier 跑通 dsh-minimal 与 mini-swe-agent 的 DeepSWE v1.1 基准
2026/9/30 6:56:28 网站建设 项目流程
  • 人工智能
  • 大模型
  • 多模态

【免费下载链接】DeepSeek-V4.1-Flash

DeepSeek-V4.1-Flash 是一个多模态混合专家(MoE)模型,拥有 5520 亿骨干参数,并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入,并以自回归方式生成文本

项目地址:https://ai.gitcode.com/hf_mirrors/deepseek-ai/DeepSeek-V4.1-Flash
点击查看免费下载

本文是 DeepSeek-V4.1-Flash 仓库内 evaluation/README.md 的完整实操展开:以官方发布的dsh-minimal补丁与mini-swe-agent两条路径为准,逐步复现 DeepSWE v1.1 基准评测。读完本文你将掌握:如何准备环境、获取并打补丁安装 Pier、以两种 agent 形式运行评测套件、理解补丁的底层源码改动,以及如何解读jobs/下的评测结果文件。

1. 评测背景:为什么要复现 DeepSWE v1.1

根据仓库根 README.md 的说明,DeepSeek-V4.1-Flash 的代码智能体(code agent)基准(Terminal-Bench 2.1/3.0/4.0、DeepSWE v1.1、NL2Repo-Bench、ProgramBench 等)均以DeepSeek Harness 的 Minimal 模式配合1M token 上下文窗口评估;其中 DeepSWE v1.1 为对齐官方环境要求而使用mini-SWE harness(即下文中的mini-swe-agent)。所有 agent 评测使用temperature=1.0, top_p=0.95。

README 中给出的同一模型在不同脚手架上的 DeepSWE v1.1(Resolved)结果为:mini-SWE74.2、DSH Minimal72.6、DSH Standard 70.5、DSH PTC 67.6;Terminal-Bench 2.1(Pass@1)上 DSH Minimal 达到90.6、mini-SWE 90.3。而dsh-minimal正是本仓库评测目录所聚焦的官方 Minimal 模式评测路径——本文要复现的,就是跑出这一类结果所需的完整工程流程。

2. 前置条件(Prerequisites)

评测运行在宿主机 + Docker 沙箱的架构上,需满足:

  • Docker:处于运行状态且能够拉取镜像;
  • Python 3.12+与uv(Python 包与项目管理工具,用于安装 Pier 及运行pier run);
  • 任意 DeepSeek-API 兼容服务的 endpoint 与 key(下文以 DeepSeek 官方 API 为例)。

通过环境变量注入 API 凭证:

export DEEPSEEK_API_KEY=sk-your-key-here export DEEPSEEK_BASE_URL=https://api.deepseek.com

这两个变量在后续pier run中通过--ae(agent 环境变量)传入容器,dsh-minimalagent 会读取DEEPSEEK_API_KEY(缺失时直接报错)与DEEPSEEK_BASE_URL(缺省回落到https://api.deepseek.com,见补丁中dsh_minimal.py的_base_url())。

3. 获取 Pier 与 DeepSWE

评测套件由两部分组成:调度框架Pier(datacurve-ai/pier)与任务集DeepSWE(datacurve-ai/deep-swe)。两者都必须 checkout 到与本补丁匹配的指定 commit:

git clone https://github.com/datacurve-ai/pier.git git -C pier checkout 0c802fc067a425345b24d1c69411aa98acf61a1d git clone https://github.com/datacurve-ai/deep-swe.git git -C deep-swe checkout 0b9fabbb63b9104d678fe965e1632f2dd9eaa2ea

注意:commit 是补丁正确应用的前提。后续所有命令默认在pier目录内执行,任务集通过相对路径../deep-swe/tasks引用。

4. 打补丁并安装 Pier

仓库 evaluation/dsh-minimal.patch 随本文档一同发布。官方明确提示:把它当作参考补丁(reference patch),请根据你自己的环境适配后再应用。应用与安装:

cd pier git apply /path/to/dsh-minimal.patch uv sync

补丁共改动/新增了多个文件,下面结合补丁源码逐条说明其行为,帮助你判断是否需要在自有环境上做适配。

4.1 新增dsh-minimalagent

补丁在src/pier/agents/factory.py中注册了新的 agent 类型DshMinimal,并在src/pier/models/agent/name.py中新增枚举DSH_MINIMAL = "dsh-minimal"。核心实现在src/pier/agents/installed/dsh_minimal.py:

  • 该 agent通过 Harness SDK 驱动模型,并把 SDK 的事件流折叠(fold)成一条 Pier 的ATIF 轨迹(SUPPORTS_ATIF = True,轨迹文件固定为trajectory.json);
  • SDK 产物从不安装进镜像:第 5.2 节的--mounts-json将宿主机上的 SDK 目录以只读方式 bind-mount 进沙箱(挂载点常量DIST = "/opt/dsh-minimal"),因此任何 trial 都不会往镜像里安装东西;
  • install_spec()直接返回None("The distribution is bind-mounted, so no image layer is needed"),配合base.py中install()对None的空迭代处理,跳过镜像层安装;
  • setup()会把随附的dsh_minimal_runner.py上传到容器内的/tmp/dsh-minimal-runner.py并确保可读;
  • network_allowlist()只放行DEEPSEEK_BASE_URL指向的地址;
  • 运行参数方面,reasoning_effort只接受("low", "high", "max")三个取值(非法值直接抛ValueError),模型名缺省为deepseek-flash。

4.2 为两个 agent 追加运行时约束

补丁在src/pier/agents/installed/base.py中定义了统一的运行时约束段,并分别注入到dsh-minimal与mini-swe-agent的任务指令尾部:

## Runtime constraints - Work in `/app`; do not modify files under `/tests`. - No network or mirror access; use only dependencies already in the image.

即:agent 只能在/app下工作、不得改动/tests、不得访问网络或包镜像。这保证了评测环境的隔离性与公平性,也让测试验证(verifier)跑在未被 agent 污染的环境里。

4.3 向容器传递测试运行器并发上限

Docker 的--cpus只是带宽配额(quota),容器内nproc依然报告宿主机核数,测试运行器会据此把 worker 池开到远超容器实际份额的规模。补丁新增src/pier/environments/docker/parallelism.py,按 CPU 上限为各类运行器注入并发上限:

  • GOMAXPROCS(Go)、CARGO_BUILD_JOBS(Rust 构建)、NEXTEST_TEST_THREADS(Rust 测试)、PYTEST_XDIST_AUTO_NUM_WORKERS(pytest-xdist)直接取 CPU 上限值;
  • 对不吃环境变量的 Node 运行器,额外生成一个node --require预加载脚本(/opt/pier-node-cpu-clamp.js),通过覆写os.cpus()/os.availableParallelism()来钳制 worker 数,并以只读卷挂进容器。

这些改动集中在src/pier/environments/docker/docker.py的资源 compose 生成逻辑中。

4.4 启用容器内 IPv6 回环

Docker 默认在容器网络命名空间禁用 IPv6,导致绑定::1的测试套件被跳过并判为失败。补丁为 Linux 容器统一写入 sysctlnet.ipv6.conf.all.disable_ipv6=0(Windows 容器除外),从而与真实 Linux 主机的行为对齐。

4.5--mounts-json改为叠加而非替换

原 Pier 中--mounts-json会整体替换默认挂载,补丁将其语义改为增量叠加:docker.py中挂载列表变为[*self._default_log_mounts(), *(mounts_json or [])],从而保留承载 agent 日志与收集补丁的/logs绑定卷。注意验证器(verifier)环境使用独立的mounts_override参数,不共享这些目录(见src/pier/trial/trial.py)。

5. 运行评测套件

两个 agent 使用同一任务集、同一并发度、同一--no-delete(--no-delete会在多次 trial 之间缓存任务镜像)。官方建议:每次运行更换--job-name,多次运行后取平均,以降低采样波动。

资源规划:每个 trial 的容器占用其任务声明的2 CPU 与 8 GB 内存,因此-n(并发 trial 数)要按宿主机的核数与内存来设定,避免超额调度。

5.1 mini-swe-agent

Pier 会在每个任务镜像构建/运行期把mini-swe-agent安装进去,宿主机侧无需任何准备:

uv run pier run \ -p ../deep-swe/tasks \ --agent mini-swe-agent \ --model deepseek/deepseek-flash \ --ak reasoning_effort=max \ --ak cost_limit=0 \ --ae DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \ --ae DEEPSEEK_BASE_URL="$DEEPSEEK_BASE_URL" \ -n 32 --no-delete -r 2 --job-name deepswe-mini-run1 -y

要点:--model接受 litellm 风格的provider/model字符串(这里deepseek/deepseek-flash);--ak是传给 agent 的附加参数(reasoning_effort=max对应最大推理努力,cost_limit=0关闭成本上限);-r 2表示每个任务重复 2 次。

5.2 dsh-minimal

dsh-minimal需要在宿主机安装一次 Harness SDK 产物,再以只读方式 bind-mount 进每个容器。首先安装 SDK:

mkdir -p ~/dsh-minimal && cd ~/dsh-minimal uv pip install --target dsh-dist \ --python-version 3.12 --python-platform x86_64-manylinux_2_28 \ 'deepseek-harness-sdk==0.1.5.*'

关键点:--target dsh-dist把 SDK 装到指定目录而非 site-packages;--python-version 3.12 --python-platform x86_64-manylinux_2_28保证产物与任务镜像内的 Python 运行时(3.12、x86_64 Linux)兼容。

然后运行:

uv run pier run \ -p ../deep-swe/tasks \ --agent dsh-minimal \ --model deepseek-flash \ --ak reasoning_effort=max \ --ae DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \ --ae DEEPSEEK_BASE_URL="$DEEPSEEK_BASE_URL" \ --mounts-json '[{"type":"bind","source":"'"$HOME"'/dsh-minimal/dsh-dist","target":"/opt/dsh-minimal","read_only":true}]' \ -n 32 --no-delete --job-name deepswe-dsh-run1 -y

--mounts-json说明:

  • source:上文dsh-dist目录的绝对路径;
  • target:固定为/opt/dsh-minimal(与源码中DIST常量一致,runner 与 SDK 均从该路径加载);
  • read_only: true:只读挂载,容器内任何 trial 都无法改写 SDK 产物。

与 mini-swe-agent 命令相比,这里--model直接写deepseek-flash(不带 provider 前缀),也未传-r(如需多重复实验,可自行添加)。

5.3 参数速查表

参数含义取值/说明
-p任务集目录指向deep-swe/tasks
--agent运行的 agentmini-swe-agent或dsh-minimal
--model模型标识litellm 风格provider/model(如deepseek/deepseek-flash),dsh-minimal 也接受裸模型名
--akagent 附加参数(key=value,可重复)如reasoning_effort=max、cost_limit=0
--aeagent 环境变量(key=value,可重复)如DEEPSEEK_API_KEY、DEEPSEEK_BASE_URL
--mounts-json附加挂载的 JSON 数组仅 dsh-minimal 需要;语义为叠加在默认/logs挂载之上
-n并发 trial 数按宿主机核数/内存规划(每 trial 约 2 CPU / 8 GB)
--no-delete不删除任务镜像缓存镜像以便多次 trial/多 job 复用
-r每任务重复次数mini-swe-agent 示例为 2
--job-name本次运行的作业名决定jobs/下的输出目录名,换名重跑便于取平均
-y跳过交互确认直接执行

6. 读取与浏览结果

运行结束后,结果按作业名落在jobs/<job-name>/下:

jobs/<job-name>/ result.json pass rate and token totals <task>__<id>/ result.json reward, fail-to-pass / pass-to-pass counts, tokens agent/trajectory.json full ATIF trajectory (dsh-minimal) agent/mini-swe-agent.trajectory.json mini-swe-agent trajectory verifier/ reward.json and test output

字段含义:

  • 作业级result.json:通过率(pass rate)与token 总量;
  • 任务级<task>__<id>/result.json:reward、fail-to-pass / pass-to-pass 计数(即 SWE-bench 风格的回归指标)、token 消耗;
  • agent/trajectory.json:dsh-minimal的完整 ATIF 轨迹(详见下节);
  • agent/mini-swe-agent.trajectory.json:mini-swe-agent 的轨迹;
  • verifier/:验证器产出的reward.json与测试输出。

浏览某个作业的完整结构:

uv run pier view jobs/<job-name>

7. 从源码看 dsh-minimal 的 ATIF 轨迹产出

补丁随附的src/pier/agents/installed/dsh_minimal_runner.py是轨迹产出的核心:它以DeepSeekHarness(profile="sdk-minimal", provider="deepseek-official", ...)驱动 Harness,并通过on_notification回调把session.event流交给Collector折叠成ATIF v1.7格式的轨迹。几个值得注意的实现事实:

  • 一个模型调用对应一条 agent step:Collector._step()以(turn, step)为键去重,llm_call_count恒为 1;tool/call与assistant/message中的 tool-call 块都收敛到同一 step 的tool_calls,tool/result通过callId回填到发起调用的 step 的observation.results;
  • token 口径:_metrics()把 SDK 报告的inputTokens与cacheReadTokens/cacheWriteTokens重新合并为prompt_tokens,completion_tokens取outputTokens,并单独记录cached_tokens与可选reasoning_tokens;
  • 失败也能留痕:轨迹在每条通知后与finally中都执行 checkpoint 写入(先写临时文件再原子替换),即使 harness 异常退出,extra.failure也会记录异常类型与消息,轨迹文件仍然完整;
  • 退出码语义:仅当无失败且finish_reason为completed或max-tokens(可被验证器评分的有界结果)时进程以 0 退出,否则退出 1 标记该 trial 未产生可用 turn;
  • sdk-minimal 无压缩(compaction):final_metrics中summarization_count恒为 0,peak_context_tokens取各 step 的最大 prompt token 数,即该 profile 不会用摘要 step 替代历史前缀。

对复现者而言,这意味着jobs/<job-name>/<task>__<id>/agent/trajectory.json是可直接审计的逐模型调用记录,配合verifier/reward.json可以精确定位某个任务失败发生在哪一步、消耗了多少 token。

8. 与已发布结果的对照与注意事项

  • 仓库 README 的“Performance across agent scaffolds”表以N=8 采样/任务(DeepSWE v1.1)、N=3(Terminal-Bench 2.1)、Linux 容器、temperature=1.0, top_p=0.95、1M token 上下文、max_steps=500为统一设置;本指南中的命令默认未显式传递这些采样参数,如需与官方数值严格对齐,应在任务集/采样配置层面补充 N 与max_steps;
  • 官方结果中 DSH Minimal 与 mini-SWE 在 DeepSWE v1.1 上分别报 72.6 与 74.2(Resolved),说明两条路径都是官方认可的复现通道,但数值会受到任务采样、并发调度与宿主环境的影响,因此文档强调“更换--job-name多次运行后取平均”;
  • 本指南给出的命令以 DeepSeek 官方 API 为例,任何 DeepSeek-API 兼容服务只需替换DEEPSEEK_BASE_URL与DEEPSEEK_API_KEY即可;
  • dsh-minimal.patch是参考补丁:Pier 与 deep-swe 后续版本可能引入 API 变化,应用前请先在对应 commit 上验证git apply的干净度,并检查src/pier/下相关文件是否与补丁上下文一致。

9. 小结

复现 DeepSWE v1.1 评测的完整链路为:准备 Docker / Python 3.12 / uv 与 API 凭证 → 拉取 Pier 与 DeepSWE 到指定 commit → 应用dsh-minimal.patch并uv sync→ 用pier run分别驱动mini-swe-agent(Pier 自动安装)与dsh-minimal(宿主安装 SDK + 只读 bind-mount)→ 在jobs/<job-name>/中解读 pass rate、reward、fail-to-pass/pass-to-pass 与 ATIF 轨迹。两条路径共享任务集与并发语义,差异仅在 agent 的部署形态:一个由 Pier 打进镜像,一个以只读卷注入。掌握本节流程后,你即可在自己的宿主环境上独立复现 DeepSeek-V4.1-Flash 的 DeepSWE v1.1 基准结果,并依据 ATIF 轨迹进行逐任务审计。

  • 人工智能
  • 大模型
  • 多模态

【免费下载链接】DeepSeek-V4.1-Flash

DeepSeek-V4.1-Flash 是一个多模态混合专家(MoE)模型,拥有 5520 亿骨干参数,并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入,并以自回归方式生成文本

项目地址:https://ai.gitcode.com/hf_mirrors/deepseek-ai/DeepSeek-V4.1-Flash
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询