Update doc

This commit is contained in:
Yaojia Wang
2026-03-30 15:09:04 +02:00
parent 47d4a57313
commit 98331abbd5
3 changed files with 54 additions and 47 deletions

View File

@@ -210,13 +210,16 @@ git merge phase-{N}/{short-description}
git push origin main --tags
```
**Mark phase as completed (MANDATORY -- do ALL three):**
**Mark phase as completed (MANDATORY -- do ALL four):**
1. **Update Phase Summary table** in this file (`CLAUDE.md`): change Status from `IN PROGRESS` to `COMPLETED (YYYY-MM-DD)`
2. **Update dev log** (`docs/phases/phase-{N}-dev-log.md`): fill in `Date completed` and set status to `COMPLETED`
3. **Check off tasks** in `docs/DEVELOPMENT-PLAN.md`: mark all completed task checkboxes `- [x]` under the current phase section
1. **Check off tasks** in `docs/DEVELOPMENT-PLAN.md`: mark all completed task checkboxes `- [x]` under the current phase section
2. **Add phase completion marker** in `docs/DEVELOPMENT-PLAN.md`: add `> Status: COMPLETED (YYYY-MM-DD)` line under the phase heading
3. **Update dev log** (`docs/phases/phase-{N}-dev-log.md`): fill in `Date completed` and set status to `COMPLETED`
4. **Update Phase Summary table** in this file (`CLAUDE.md`): change Status from `IN PROGRESS` to `COMPLETED (YYYY-MM-DD)`
All three markers must be consistent. If any is missed, the next phase's Step 0 regression gate will catch the discrepancy.
`docs/DEVELOPMENT-PLAN.md` is the authoritative source for phase status. The CLAUDE.md table is a convenience summary that must stay in sync.
All four markers must be consistent. If any is missed, the next phase's Step 0 regression gate will catch the discrepancy.
A checkpoint includes:
- `/everything-claude-code:checkpoint create` at phase start
@@ -225,7 +228,7 @@ A checkpoint includes:
- Phase dev log written and linked
- `/everything-claude-code:verify` passed
- Git tag `checkpoint/phase-{N}` created
- Phase marked COMPLETED in three locations
- Phase marked COMPLETED in four locations
- Branch merged to main
---

View File

@@ -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 测试要求

View File

@@ -0,0 +1 @@
{"root":["./src/app.tsx","./src/main.tsx","./src/types.ts","./src/components/agentaction.tsx","./src/components/chatinput.tsx","./src/components/chatmessages.tsx","./src/components/interruptprompt.tsx","./src/hooks/usewebsocket.ts","./src/pages/chatpage.tsx"],"version":"5.7.3"}