1226bc8365
## 问题原因 - 新版客户端通过服务端 harvest 落库,但完成路径没有触发 LLM 调用明细与 TOKEN 成本回填。 - 内部共享密钥不一致或 PriceBot 实例切换后,拉取失败只留下空值,后续没有自动补偿。 ## 本次改动 - harvest 完成后立即异步回填 LLM 调用、TOKEN 数及成本快照。 - 抽取统一、幂等的成本回填服务,并增加定时补偿 worker。 - 增加 PriceBot 内部鉴权预检、错误日志和多实例查找兜底。 - 仅回填当前价格配置生效后的终态记录,避免用现价误算更早历史数据。 - 补充环境配置、部署说明和单元测试。 ## 验证 - 相关测试:36 passed。 - 静态检查通过,diff check 通过。 - 本地页面显示 ¥0.0139,与数据库精确均值 0.013916 的四舍五入结果一致。 ## 上线注意 部署时需确保 app-server 与 PriceBot 的 INTERNAL_API_SECRET 完全一致并重启两个服务;worker 启动后会自动补齐符合条件的历史空值。 --------- Co-authored-by: guke <guke@wonderable.ai> Co-authored-by: unknown <798648091@qq.com> Reviewed-on: #182 Co-authored-by: linkeyu <linkeyu@wonderable.ai> Co-committed-by: linkeyu <linkeyu@wonderable.ai>
1.7 KiB
1.7 KiB
比价 TOKEN 成本采集与补偿
部署前置
App Server 与 PriceBot 使用各自独立的 .env,但下面的值必须完全一致:
/opt/shaguabijia-app-server/.env/opt/pricebot-backend/.env- 配置项:
INTERNAL_API_SECRET
不要把密钥原文写入日志、命令历史或 Git。修改后同时重启两个服务。
App Server 启动后会逐个探测 PRICEBOT_INSTANCES 的内部读取接口。鉴权不一致时会记录
PriceBot LLM auth check rejected,并跳过本轮补偿,避免对所有缺失记录重复发送失败请求。
数据链路
- 当前客户端由 App Server 在 PriceBot 最终
done帧到达时 harvest 比价记录。 - harvest 成功后立即异步读取同一
trace_id的 LLM 调用,冻结 Token、成本和单价快照。 - 周期 worker 扫描近期
success/failed且llm_cost_yuan IS NULL的记录进行补偿; 为避免用现价伪造历史成本,只处理当前单价配置生效时间之后的记录。 - 管理后台顶部“平均 TOKEN 成本”使用筛选范围内已冻结成本的数据库平均值。
上线验收(只读 SQL)
SELECT
(created_at AT TIME ZONE 'Asia/Shanghai')::date AS day,
count(*) AS records,
count(llm_cost_yuan) AS cost_records,
round(avg(llm_cost_yuan)::numeric, 6) AS avg_token_cost
FROM comparison_record
WHERE created_at >= now() - interval '3 days'
GROUP BY 1
ORDER BY 1 DESC;
新产生的正常终态比价记录应在短时间内写入 input_tokens、output_tokens 和
llm_cost_yuan。历史记录只有在 PriceBot 的对应 trace JSONL 仍保留时才能准确回填;
原始调用已经清理的记录不能用估算值冒充真实成本。