P0-1 (limits.go): Allow()方法改为全程使用写锁保护counters map读写,避免RLock写入时的data race P0-2 (ticket_workflow.go+ticket_handler.go): Assign/Resolve/Close操作先查询ticket存在性和状态,返回明确的CS_TICKET_4001/CS_TKT_4002/CS_TICKET_4092/CS_TICKET_4093错误码,handler根据错误前缀路由HTTP状态码 P1-1 (ticket_store.go): 移除GetStats中3处手动rows.Close(),只保留defer Close()
223 lines
7.5 KiB
Markdown
223 lines
7.5 KiB
Markdown
# AI-Customer-Service 生产上线执行方案
|
||
|
||
> 定位:本文件替代 demo/proto 导向的实施口径,作为小龙统筹 PM / TechLead / QA / Engineer 按生产上线标准推进的唯一执行基线。
|
||
|
||
## 1. 结论
|
||
|
||
当前 `ai-customer-service` **不具备生产上线条件**。
|
||
|
||
已完成的只是一个可运行原型,不能作为“阶段完成”或“可灰度上线”的依据。后续工作必须按生产项目方式推进,满足:
|
||
- 文档与实现一致
|
||
- 数据与审计可持久化
|
||
- 权限、签名、幂等、隔离、防重放具备
|
||
- 工单闭环真实存在
|
||
- 外部依赖真实联通并可观测
|
||
- 灰度、回滚、SLO、告警、Runbook 完整
|
||
|
||
## 2. 小龙团队职责重排
|
||
|
||
### 2.1 小龙(统筹)
|
||
负责:
|
||
- 统一生产一期范围,禁止再使用 MVP-proto 口径作为完成标准
|
||
- 建立跨角色门禁,不允许“代码能跑”替代“产品可上线”
|
||
- 每阶段只允许在 PM/TechLead/QA 共同签字后进入下一阶段
|
||
- 对“文档说有、代码没有”“测试只测 happy path”直接打回
|
||
|
||
### 2.2 PM
|
||
必须补齐:
|
||
1. 《生产一期范围与门禁定义》
|
||
2. 《客服 SLA 与升级响应规范》
|
||
3. 《工单运营闭环 SOP》
|
||
4. 《灰度发布与回滚 Runbook》
|
||
5. 《客服运营后台需求说明》
|
||
6. 《身份核验与数据权限策略》
|
||
7. 《数据合规与留存策略》
|
||
8. 《商业化与价值追踪方案》
|
||
|
||
### 2.3 TechLead
|
||
必须补齐:
|
||
1. 生产数据模型与 migration 方案
|
||
2. PostgreSQL / Redis / 外部依赖 / 配置系统接入设计
|
||
3. Webhook 签名、防重放、幂等、审计 fail-closed 方案
|
||
4. Ticket / Session / Audit / KB 真实架构
|
||
5. IntegrationPlugin / 集成运行模式设计
|
||
6. metrics / tracing / logging / health readiness 设计
|
||
7. 降级、熔断、回滚、灰度技术方案
|
||
|
||
### 2.4 QA
|
||
必须补齐:
|
||
1. 文档-实现一致性检查清单
|
||
2. 威胁建模到测试映射清单
|
||
3. AC/失败路径/安全/性能/灾备测试矩阵
|
||
4. 灰度与回滚演练检查表
|
||
5. 实施漂移检测点
|
||
6. 上线阻断条件清单
|
||
|
||
### 2.5 Engineer
|
||
必须按文档和门禁实现,不得自行降级为:
|
||
- 内存版替代持久化
|
||
- 文本文案替代真实工单
|
||
- 占位 OpenAPI 替代真实契约
|
||
- 永远 UP 的 health 替代 readiness
|
||
|
||
## 3. 当前 P0 阻塞项
|
||
|
||
### P0-1 范围口径错误
|
||
- 当前 `IMPLEMENTATION_PLAN.md` 仍使用 `MVP-proto` 口径。
|
||
- 必须废弃其“已完成即可进入下一阶段”的含义。
|
||
|
||
### P0-2 持久化与数据模型缺失
|
||
- Session / Audit / Knowledge 仍为内存实现。
|
||
- 无 PostgreSQL schema / migration / rollback。
|
||
|
||
### P0-3 Webhook 安全链路缺失
|
||
- 无签名校验、无防重放、无幂等、无限流。
|
||
|
||
### P0-4 工单闭环不存在
|
||
- 当前转人工只返回文案,没有真实 ticket 创建、分配、处理、关闭。
|
||
|
||
### P0-5 身份核验与只读业务查询缺失
|
||
- 无用户绑定、无 quota/token/error logs 真实查询。
|
||
|
||
### P0-6 权限与隔离缺失
|
||
- 无鉴权、无 RBAC、无后台权限模型、无跨用户隔离验证。
|
||
|
||
### P0-7 审计不可靠
|
||
- 审计不持久化,且当前是 fail-open。
|
||
|
||
### P0-8 可观测性与健康检查失真
|
||
- 无 metrics/tracing/structured logging。
|
||
- readiness/health 不检查依赖状态。
|
||
|
||
### P0-9 灰度/回滚不可执行
|
||
- 文档有灰度与回滚要求,但代码与部署层无对应能力。
|
||
|
||
### P0-10 契约失真
|
||
- OpenAPI / INTERFACE / router 实现明显不一致。
|
||
|
||
## 4. 分阶段执行计划
|
||
|
||
### Phase 0:收口生产一期基线(必须先完成)
|
||
交付物:
|
||
- `PRODUCTION_EXECUTION_PLAN.md`(本文件)
|
||
- 重写 `IMPLEMENTATION_PLAN.md`,去掉 proto 口径
|
||
- PM 产出生产一期范围、门禁、SLA、工单运营、灰度回滚、合规文档清单
|
||
- QA 产出上线阻断清单
|
||
|
||
退出条件:
|
||
- 不再使用“最小原型已完成”作为阶段结论
|
||
- PM / TechLead / QA 对 P0 范围达成一致
|
||
|
||
### Phase 1:生产底座
|
||
交付物:
|
||
- PostgreSQL schema + migration + rollback
|
||
- Redis 方案
|
||
- 配置系统(YAML + env)
|
||
- 结构化日志、metrics、trace id
|
||
- health/live/ready 真实区分
|
||
- graceful shutdown
|
||
|
||
退出条件:
|
||
- 服务重启不丢核心状态
|
||
- 多实例可运行
|
||
- readiness 能真实阻断坏实例接流量
|
||
|
||
### Phase 2:入口安全与契约
|
||
交付物:
|
||
- webhook 签名校验
|
||
- 防重放
|
||
- 幂等表与重复消息处理语义
|
||
- body limit / schema validation
|
||
- 完整 OpenAPI
|
||
- 统一错误码
|
||
|
||
退出条件:
|
||
- 外部恶意/重复/畸形请求不能造成假成功
|
||
- QA 契约测试通过
|
||
|
||
### Phase 3:核心业务闭环
|
||
交付物:
|
||
- Session / Message / Ticket / Audit 持久化
|
||
- 真实工单状态机
|
||
- 转人工创建/分配/关闭链路
|
||
- 身份核验与账户绑定
|
||
- quota/token/error logs 只读查询
|
||
- 审计 fail-closed
|
||
|
||
退出条件:
|
||
- 查询、转人工、审计、人工处理形成真实闭环
|
||
- 不再存在“文案假装已转人工”
|
||
|
||
### Phase 4:运营后台与知识库
|
||
交付物:
|
||
- 工单后台 API
|
||
- 知识库 CRUD / 发布 / 审核 / 引用统计
|
||
- FAQ 命中与未命中回流
|
||
- 运营指标看板
|
||
|
||
退出条件:
|
||
- 客服与运营团队可实际接管系统
|
||
|
||
### Phase 5:依赖联调、灰度、回滚
|
||
交付物:
|
||
- supply-api / token-runtime / gateway / NewAPI/Sub2API 联调结果
|
||
- 灰度策略开关
|
||
- 回滚脚本与 Runbook
|
||
- 压测/安全/灾备报告
|
||
- 发布检查单
|
||
|
||
退出条件:
|
||
- QA 签字通过
|
||
- 小龙批准进入灰度
|
||
|
||
## 5. 生产级门禁
|
||
|
||
### Gate A:允许开始实现前
|
||
- [ ] 生产一期范围清晰,不含 proto/demo 表述
|
||
- [ ] PM 文档补齐到可执行程度
|
||
- [ ] QA 阻断项建立完成
|
||
- [ ] TechLead 生产架构方案冻结
|
||
|
||
### Gate B:允许联调前
|
||
- [ ] 持久化、签名、防重放、幂等、鉴权、审计已具备
|
||
- [ ] OpenAPI 与实现一致
|
||
- [ ] 真实健康检查可工作
|
||
- [ ] 关键失败路径自动化测试存在
|
||
- [x] **Phase 1 真实范围已定义**:6 个接口(P0-A~C + P1-D~E)+ 错误码统一
|
||
- [x] **16+ 漂移接口已明确分类**:GET tickets/{id} / POST sessions/{id}/handoff / POST sessions/{id}/feedback / GET tickets/stats → Phase 1;KB 全系 / admin 全系 / 会话查询类 → Phase 2
|
||
- [ ] **GET /tickets/{id}** 已实现并测试通过
|
||
- [ ] **POST /sessions/{id}/handoff** 已实现并测试通过(手动转人工)
|
||
- [ ] **POST /sessions/{id}/feedback** 已实现并测试通过
|
||
- [ ] **GET /tickets/stats** 已实现并测试通过
|
||
- [ ] **错误码全局统一**:无 hardcode 散落,统一使用 `internal/domain/error/` 包
|
||
|
||
### Gate C:允许灰度前
|
||
- [ ] 工单闭环真实可用
|
||
- [ ] 身份核验与只读查询真实可用
|
||
- [ ] 监控、告警、SLO 仪表板上线
|
||
- [ ] 灰度/回滚 Runbook 完成并演练
|
||
- [ ] 压测/安全/灾备测试通过
|
||
|
||
### Gate D:允许全量前
|
||
- [ ] 灰度期间投诉率、错误率、转人工率、SLA 达标
|
||
- [ ] 无 P0/P1 未关闭缺陷
|
||
- [ ] PM/TechLead/QA/小龙联合签字
|
||
|
||
## 6. 当前立即执行项(本轮)
|
||
|
||
1. 废弃 demo 口径:重写 `IMPLEMENTATION_PLAN.md`
|
||
2. 以生产底座为先,优先落地:
|
||
- PostgreSQL migration
|
||
- 持久化 Session/Audit/Ticket 基础模型
|
||
- 配置系统
|
||
- readiness/health 改造
|
||
- HTTP 超时/请求体限制/优雅停机/结构化日志基础设施
|
||
3. 并行补齐 PM/QA 文档,不允许只有代码没有上线规则
|
||
|
||
## 7. 纪律要求
|
||
|
||
- 不允许再把“代码能运行”汇报成“项目可上线”。
|
||
- 不允许拿 mock/内存版冒充生产闭环完成。
|
||
- 不允许 QA 在没有真实依赖、真实工单、真实权限边界验证的情况下放行。
|
||
- 任何阶段发现文档与实现漂移,立即回退到上一门禁。
|