166 lines
3.6 KiB
Markdown
166 lines
3.6 KiB
Markdown
# Route Acceptance Matrix
|
||
|
||
日期:2026-05-29
|
||
|
||
## 目标
|
||
|
||
把 Phase 2 已经验证过的三类能力,收敛成固定入口和固定证据格式:
|
||
|
||
1. 控制面
|
||
2. 运行态 / 健康视图
|
||
3. 数据面
|
||
|
||
当前统一入口:
|
||
|
||
- `scripts/acceptance/verify_route_control_plane.sh`
|
||
- `scripts/acceptance/verify_route_health_ui.sh`
|
||
- `scripts/acceptance/verify_route_data_plane.sh`
|
||
- `scripts/acceptance/verify_route_acceptance_matrix.sh`
|
||
|
||
其中 `verify_route_acceptance_matrix.sh` 是总入口,会按顺序执行前三个脚本并汇总 `summary.json`。
|
||
|
||
## 验收矩阵
|
||
|
||
### 1. 控制面
|
||
|
||
脚本:
|
||
|
||
- `scripts/acceptance/verify_route_control_plane.sh`
|
||
|
||
验证范围:
|
||
|
||
- 创建 `logical_group`
|
||
- 创建 `logical_group_model`
|
||
- 创建 `route`
|
||
- 创建 `route_model`
|
||
- `GET /api/logical-groups/{group_id}`
|
||
- `PUT /api/logical-groups/{group_id}`
|
||
- `PUT /api/logical-groups/{group_id}/routes/{route_id}`
|
||
- `GET /api/logical-groups/{group_id}/routes`
|
||
- `GET /api/logical-groups/{group_id}/routes/{route_id}/models`
|
||
|
||
最小输入:
|
||
|
||
- `CRM_BASE`
|
||
- `CRM_ADMIN_TOKEN`
|
||
|
||
主要产物:
|
||
|
||
- `01-create-group.json`
|
||
- `03-create-route.json`
|
||
- `06-update-group.json`
|
||
- `07-update-route.json`
|
||
- `10-summary.json`
|
||
|
||
### 2. 健康视图 / 运行态
|
||
|
||
脚本:
|
||
|
||
- `scripts/acceptance/verify_route_health_ui.sh`
|
||
|
||
验证范围:
|
||
|
||
- 公网 `route-health.html` 页面可达
|
||
- `POST /api/routing/sticky/cooldowns`
|
||
- `POST /api/routing/sticky/route-failures`
|
||
- `GET /api/routing/routes/health`
|
||
- `POST /api/routing/resolve`
|
||
- `GET /api/routing/logs/failovers`
|
||
|
||
最小输入:
|
||
|
||
- `CRM_BASE`
|
||
- `CRM_ADMIN_TOKEN`
|
||
- 可选 `ROUTE_HEALTH_PAGE_URL`
|
||
|
||
主要产物:
|
||
|
||
- `00-route-health.html`
|
||
- `08-health-before.json`
|
||
- `09-resolve.json`
|
||
- `10-health-after.json`
|
||
- `11-failovers.json`
|
||
- `12-summary.json`
|
||
|
||
### 3. 数据面
|
||
|
||
脚本:
|
||
|
||
- `scripts/acceptance/verify_route_data_plane.sh`
|
||
|
||
验证范围:
|
||
|
||
- 创建临时 `logical_group / route / route_model`
|
||
- `POST /api/routing/chat/completions`
|
||
- `GET /api/routing/logs/decisions`
|
||
|
||
最小输入:
|
||
|
||
- `CRM_BASE`
|
||
- `CRM_ADMIN_TOKEN`
|
||
- `SHADOW_HOST_ID`
|
||
- `SHADOW_GROUP_ID`
|
||
- 二选一:
|
||
- `SUBSCRIPTION_USER_ID`
|
||
- `GATEWAY_API_KEY`
|
||
|
||
补充说明:
|
||
|
||
- 若传 `SUBSCRIPTION_USER_ID`,期望 `effective_gateway_key_source=managed_subscription`
|
||
- 若传 `GATEWAY_API_KEY`,脚本仍可跑通,但这不覆盖“自动供给 managed key”场景
|
||
|
||
主要产物:
|
||
|
||
- `05-route-chat.json`
|
||
- `06-decision-logs.json`
|
||
- `07-summary.json`
|
||
|
||
## 总入口
|
||
|
||
脚本:
|
||
|
||
- `scripts/acceptance/verify_route_acceptance_matrix.sh`
|
||
|
||
它会创建:
|
||
|
||
```text
|
||
artifacts/phase2-routing-matrix/<timestamp>_route_matrix/
|
||
control_plane/
|
||
health_ui/
|
||
data_plane/
|
||
summary.json
|
||
```
|
||
|
||
`summary.json` 只保留最核心的摘要字段:
|
||
|
||
- `control_plane_group_id`
|
||
- `health_ui_group_id`
|
||
- `data_plane_group_id`
|
||
- `data_plane_request_id`
|
||
- `data_plane_upstream_status`
|
||
- `health_ui_resolve_route_id`
|
||
|
||
## remote43 推荐执行方式
|
||
|
||
如果要避免把真实 `CRM_ADMIN_TOKEN` 带回本地,推荐直接在 `remote43` 上执行:
|
||
|
||
```bash
|
||
cd /home/ubuntu/sub2api-kimi-patched-auto2-20260525_18169
|
||
set -a
|
||
. ./.env.crm
|
||
set +a
|
||
|
||
cd /home/ubuntu/sub2api-cn-relay-manager-git-current
|
||
CRM_BASE="https://sub.tksea.top/portal-admin-api" \
|
||
SHADOW_HOST_ID="<real-shadow-host-id>" \
|
||
SHADOW_GROUP_ID="<real-shadow-group-id>" \
|
||
SUBSCRIPTION_USER_ID="<managed-user-id>" \
|
||
bash ./scripts/acceptance/verify_route_acceptance_matrix.sh
|
||
```
|
||
|
||
## 当前边界
|
||
|
||
- 脚本只负责留证据和判断通过/失败,不负责清理临时 `logical_group`
|
||
- 数据面脚本当前仍依赖调用方提供真实 `shadow_host_id / shadow_group_id`
|
||
- 尚未覆盖“同公开模型双线路主备”的未来策略矩阵
|