修复 DeepSeek V4 Flash TOKEN 成本高估 #214

Merged
guke merged 7 commits from codex/fix-deepseek-token-cost into main 2026-08-01 23:25:29 +08:00
Member

改动

  • 为 deepseek-v4-flash 配置 DashScope 华北 2 官方单价:输入 ¥1 / 输出 ¥2(每百万 Token)
  • 定向重算历史上误用 3/15 兜底价冻结的成本和价格快照
  • 保留已有人工单价及配置生效时间,避免影响历史缺失成本回填
  • 增加迁移升级、降级和原配置保留测试

验证

  • 相关测试:17 passed
  • ruff check:通过
## 改动 - 为 deepseek-v4-flash 配置 DashScope 华北 2 官方单价:输入 ¥1 / 输出 ¥2(每百万 Token) - 定向重算历史上误用 3/15 兜底价冻结的成本和价格快照 - 保留已有人工单价及配置生效时间,避免影响历史缺失成本回填 - 增加迁移升级、降级和原配置保留测试 ## 验证 - 相关测试:17 passed - ruff check:通过
linkeyu added 1 commit 2026-08-01 14:44:38 +08:00
Member

🤖 review-pr 深审结论

🟡 需协调合并顺序 · 0.85 — DeepSeek V4 Flash 定价修正本身实现扎实、迁移可逆、测试全绿;唯一风险是#209 的 Alembic 迁移双头冲突:两者都 down_revision = limit_policy_global_bundle,两个 PR 都合入 main 后会出现两个 head,alembic upgrade head 报 multiple heads。

需关注

  • 🟡 med · 跨 PR Alembic 双头 alembic/versions/deepseek_v4_flash_price.py:本迁移 down_revision = "limit_policy_global_bundle",与 #209comparison_below_min_success 同一父节点。单独合本 PR 到当前 main = 单 head(已实测 ✓);但 #214#209 都合入后 = 双 headalembic upgrade head 会失败。后合并的那个 PR 需把迁移改挂到另一个的 revision 上(或加 merge 迁移)。合并前请确认这两者的顺序 / 重挂。

构建 / 测试(已实跑,诚实)

  • 合并最新 main(当前 main 下 单 head deepseek_v4_flash_price,已实测)后隔离 worktree 实跑:tests/test_deepseek_price_migration.py + tests/test_llm_cost.py12 passed(含迁移 upgrade / downgrade / 保留已有价、默认价断言)。

做得好

  • 配置根因修复:显式给 deepseek-v4-flash 配 1/2 单价,避免落到 3/15 未知模型兜底价。
  • 迁移精准:只改 _source==default 且 3/15 的冻结快照行,跳过已正确定价的;带 pricing_correction 标记 + marker 行 → 幂等、重跑不重复扣。
  • 可逆:downgrade 对称回滚(加回 delta、复原默认价、删 marker),且保留运营已手配价current is not None 早退)与 updated_at(避免缺失成本回填把部署前记录全排除,注释也点明)。
  • new_cost = max(0.0, ...) 防负;多模型记录只扣 deepseek 那部分(delta 只按 deepseek token 算)。
  • marker 行只写 key/value 安全:app_config.updated_atserver_default=func.now(),PG 下不缺列。

建议

  • 合并前与 #209 协调迁移链(谁后合谁重挂 down_revision 或加 merge 迁移)。
  • 可选:大表逐行 update 的迁移在超大 comparison_record 上可能较慢,留意执行窗口。

🤖 自动深审 · 全程只读 · 合并 base 后隔离 worktree 实跑 pytest

## 🤖 review-pr 深审结论 🟡 **需协调合并顺序 · 0.85** — DeepSeek V4 Flash 定价修正本身**实现扎实、迁移可逆、测试全绿**;唯一风险是**与 #209 的 Alembic 迁移双头冲突**:两者都 `down_revision = limit_policy_global_bundle`,两个 PR 都合入 main 后会出现两个 head,`alembic upgrade head` 报 multiple heads。 ### 需关注 - 🟡 **med · 跨 PR Alembic 双头** `alembic/versions/deepseek_v4_flash_price.py`:本迁移 `down_revision = "limit_policy_global_bundle"`,与 **#209** 的 `comparison_below_min_success` **同一父节点**。单独合本 PR 到当前 main = 单 head(已实测 ✓);但 **#214 与 #209 都合入后 = 双 head**,`alembic upgrade head` 会失败。**后合并的那个 PR** 需把迁移改挂到另一个的 revision 上(或加 merge 迁移)。合并前请确认这两者的顺序 / 重挂。 ### 构建 / 测试(已实跑,诚实) - 合并最新 `main`(当前 main 下 **单 head** `deepseek_v4_flash_price`,已实测)后隔离 worktree 实跑:`tests/test_deepseek_price_migration.py` + `tests/test_llm_cost.py` → **12 passed**(含迁移 upgrade / downgrade / 保留已有价、默认价断言)。 ### 做得好 - 配置根因修复:显式给 `deepseek-v4-flash` 配 1/2 单价,避免落到 3/15 未知模型兜底价。 - 迁移精准:只改 `_source==default` 且 3/15 的**冻结**快照行,跳过已正确定价的;带 `pricing_correction` 标记 + marker 行 → **幂等**、重跑不重复扣。 - **可逆**:downgrade 对称回滚(加回 delta、复原默认价、删 marker),且**保留运营已手配价**(`current is not None` 早退)与 **`updated_at`**(避免缺失成本回填把部署前记录全排除,注释也点明)。 - `new_cost = max(0.0, ...)` 防负;多模型记录只扣 deepseek 那部分(delta 只按 deepseek token 算)。 - marker 行只写 key/value 安全:`app_config.updated_at` 有 `server_default=func.now()`,PG 下不缺列。 ### 建议 - 合并前与 #209 协调迁移链(谁后合谁重挂 `down_revision` 或加 merge 迁移)。 - 可选:大表逐行 update 的迁移在超大 `comparison_record` 上可能较慢,留意执行窗口。 <sub>🤖 自动深审 · 全程只读 · 合并 base 后隔离 worktree 实跑 pytest</sub>
linkeyu added 5 commits 2026-08-01 16:16:49 +08:00
Member

