Files
knowledge-base/2 - Projects/Smart Support.md
2026-04-06 23:27:39 +02:00

250 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
created: 2026-03-29
updated: 2026-04-06
type: project
status: completed
deadline: ""
tags:
- ai-agent
- multi-agent
- langgraph
- python
- fastapi
- mcp
- architecture
- customer-support
- websocket
- postgresql
- react
- docker
---
# Smart Support
AI 客服行动层框架。粘贴你的 API获得一个能执行真实操作的智能客服。
## 目标
解决现有客服工具Zendesk、Intercom自动化率卡在 20-30% 的问题。这些工具能回答 FAQ但无法执行内部系统操作。Smart Support 作为「行动层」补充,让 AI 直接调用客户的内部系统完成查订单、取消订单、发优惠券等操作。
## 架构
```
客户 → React Chat UI → FastAPI WebSocket → LangGraph Supervisor → Agent → MCP Tools → 客户内部系统
```
核心组件:
- **langgraph-supervisor** v0.0.31 -- 多 Agent 编排
- **langchain-mcp-adapters** -- MCP 工具集成
- **langgraph-checkpoint-postgres** v3.0.5 -- 会话状态持久化
- **interrupt()** -- 写操作人工确认30 分钟 TTL 自动取消)
## 技术栈
| 组件 | 技术 | 版本/说明 |
|------|------|-----------|
| 后端 | Python 3.11+ / FastAPI | Web 框架 + WebSocket |
| Agent 编排 | LangGraph 1.x | Supervisor 模式多 Agent 路由 |
| 检查点 | langgraph-checkpoint-postgres | PostgreSQL 持久化 |
| MCP | langchain-mcp-adapters | MultiServerMCPClient |
| 数据库 | PostgreSQL 16 | Docker Compose 部署 |
| LLM | Claude Sonnet 4.6(默认) | 支持 Anthropic/OpenAI/Google 切换 |
| 前端 | React 19 + TypeScript + Vite 6 | React Router 7.x |
| 测试 | pytest 8.3+ / vitest 4.1.2 | 后端 516 测试 92%+ 覆盖率 |
| 部署 | Docker Compose | PostgreSQL + FastAPI + nginx |
| 代码质量 | ruff 0.9+ | Python linting + formatting |
## 核心特性
- 多 Agent 协作YAML 驱动配置
- 意图分类(单意图/多意图/模糊检测LLM 结构化输出
- OpenAPI 规范自动生成 @tool 函数 + Agent YAMLLLM 辅助分类 + 人工审核)
- 写操作人工确认interrupt()30 分钟 TTL 超时自动取消)
- 对话回放 + 数据分析仪表盘解决率、Agent 使用率、升级率、成本)
- Webhook 升级通知(指数退避重试)
- 垂直行业模板电商、SaaS、金融科技
- SSRF 防护(私有 IP 拦截、DNS 重绑定防御、重定向链验证)
- WebSocket 流式输出 + 速率限制10 msg/10s per thread
- 错误分类 + 自动重试ErrorCategory 枚举,可重试错误指数退避)
## 开发阶段
| 阶段 | 周期 | 内容 | 状态 | 详情 |
|------|------|------|------|------|
| Phase 1 | 第 1-3 周 | 核心框架 | COMPLETED (2026-03-30) | [[Smart Support/Phase 1 - 核心框架]] |
| Phase 2 | 第 3-4 周 | 多 Agent + 安全 | COMPLETED (2026-03-30) | [[Smart Support/Phase 2 - 多 Agent + 安全]] |
| Phase 3 | 第 4-6 周 | OpenAPI 自动发现 | COMPLETED (2026-03-30) | [[Smart Support/Phase 3 - OpenAPI 自动发现]] |
| Phase 4 | 第 6-7 周 | 分析 + 回放 | COMPLETED (2026-03-31) | [[Smart Support/Phase 4 - 分析 + 回放]] |
| Phase 5 | 缓冲周 | 打磨 + 演示 | COMPLETED (2026-03-31) | [[Smart Support/Phase 5 - 打磨 + 演示]] |
## 项目数据
- 后端测试516 个(单元 ~400 + 集成 ~7 + E2E ~3
- 前端测试:~23 个vitest + happy-dom
- 代码覆盖率92.88%
- 应用版本v0.5.0
- Git 最新提交:`af53111` refactor: fix architectural issues
## 目标用户
中型电商公司(日均 500-5000 订单5-20 名客服)的客户体验负责人。
## 仓库
- 代码:`git@git.colacoder.com:kai/smart-support.git`
- 分支:`main`
- 本地路径Windows`C:\Users\yaoji\git\ColaCoder\smart-support`
## WebSocket 协议
客户端 -> 服务器:
- `{"type": "message", "thread_id": "...", "content": "..."}`
- `{"type": "interrupt_response", "thread_id": "...", "interrupt_id": "...", "approved": true/false}`
服务器 -> 客户端:
- `{"type": "token", "thread_id": "...", "content": "..."}` -- 流式 token
- `{"type": "interrupt", ...}` -- 人工确认提示(含 TTL
- `{"type": "tool_call", ...}` / `{"type": "tool_result", ...}` -- 工具调用
- `{"type": "message_complete", ...}` -- 消息完成
- `{"type": "error", ...}` -- 错误
## REST API
| 方法 | 路径 | 说明 |
|------|------|------|
| WS | `/ws` | WebSocket 聊天 |
| GET | `/api/health` | 健康检查 |
| GET | `/api/conversations` | 对话列表(分页) |
| GET | `/api/replay/{thread_id}` | 回放时间线(分页,默认 20 步) |
| GET | `/api/analytics?range=7d` | 分析摘要1d/7d/30d/90d |
| POST | `/api/openapi/import` | 开始 OpenAPI 导入 |
| GET | `/api/openapi/jobs/{id}` | 导入任务状态 |
| PUT | `/api/openapi/jobs/{id}/classifications/{idx}` | 修改端点分类 |
| POST | `/api/openapi/jobs/{id}/approve` | 审核通过,生成工具 |
## 数据库表
| 表 | 用途 |
|----|----|
| checkpoints | LangGraph 状态快照(自动管理) |
| checkpoint_writes | 检查点写入记录 |
| conversations | 对话元数据(状态、解决类型、使用 Agent、Token、成本 |
| interrupts | 人工确认记录pending/approved/rejected/expired |
| analytics_events | 分析事件流事件类型、Agent、工具、Token、成本、耗时 |
## 架构决策ADR
| ADR | 决策 | 理由 |
|-----|------|------|
| ADR-001 | LangGraph Supervisor 多 Agent | 内置编排,无需自定义 |
| ADR-002 | PostgresSaver 从第一天起 | Phase 4 分析需要可查询的检查点数据 |
| ADR-003 | WebSocket + astream_events() | 双向低延迟流式 |
| ADR-004 | YAML 声明式 Agent 注册 | 非开发者可配置 Agent |
| ADR-005 | LangGraph interrupt() HITL | 框架内置,深度集成检查点 |
| ADR-006 | OpenAPI: 解析 -> LLM 分类 -> 人工审核 | 平衡自动化与安全 |
| ADR-007 | SSRF 独立模块 | 可复用,可独立测试 |
## 安全架构
- **L1 输入验证**消息格式、长度限制10k 字符、Agent YAML 启动验证
- **L2 SSRF 防护**:私有 IP 拦截、DNS 重绑定防御、重定向链验证
- **L3 HITL**:写操作 interrupt()、30 分钟 TTL 自动取消
- **L4 权限隔离**Agent 级工具集、读 Agent 无法调写工具
- **L5 审计追踪**全操作记录、PostgreSQL 存储、回放 API
## 完整文档(已同步)
- [[Smart Support/Architecture]] -- 系统架构文档12 章,含 ADR、数据库设计、API 协议)
- [[Smart Support/Development Plan]] -- 详细开发计划5 Phase任务清单 + 检查点 + 风险)
- [[Smart Support/Phase 1 Dev Log]] -- Phase 1 开发日志88% 覆盖率82 个单元测试)
- [[Smart Support/Phase 2 Dev Log]] -- Phase 2 开发日志90% 覆盖率153 个测试)
- [[Smart Support/Phase 3 Dev Log]] -- Phase 3 开发日志93% 覆盖率322 个测试)
- [[Smart Support/Phase 4 Dev Log]] -- Phase 4 开发日志93% 覆盖率399 个测试)
- [[Smart Support/Phase 5 Dev Log]] -- Phase 5 开发日志93% 覆盖率449 个测试)
## 项目模块结构
```
backend/app/
main.py -- FastAPI 入口 (v0.5.0)
config.py -- Pydantic Settings
db.py -- AsyncPostgreSQL + AsyncPostgresSaver
llm.py -- LLM 提供商工厂Anthropic/OpenAI/Google
graph.py -- LangGraph Supervisor 构建
ws_handler.py -- WebSocket 消息分发 + 流式 + 速率限制
registry.py -- YAML Agent 注册表 + 模板支持
intent.py -- LLM 意图分类器
session_manager.py -- Session TTL30m 滑动窗口)
interrupt_manager.py -- 中断 TTL 追踪 + 自动取消
escalation.py -- Webhook 升级(指数退避)
conversation_tracker.py -- 对话生命周期追踪
callbacks.py -- Token 用量回调
agents/ -- Agent 定义order_lookup, order_actions, discount, fallback
openapi/ -- OpenAPI 解析 + 分类 + 生成ssrf, fetcher, parser, classifier, generator
replay/ -- 回放模型 + 转换器 + API
analytics/ -- 分析模型 + 事件记录 + 查询 + API
tools/ -- 错误处理ErrorCategory, classify_error, with_retry
```
## 计划文档
项目根目录下:
- `design-doc.md` -- 设计文档(问题定义、约束、方案选择)
- `ceo-plan.md` -- CEO 计划(产品愿景、范围决策)
- `eng-review-plan.md` -- 工程评审(架构决策、测试策略、失败模式)
- `TODOS.md` -- 待办事项
## 快速启动
```bash
# 1. 克隆 + 配置
git clone <repo-url> && cd smart-support
cp .env.example .env && cp backend/.env.example backend/.env
# 编辑 .env 设置 ANTHROPIC_API_KEY
# 2. 启动
docker compose up -d
# PostgreSQL: localhost:5433 | Backend: localhost:8000 | Frontend: localhost:80
# 3. 测试
cd backend && pytest --cov=app --cov-report=term-missing
cd ../frontend && npm test
```
## 自动编排脚本
项目 `scripts/` 目录下有基于 autonomous-agent-harness 模式的自动化脚本:
| 脚本 | 用途 | 模式 |
|------|------|------|
| `auto-pilot.sh` | 多阶段自动执行(每阶段独立 `claude -p` session | Sequential Pipeline |
| `dev-sequential.sh` | 单功能开发plan → TDD → de-sloppify → verify → commit | Sequential Pipeline |
| `de-sloppify.sh` | 独立清理 pass新上下文 = 无作者偏见) | De-Sloppify |
| `full-verify.sh` | 全套质量门(测试、安全、模块独立性、代码质量) | Verification Pipeline |
| `pr-review-loop.sh` | 自动审查 open PRs | Continuous PR Loop |
| `health-monitor.sh` | 服务健康检查(可配 Windows Task Scheduler | Scheduled Monitor |
| `phases.json` | 声明式阶段定义(任务、验收标准、模式、依赖) | 配置文件 |
**大部分时候不需要外部脚本** — 在 Claude Code 内直接用:
- `/ecc:feature-dev "描述"` — 单功能全流程
- `/gsd:autonomous` — 全项目多阶段自动
脚本只在以下场景使用:上下文窗口不够、无人值守运行、需要 Santa Method 消除作者偏见。
**CLAUDE.md 已更新**Step 2 从 `/ecc:orchestrate`legacy迁移到 `/ecc:feature-dev` + GSD。
## 已知技术债务
- [ ] 认证/授权系统(生产部署前)
- [ ] 多租户架构(第一个付费客户后)
- [ ] CI/CD 流水线(原型阶段手动部署)
- [ ] 速率限制进程全局状态 -- 多 Worker 需 Redis
- [ ] 中断清理未定时调度cleanup_expired 存在但未触发)
- [ ] NoOpAnalyticsRecorder 已注册 -- PostgresAnalyticsRecorder 集成待完善
- [ ] SaaS/Fintech 模板工具仅为桩(无实现)
- [ ] 工具生成基于字符串模板 -- 复杂场景可能需 AST
## Related
- [[Billo Release Agent]] -- 另一个 AI Agent 项目