"DeepSeek Harness 实测:一毛钱干三活,但默认配置是个坑"

DeepSeek Harness 实测:一毛钱干三活,但默认配置是个坑

各大媒体的 dsh 实测文章已经铺完了,但全是表演型任务。本文用三轮真实编码任务实测 headless 模式,附完整 token 数据和 5 个踩坑记录。

实验环境

  • 模型:deepseek-v4-flash(headless 默认)
  • 环境:macOS, Node v22.22.2
  • 靶场:40 行 Python 计算器模块,6 个函数埋 4 个 bug
  • 安装npm install @deepseek-ai/dshdsh --profile headless "task"

三轮任务

轮次 任务 权限模式 耗时
1 找bug+写测试+跑通 workspace-write(默认) 213s
2 同上 danger-full-access 162s
3 用不存在的 API 加功能 danger-full-access 31s

坑1:默认沙箱跑不了命令

第一轮用默认配置,dsh 改了文件、写了测试,但 pytest 一步都跑不动:

makefile 复制代码
sandbox-exec: Operation not permitted

dsh 默认权限模式 workspace-write 允许读写文件,但 bash 命令走沙箱。macOS 上 sandbox-exec 需要特殊权限,普通终端跑不了。dsh 检测到被拒后尝试升级到 danger-full-access,但 headless 没有审批 UI,这条路也是死的。

善后:

bash 复制代码
export DSH_PERMISSION_MODE=danger-full-access

不开这个,headless 模式等于残废------只能改文件不能跑命令。

坑2:自动装依赖可能装错 Python

第二轮开了全权限,dsh 全程无人工介入完成了任务:

  • 读代码 → 推理出 4 个 bug
  • 逐个修复
  • 写 67 个参数化测试
  • 发现没 pytest → 自己 pip install
  • 跑测试 → 67 passed

但 dsh 装 pytest 时用的是系统默认 python3。如果你的项目有 venv,dsh 不会自动激活它

善后: 任务描述里指定 Python 路径,或启动前激活 venv。

坑3:缓存命中率 96.6%,但只在 session 内

第二轮完整任务的 token 数据:

makefile 复制代码
总输入:     569,630
缓存命中:   550,272 (96.6%)
输出:       23,254
推理:       16,442
费用(谷时):  ¥0.056

DeepSeek 的 prompt cache 在同一 session 内越打越热。但每个新 session 冷启动要全量输入

善后: 相关任务放一个 session 里连续做。别每个任务都开新 session。

三轮总费用:

轮次 总输入 缓存率 费用
1 43K 75.1% ¥0.009
2 570K 96.6% ¥0.056
3 254K 94.1% ¥0.037
合计 ¥0.102

坑4:它不脑补,反而纠正了我

第三轮设了个陷阱:让它用 math.median()(不存在,标准库在 statistics 模块)。

dsh 的反应:

  1. 执行 hasattr(math, 'median')False
  2. 回复里明确说 "Python's math module has no median() function"
  3. 改用 from statistics import median
  4. 写测试 → 76 passed

session 日志(.jsonl.zstd)记录了完整的 17 次工具调用和 446 个推理 chunk。这就是 Trajectory 页的价值------每一步可追溯。

但 headless 下日志是压缩格式,没有现成的费用汇总,得自己解压提取:

python 复制代码
import zstandard, json

dctx = zstandard.ZstdDecompressor()
with open("session.jsonl.zstd", "rb") as f:
    raw = dctx.stream_reader(f).read()

for line in raw.decode().strip().split("\n"):
    obj = json.loads(line)
    if obj.get("type") == "assistant/chunk":
        chunk = obj["data"]["chunk"]
        if chunk.get("type") == "usage":
            print(chunk["usage"])  # inputTokens, outputTokens, cacheReadTokens

坑5:headless 默认用 Flash 不是 Pro

查了 session 日志的 request/header 事件:

json 复制代码
{"model": "deepseek-v4-flash"}

不是 V4-Pro。Flash 对找 bug、写测试已经够用,但复杂架构设计可能需要手动切 Pro。

代码修复质量验证

dsh 修复的 4 个 bug,我手动跑了 pytest 验证:

python 复制代码
# Bug 1: divide 除零
def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为 0")
    return a / b

# Bug 2: average 空列表
def average(numbers):
    if not numbers:
        raise ValueError("不能计算空列表的平均值")
    return sum(numbers) / len(numbers)

# Bug 3: format_price 丢小数
def format_price(cents):
    return round(cents / 100, 2)

# Bug 4: parse_range 非法输入
def parse_range(expr):
    if not isinstance(expr, str):
        return None
    parts = expr.split("-")
    if len(parts) != 2:
        return None
    try:
        return int(parts[0]), int(parts[1])
    except ValueError:
        return None

67 个测试全部通过,覆盖了正常路径和边界情况。

总结

善后
默认沙箱跑不了命令 DSH_PERMISSION_MODE=danger-full-access
自动装依赖装错 Python 指定路径或提前激活 venv
冷启动贵 相关任务放一个 session
日志压缩无费用汇总 解压 .jsonl.zstd 自己算
默认 Flash 不是 Pro 简单任务用 Flash,复杂任务切 Pro

编码能力:Flash 就能找对 bug、写测试、自己装依赖、自己跑通。工程成熟度:沙箱默认锁死、没费用汇总、日志不友好、配置隐蔽。

但一毛钱干三活、96.6% 缓存、不脑补还主动纠错------"让 dsh 帮你善后"已经可以开始了。

领资料

文中用到的靶场代码(40 行带 4 个 bug 的计算器)、session 日志解压脚本、三轮完整 token 数据,都打包好了:公众号「啫煲捞饭」后台回复 dsh 领取。

相关推荐
用户7366533219621 小时前
React全家桶实战:Redux+Antd+Hooks构建企业级前端应用
ai编程
jobBridge211 小时前
大模型到底是怎么"想"的?我把 Transformer 拆开,发现它其实是个"接词狂魔"
人工智能·后端·编程语言
唐青枫2 小时前
看懂内存地址之后,才算真正入门 Zig:指针、切片与实战
后端
朋克洛德的码农2 小时前
Go并发-sync包四剑客:Mutex、RWMutex、WaitGroup、Once-从入门到原理
开发语言·后端·golang
fulton2 小时前
为什么不用现成的开源工具?NovelOps与6大AI写作工具横向对比
后端
fulton2 小时前
3个月踩坑实录:从想法到270章规划,AI写长篇到底要花多少成本?
后端
fulton2 小时前
为什么AI写到20章就开始"复制粘贴"自己?创意扰动机制详解
后端
艺艺生辉2 小时前
从if-else到策略模式
后端·设计模式
fulton2 小时前
AI写小说失败的第一原因是什么
后端