SOP:token_proxy 新增小米 MiMo 模型路由(mi-model-20260924)¶
主机:
192.168.31.250(用户rain)| 工程:/home/rain/Documents/services/token_proxy性质:C 类变更(改配置 + 重启服务)| 执行日期:2026-09-24
1. 背景¶
用户已对接小米模型(https://api.xiaomimimo.com/v1,模型 mimo-v2.6-flash),要求 token 代理新增该上游,使 Trae 经代理请求小米模型时能记账并计入成本报表。执行前已用测试 key 实测确认小米 usage 字段格式(见第 6 章),无需改任何代码。
2. 目标(可验证状态)¶
/healthz返回routes含mi;- Trae 经
http://192.168.31.250:8788/mi发起的请求产生route=mi的usage.jsonl记录,缓存命中/未命中明细非空; cost_report.py能取到mimo-v2.6-flash的价(成本非 0)。
3. 前置条件¶
| # | 条件 | 校验 |
|---|---|---|
| 1 | 服务当前 active 且配置可解析 | systemctl --user is-active token-proxy |
| 2 | 小米上游连通 | 实测已通过(2026-09-24 两条最小请求成功) |
| 3 | 备份已生成 | ls mi-model-20260924/backup/ |
4. 影响范围¶
- 单主机
192.168.31.250,仅改config.yaml一个文件; - 需重启服务:
systemctl --user restart token-proxy,会打断在途流式回答(执行时无在跑会话); - 既有
/ds、/glm路由与三个不可再生数据文件(usage.jsonl/balance_history.jsonl/req_shape.jsonl)不受影响。
5. 分步操作¶
以下为与实现等价的操作序列(本次为手工编辑,无独立实现文件,以 config.yaml 现状为准):
cd /home/rain/Documents/services/token_proxy
# 1) 备份(高危前置:覆盖原文件前必须完成)
TS=$(date +%Y%m%d-%H%M%S)
mkdir -p mi-model-20260924/backup
cp -p config.yaml "mi-model-20260924/backup/config.yaml.bak.$TS"
# 2) 编辑 config.yaml 三处(已执行):
# a. 头注释「客户端 base_url」清单加一行 /mi -> 小米 MiMo
# b. routes 加 mi: https://api.xiaomimimo.com/v1
# c. pricing.models 加 mimo-v2.6-flash(peak=off_peak=0.02/1.0/2.0,不分峰谷)
# 3) 重启生效(高危:打断在途流式回答;先确认无在跑会话)
systemctl --user restart token-proxy
6. 验证¶
systemctl --user is-active token-proxy # 预期: active
python3 -c "import urllib.request,json; print(json.load(urllib.request.urlopen('http://127.0.0.1:8788/healthz')))"
# 预期: {'status': 'ok', 'routes': ['ds', 'glm', 'mi']}
diff mi-model-20260924/backup/config.yaml.bak.* config.yaml
# 预期: 恰好 3 处纯新增(注释 1 行、routes 1 行、pricing 段 8 行),无其它差异
已完成的验证(2026-09-24):以上三项全过;YAML 解析断言(mi 路由、mimo 价、deepseek-v4-flash 未被误改、thinking.inject=false)全过;幂等复跑配置解析零变化。
usage 格式实测(改配置前,A 类只读):非流式与流式(含 stream_options.include_usage)均返回 OpenAI 式 usage:
{"completion_tokens":13,"prompt_tokens":9,"total_tokens":22,
"completion_tokens_details":{"reasoning_tokens":10},
"prompt_tokens_details":{"cached_tokens":0}}
已被现有代码兼容:proxy.py 提取 prompt_tokens_details.cached_tokens,cost_report.py 走 GLM 回退(命中 = cached_tokens,未命中 = prompt_tokens − 命中);上游回显模型名 mimo-v2.6-flash 与价目表规范名一致,无需 aliases。测试 key 文件 /tmp/mimo_key 用后即删,未留档。
待办(用户侧):Trae 新建自定义模型 base_url=http://192.168.31.250:8788/mi、模型 mimo-v2.6-flash(按 SOP 一节约定同时保留直连兜底),发一条消息后核对 tail -n 1 logs/usage.jsonl 含 route=mi 且 cost 字段非 0——此为第 2 章目标的最终闭环。
7. 回滚¶
- 备份位置:~~
mi-model-20260924/backup/config.yaml.bak.20260924-123412~~ —— 该 backup 目录已于 2026-10-02 按台账判据删除,回滚点随之放弃(判据已满足:小米链路 1219 条记账、最近一条 2026-09-30 15:30status=200,见backlog-20261002/SOP.md第 5.1 节); - 回滚步骤(已失效,须先自建快照):手工撤销
config.yaml中routes.mi、pricing.models.mimo-v2.6-flash与头注释三处改动,再systemctl --user restart token-proxy; - 回滚后验证:
/healthz的routes回到['ds','glm']; - 无数据回滚需求:本次未触碰任何日志数据文件。
8. 风险说明¶
| 风险 | 缓解 |
|---|---|
| 重启打断在途流式回答 | 执行前确认无在跑会话;已按此执行 |
| 小米 usage 字段若日后变更,缓存明细可能缺失 | 已实测当前格式并被现有解析覆盖;logging.resp_file 可事后查缺 |
| 价目表日后调价 | pricing 版本化:新增条目放最前、不删旧条目(工程既有约定) |
执行中曾误改 deepseek-v4-flash 价(4.0→4.5) |
当场发现并已恢复为 4.0,最终 diff 确认无残留 |
来源:
/home/rain/Documents/services/token_proxy/mi-model-20260924/SOP.md| 最后更新:2026-10-02 15:19(由build/sync.py同步,请勿在站点侧修改)