- 人工智能
- 大模型
- 多模态
【免费下载链接】DeepSeek-V4.1-Flash
DeepSeek-V4.1-Flash 是一个多模态混合专家(MoE)模型,拥有 5520 亿骨干参数,并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入,并以自回归方式生成文本
本文是 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 | 运行的 agent | mini-swe-agent或dsh-minimal |
--model | 模型标识 | litellm 风格provider/model(如deepseek/deepseek-flash),dsh-minimal 也接受裸模型名 |
--ak | agent 附加参数(key=value,可重复) | 如reasoning_effort=max、cost_limit=0 |
--ae | agent 环境变量(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 的上下文长度。该模型原生支持图像和文本输入,并以自回归方式生成文本
相关推荐
Trae Agent 基准评测实战指南:基于 SWE-bench、SWE-bench-Live 与 Multi-SWE-bench 的端到端评测流程
Trae Agent 基准评测实战指南:基于 SWE bench、SWE bench Live 与 Multi SWE bench 的端到端评测流程 本篇指南完
人工智能大模型AI AgentAgent 框架代码智能体CLI工具调用mini-swe-agent 实战指南:在 SWE-bench 基准上批量运行与单实例调试
mini swe agent 实战指南:在 SWE bench 基准上批量运行与单实例调试 导读 本指南以 mini swe agent 仓库提供的两个官方脚本
人工智能大模型AI Agent代码智能体mini-swe-agent SWE-ReX Docker 环境实战指南:用 SWE-ReX 沙箱化 Docker 执行运行 SWE-bench 评测
mini swe agent SWE ReX Docker 环境实战指南:用 SWE ReX 沙箱化 Docker 执行运行 SWE bench 评测 mini
人工智能大模型AI Agent代码智能体
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考