Files
smart-support/docs/DEVELOPMENT-PLAN.md
Yaojia Wang 1050df780d feat: complete phase 2 -- multi-agent routing, interrupt TTL, escalation, templates
- Intent classification with LLM structured output (single/multi/ambiguous)
- Discount agent with apply_discount and generate_coupon tools
- Interrupt manager with 30-min TTL auto-expiration and retry prompts
- Webhook escalation module with exponential backoff retry (max 3)
- Three vertical industry templates (e-commerce, SaaS, fintech)
- Template loading in AgentRegistry
- Enhanced supervisor prompt with dynamic agent descriptions
- 153 tests passing, 90.18% coverage
2026-03-30 21:04:39 +02:00

1047 lines
39 KiB
Markdown

# Smart Support -- 详细开发计划
> 基于 CEO 计划、设计文档、工程评审计划、测试计划和 TODOS 综合制定。
> 生成日期: 2026-03-29
> 预计总工期: 7-8 周 (1 名全职高级 Python 工程师)
>
> **配套文档:** 技术栈、项目结构、架构决策 (ADR)、数据库 schema、API 协议、安全架构等详见 [ARCHITECTURE.md](ARCHITECTURE.md)
---
## 目录
1. [总览](#总览)
2. [Phase 1: 核心框架](#phase-1-核心框架-第-1-3-周)
3. [Phase 2: 多 Agent 路由 + 安全层](#phase-2-多-agent-路由--安全层-第-3-4-周)
4. [Phase 3: OpenAPI 自动发现](#phase-3-openapi-自动发现-第-4-6-周)
5. [Phase 4: 对话回放 + 数据分析](#phase-4-对话回放--数据分析-第-6-7-周)
6. [Phase 5: 打磨 + Demo 准备](#phase-5-打磨--demo-准备-第-7-8-周)
7. [Phase 6: 客户接入](#phase-6-客户接入-第-8-周起)
8. [并行化策略](#并行化策略)
9. [全局风险登记册](#全局风险登记册)
10. [验收标准总览](#验收标准总览)
---
## 总览
Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴你的 API, 获得一个能执行真实操作的智能客服。"
框架不替代 Zendesk/Intercom, 而是补全它们缺失的"行动层" -- 让 AI 能直接调用内部系统完成查询、取消、退款等操作。
> 技术栈、项目结构、架构决策详见 [ARCHITECTURE.md](ARCHITECTURE.md#4-技术栈决策)。
> 本文档专注于 **什么时候做什么、怎么验证、有什么风险**。
---
## Phase 1: 核心框架 (第 1-3 周)
> Status: COMPLETED (2026-03-30)
> Dev log: [Phase 1 Dev Log](phases/phase-1-dev-log.md)
### 目标
搭建完整的聊天回路: 用户在 React UI 发送消息 -> FastAPI WebSocket 接收 -> LangGraph Supervisor 处理 -> Mock Agent 响应 -> 流式返回给用户。所有会话状态通过 PostgresSaver 持久化。
### 任务清单
#### 1.1 项目初始化与基础设施 (预计 2 天)
- [x] **1.1.1** 初始化 Python 项目结构 (`pyproject.toml`, 依赖管理)
- 文件: `backend/pyproject.toml`
- 工作量: S (2 小时)
- 依赖: 无
- 风险: 低
- [x] **1.1.2** 创建 Docker Compose 配置 (PostgreSQL 16 + 应用)
- 文件: `docker-compose.yml`
- 工作量: S (2 小时)
- 依赖: 无
- 风险: 低
- [x] **1.1.3** 配置 PostgresSaver 检查点持久化
- 文件: `backend/app/db.py`
- 工作量: M (4 小时)
- 依赖: 1.1.2
- 风险: 中 -- PostgresSaver schema 初始化需要验证兼容性
- [x] **1.1.4** 设置 pytest + FastAPI TestClient 测试框架
- 文件: `backend/tests/conftest.py`, `backend/pyproject.toml`
- 工作量: S (2 小时)
- 依赖: 1.1.1
- 风险: 低
- [x] **1.1.5** 配置环境变量管理 (`LLM_PROVIDER`, `LLM_MODEL`, DB 连接等)
- 文件: `backend/app/config.py`, `.env.example`
- 工作量: S (1 小时)
- 依赖: 无
- 风险: 低
#### 1.2 YAML Agent 注册表 (预计 2 天)
- [x] **1.2.1** 设计 Agent YAML 配置 schema (name, description, permission, personality, tools)
- 文件: `backend/agents.yaml`
- 工作量: S (2 小时)
- 依赖: 无
- 风险: 低
- [x] **1.2.2** 实现 YAML 注册表加载器 + 校验 (无效 YAML 需给出文件/行号错误)
- 文件: `backend/app/registry.py`
- 工作量: M (4 小时)
- 依赖: 1.2.1
- 风险: 中 -- 校验逻辑需覆盖各种畸形输入
- [x] **1.2.3** 实现 Agent 人格配置 (tone, greeting, escalation_style)
- 文件: `backend/app/registry.py` (扩展)
- 工作量: S (1 小时)
- 依赖: 1.2.2
- 风险: 低
- [x] **1.2.4** 编写注册表加载器单元测试 (正常加载、空文件、无效 YAML、缺少必填字段)
- 文件: `backend/tests/test_registry.py`
- 工作量: S (2 小时)
- 依赖: 1.2.2
- 风险: 低
#### 1.3 Mock Agent 与工具 (预计 1.5 天)
- [x] **1.3.1** 创建 Mock 订单查询 Agent + 工具 (get_order_status, get_tracking_info)
- 文件: `backend/app/agents/order_lookup.py`
- 工作量: M (3 小时)
- 依赖: 1.2.2
- 风险: 低
- [x] **1.3.2** 创建 Mock 订单操作 Agent + 工具 (cancel_order -- 需要 interrupt)
- 文件: `backend/app/agents/order_actions.py`
- 工作量: M (3 小时)
- 依赖: 1.2.2
- 风险: 低
- [x] **1.3.3** 创建通用回退 Agent (处理误路由和无法分类的意图)
- 文件: `backend/app/agents/fallback.py`
- 工作量: S (2 小时)
- 依赖: 1.2.2
- 风险: 低
- [x] **1.3.4** 编写 Mock Agent 单元测试
- 文件: `backend/tests/test_agents.py`
- 工作量: S (2 小时)
- 依赖: 1.3.1, 1.3.2, 1.3.3
- 风险: 低
#### 1.4 LangGraph Supervisor 配置 (预计 2 天)
- [x] **1.4.1** 配置 LangGraph Supervisor (使用 langgraph-supervisor, 连接注册表中的 Agents)
- 文件: `backend/app/graph.py`
- 工作量: M (6 小时)
- 依赖: 1.2.2, 1.3.1, 1.3.2, 1.3.3
- 风险: 高 -- LangGraph supervisor 配置是核心, 如果阻塞超过 5 天需回退到单 Agent
- [x] **1.4.2** 实现基础 interrupt() 流程 (写操作触发人工确认)
- 文件: `backend/app/graph.py` (扩展)
- 工作量: M (4 小时)
- 依赖: 1.4.1
- 风险: 中 -- interrupt/resume 状态管理需仔细测试
- [x] **1.4.3** 配置 LLM Provider 抽象 (BaseChatModel + 环境变量切换)
- 文件: `backend/app/llm.py`
- 工作量: S (2 小时)
- 依赖: 1.1.5
- 风险: 低
- [x] **1.4.4** 实现 Token 用量统计回调
- 文件: `backend/app/callbacks.py`
- 工作量: S (2 小时)
- 依赖: 1.4.1
- 风险: 低
- [x] **1.4.5** 启用 Prompt Caching (从第一天减少重复 system prompt 的 LLM 成本)
- 文件: `backend/app/llm.py` (扩展)
- 工作量: S (1 小时)
- 依赖: 1.4.3
- 风险: 低
- 来源: TODOS.md 设计变更 -- "Prompt caching: 从第一天启用"
- [x] **1.4.6** 实现会话滑动窗口 TTL (30 分钟, 每次消息重置; 待审批的 interrupt 延长 TTL 直到解决)
- 文件: `backend/app/session_manager.py`
- 工作量: M (3 小时)
- 依赖: 1.4.1, 1.1.3
- 风险: 中 -- 需区分 session TTL (滑动窗口) 和 interrupt TTL (固定 30 分钟)
- 来源: design-doc.md -- "30-minute sliding window TTL (reset on each turn)"
- [x] **1.4.7** 编写 Graph 单元测试 (supervisor 路由、mock 工具调用、状态断言、session TTL)
- 文件: `backend/tests/test_graph.py`
- 工作量: M (4 小时)
- 依赖: 1.4.1, 1.4.2
- 风险: 中
#### 1.5 FastAPI WebSocket 后端 (预计 2 天)
- [x] **1.5.1** 实现 FastAPI 应用入口 + WebSocket `/ws` 端点
- 文件: `backend/app/main.py`
- 工作量: M (4 小时)
- 依赖: 1.4.1
- 风险: 低
- [x] **1.5.2** 实现 WebSocket 流式输出 (astream_events)
- 文件: `backend/app/main.py` (扩展)
- 工作量: M (4 小时)
- 依赖: 1.5.1
- 风险: 中 -- 流式事件格式需与前端协议一致
- [x] **1.5.3** 实现 interrupt 响应处理 (WebSocket 接收审批/拒绝, 恢复 graph 执行)
- 文件: `backend/app/main.py` (扩展)
- 工作量: M (4 小时)
- 依赖: 1.5.2, 1.4.2
- 风险: 高 -- 断线重连 + 重发 interrupt 提示是易出错点
- [x] **1.5.4** 实现 DB 错误处理 (try/except 包裹 graph 调用, 返回友好错误信息)
- 文件: `backend/app/main.py` (扩展)
- 工作量: S (1 小时)
- 依赖: 1.5.1
- 风险: 低
- [x] **1.5.5** 编写 WebSocket 测试 (连接、消息流、流式输出、interrupt 响应、断线处理)
- 文件: `backend/tests/test_websocket.py`
- 工作量: M (4 小时)
- 依赖: 1.5.1, 1.5.2, 1.5.3
- 风险: 中
#### 1.6 React 聊天 UI (预计 3 天) [可并行]
- [x] **1.6.1** 初始化 React 项目 (Vite 或 CRA)
- 文件: `frontend/` 目录
- 工作量: S (1 小时)
- 依赖: 无
- 风险: 低
- [x] **1.6.2** 实现聊天消息列表组件 (支持流式 token 渲染)
- 文件: `frontend/src/components/ChatMessages.tsx`
- 工作量: M (4 小时)
- 依赖: 1.6.1
- 风险: 低
- [x] **1.6.3** 实现消息输入组件
- 文件: `frontend/src/components/ChatInput.tsx`
- 工作量: S (2 小时)
- 依赖: 1.6.1
- 风险: 低
- [x] **1.6.4** 实现 WebSocket 连接管理 (连接、断线重连、消息收发)
- 文件: `frontend/src/hooks/useWebSocket.ts`
- 工作量: M (4 小时)
- 依赖: 1.6.1
- 风险: 中 -- 需处理断线重连逻辑
- [x] **1.6.5** 实现 interrupt 确认 UI (确认/拒绝按钮, 操作详情展示)
- 文件: `frontend/src/components/InterruptPrompt.tsx`
- 工作量: M (3 小时)
- 依赖: 1.6.4
- 风险: 低
- [x] **1.6.6** 实现 Agent 操作内联展示 (工具调用过程可见)
- 文件: `frontend/src/components/AgentAction.tsx`
- 工作量: S (2 小时)
- 依赖: 1.6.2
- 风险: 低
- [x] **1.6.7** 集成聊天页面主组件
- 文件: `frontend/src/pages/ChatPage.tsx`
- 工作量: M (3 小时)
- 依赖: 1.6.2, 1.6.3, 1.6.4, 1.6.5, 1.6.6
- 风险: 低
### Phase 1 检查点标准
通过以下全部验证才能进入 Phase 2:
- [x] `docker compose up` 成功启动 PostgreSQL + 应用
- [x] 打开 `http://localhost:8000` 聊天 UI 加载正常
- [x] 发送 "订单 1042 的状态" -> 收到 Mock Agent 的流式响应
- [x] 发送 "取消订单 1042" -> 收到 interrupt 确认提示 -> 批准 -> 收到确认消息
- [x] 发送 "取消订单 1042" -> 收到 interrupt 确认提示 -> 拒绝 -> 收到取消消息
- [x] 多轮对话上下文保持 (通过 PostgresSaver 验证)
- [x] 会话 30 分钟无活动后过期; 每次消息重置 TTL; 待审批 interrupt 延长 TTL
- [x] 无效 YAML 配置启动时给出清晰错误信息
- [x] `pytest --cov` 覆盖率 >= 80% (Phase 1 代码)
### Phase 1 测试要求
| 类型 | 测试项 | 文件 |
|------|--------|------|
| 单元测试 | YAML 注册表加载/校验 | `tests/test_registry.py` |
| 单元测试 | Mock Agent 工具调用 | `tests/test_agents.py` |
| 单元测试 | Graph supervisor 路由 | `tests/test_graph.py` |
| 单元测试 | 会话滑动窗口 TTL (过期、重置、interrupt 延长) | `tests/test_graph.py` |
| 集成测试 | WebSocket 消息流 | `tests/test_websocket.py` |
| 集成测试 | interrupt 审批/拒绝流程 | `tests/test_websocket.py` |
| E2E | Happy path: 查询 -> 响应 | 手动验证 |
| E2E | 取消 + 批准: 写操作 -> interrupt -> 批准 | 手动验证 |
| E2E | 取消 + 拒绝: 写操作 -> interrupt -> 拒绝 | 手动验证 |
### Phase 1 风险项
| 风险 | 严重度 | 缓解措施 |
|------|--------|----------|
| LangGraph supervisor 配置复杂度超预期 | 高 | 如果阻塞超过 5 天, 回退到单 Agent + 工具路由, 后续再重构为多 Agent |
| PostgresSaver schema 兼容性问题 | 中 | 提前阅读 langgraph-checkpoint-postgres 文档, 使用官方 migration |
| WebSocket interrupt/resume 状态管理 | 中 | 先实现最简版本 (无断线重连), 后续迭代增强 |
| 流式事件格式前后端不一致 | 中 | 提前定义 WebSocket 消息协议文档, 前后端同步开发 |
### Phase 1 交付物
- FastAPI 后端 (WebSocket 聊天端点)
- LangGraph Supervisor + 3 个 Mock Agent
- YAML Agent 注册表加载器
- PostgresSaver 检查点持久化
- React 聊天 UI (流式输出 + interrupt 确认)
- Docker Compose 配置
- 单元测试 + 集成测试 (覆盖率 >= 80%)
---
## Phase 2: 多 Agent 路由 + 安全层 (第 3-4 周)
> Status: COMPLETED (2026-03-30)
> Dev log: [Phase 2 Dev Log](phases/phase-2-dev-log.md)
### 目标
完善 Supervisor 的意图分类和多 Agent 路由能力, 实现 Webhook 升级、垂直行业模板、中断超时处理。
### 前置条件
- Phase 1 检查点全部通过
- TODOS.md 中无阻塞 Phase 2 的待办项
### 任务清单
#### 2.1 Supervisor 路由增强 (预计 2 天)
- [x] **2.1.1** 实现 LLM 结构化输出的意图分类 (基于 Agent 描述选择)
- 文件: `backend/app/graph.py` (增强)
- 工作量: M (4 小时)
- 依赖: Phase 1 完成
- 风险: 中 -- 路由准确率需要评估
- [x] **2.1.2** 实现多意图请求处理 ("取消订单并给我一个折扣" -> 顺序执行)
- 文件: `backend/app/graph.py` (增强)
- 工作量: M (6 小时)
- 依赖: 2.1.1
- 风险: 高 -- 多意图原子性问题 (全部成功 vs. 部分失败升级)
- [x] **2.1.3** 实现歧义意图处理 (无法分类时询问澄清问题)
- 文件: `backend/app/agents/fallback.py` (增强)
- 工作量: S (2 小时)
- 依赖: 2.1.1
- 风险: 低
- [x] **2.1.4** 编写路由测试 (正确路由、多意图、歧义、回退)
- 文件: `backend/tests/test_routing.py`
- 工作量: M (4 小时)
- 依赖: 2.1.1, 2.1.2, 2.1.3
- 风险: 低
#### 2.2 Mock 折扣 Agent (预计 0.5 天)
- [x] **2.2.1** 创建 Mock 折扣 Agent + 工具 (apply_discount, generate_coupon)
- 文件: `backend/app/agents/discount.py`
- 工作量: S (2 小时)
- 依赖: Phase 1
- 风险: 低
- [x] **2.2.2** 更新 agents.yaml 添加折扣 Agent 配置
- 文件: `backend/agents.yaml`
- 工作量: S (30 分钟)
- 依赖: 2.2.1
- 风险: 低
#### 2.3 中断超时处理 (预计 1 天)
- [x] **2.3.1** 实现 30 分钟 TTL 自动取消机制
- 文件: `backend/app/interrupt_manager.py`
- 工作量: M (4 小时)
- 依赖: Phase 1 (interrupt 基础)
- 风险: 中 -- 定时器精度和状态一致性
- [x] **2.3.2** 实现过期后重试提示 (重新评估当前状态后重新发起)
- 文件: `backend/app/interrupt_manager.py` (扩展)
- 工作量: M (3 小时)
- 依赖: 2.3.1
- 风险: 中
- [x] **2.3.3** 编写中断超时测试
- 文件: `backend/tests/test_interrupt.py`
- 工作量: S (2 小时)
- 依赖: 2.3.1, 2.3.2
- 风险: 低
#### 2.4 Webhook 升级 (预计 1 天)
- [x] **2.4.1** 实现 Webhook 升级模块 (HTTP POST 到配置的 URL, 包含完整对话上下文)
- 文件: `backend/app/escalation.py`
- 工作量: M (3 小时)
- 依赖: Phase 1
- 风险: 低
- [x] **2.4.2** 实现 Webhook 重试机制 (指数退避, 最多 3 次)
- 文件: `backend/app/escalation.py` (扩展)
- 工作量: S (2 小时)
- 依赖: 2.4.1
- 风险: 低
- [x] **2.4.3** 编写 Webhook 测试 (成功发送、目标不可达、重试)
- 文件: `backend/tests/test_escalation.py`
- 工作量: S (2 小时)
- 依赖: 2.4.1, 2.4.2
- 风险: 低
#### 2.5 垂直行业模板 (预计 0.5 天)
- [x] **2.5.1** 创建电商模板 YAML (订单查询、订单操作、折扣)
- 文件: `backend/templates/e-commerce.yaml`
- 工作量: S (1 小时)
- 依赖: 1.2.2
- 风险: 低
- [x] **2.5.2** 创建 SaaS 模板 YAML (账户查询、订阅管理、计费)
- 文件: `backend/templates/saas.yaml`
- 工作量: S (1 小时)
- 依赖: 1.2.2
- 风险: 低
- [x] **2.5.3** 创建 Fintech 模板 YAML (交易查询、争议处理)
- 文件: `backend/templates/fintech.yaml`
- 工作量: S (1 小时)
- 依赖: 1.2.2
- 风险: 低
- [x] **2.5.4** 实现模板加载逻辑 (选择模板 -> 覆盖 agents.yaml)
- 文件: `backend/app/registry.py` (扩展)
- 工作量: S (2 小时)
- 依赖: 2.5.1, 2.5.2, 2.5.3
- 风险: 低
### Phase 2 检查点标准
- [ ] 发送 "查询订单 1042" -> 路由到订单查询 Agent
- [ ] 发送 "取消订单 1042 并给我一个 10% 折扣" -> 顺序执行两个 Agent
- [ ] 发送模糊消息 -> 回退 Agent 请求澄清
- [ ] interrupt 超过 30 分钟 -> 自动取消 + 提供重试选项
- [ ] Agent 升级 -> Webhook POST 发送成功 (或重试后日志记录)
- [ ] 使用电商模板启动 -> 3 个预配置 Agent 正常工作
- [ ] `pytest --cov` 覆盖率 >= 80% (Phase 1 + Phase 2 代码)
### Phase 2 测试要求
| 类型 | 测试项 | 文件 |
|------|--------|------|
| 单元测试 | 意图分类准确性 | `tests/test_routing.py` |
| 单元测试 | 多意图顺序执行 | `tests/test_routing.py` |
| 单元测试 | 中断 TTL 超时 | `tests/test_interrupt.py` |
| 单元测试 | Webhook 发送/重试 | `tests/test_escalation.py` |
| 集成测试 | 完整多 Agent 路由流程 | `tests/test_routing.py` |
| E2E | 多轮上下文: "查询 1042" 然后 "取消那个" -> 正确实体解析 | 手动验证 |
### Phase 2 风险项
| 风险 | 严重度 | 缓解措施 |
|------|--------|----------|
| 多意图原子性不清晰 | 高 | 采用 best-effort 模式: 部分失败时升级人工, 不回滚已完成操作 |
| Supervisor 路由准确率不足 | 中 | 编写路由准确率评估数据集, 设定基线 (>90% 准确率) |
| 30 分钟 TTL 定时器精度 | 低 | 使用数据库时间戳比对, 不依赖内存定时器 |
### Phase 2 交付物
- 完善的多 Agent 路由 (意图分类 + 多意图 + 歧义处理)
- Mock 折扣 Agent
- interrupt 30 分钟 TTL 自动取消 + 重试
- Webhook 升级模块 (带重试)
- 3 个垂直行业模板 (电商、SaaS、Fintech)
- 路由 + 中断 + 升级测试
---
## Phase 3: OpenAPI 自动发现 (第 4-6 周)
### 目标
实现 "粘贴 API URL, 自动生成可用工具" 的核心差异化功能。解析 OpenAPI 3.0 规范, 生成 MCP 服务器, LLM 辅助分类端点, 运维审核后自动生成 Agent 配置。
### 前置条件
- Phase 2 检查点全部通过
- **TODOS: 工具接口决策** (支持 MCP/CLI/直接 API 三种后端) 在此阶段开始前完成 (~2-3 小时研究)
### 任务清单
#### 3.0 工具接口研究 (预计 0.5 天) [来自 TODOS.md]
- [ ] **3.0.1** 研究 MCP Python SDK (`mcp` on PyPI), 确定 MCP/CLI/API 三种后端的抽象方式
- 工作量: S (2-3 小时)
- 依赖: 无
- 风险: 低
- [ ] **3.0.2** 设计工具基类, 抽象多后端支持 (LangChain @tool 函数式封装)
- 文件: `backend/app/tools/base.py`
- 工作量: M (3 小时)
- 依赖: 3.0.1
- 风险: 中
#### 3.1 SSRF 防护工具 (预计 1 天) [可提前并行开发]
- [ ] **3.1.1** 实现 SSRF 防护模块 (屏蔽私有 IP: 10.x, 172.16-31.x, 192.168.x, 127.x, 169.254.x, ::1)
- 文件: `backend/app/openapi/ssrf.py`
- 工作量: M (3 小时)
- 依赖: 无
- 风险: 低
- [ ] **3.1.2** 实现 DNS 重绑定防护 (解析 DNS 后再验证 IP, 不信任域名)
- 文件: `backend/app/openapi/ssrf.py` (扩展)
- 工作量: M (3 小时)
- 依赖: 3.1.1
- 风险: 中 -- 需覆盖 IPv6 和边界情况
- [ ] **3.1.3** 编写 SSRF 防护测试 (私有 IP、localhost、169.254.x、DNS 重绑定、正常 URL)
- 文件: `backend/tests/test_ssrf.py`
- 工作量: S (2 小时)
- 依赖: 3.1.1, 3.1.2
- 风险: 低
#### 3.2 OpenAPI 规范解析 (预计 2 天)
- [ ] **3.2.1** 实现 OpenAPI 规范获取 (URL 下载, 经 SSRF 检查)
- 文件: `backend/app/openapi/fetcher.py`
- 工作量: M (3 小时)
- 依赖: 3.1.1
- 风险: 低
- [ ] **3.2.2** 实现 OpenAPI 规范校验 (使用 openapi-spec-validator)
- 文件: `backend/app/openapi/validator.py`
- 工作量: S (2 小时)
- 依赖: 3.2.1
- 风险: 低
- [ ] **3.2.3** 实现端点提取和结构化 (路径、方法、参数、请求体、响应)
- 文件: `backend/app/openapi/parser.py`
- 工作量: M (6 小时)
- 依赖: 3.2.2
- 风险: 中 -- 真实 OpenAPI 规范的复杂度 (嵌套 $ref, allOf, etc.)
- [ ] **3.2.4** 编写解析器测试 (有效规范、无效规范、100+ 端点、边界 case)
- 文件: `backend/tests/test_openapi_parser.py`
- 工作量: M (3 小时)
- 依赖: 3.2.3
- 风险: 低
#### 3.3 LLM 辅助分类 (预计 2 天)
- [ ] **3.3.1** 实现 LLM 端点分类 (每个端点: 读/写、客户参数、推荐 Agent 分组)
- 文件: `backend/app/openapi/classifier.py`
- 工作量: M (6 小时)
- 依赖: 3.2.3
- 风险: 中 -- LLM 分类质量依赖 prompt 设计
- [ ] **3.3.2** 实现分类结果结构化输出 (JSON schema 约束)
- 文件: `backend/app/openapi/classifier.py` (扩展)
- 工作量: S (2 小时)
- 依赖: 3.3.1
- 风险: 低
- [ ] **3.3.3** 编写分类器测试 (Mock LLM 响应, 验证分类逻辑)
- 文件: `backend/tests/test_classifier.py`
- 工作量: M (3 小时)
- 依赖: 3.3.1
- 风险: 低
#### 3.4 运维审核 UI (预计 1.5 天)
- [ ] **3.4.1** 实现分类结果审核 API (GET 分类结果, POST 修正)
- 文件: `backend/app/openapi/review_api.py`
- 工作量: M (4 小时)
- 依赖: 3.3.1
- 风险: 低
- [ ] **3.4.2** 实现审核 UI 页面 (表格展示每个端点分类, 可编辑)
- 文件: `frontend/src/pages/ReviewPage.tsx`
- 工作量: M (6 小时)
- 依赖: 3.4.1
- 风险: 低
#### 3.5 MCP 服务器生成 (预计 2 天)
- [ ] **3.5.1** 实现 MCP 工具包装器生成 (每个端点 -> LangChain @tool 或 MCP server)
- 文件: `backend/app/openapi/generator.py`
- 工作量: L (8 小时)
- 依赖: 3.3.1, 3.0.2
- 风险: 高 -- MCP 服务器生成是本项目最复杂的代码生成任务
- [ ] **3.5.2** 实现 Agent YAML 自动生成 (基于分类结果生成 agents.yaml)
- 文件: `backend/app/openapi/generator.py` (扩展)
- 工作量: M (4 小时)
- 依赖: 3.5.1
- 风险: 中
- [ ] **3.5.3** 编写生成器测试 (生成的工具可调用, YAML 可加载)
- 文件: `backend/tests/test_generator.py`
- 工作量: M (4 小时)
- 依赖: 3.5.1, 3.5.2
- 风险: 低
#### 3.6 异步导入流程 (预计 1 天)
- [ ] **3.6.1** 实现后台异步任务 (不阻塞聊天)
- 文件: `backend/app/openapi/importer.py`
- 工作量: M (4 小时)
- 依赖: 3.5.1, 3.5.2
- 风险: 中
- [ ] **3.6.2** 实现 WebSocket 进度更新 (解析中 -> 分类中 -> 审核中 -> 完成)
- 文件: `backend/app/openapi/importer.py` (扩展)
- 工作量: M (3 小时)
- 依赖: 3.6.1
- 风险: 低
- [ ] **3.6.3** 编写导入流程集成测试
- 文件: `backend/tests/test_importer.py`
- 工作量: M (3 小时)
- 依赖: 3.6.1, 3.6.2
- 风险: 低
### Phase 3 检查点标准
- [ ] 粘贴一个真实 OpenAPI 规范 URL -> 端点被正确解析
- [ ] LLM 分类结果展示在审核页面, 可编辑
- [ ] 审核通过后, 自动生成的工具在聊天中可用
- [ ] SSRF 尝试 (localhost, 私有 IP) 被阻止并返回清晰错误
- [ ] 无效/畸形 OpenAPI 规范 -> 返回清晰错误信息
- [ ] 100+ 端点的规范 -> 生成不超时
- [ ] 导入过程不阻塞聊天, 进度通过 WebSocket 更新
- [ ] `pytest --cov` 覆盖率 >= 80%
### Phase 3 测试要求
| 类型 | 测试项 | 文件 |
|------|--------|------|
| 单元测试 | SSRF 防护 (各种 IP/域名) | `tests/test_ssrf.py` |
| 单元测试 | OpenAPI 解析 (有效/无效/复杂规范) | `tests/test_openapi_parser.py` |
| 单元测试 | LLM 分类 (Mock LLM) | `tests/test_classifier.py` |
| 单元测试 | MCP 工具/YAML 生成 | `tests/test_generator.py` |
| 集成测试 | 完整导入流程 | `tests/test_importer.py` |
| E2E | 粘贴规范 URL -> 工具生成 -> 在聊天中使用 | 手动验证 |
### Phase 3 风险项
| 风险 | 严重度 | 缓解措施 |
|------|--------|----------|
| MCP 服务器代码生成质量不稳定 | 高 | 先支持简单 REST API (GET/POST), 复杂场景 (OAuth, 分页) 延后 |
| 真实 OpenAPI 规范的边界 case 超多 | 高 | 使用 openapi-spec-validator 做前置校验, 不支持的特性给出明确提示 |
| LLM 分类准确率不够 | 中 | 运维审核 UI 是安全网, LLM 只是建议 |
| DNS 重绑定防护遗漏 | 中 | 解析后缓存 IP, 请求时二次验证 |
### Phase 3 交付物
- SSRF 防护独立模块
- OpenAPI 规范解析器
- LLM 辅助端点分类器
- 运维审核 API + UI
- MCP 工具/Agent YAML 自动生成器
- 异步导入流程 (带 WebSocket 进度)
- 完整测试套件
---
## Phase 4: 对话回放 + 数据分析 (第 6-7 周)
### 目标
实现对话回放 UI (逐步查看 Agent 决策过程) 和数据分析仪表盘 (解决率、Agent 使用率、升级率、每次对话成本)。
### 前置条件
- Phase 1 检查点通过 (PostgresSaver 数据可查询)
- Phase 2 检查点通过 (有足够的对话数据类型)
- 注意: Phase 4 不依赖 Phase 3, 如果 Phase 3 延迟可提前启动
### 任务清单
#### 4.1 对话回放 API (预计 2 天)
- [ ] **4.1.1** 设计回放数据模型 (步骤类型: agent_selection, tool_call, tool_result, interrupt, response)
- 文件: `backend/app/replay/models.py`
- 工作量: M (3 小时)
- 依赖: Phase 1
- 风险: 低
- [ ] **4.1.2** 实现分页回放 API (GET `/api/replay/{thread_id}`, 支持 200+ 轮次)
- 文件: `backend/app/replay/api.py`
- 工作量: M (6 小时)
- 依赖: 4.1.1
- 风险: 中 -- PostgresSaver checkpoint 数据的查询性能
- [ ] **4.1.3** 实现 checkpoint 数据 -> 结构化时间线 JSON 转换
- 文件: `backend/app/replay/transformer.py`
- 工作量: M (4 小时)
- 依赖: 4.1.2
- 风险: 中 -- checkpoint 内部结构可能随 LangGraph 版本变化
- [ ] **4.1.4** 编写回放 API 测试 (正常回放、404、分页、空对话)
- 文件: `backend/tests/test_replay.py`
- 工作量: M (3 小时)
- 依赖: 4.1.2, 4.1.3
- 风险: 低
#### 4.2 回放 UI (预计 2 天)
- [ ] **4.2.1** 实现对话列表页面 (选择要回放的对话)
- 文件: `frontend/src/pages/ReplayListPage.tsx`
- 工作量: M (3 小时)
- 依赖: 4.1.2
- 风险: 低
- [ ] **4.2.2** 实现步骤时间线组件 (逐步展示 Agent 决策、工具调用、结果)
- 文件: `frontend/src/components/ReplayTimeline.tsx`
- 工作量: M (6 小时)
- 依赖: 4.1.3
- 风险: 低
- [ ] **4.2.3** 实现回放详情页面 (集成时间线 + 对话内容)
- 文件: `frontend/src/pages/ReplayPage.tsx`
- 工作量: M (4 小时)
- 依赖: 4.2.1, 4.2.2
- 风险: 低
#### 4.3 数据分析 API (预计 2 天)
- [ ] **4.3.1** 实现解决率查询 (成功工具调用 + 无升级)
- 文件: `backend/app/analytics/queries.py`
- 工作量: M (4 小时)
- 依赖: Phase 1 (callbacks.py)
- 风险: 中 -- 需要从 checkpoint 数据中提取结构化指标
- [ ] **4.3.2** 实现 Agent 使用率查询 (每个 Agent 的调用次数和占比)
- 文件: `backend/app/analytics/queries.py` (扩展)
- 工作量: M (3 小时)
- 依赖: 4.3.1
- 风险: 低
- [ ] **4.3.3** 实现升级率查询 (升级到人工的对话占比)
- 文件: `backend/app/analytics/queries.py` (扩展)
- 工作量: S (2 小时)
- 依赖: 4.3.1
- 风险: 低
- [ ] **4.3.4** 实现每次对话成本查询 (基于 token 用量统计)
- 文件: `backend/app/analytics/queries.py` (扩展)
- 工作量: M (3 小时)
- 依赖: Phase 1 (callbacks.py)
- 风险: 低
- [ ] **4.3.5** 实现分析 API 端点 (GET `/api/analytics`, 聚合所有指标)
- 文件: `backend/app/analytics/api.py`
- 工作量: M (3 小时)
- 依赖: 4.3.1, 4.3.2, 4.3.3, 4.3.4
- 风险: 低
- [ ] **4.3.6** 编写分析查询测试 (有数据、无数据零状态、大量数据)
- 文件: `backend/tests/test_analytics.py`
- 工作量: M (3 小时)
- 依赖: 4.3.5
- 风险: 低
#### 4.4 分析仪表盘 UI (预计 1.5 天)
- [ ] **4.4.1** 实现仪表盘页面 (解决率、Agent 使用率、升级率、成本)
- 文件: `frontend/src/pages/DashboardPage.tsx`
- 工作量: M (6 小时)
- 依赖: 4.3.5
- 风险: 低
- [ ] **4.4.2** 实现零状态处理 (无对话数据时的友好提示)
- 文件: `frontend/src/pages/DashboardPage.tsx` (扩展)
- 工作量: S (1 小时)
- 依赖: 4.4.1
- 风险: 低
- [ ] **4.4.3** 实现前端路由 (聊天 / 回放 / 仪表盘 导航)
- 文件: `frontend/src/App.tsx`
- 工作量: S (2 小时)
- 依赖: 4.4.1, 4.2.3
- 风险: 低
### Phase 4 检查点标准
- [ ] 完成一次对话后, 在回放页面可以逐步查看 Agent 决策过程
- [ ] 200+ 轮次的对话回放, 分页正常, 无慢查询
- [ ] 仪表盘显示: 解决率、Agent 使用率、升级率、每次对话成本
- [ ] 无对话数据时仪表盘显示零状态
- [ ] 导航在聊天、回放、仪表盘之间切换正常
- [ ] `pytest --cov` 覆盖率 >= 80%
### Phase 4 测试要求
| 类型 | 测试项 | 文件 |
|------|--------|------|
| 单元测试 | 回放 API (分页、404、数据转换) | `tests/test_replay.py` |
| 单元测试 | 分析查询 (各指标、零状态) | `tests/test_analytics.py` |
| 集成测试 | 完整回放流程 (对话 -> 回放) | `tests/test_replay.py` |
| E2E | 选择已完成对话 -> 步骤回放正确渲染 | 手动验证 |
### Phase 4 风险项
| 风险 | 严重度 | 缓解措施 |
|------|--------|----------|
| PostgresSaver checkpoint 数据结构变化 | 中 | 在 transformer 层做版本适配, 不直接耦合内部结构 |
| 200+ 轮次查询性能 | 中 | 使用分页 + 数据库索引, 必要时增加 SQL 查询优化 |
| 分析指标定义不够精确 | 低 | "解决率 = 成功工具调用 + 无升级" 作为初始定义, 后续加入客户满意度信号 |
### Phase 4 交付物
- 分页回放 API + checkpoint -> 时间线转换
- 回放列表 + 详情 UI
- 4 个分析指标查询 (解决率、Agent 使用率、升级率、成本)
- 分析仪表盘 UI (含零状态)
- 前端路由导航
- 完整测试套件
---
## Phase 5: 打磨 + Demo 准备 (第 7-8 周)
### 目标
错误处理加固、Demo 脚本和示例数据准备、Docker Compose 全栈部署验证、文档完善。为第一个客户演示做好准备。
### 前置条件
- Phase 1-4 检查点全部通过
### 任务清单
#### 5.1 错误处理加固 (预计 2 天)
- [ ] **5.1.1** 审查所有 MCP 工具调用的错误处理 (超时、认证失败、网络错误)
- 文件: 全部 `backend/app/agents/*.py`
- 工作量: M (4 小时)
- 依赖: Phase 1-3
- 风险: 低
- [ ] **5.1.2** 实现 MCP 错误分类 (可重试 vs. 不可重试, 指数退避策略)
- 文件: `backend/app/tools/error_handler.py`
- 工作量: M (4 小时)
- 依赖: 5.1.1
- 风险: 低
- [ ] **5.1.3** 审查前端错误处理 (断线提示、服务端错误友好展示)
- 文件: `frontend/src/` 各组件
- 工作量: M (3 小时)
- 依赖: Phase 1 前端
- 风险: 低
- [ ] **5.1.4** 处理边界情况 (空消息、超长消息 10K+、快速连发消息、取消已取消的订单、WebSocket 断线 mid-stream 清理)
- 文件: `backend/app/main.py`, `backend/app/agents/*.py`, `frontend/src/`
- 工作量: M (6 小时)
- 依赖: Phase 1-2
- 风险: 低
- 来源: eng-review-test-plan.md 边界 case 清单
- [ ] **5.1.5** 编写边界情况测试 (含: 取消已取消订单返回合适错误、WebSocket 断线服务端清理、快速连发无竞态、歧义无上下文时澄清提问)
- 文件: `backend/tests/test_edge_cases.py`
- 工作量: M (4 小时)
- 依赖: 5.1.4
- 风险: 低
#### 5.2 Demo 准备 (预计 1.5 天)
- [ ] **5.2.1** 创建 Demo 脚本 (预设对话流程, 覆盖: 查询、取消+批准、多轮上下文、OpenAPI 导入)
- 文件: `docs/demo-script.md`
- 工作量: M (3 小时)
- 依赖: Phase 1-4
- 风险: 低
- [ ] **5.2.2** 准备示例数据 (Mock 订单数据, 预置对话用于回放演示)
- 文件: `backend/fixtures/demo_data.py`
- 工作量: M (3 小时)
- 依赖: 5.2.1
- 风险: 低
- [ ] **5.2.3** 准备示例 OpenAPI 规范 (用于 Phase 3 功能演示)
- 文件: `backend/fixtures/sample_openapi.yaml`
- 工作量: S (1 小时)
- 依赖: Phase 3
- 风险: 低
- [ ] **5.2.4** 录制 90 秒 Demo 视频
- 工作量: M (3 小时)
- 依赖: 5.2.1, 5.2.2, 5.2.3
- 风险: 低
#### 5.3 全栈部署验证 (预计 1 天)
- [ ] **5.3.1** 验证 Docker Compose 一键启动 (PostgreSQL + 后端 + 前端)
- 文件: `docker-compose.yml`
- 工作量: M (4 小时)
- 依赖: Phase 1-4
- 风险: 中 -- 多服务联调可能有端口/网络问题
- [ ] **5.3.2** 验证环境变量配置文档完整性
- 文件: `.env.example`, `docs/deployment.md`
- 工作量: S (1 小时)
- 依赖: 5.3.1
- 风险: 低
- [ ] **5.3.3** 端到端冒烟测试 (全部 6 条 E2E 关键路径)
- 工作量: M (3 小时)
- 依赖: 5.3.1
- 风险: 低
#### 5.4 文档完善 (预计 1 天)
- [ ] **5.4.1** 更新 README.md (快速开始、配置说明、架构图)
- 文件: `README.md`
- 工作量: M (3 小时)
- 依赖: Phase 1-4
- 风险: 低
- [ ] **5.4.2** 编写 Agent 配置指南 (如何添加新 Agent、如何配置工具)
- 文件: `docs/agent-config-guide.md`
- 工作量: M (3 小时)
- 依赖: Phase 1-2
- 风险: 低
- [ ] **5.4.3** 编写 OpenAPI 导入指南
- 文件: `docs/openapi-import-guide.md`
- 工作量: S (2 小时)
- 依赖: Phase 3
- 风险: 低
- [ ] **5.4.4** 编写部署指南
- 文件: `docs/deployment.md`
- 工作量: S (2 小时)
- 依赖: 5.3.1
- 风险: 低
### Phase 5 检查点标准
- [ ] `docker compose up` 从零启动, 所有功能正常
- [ ] 6 条 E2E 关键路径全部通过:
1. Happy path: "订单 1042 的状态" -> 查询 -> 回答
2. 取消+批准: "取消订单 1042" -> interrupt -> 批准 -> 确认
3. 取消+拒绝: "取消订单 1042" -> interrupt -> 拒绝 -> 无操作
4. 多轮上下文: "查询 1042" 然后 "取消那个" -> 正确实体解析
5. OpenAPI 导入: 粘贴规范 URL -> 工具生成 -> 在聊天中使用
6. 对话回放: 选择已完成对话 -> 步骤回放正确渲染
- [ ] Demo 视频录制完成 (90 秒)
- [ ] 文档完整 (README, Agent 配置, OpenAPI 导入, 部署)
- [ ] `pytest --cov` 全项目覆盖率 >= 80%
### Phase 5 测试要求
| 类型 | 测试项 | 文件 |
|------|--------|------|
| 单元测试 | 边界情况 (空消息、超长消息、连发、取消已取消订单) | `tests/test_edge_cases.py` |
| 集成测试 | WebSocket 断线 mid-stream 服务端清理 | `tests/test_edge_cases.py` |
| 集成测试 | 快速连发消息无竞态 | `tests/test_edge_cases.py` |
| 集成测试 | 歧义无上下文意图 -> 澄清提问 | `tests/test_edge_cases.py` |
| E2E | 全部 6 条关键路径 | 手动冒烟测试 |
### Phase 5 风险项
| 风险 | 严重度 | 缓解措施 |
|------|--------|----------|
| Docker 多服务联调问题 | 中 | 逐步添加服务, 不要一次全部配置 |
| Demo 演示时服务不稳定 | 中 | 准备离线录制的 Demo 视频作为备选 |
### Phase 5 交付物
- 错误处理加固后的后端 + 前端
- Demo 脚本 + 示例数据 + 示例 OpenAPI 规范
- 90 秒 Demo 视频
- 全栈 Docker Compose 部署 (验证通过)
- 完整文档集 (README, Agent 配置, OpenAPI 导入, 部署)
---
## Phase 6: 客户接入 (第 8 周起)
### 目标
为第一个真实客户构建 MCP 连接器, 将框架接入客户的内部系统。这是从 Demo 到真实产品的关键一步。
> 来源: ceo-plan.md Phase 5 -- "Real connectors for first client's systems"
### 前置条件
- Phase 5 检查点全部通过 (完整 Demo 可运行)
- 已有至少 1 个设计合作伙伴 (来自业务验证)
### 任务清单
#### 6.1 客户系统对接 (工期视客户系统复杂度而定)
- [ ] **6.1.1** 分析客户 API 系统 (Shopify Admin API / 自定义 REST / 其他)
- 工作量: M (4-8 小时)
- 依赖: 客户提供 API 文档或 OpenAPI 规范
- 风险: 中 -- 客户 API 文档质量不可控
- [ ] **6.1.2** 构建客户专属 MCP 连接器 (或使用 Phase 3 OpenAPI 自动生成)
- 文件: `backend/mcp_servers/{client_name}/`
- 工作量: L (1-3 天, 视 API 复杂度)
- 依赖: 6.1.1
- 风险: 高 -- OAuth、分页、速率限制等实际 API 问题
- [ ] **6.1.3** 配置客户专属 agents.yaml (Agent 分组、权限、人设)
- 文件: `backend/agents.yaml` (客户版本)
- 工作量: S (2 小时)
- 依赖: 6.1.2
- 风险: 低
- [ ] **6.1.4** 端到端测试: 真实 API 调用 (查询真实订单、执行真实操作)
- 工作量: M (4 小时)
- 依赖: 6.1.2, 6.1.3
- 风险: 高 -- 生产数据的边界 case
#### 6.2 生产准备 (预计 2 天)
- [ ] **6.2.1** 实现 Auth 系统 (API key 认证 WebSocket, session 认证 Dashboard)
- 文件: `backend/app/auth.py`
- 工作量: M (1 天)
- 依赖: Phase 4 完成
- 风险: 中
- 来源: TODOS.md -- "Auth system: P1 before production deployment"
- [ ] **6.2.2** 部署到云环境 (Fly.io / Railway / AWS)
- 工作量: M (4 小时)
- 依赖: 6.2.1
- 风险: 中
### Phase 6 检查点标准
- [ ] 客户专属 MCP 连接器能调用真实 API
- [ ] 使用客户数据完成完整对话流程 (查询、操作、确认)
- [ ] Auth 系统保护所有端点
- [ ] 部署到云环境, 客户可通过 URL 访问
### Phase 6 风险项
| 风险 | 严重度 | 缓解措施 |
|------|--------|----------|
| 客户 API 文档质量差或缺失 | 高 | 先用 Phase 3 OpenAPI 自动发现, 人工补充缺失部分 |
| OAuth / 速率限制等真实 API 问题 | 高 | Phase 5 的 MCP 错误分类 (5.1.2) 已实现重试/升级策略 |
| 客户数据边界 case 超预期 | 中 | 逐步上线: 先只读操作, 验证后再开放写操作 |
### Phase 6 交付物
- 客户专属 MCP 连接器
- 客户专属 Agent 配置
- Auth 系统 (API key + session)
- 云端部署
---
## 并行化策略
| 通道 | 内容 | 模块 | 可并行阶段 |
|------|------|------|-----------|
| A | 后端核心 (Phase 1-2) | `backend/app/` | Phase 1-2 |
| B | 前端 UI | `frontend/` | Phase 1 与 A 并行 |
| C | SSRF 防护工具 (独立模块) | `backend/app/openapi/ssrf.py` | Phase 1 期间可提前开发 |
- **Phase 1**: A (后端) + B (前端) + C (SSRF) 三路并行
- **Phase 2**: 依赖 Phase 1 后端完成, 串行
- **Phase 3**: 依赖 Phase 2, 串行 (但 C 的 SSRF 已完成)
- **Phase 4**: 不依赖 Phase 3, 可与 Phase 3 后半段并行启动
- **Phase 5**: 依赖 Phase 1-4, 串行
- **Phase 6**: 依赖 Phase 5 + 客户, 按客户节奏推进
---
## 全局风险登记册
| 编号 | 风险 | 严重度 | 阶段 | 缓解措施 |
|------|------|--------|------|----------|
| R1 | LangGraph supervisor 配置复杂度超预期 | 高 | Phase 1 | 5 天阻塞则回退单 Agent |
| R2 | MCP 服务器代码生成质量不稳定 | 高 | Phase 3 | 先支持简单 REST, 复杂场景延后 |
| R3 | 真实 OpenAPI 规范边界 case | 高 | Phase 3 | 前置校验, 不支持的特性明确提示 |
| R4 | 多意图原子性不清晰 | 高 | Phase 2 | Best-effort, 部分失败升级人工 |
| R5 | interrupt/resume 状态管理 | 中 | Phase 1 | 先实现最简版, 后续迭代 |
| R6 | PostgresSaver checkpoint 结构变化 | 中 | Phase 4 | transformer 层做版本适配 |
| R7 | LLM 分类准确率不够 | 中 | Phase 3 | 运维审核 UI 作为安全网 |
| R8 | DNS 重绑定防护遗漏 | 中 | Phase 3 | 解析后缓存 IP, 二次验证 |
| R9 | 无客户验证需求 | 高 | 全局 | Phase 1 完成后立即进行客户对话 |
---
## 验收标准总览
### 工程完成标准
- [ ] 完整框架: Chat UI + Agent Router + Context Manager 端到端运行
- [ ] 多 Agent 路由: 基于意图正确选择 Agent
- [ ] 会话上下文: Agent 正确解析跨轮次引用 ("取消那个")
- [ ] 人工确认: 写操作需要审批才能执行
- [ ] 可插拔 MCP: 新工具可通过配置添加, 无需改代码
- [ ] OpenAPI 自动发现: 粘贴 URL -> 工具可用
- [ ] 对话回放: 逐步查看 Agent 决策过程
- [ ] 数据分析: 解决率、Agent 使用率、升级率、成本
- [ ] 90 秒 Demo 视频
- [ ] 全项目测试覆盖率 >= 80%
### 业务验证标准
- [ ] Demo 完成后 2 周内, 至少与 5 位真实电商运营者对话
- [ ] Demo 完成后 4 周内, 至少 1 个付费试点
---
## 范围外事项 (来自工程评审)
以下内容明确不在原型范围内:
- 认证/授权系统 (延迟到预生产)
- 多租户架构 (延迟到第一个付费客户)
- CI/CD 管道 (原型阶段手动部署)
- 速率限制 (延迟到预生产)
- Zendesk/Intercom 市场集成 (延迟到验证后)
- 移动端响应式 UI (仅支持桌面端 Demo)
- 国际化 (i18n)
- 计费/定价基础设施
- 分发管道 (手动 Docker Compose 部署)
---
## 待办事项追踪 (来自 TODOS.md)
| 待办 | 时间点 | 状态 |
|------|--------|------|
| 工具接口决策 (MCP/CLI/API 三后端) | Phase 3 开始前 | 待完成 -- 见任务 3.0 |
| Auth 系统 (API key + session) | Phase 6 任务 6.2.1 | 待完成 |
| Prompt Caching | Phase 1 任务 1.4.5 | 待完成 |
| Checkpointer 迁移计划 | 已解决 (PostgresSaver 从第一天开始) | 已完成 |
---
> 本文档应随开发进展持续更新。每个 Phase 完成后, 勾选对应的检查点标准和任务清单。