5 batches, 15 tasks: scaffold→models→tenants→employees→providers→ conversation SSE→RAG pipeline→integration tests+security hardening. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
10 KiB
10 KiB
数字员工平台实施计划
日期:2026-05-05 依据设计文档:docs/plans/2026-05-05-digital-employee-design.md 状态:待批准
总览
MVP 共分 5 个批次,每批次 3 个任务,预计总工时 ~15 人天。
| 批次 | 范围 | 任务数 |
|---|---|---|
| B1 | 项目脚手架 + 数据模型 + 租户管理 | 3 |
| B2 | 数字员工配置 + LLM Provider 抽象层 | 3 |
| B3 | 对话接口(SSE 流式)+ 对话历史 | 3 |
| B4 | RAG 知识库 + 文档处理 | 3 |
| B5 | 集成测试 + 错误处理 + 启动脚本 | 3 |
批次 B1:项目脚手架 + 数据模型 + 租户管理
Task 1.1:初始化项目脚手架
- 修改目标:创建项目目录结构、Python 依赖配置、FastAPI 入口
- 涉及文件:
backend/pyproject.toml— 依赖声明backend/app/__init__.pybackend/app/main.py— FastAPI app 工厂backend/app/config.py— Settings(pydantic-settings)backend/app/database.py— async SQLAlchemy 引擎 + sessionbackend/.env.examplebackend/tests/conftest.py— pytest fixtures(async client + test DB)
- 验证方式:
uv run uvicorn app.main:app --reload启动无报错,/docs可访问 - 完成判定:服务启动 + Swagger UI 可访问 + test DB fixture 可用
Task 1.2:创建 SQLAlchemy 数据模型
- 修改目标:定义全部核心 ORM 模型(Tenant, TenantConfig, DigitalEmployee, Conversation, Message, KnowledgeBase, Document)
- 涉及文件:
backend/app/models/__init__.pybackend/app/models/tenant.py— Tenant, TenantConfigbackend/app/models/employee.py— DigitalEmployeebackend/app/models/conversation.py— Conversation, Messagebackend/app/models/knowledge.py— KnowledgeBase, Documentbackend/app/database.py— 添加Base.metadata.create_all初始化逻辑
- 验证方式:启动时自动建表,
sqlite文件包含全部表 - 完成判定:
sqlite3 test.db .tables输出全部 7 张表
Task 1.3:租户管理 API(CRUD + LLM 配置)
- 修改目标:实现租户 CRUD 端点 + LLM 配置更新端点,含 AES-256 加密存储 API Key
- 涉及文件:
backend/app/schemas/tenant.py— Pydantic request/response schemasbackend/app/api/deps.py— DB session 依赖注入backend/app/api/v1/__init__.py— v1 routerbackend/app/api/v1/tenants.py— 5 个端点backend/app/services/tenant_service.py— 业务逻辑 + 加密backend/app/middleware/tenant.py— 租户上下文中间件(预留)
- 验证方式:
- RED:
test_tenants.py先写失败测试(创建/读取/更新/删除/配置更新) - GREEN:实现端点让测试通过
- RED:
- 完成判定:全部租户测试通过,API Key 写入后数据库为密文
批次 B2:数字员工配置 + LLM Provider 抽象层
Task 2.1:数字员工配置 API
- 修改目标:实现数字员工 CRUD 端点,支持关联知识库
- 涉及文件:
backend/app/schemas/employee.pybackend/app/api/v1/employees.pybackend/app/services/employee_service.pybackend/tests/test_employees.py
- 验证方式:TDD — RED/GREEN/REFACTOR
- 完成判定:全部员工测试通过,创建时可关联知识库 ID 列表
Task 2.2:LLM Provider 抽象层
- 修改目标:实现 BaseLLMProvider 接口 + OpenAIProvider + QwenProvider
- 涉及文件:
backend/app/providers/__init__.pybackend/app/providers/base.py— BaseLLMProvider ABC + LLMMessage/LLMResponsebackend/app/providers/openai_provider.py— chat / chat_stream / embedbackend/app/providers/qwen_provider.py— 兼容 OpenAI SDK 格式backend/tests/test_providers.py
- 验证方式:TDD — mock LLM API 响应,验证接口一致性和 Provider 注册表路由
- 完成判定:两个 Provider 的 chat/chat_stream/embed 单测通过(mock 模式)
Task 2.3:Provider 集成到租户配置
- 修改目标:tenant_service 根据 tenant_config 动态实例化 Provider,API 端点可验证 Provider 可用性
- 涉及文件:
backend/app/services/tenant_service.py— 新增get_provider_for_tenant()backend/app/api/v1/tenants.py— 新增POST /tenants/{id}/test-provider端点backend/tests/test_providers.py— 补充集成验证测试
- 验证方式:TDD — mock Provider 测试路由正确性
- 完成判定:test-provider 端点根据租户配置返回正确的 Provider 实例信息
批次 B3:对话接口(SSE 流式)+ 对话历史
Task 3.1:对话与消息数据模型 + API
- 修改目标:实现 Conversation / Message CRUD + 消息发送端点(非流式先实现)
- 涉及文件:
backend/app/schemas/conversation.pybackend/app/api/v1/conversations.pybackend/app/services/conversation_service.pybackend/tests/test_conversations.py
- 验证方式:TDD — 创建对话 / 发送消息 / 获取历史
- 完成判定:全部对话基础测试通过
Task 3.2:SSE 流式响应
- 修改目标:实现 SSE 事件流(message_start / token / sources / message_end / error),集成 Provider.chat_stream
- 涉及文件:
backend/app/api/v1/conversations.py— 改造 messages 端点为 SSEbackend/app/services/conversation_service.py— 流式处理 + 持久化backend/tests/test_conversations.py— 补充 SSE 测试
- 验证方式:TDD — 用 TestClient 验证 SSE 事件格式;手动用 curl 验证流式输出
- 完成判定:SSE 事件格式正确,token 按序到达,message_end 含 token_count
Task 3.3:会话上下文管理
- 修改目标:实现 max_context_messages 窗口裁剪、system_prompt 注入、对话历史加载
- 涉及文件:
backend/app/services/conversation_service.py— 新增build_messages()backend/tests/test_conversations.py— 补充上下文窗口测试
- 验证方式:TDD — 验证消息超过 max_context_messages 时自动裁剪
- 完成判定:上下文窗口裁剪正确,system_prompt 始终在首位
批次 B4:RAG 知识库 + 文档处理
Task 4.1:知识库 CRUD + 文档上传 API
- 修改目标:实现知识库和文档的 CRUD 端点,含文件上传
- 涉及文件:
backend/app/schemas/knowledge.pybackend/app/api/v1/knowledge.pybackend/app/services/knowledge_service.pybackend/tests/test_knowledge.py
- 验证方式:TDD — 创建知识库 / 上传文档 / 列出 / 删除
- 完成判定:知识库 CRUD 测试通过,文件上传持久化到本地存储
Task 4.2:文档解析与分块
- 修改目标:实现 PDF/DOCX/TXT/MD 文件解析 → RecursiveCharacterTextSplitter 分块
- 涉及文件:
backend/app/services/knowledge_service.py— 新增解析与分块逻辑backend/tests/test_knowledge.py— 补充文档解析测试(用小文件 fixture)
- 验证方式:TDD — 上传小 PDF/TXT,验证分块结果数量和内容
- 完成判定:4 种文件类型均能正确解析分块,chunk_size=500, overlap=50
Task 4.3:RAG Pipeline(嵌入 + 检索 + 注入)
- 修改目标:实现嵌入生成 → ChromaDB 存储 → 相似度检索 → 上下文注入对话
- 涉及文件:
backend/app/services/rag_service.py— RAG 全流程backend/app/services/conversation_service.py— 集成 RAG 检索backend/tests/test_knowledge.py— 补充 RAG 检索测试(mock embedding)backend/tests/test_conversations.py— 补充 RAG 注入测试
- 验证方式:TDD — mock embedding,验证 ChromaDB 写入/检索/上下文注入逻辑
- 完成判定:上传文档后对话能检索到相关知识片段并注入 prompt
批次 B5:集成测试 + 错误处理 + 启动脚本
Task 5.1:端到端集成测试
- 修改目标:编写完整链路集成测试:创建租户 → 配置员工 → 上传知识库 → 对话
- 涉及文件:
backend/tests/test_integration.py
- 验证方式:运行集成测试(mock LLM Provider),验证全链路数据流正确
- 完成判定:集成测试全部通过
Task 5.2:统一错误处理 + 安全加固
- 修改目标:
- 全局异常处理器(Provider 错误、数据库错误、校验错误)
- 租户隔离校验(所有查询强制 tenant_id 过滤)
- 输入限制(文件大小、消息长度、速率限制)
- 涉及文件:
backend/app/middleware/tenant.py— 租户隔离中间件实现backend/app/main.py— 注册异常处理器backend/app/api/deps.py— 租户上下文注入backend/tests/test_tenants.py— 补充越权测试
- 验证方式:TDD — 验证租户 A 无法访问租户 B 资源、错误返回正确状态码
- 完成判定:安全测试通过,越权返回 403
Task 5.3:启动脚本 + README + .env.example
- 修改目标:提供一键启动脚本和开发文档
- 涉及文件:
backend/.env.example— 环境变量模板scripts/dev.sh— 一键启动脚本README.md— 项目说明与快速开始
- 验证方式:从零
pip install→ 配置.env→./scripts/dev.sh启动成功 - 完成判定:按 README 步骤能成功启动服务,Swagger UI 可访问
依赖关系
B1 ──→ B2 ──→ B3 ──→ B4 ──→ B5
│ │
└── Provider ──┘
- B2 依赖 B1(数据模型)
- B3 依赖 B2(需要 Provider 调用 LLM)
- B4 依赖 B2(需要 Provider 生成嵌入)
- B5 依赖 B1-B4(集成测试覆盖全部模块)
验证命令
# 单测
cd backend && uv run pytest tests/ -v
# 集成测试
cd backend && uv run pytest tests/test_integration.py -v
# Lint
cd backend && uv run ruff check app/ tests/
# Type check
cd backend && uv run mypy app/
# 启动开发服务
cd backend && uv run uvicorn app.main:app --reload --port 8000
风险与待确认项
| 风险 | 影响 | 缓解措施 |
|---|---|---|
| ChromaDB 嵌入式版本并发性能有限 | 多租户同时上传文档可能阻塞 | MVP 阶段文档上传串行处理,V1 迁移 pgvector |
| OpenAI/通义 API 不稳定 | 对话功能不可用 | 重试 + 降级提示 |
| SSE 在测试中验证较复杂 | 测试覆盖可能不足 | 使用 TestClient 的 stream 模式 + 事件格式断言 |
| SQLite 写并发锁 | 多并发写入可能超时 | MVP 阶段 WAL 模式缓解,V1 迁移 PostgreSQL |