TradePilot AI v1.0.1 — 数据准确性专项 + 全量健壮性修复
🔴 重大数据问题修复(数据准确性专项)
核心结论:UN Comtrade 原始接口的"明细行"不能直接求和。 平台按 customsCode(贸易方式)和 motCode(运输方式)把同一笔贸易拆成多条 + 成对重复行。此前所有"清洗"都在不理解字段语义的情况下进行,导致贸易额严重失真。
| 问题 | 根因 | 修复 |
|---|---|---|
| 德国进口 8525 被算成 55.07 亿(真实 6.88 亿,差 8 倍) | 22 行明细直接求和 | 去重 + 取 customsCode=C00 且 motCode=0 唯一记录为总额;无则报错拒绝(宁缺勿错) |
| "mot=0 优先"仍错(27.5 亿) | 只过滤 mot 仍保留 customsCode 拆分行 | 双条件同时命中 |
| 出口 vs 进口镜像不一致(4 倍差) | 两国上报口径真实差异 | 标记 Suspicious,不覆盖替换(三态质量模型) |
| 500 条截断被当完整结果 | 截断检测在过滤后 | 移到过滤前,触顶拒绝 |
| preview/formal 切换旧缓存命中 | 缓存键无模式维度 | 缓存键加 mode |
| SEC 财务单位错误(苹果 0.00 亿) | 百万美元当美元 | SEC_VAL_SCALE=1e6 |
| A 股序列降序取错年份 | 返回降序 | 排序升序 |
| 印度编码 699→356 | UNCTAD 内部码 | 改 M49 标准码 |
| 索尼年报取不到 | 20-F + 百万日元 | 按公司配置 (form, 币种, 倍数) |
| LLM 趋势缓存数值不失效 | 键不含数据签名 | 键加签名 + deepcopy |
原则沉淀:宁缺勿错 · 先理解语义再清洗 · Valid/Suspicious/Invalid 三态质量模型。
🐛 其他修复
- 确定性崩溃:线索 URL 端口越界、模拟客户花括号、LLM 非 dict、Retry-After 无上限、脏缓存 KeyError
- 防幻觉绕过:URL 归一化空串绕过校验、搜索结果裸拼 prompt
- Agent 步骤去重、请求模型长度上限、eBay token 缓存、Word DispatchEx
- SSRF DNS rebinding TOCTOU 关闭(IP 钉扎建连)
- 速卖通签名修复:timestamp yyyy-MM-dd HH:mm:ss(GMT+8) + 签名大写 hex
- UN Comtrade 数据源切换开关(设置面板)
✅ 测试
86 项 pytest 全部通过(新增 23 项回归测试)