Update doc
This commit is contained in:
@@ -36,6 +36,9 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴
|
||||
|
||||
## 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 持久化。
|
||||
@@ -44,27 +47,27 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴
|
||||
|
||||
#### 1.1 项目初始化与基础设施 (预计 2 天)
|
||||
|
||||
- [ ] **1.1.1** 初始化 Python 项目结构 (`pyproject.toml`, 依赖管理)
|
||||
- [x] **1.1.1** 初始化 Python 项目结构 (`pyproject.toml`, 依赖管理)
|
||||
- 文件: `backend/pyproject.toml`
|
||||
- 工作量: S (2 小时)
|
||||
- 依赖: 无
|
||||
- 风险: 低
|
||||
- [ ] **1.1.2** 创建 Docker Compose 配置 (PostgreSQL 16 + 应用)
|
||||
- [x] **1.1.2** 创建 Docker Compose 配置 (PostgreSQL 16 + 应用)
|
||||
- 文件: `docker-compose.yml`
|
||||
- 工作量: S (2 小时)
|
||||
- 依赖: 无
|
||||
- 风险: 低
|
||||
- [ ] **1.1.3** 配置 PostgresSaver 检查点持久化
|
||||
- [x] **1.1.3** 配置 PostgresSaver 检查点持久化
|
||||
- 文件: `backend/app/db.py`
|
||||
- 工作量: M (4 小时)
|
||||
- 依赖: 1.1.2
|
||||
- 风险: 中 -- PostgresSaver schema 初始化需要验证兼容性
|
||||
- [ ] **1.1.4** 设置 pytest + FastAPI TestClient 测试框架
|
||||
- [x] **1.1.4** 设置 pytest + FastAPI TestClient 测试框架
|
||||
- 文件: `backend/tests/conftest.py`, `backend/pyproject.toml`
|
||||
- 工作量: S (2 小时)
|
||||
- 依赖: 1.1.1
|
||||
- 风险: 低
|
||||
- [ ] **1.1.5** 配置环境变量管理 (`LLM_PROVIDER`, `LLM_MODEL`, DB 连接等)
|
||||
- [x] **1.1.5** 配置环境变量管理 (`LLM_PROVIDER`, `LLM_MODEL`, DB 连接等)
|
||||
- 文件: `backend/app/config.py`, `.env.example`
|
||||
- 工作量: S (1 小时)
|
||||
- 依赖: 无
|
||||
@@ -72,22 +75,22 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴
|
||||
|
||||
#### 1.2 YAML Agent 注册表 (预计 2 天)
|
||||
|
||||
- [ ] **1.2.1** 设计 Agent YAML 配置 schema (name, description, permission, personality, tools)
|
||||
- [x] **1.2.1** 设计 Agent YAML 配置 schema (name, description, permission, personality, tools)
|
||||
- 文件: `backend/agents.yaml`
|
||||
- 工作量: S (2 小时)
|
||||
- 依赖: 无
|
||||
- 风险: 低
|
||||
- [ ] **1.2.2** 实现 YAML 注册表加载器 + 校验 (无效 YAML 需给出文件/行号错误)
|
||||
- [x] **1.2.2** 实现 YAML 注册表加载器 + 校验 (无效 YAML 需给出文件/行号错误)
|
||||
- 文件: `backend/app/registry.py`
|
||||
- 工作量: M (4 小时)
|
||||
- 依赖: 1.2.1
|
||||
- 风险: 中 -- 校验逻辑需覆盖各种畸形输入
|
||||
- [ ] **1.2.3** 实现 Agent 人格配置 (tone, greeting, escalation_style)
|
||||
- [x] **1.2.3** 实现 Agent 人格配置 (tone, greeting, escalation_style)
|
||||
- 文件: `backend/app/registry.py` (扩展)
|
||||
- 工作量: S (1 小时)
|
||||
- 依赖: 1.2.2
|
||||
- 风险: 低
|
||||
- [ ] **1.2.4** 编写注册表加载器单元测试 (正常加载、空文件、无效 YAML、缺少必填字段)
|
||||
- [x] **1.2.4** 编写注册表加载器单元测试 (正常加载、空文件、无效 YAML、缺少必填字段)
|
||||
- 文件: `backend/tests/test_registry.py`
|
||||
- 工作量: S (2 小时)
|
||||
- 依赖: 1.2.2
|
||||
@@ -95,22 +98,22 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴
|
||||
|
||||
#### 1.3 Mock Agent 与工具 (预计 1.5 天)
|
||||
|
||||
- [ ] **1.3.1** 创建 Mock 订单查询 Agent + 工具 (get_order_status, get_tracking_info)
|
||||
- [x] **1.3.1** 创建 Mock 订单查询 Agent + 工具 (get_order_status, get_tracking_info)
|
||||
- 文件: `backend/app/agents/order_lookup.py`
|
||||
- 工作量: M (3 小时)
|
||||
- 依赖: 1.2.2
|
||||
- 风险: 低
|
||||
- [ ] **1.3.2** 创建 Mock 订单操作 Agent + 工具 (cancel_order -- 需要 interrupt)
|
||||
- [x] **1.3.2** 创建 Mock 订单操作 Agent + 工具 (cancel_order -- 需要 interrupt)
|
||||
- 文件: `backend/app/agents/order_actions.py`
|
||||
- 工作量: M (3 小时)
|
||||
- 依赖: 1.2.2
|
||||
- 风险: 低
|
||||
- [ ] **1.3.3** 创建通用回退 Agent (处理误路由和无法分类的意图)
|
||||
- [x] **1.3.3** 创建通用回退 Agent (处理误路由和无法分类的意图)
|
||||
- 文件: `backend/app/agents/fallback.py`
|
||||
- 工作量: S (2 小时)
|
||||
- 依赖: 1.2.2
|
||||
- 风险: 低
|
||||
- [ ] **1.3.4** 编写 Mock Agent 单元测试
|
||||
- [x] **1.3.4** 编写 Mock Agent 单元测试
|
||||
- 文件: `backend/tests/test_agents.py`
|
||||
- 工作量: S (2 小时)
|
||||
- 依赖: 1.3.1, 1.3.2, 1.3.3
|
||||
@@ -118,39 +121,39 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴
|
||||
|
||||
#### 1.4 LangGraph Supervisor 配置 (预计 2 天)
|
||||
|
||||
- [ ] **1.4.1** 配置 LangGraph Supervisor (使用 langgraph-supervisor, 连接注册表中的 Agents)
|
||||
- [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
|
||||
- [ ] **1.4.2** 实现基础 interrupt() 流程 (写操作触发人工确认)
|
||||
- [x] **1.4.2** 实现基础 interrupt() 流程 (写操作触发人工确认)
|
||||
- 文件: `backend/app/graph.py` (扩展)
|
||||
- 工作量: M (4 小时)
|
||||
- 依赖: 1.4.1
|
||||
- 风险: 中 -- interrupt/resume 状态管理需仔细测试
|
||||
- [ ] **1.4.3** 配置 LLM Provider 抽象 (BaseChatModel + 环境变量切换)
|
||||
- [x] **1.4.3** 配置 LLM Provider 抽象 (BaseChatModel + 环境变量切换)
|
||||
- 文件: `backend/app/llm.py`
|
||||
- 工作量: S (2 小时)
|
||||
- 依赖: 1.1.5
|
||||
- 风险: 低
|
||||
- [ ] **1.4.4** 实现 Token 用量统计回调
|
||||
- [x] **1.4.4** 实现 Token 用量统计回调
|
||||
- 文件: `backend/app/callbacks.py`
|
||||
- 工作量: S (2 小时)
|
||||
- 依赖: 1.4.1
|
||||
- 风险: 低
|
||||
- [ ] **1.4.5** 启用 Prompt Caching (从第一天减少重复 system prompt 的 LLM 成本)
|
||||
- [x] **1.4.5** 启用 Prompt Caching (从第一天减少重复 system prompt 的 LLM 成本)
|
||||
- 文件: `backend/app/llm.py` (扩展)
|
||||
- 工作量: S (1 小时)
|
||||
- 依赖: 1.4.3
|
||||
- 风险: 低
|
||||
- 来源: TODOS.md 设计变更 -- "Prompt caching: 从第一天启用"
|
||||
- [ ] **1.4.6** 实现会话滑动窗口 TTL (30 分钟, 每次消息重置; 待审批的 interrupt 延长 TTL 直到解决)
|
||||
- [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)"
|
||||
- [ ] **1.4.7** 编写 Graph 单元测试 (supervisor 路由、mock 工具调用、状态断言、session TTL)
|
||||
- [x] **1.4.7** 编写 Graph 单元测试 (supervisor 路由、mock 工具调用、状态断言、session TTL)
|
||||
- 文件: `backend/tests/test_graph.py`
|
||||
- 工作量: M (4 小时)
|
||||
- 依赖: 1.4.1, 1.4.2
|
||||
@@ -158,27 +161,27 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴
|
||||
|
||||
#### 1.5 FastAPI WebSocket 后端 (预计 2 天)
|
||||
|
||||
- [ ] **1.5.1** 实现 FastAPI 应用入口 + WebSocket `/ws` 端点
|
||||
- [x] **1.5.1** 实现 FastAPI 应用入口 + WebSocket `/ws` 端点
|
||||
- 文件: `backend/app/main.py`
|
||||
- 工作量: M (4 小时)
|
||||
- 依赖: 1.4.1
|
||||
- 风险: 低
|
||||
- [ ] **1.5.2** 实现 WebSocket 流式输出 (astream_events)
|
||||
- [x] **1.5.2** 实现 WebSocket 流式输出 (astream_events)
|
||||
- 文件: `backend/app/main.py` (扩展)
|
||||
- 工作量: M (4 小时)
|
||||
- 依赖: 1.5.1
|
||||
- 风险: 中 -- 流式事件格式需与前端协议一致
|
||||
- [ ] **1.5.3** 实现 interrupt 响应处理 (WebSocket 接收审批/拒绝, 恢复 graph 执行)
|
||||
- [x] **1.5.3** 实现 interrupt 响应处理 (WebSocket 接收审批/拒绝, 恢复 graph 执行)
|
||||
- 文件: `backend/app/main.py` (扩展)
|
||||
- 工作量: M (4 小时)
|
||||
- 依赖: 1.5.2, 1.4.2
|
||||
- 风险: 高 -- 断线重连 + 重发 interrupt 提示是易出错点
|
||||
- [ ] **1.5.4** 实现 DB 错误处理 (try/except 包裹 graph 调用, 返回友好错误信息)
|
||||
- [x] **1.5.4** 实现 DB 错误处理 (try/except 包裹 graph 调用, 返回友好错误信息)
|
||||
- 文件: `backend/app/main.py` (扩展)
|
||||
- 工作量: S (1 小时)
|
||||
- 依赖: 1.5.1
|
||||
- 风险: 低
|
||||
- [ ] **1.5.5** 编写 WebSocket 测试 (连接、消息流、流式输出、interrupt 响应、断线处理)
|
||||
- [x] **1.5.5** 编写 WebSocket 测试 (连接、消息流、流式输出、interrupt 响应、断线处理)
|
||||
- 文件: `backend/tests/test_websocket.py`
|
||||
- 工作量: M (4 小时)
|
||||
- 依赖: 1.5.1, 1.5.2, 1.5.3
|
||||
@@ -186,37 +189,37 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴
|
||||
|
||||
#### 1.6 React 聊天 UI (预计 3 天) [可并行]
|
||||
|
||||
- [ ] **1.6.1** 初始化 React 项目 (Vite 或 CRA)
|
||||
- [x] **1.6.1** 初始化 React 项目 (Vite 或 CRA)
|
||||
- 文件: `frontend/` 目录
|
||||
- 工作量: S (1 小时)
|
||||
- 依赖: 无
|
||||
- 风险: 低
|
||||
- [ ] **1.6.2** 实现聊天消息列表组件 (支持流式 token 渲染)
|
||||
- [x] **1.6.2** 实现聊天消息列表组件 (支持流式 token 渲染)
|
||||
- 文件: `frontend/src/components/ChatMessages.tsx`
|
||||
- 工作量: M (4 小时)
|
||||
- 依赖: 1.6.1
|
||||
- 风险: 低
|
||||
- [ ] **1.6.3** 实现消息输入组件
|
||||
- [x] **1.6.3** 实现消息输入组件
|
||||
- 文件: `frontend/src/components/ChatInput.tsx`
|
||||
- 工作量: S (2 小时)
|
||||
- 依赖: 1.6.1
|
||||
- 风险: 低
|
||||
- [ ] **1.6.4** 实现 WebSocket 连接管理 (连接、断线重连、消息收发)
|
||||
- [x] **1.6.4** 实现 WebSocket 连接管理 (连接、断线重连、消息收发)
|
||||
- 文件: `frontend/src/hooks/useWebSocket.ts`
|
||||
- 工作量: M (4 小时)
|
||||
- 依赖: 1.6.1
|
||||
- 风险: 中 -- 需处理断线重连逻辑
|
||||
- [ ] **1.6.5** 实现 interrupt 确认 UI (确认/拒绝按钮, 操作详情展示)
|
||||
- [x] **1.6.5** 实现 interrupt 确认 UI (确认/拒绝按钮, 操作详情展示)
|
||||
- 文件: `frontend/src/components/InterruptPrompt.tsx`
|
||||
- 工作量: M (3 小时)
|
||||
- 依赖: 1.6.4
|
||||
- 风险: 低
|
||||
- [ ] **1.6.6** 实现 Agent 操作内联展示 (工具调用过程可见)
|
||||
- [x] **1.6.6** 实现 Agent 操作内联展示 (工具调用过程可见)
|
||||
- 文件: `frontend/src/components/AgentAction.tsx`
|
||||
- 工作量: S (2 小时)
|
||||
- 依赖: 1.6.2
|
||||
- 风险: 低
|
||||
- [ ] **1.6.7** 集成聊天页面主组件
|
||||
- [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
|
||||
@@ -226,15 +229,15 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴
|
||||
|
||||
通过以下全部验证才能进入 Phase 2:
|
||||
|
||||
- [ ] `docker compose up` 成功启动 PostgreSQL + 应用
|
||||
- [ ] 打开 `http://localhost:8000` 聊天 UI 加载正常
|
||||
- [ ] 发送 "订单 1042 的状态" -> 收到 Mock Agent 的流式响应
|
||||
- [ ] 发送 "取消订单 1042" -> 收到 interrupt 确认提示 -> 批准 -> 收到确认消息
|
||||
- [ ] 发送 "取消订单 1042" -> 收到 interrupt 确认提示 -> 拒绝 -> 收到取消消息
|
||||
- [ ] 多轮对话上下文保持 (通过 PostgresSaver 验证)
|
||||
- [ ] 会话 30 分钟无活动后过期; 每次消息重置 TTL; 待审批 interrupt 延长 TTL
|
||||
- [ ] 无效 YAML 配置启动时给出清晰错误信息
|
||||
- [ ] `pytest --cov` 覆盖率 >= 80% (Phase 1 代码)
|
||||
- [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 测试要求
|
||||
|
||||
|
||||
Reference in New Issue
Block a user