Files

43 lines
2.4 KiB
Markdown
Raw Permalink Normal View History

# 投顾 Agent 灰度与回滚操作手册
## 灰度开关
投顾灰度使用进程环境变量,不修改冻结的数据库基线,也不需要数据库迁移:
```text
ADVISOR_ROLLOUT_ENABLED=true
ADVISOR_ROLLOUT_CUSTOMER_IDS=9001,9002
```
`ADVISOR_ROLLOUT_ENABLED=false` 时保持现有本地行为。开启后,`admin` 和
`super_admin` 始终放行;客户只有在 `ADVISOR_ROLLOUT_CUSTOMER_IDS` 中才可以访问
投顾 Agent、投资目标、持仓分析、资产配置和推荐接口。白名单为空时客户全部失败关闭,
不会误放量。灰度拒绝统一返回 `403 AGENT_PERMISSION_DENIED`,并写入
`interaction_audit.action_type=advisor.rollout_denied`。
修改环境变量后必须重启全部 API 进程和 Worker,确保同一发布批次使用同一开关快照。
上线前先用一名测试客户和一名管理员验证:客户白名单命中返回业务响应,未命中返回 403,
管理员可以完成审核/发布操作;检查审计记录中没有客户数据和内部画像字段泄露。
## 灰度检查
1. 在独立测试库执行 `python -m alembic upgrade head`、`python tools/audit_schema.py` 和
`python tools/audit_constraints.py`。
2. 启动 API 和 Worker,执行 `python tools/acceptance_check.py`,确认问卷前置、鉴权、
SSE、Worker 完成态、越权和数据隔离均通过。
3. 开启白名单后,用测试客户执行问卷、投资目标、持仓分析、资产配置、推荐及画像复核;
推荐无有效行情时必须保持失败关闭,不得写入伪行情或产生模拟委托。
4. 记录 API 错误数、延迟、降级次数、行情失败告警和 `advisor.rollout_denied` 审计数。
## 回滚
优先将 `ADVISOR_ROLLOUT_ENABLED=false` 并滚动重启 API/Worker,关闭投顾灰度入口;已落库
的问卷、目标、画像、推荐审核记录和 Outbox 事件保留,不删除业务数据。
若需应用回滚,回到本分支上一个已验收提交,并重新执行单元、契约和结构审计。数据库不执行
破坏性 `downgrade`,新增表保留;恢复后用 `alembic current` 和结构审计确认版本与结构一致。
失败 Outbox 事件按原有重试/死信机制处理,必要时由管理员重放,不直接删除未完成事件。
回滚演练必须记录:开关关闭时间、API/Worker 重启结果、客户 403 验证、管理员可用性、
审计记录、Outbox 未丢失以及没有产生真实交易委托。