🤖 review-pr 深审结论(增量复审 @921654cb)

🟢 可合并 · 0.9(上轮 🟡 的 Alembic 双头已修复)— 本次把 deepseek 迁移 down_revisionlimit_policy_global_bundle 重挂到 comparison_below_min_success(#209 的迁移),并把 #209 整套改动原样并入本分支,形成线性单头链。

本次增量(41e30cbe → 921654cb

  • alembic/versions/deepseek_v4_flash_price.pyRevises / down_revision 改为 comparison_below_min_success。链现为 …→ comparison_below_min_success(#209) → deepseek_v4_flash_price(#214)单 head(已实测 get_heads() = 1)。
  • 其余出现在增量里的文件(comparison.py / queries.py / comparison_below_minimum_as_success.py / …)是 #209 的改动被原样并入 —— 与 #209 head f1dd0f4a 逐文件 diff 为空(干净 rebase,无二次改动)。

⚠️ 合并协调(重要)

  • #214 现在已「栈」在 #209 之上:本分支包含 #209 全量改动,且迁移依赖 #209 的 revision。
    • 合并顺序应为 #209#214;若单独先合 #214,会把 #209 的整套(状态枚举归一 + 迁移)一并带入 main(届时 #209 变为已并入)。请知悉,别当成纯 deepseek 单点 PR 合。
    • 因此审 / 合 #214 = 同时并入 #209;#209 那条待产品确认(below_minimum → success 触发完成奖励)随之一起上。

构建 / 测试(已实跑,诚实)

  • 合并最新 main单 head deepseek_v4_flash_price)后隔离 worktree 实跑合并后测试面:deepseek_price_migration + comparison_below_minimum_migration + compare_harvest + comparison_admin_summary + admin_read + llm_cost68 passed

结论

  • 双头问题已妥善解决(重挂 + 线性链)。deepseek 定价修正逻辑同上轮(精准 / 幂等 / 可逆)。仅剩合并顺序需按 #209#214 协调

🤖 自动深审 · 增量复审 · 合并 base 后隔离 worktree 实跑 pytest

## 🤖 review-pr 深审结论(增量复审 @921654cb) 🟢 **可合并 · 0.9**(上轮 🟡 的 Alembic 双头**已修复**)— 本次把 deepseek 迁移 `down_revision` 从 `limit_policy_global_bundle` 重挂到 `comparison_below_min_success`(#209 的迁移),并把 #209 整套改动**原样并入**本分支,形成线性单头链。 ### 本次增量(`41e30cbe → 921654cb`) - `alembic/versions/deepseek_v4_flash_price.py`:`Revises` / `down_revision` 改为 `comparison_below_min_success`。链现为 `…→ comparison_below_min_success(#209) → deepseek_v4_flash_price(#214)`,**单 head**(已实测 `get_heads()` = 1)。 - 其余出现在增量里的文件(`comparison.py` / `queries.py` / `comparison_below_minimum_as_success.py` / …)是 **#209 的改动被原样并入** —— 与 #209 head `f1dd0f4a` 逐文件 `diff` **为空**(干净 rebase,无二次改动)。 ### ⚠️ 合并协调(重要) - **#214 现在已「栈」在 #209 之上**:本分支包含 #209 全量改动,且迁移依赖 #209 的 revision。 - 合并顺序应为 **#209 → #214**;若单独先合 #214,会把 #209 的整套(状态枚举归一 + 迁移)一并带入 main(届时 #209 变为已并入)。请知悉,别当成纯 deepseek 单点 PR 合。 - 因此审 / 合 #214 = 同时并入 #209;#209 那条待产品确认(`below_minimum → success` 触发完成奖励)随之一起上。 ### 构建 / 测试(已实跑,诚实) - 合并最新 `main`(**单 head** `deepseek_v4_flash_price`)后隔离 worktree 实跑合并后测试面:`deepseek_price_migration + comparison_below_minimum_migration + compare_harvest + comparison_admin_summary + admin_read + llm_cost` → **68 passed**。 ### 结论 - 双头问题已妥善解决(重挂 + 线性链)。deepseek 定价修正逻辑同上轮(精准 / 幂等 / 可逆)。**仅剩合并顺序需按 #209 → #214 协调**。 <sub>🤖 自动深审 · 增量复审 · 合并 base 后隔离 worktree 实跑 pytest</sub>
guke added 1 commit 2026-08-01 23:06:55 +08:00
guke merged commit 1a61cb5a65 into main 2026-08-01 23:25:29 +08:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WonderableAI/shaguabijia-app-server#214