缺陷 / 高 / Agent 引擎
electron/harness/utils/token-estimator.ts
estimateMessagesTokens 处理 assistant 消息时:
if (msg.toolCalls) { msg.toolCalls.forEach(tc => { total += estimateTextTokens(JSON.stringify(tc.args)); // 忽略 tc.name 和 tc.id }); }
未计算 tc.name(工具名)和 tc.id(调用 ID)的 token。 实际上 OpenAI tokenizer 会将 tool_call 的完整结构(id、name、args)都计入 token。
tc.name
tc.id
if (msg.toolCalls) { msg.toolCalls.forEach(tc => { // id 通常 24 字符 (call_xxx) total += estimateTextTokens(tc.id ?? ''); // name 通常 5-20 字符 total += estimateTextTokens(tc.name ?? ''); // args JSON total += estimateTextTokens(JSON.stringify(tc.args ?? {})); // 结构开销 total += 8; // {"id":"","name":"","arguments":""} 等结构字符 }); }
同时处理 tool 消息的 tool_call_id 字段。
No dependencies set.
The note is not visible to the blocked user.
问题类型
缺陷 / 高 / Agent 引擎
文件位置
electron/harness/utils/token-estimator.ts问题描述
estimateMessagesTokens 处理 assistant 消息时:
未计算
tc.name(工具名)和tc.id(调用 ID)的 token。实际上 OpenAI tokenizer 会将 tool_call 的完整结构(id、name、args)都计入 token。
影响
建议修复
同时处理 tool 消息的 tool_call_id 字段。