Update doc
This commit is contained in:
15
CLAUDE.md
15
CLAUDE.md
@@ -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
|
||||
|
||||
---
|
||||
|
||||
@@ -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 测试要求
|
||||
|
||||
|
||||
1
frontend/tsconfig.tsbuildinfo
Normal file
1
frontend/tsconfig.tsbuildinfo
Normal 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"}
|
||||
Reference in New Issue
Block a user