Repository navigation
Replies: 1 comment
|
这个字段是有的,只是这条调用没传。
/**
* Session identity stamped by the loop for request routing. Replay uses it
* ...
*/
sessionId?: Branded<'SessionId'>而 auto-review 构造请求时只给了 provider、model、system、messages、temperature、signal: // packages/experimental/auto-review/src/index.ts:624-635
const options: GenerateOptions = deepFreeze({
provider: snapshot.provider,
model: snapshot.model,
system: REVIEW_POLICY,
messages: [{ role: 'user', content: [{ type: 'text', text: reviewUserText(snapshot) }] }],
temperature: 0,
signal,
})
所以修法很小:在 一个前提需要确认,我没有核到:计费侧是不是真的只认 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
auto-review 的模型调用未传
sessionId,导致每次工具审查的费用无法归属到任何会话环境
@deepseek-ai/dsh-experimental-auto-review0.2.1-rc.2dsh web)dsh-cost-meter1.9.11(费用统计插件,走llm/stream瀑布)现象
开启 Auto 权限预设(
/permission auto)后,当天费用总计与「各会话费用之和」出现巨大差额:日级总计与中转站后台的真实扣费完全一致,说明这些调用真实发生、真实计费;但会话列表里完全看不到这笔开销。
根因
classifyRisk()通过ctx.llm.stream()发起审查请求,options里带了provider/model/system/messages/temperature/signal,唯独没有sessionId:任何依赖
llm/stream的options.sessionId做归属的观察者,都会收到undefined:于是这些用量只能进入「日/月总计」,无法进入任何会话行。这不是 cost-meter 的统计错误——它统计的每一次调用都是真实的,只是上游没有给出归属依据。
classifyRisk已经拿到agent,而agent.session.id就在手边(同一个函数的调用点lib/index.js:464才刚用过agent.session)。定量证据
我重建了每个会话的
permission/preset事件时间线,只统计处于auto窗口内的tool/call事件,与账本缺口逐一对照:tool/call逐日精确相等,一个不差。 每次工具调用前审查一次(
tools/pre-execute钩子),审查次数与账本缺口完全一致。token 特征佐证
REVIEW_POLICY20,470 字符 ≈ 5–7k token,叠加FILTERED_HISTORY完整历史快照{"risk":"low","decision":"allow"}时间线佐证
缺口严格对应以上 auto 窗口,窗口外的工具调用(10-19 的 155 次、10-20 的 233 次)没有产生任何缺口。
反向验证
把权限从
auto切到workspace-write(approval: ask)后,对同一账本连续采样:day.callssessions.calls两者各增长 14,缺口恒定不再扩大——审查停止后,未归属用量即刻停止产生。
影响
llm/stream的options.sessionId做归属的观察者(计费、审计、限流、遥测)都会受影响。建议修复
在
classifyRisk的options中补上sessionId:const options = deepFreeze({ provider: snapshot.provider, model: snapshot.model, + sessionId: agent.session.id, system: REVIEW_POLICY, messages: [{ role: "user", content: [{ type: "text", text: reviewUserText(snapshot) }] }], temperature: 0, signal });agent已是classifyRisk的入参,agent.session.id在同文件第 464 行已被使用,无需新增依赖。若上游认为「审查调用不应算进被审查会话的账」,建议同时在
llm/stream的 options 中提供一个显式的归属或标记字段(例如attribution: 'auto-review'),让下游能把这类后台消耗单独归类,而不是变成无主的日级残差。关键是不能留undefined——静默丢失归属比显式标注更糟。补充说明
approval: never+preset: auto的组合下才会触发(lib/index.js:464的permissionPresets.current(agent.session) !== AUTO_PRESET直接return next()),因此关闭 Auto 即可规避。dsh-cost-meter的缺陷。它的日级数字与中转站账单一致,会话行也只统计了有归属依据的调用,两边都没算错;缺失的是上游的归属信息。All reactions