7.2 KiB
7.2 KiB
真实宿主验收经验与已调通细节
日期:2026-05-21
目的
这份文档不替代 docs/REAL_HOST_ACCEPTANCE_RUNBOOK.md,而是把已经在线下真实打通过、以及多次踩坑后确认的细节沉淀下来,避免后续重复误判。
建议阅读顺序:
docs/EXECUTION_BOARD.md—— 看当前 gate 与最新真相docs/REAL_HOST_ACCEPTANCE_RUNBOOK.md—— 看标准执行步骤- 本文 —— 看调试经验、误判点、诊断顺序
已经确认打通的事实
-
account 视角模型暴露可以正确落库
- CRM 在 account 创建/导入时写入
credentials.model_mapping - 宿主
GET /api/v1/admin/accounts/:id/models已能返回目标 provider 模型,而不是一律回退到 GPT 默认集合 - DeepSeek / MiniMax 都已在 live 验收中确认
- CRM 在 account 创建/导入时写入
-
channel 视角模型映射与定价可以正确落库
- channel 创建时需要同时下发:
model_mappingmodel_pricingrestrict_models=truebilling_model_source=channel_mapped
- 对既有 channel,CRM 需要走
UpdateChannel做纠偏;这一点已在 latest-head fresh rerun 上确认生效 - 旧现象“MiniMax channel 有 model_mapping 但没有 pricing”已经被
ca1d448修复并完成 live 验证
- channel 创建时需要同时下发:
-
subscription 场景的真实 probe key 语义已经确认
- closure 最终用于宿主
/v1/models探测的,不是外部传入的原始access_api_key - 真正使用的是 CRM 在宿主侧创建/查找出来的 managed key(
sk-relay-*风格) - 因此 subscription 验收如果直接拿调用方原始 probe key 去打
/v1/models,出现403 not assigned to any group并不代表 CRM 主链路失败,而是 probe key 用错了
- closure 最终用于宿主
-
group 聚合视角与 account 单体视角必须分开看
GET /api/v1/admin/accounts/:id/models是 account 单体视角GET /v1/models是普通用户 key + group 聚合视角- 二者语义不同,不能互相替代
- 正确诊断顺序应该是:
- 先看 account models 是否正确
- 再看 managed key 视角
/v1/models是否正确 - 最后才看 completion smoke 是否通过
已调通的宿主侧前置动作
self_service
至少满足:
- 普通用户已真实创建
- 普通用户 key 已生成且可用
- 该 key 已绑定目标标准 group
- 用户具备可用余额
经验结论:
- 若只做了 key/group 绑定但没余额,
/v1/models可能从 403 进入INSUFFICIENT_BALANCE - 这不是 CRM 导入逻辑失败,而是宿主运营前置未完成
subscription
至少满足:
- 普通用户已真实创建
- 普通用户 key 已生成且可用
- 目标 group 是
subscription类型 - 普通用户已完成 subscription 分配
- 普通用户 key 已绑定该 subscription group
经验结论:
- 只有管理员主体、只有 group、或者只有 subscription 记录都不够
- 必须把“普通用户 + key + group + subscription”整条链补齐,
/v1/models才会稳定通过
已确认的高频误判点
-
把
/accounts/:id/models和/v1/models混为一谈- 前者对,后者错,不代表 account 落库失败;往往是 key/group/subscription 问题
-
用错 probe key
- subscription 场景拿原始
access_api_key直打宿主/v1/models,很容易得到 403 - 这时应先回到 closure 结果或 managed access 证据,而不是先否定产品链路
- subscription 场景拿原始
-
旧 CRM 进程误导当前结论
- live 行为必须先确认运行中的 CRM 进程是否真的包含最新提交
- 之前 MiniMax existing channel 没自动补
model_pricing,最终确认根因就是在线 CRM 进程早于修复提交ca1d448
-
PACK_PATH使用了 operator 机器的概念路径,而不是 CRM 进程本机可读路径- 当 CRM 改在本机运行时,继续传远端
/home/ubuntu/...会直接触发stat pack path ... no such file or directory - 这个报错属于验收 harness / 环境参数问题,不是 import 业务逻辑问题
- 当 CRM 改在本机运行时,继续传远端
-
remote43/fresh-host 的 Postgres/Redis 容器目标写错
- 若脚本仍打到旧 relaymgr 宿主,会看到 managed user / key / subscription 状态为空或串台
- 需要确保脚本明确指向 fresh host 对应的
{postgres,redis}容器
-
把
/v1/models已通误认为 completion 也一定通- 这不成立
- 当前最新真相就是:DeepSeek / MiniMax 的
/v1/models可以 200,但/v1/chat/completions仍可能因为 host 兼容性或上游 quota 问题失败
推荐诊断顺序
一、先确认是不是环境/脚本问题
- 确认当前运行 CRM 的提交版本与启动时间
- 确认
PACK_PATH是 CRM 本机可读路径 - 确认
CRM_HOST_BASE是否与实际 CRM 到 host 的可达地址一致 - 确认脚本命中的 Postgres/Redis 容器属于目标 fresh host,而不是旧环境
二、再确认导入数据是否正确写入宿主
- account
GET /api/v1/admin/accounts/:id- 看
credentials.model_mapping
- account models
GET /api/v1/admin/accounts/:id/models
- channel
GET /api/v1/admin/channels/:id- 看:
model_mappingmodel_pricingrestrict_modelsbilling_model_source
三、最后再确认普通用户访问链路
- self_service:看普通用户 key/group/balance
- subscription:看 managed key / allowed_groups / user_subscriptions
- 宿主
/v1/models - 宿主
/v1/chat/completions
如何解释常见现象
现象 A:/accounts/:id/models 正确,但 /v1/models 返回 403
优先判断:
- 普通用户 key 没绑定 group
- subscription 场景用错了原始 probe key
- subscription 分配或 allowed_groups 未完成
现象 B:/v1/models 返回 GPT 系模型,而不是目标国产模型
优先判断:
- account
credentials.model_mapping是否落库 - channel 是否同时具备
model_mapping + model_pricing + restrict_models + billing_model_source=channel_mapped - 是否误打到了旧 CRM 进程
现象 C:/v1/models 已 200,但 /v1/chat/completions 返回 502
优先判断:
- host 侧 provider 兼容性问题
- 上游 provider key/quota 问题
- 不要再把问题回退归因为 CRM 导入或 access closure
当前建议固化到后续文档/脚本的规则
-
所有真实宿主验收结论都要同时记录:
- account 视角结果
- managed key 视角
/v1/models结果 - completion smoke 结果
-
任何“MiniMax/DeepSeek 没生效”的结论前,必须先检查在线 CRM 是否为最新提交
-
任何 subscription 验收脚本都不应默认把外部
access_api_key当最终 probe key -
任何 fresh-host 验收脚本都必须参数化:
PACK_PATHCRM_HOST_BASE- 目标 Postgres 容器
- 目标 Redis 容器
相关证据入口
- 当前执行真相:
docs/EXECUTION_BOARD.md - 当前收口真相:
docs/PRODUCTION_CLOSURE_BOARD.md - 标准操作步骤:
docs/REAL_HOST_ACCEPTANCE_RUNBOOK.md - 关键 live 证据:
artifacts/real-host-acceptance/20260520_222713_crm18100_live_model_mapping_validationartifacts/real-host-acceptance/20260521_011544_remote43_minimax_key_importartifacts/real-host-acceptance/20260521_011717_remote43_deepseek_key_importartifacts/real-host-acceptance/20260521_064910_completion_smoke_calibration.md