Replies: 3 comments
|
补充:这个建议我已经做了最小实现并验证,改动在 https://github.com/xiedongqingxiao-ops/deepseek-harness/tree/fix/toolargs-error-tool-name (commit
验证: 本想直接提 PR,但仓库当前 |
|
English summary: source-verified at rc.7 (99f6f02). ToolArgsError (schema.ts:461-470) indeed carries no tool name — 源码验证(rc.7 1. 机制确认(源码)
2. 建议 #1 缺失的一半:路径在顶层会塌缩violation 字符串本身是带路径的: // packages/core/tools/src/json-schema.ts:422-424
function propertyPath(path: string, key: string): string {
return path === '' ? key : `${path}.${key}`
}但顶层( 你的实现加了工具名( function propertyPath(path: string, key: string): string {
return path === '' ? `${key} (top-level)` : `${path}.${key}`
}或者更通用:顶层加 3. 建议 #2(description 改可选)的评估已验证你的依据成立: 两个选项都成立,取决于维护者偏好:
建议拆分提交:工具名 + (top-level) 是一个独立小 PR(错误信息可诊断性,纯增量、零语义变更);description 可选是另一个(schema 语义变更,需评审)。两个都 ready 了,通道开启即可落地。 4. 一个额外观察你的 13/17 失败率 vs 另一会话 131/131 合规说明这是模型上下文敏感而非解析 bug——你已排除得干净。但同族还有一层: 补充:structured.ts:89 的 ToolArgsError 注释确认了同一错误族的行为契约——model retries within the same turn,所以错误信息的可诊断性直接决定重试轮次成本,你这波改动的杠杆比表面看起来大。 |
|
感谢 @argszero 的源码级复核!按你的两条意见补齐了,分支 fix/toolargs-error-tool-name 已更新(1444bbbba6 之上新增两个 commit): commit
commit
验证:tools / code-mode / ts-types / py-types / json-schema 5 个 spec 共 315 个测试通过;subagent structured 相关 48 个通过。 同意你说的拆法:错误信息可诊断性(纯增量、零语义变更)与 schema 语义变更(需评审)各自独立。PR 通道目前仍处于关闭状态,分支保持同步,随时可收。 |
Uh oh!
There was an error while loading. Please reload this page.
现象
Code Mode(agentPreset=code)下模型只能直接调
run_code。当某次run_code调用缺少必填参数description时,工具结果只返回:这条报错没有指明是哪个工具、哪个层级的参数。实际调试中,模型(deepseek-v4-flash)连续 13 次把
description写进了code字符串内部的tools.pwsh({ ... description: ... }),而不是写在run_code顶层参数对象里;每次收到同一条报错,模型都误判为「内层参数 / 引号转义 / 序列化」问题并原地重试,浪费了大量轮次。数据
同一个本地会话(deepseek-v4-flash,官方 API):
run_code调用,13 次漏传顶层description,全部被拒(错误均为上述INVALID_ARGS);code+description则全部成功。说明这不是解析层 bug,而是模型在该任务上下文下对「run_code 顶层必填 description」的遵循不稳定(同一模型的其它会话 131/131 合规;deepseek-v4-pro 系几百次调用零遗漏)。
建议
ToolArgsError 报错带上工具名与参数路径,例如:
invalid arguments for tool run_code: missing required property "description" (top-level)现在
dsh-tools的ToolArgsError只输出invalid arguments: ...,模型和用户无法区分是run_code顶层缺参还是内层工具缺参,非常容易误诊。考虑把
run_code的description改为可选(或提供默认值)。description目前只作为 UI 展示标签(title: args.description)加一条非空校验,对执行结果没有影响;把它设为必填却要所有模型稳定遵守,成本高于收益。若保留必填,建议在tools:sdk指令里把「run_code 顶层 description」与「tools.* 内层 description」的层级关系写得更显式。版本:
@deepseek-ai/dsh 0.1.0-rc.7All reactions