ai-robot-core/spec/ai-service/tasks.md

139 lines
9.3 KiB
Markdown
Raw Normal View History

---
feature_id: "AISVC"
title: "Python AI 中台ai-service任务清单"
status: "completed"
version: "0.4.0"
last_updated: "2026-02-24"
---
# Python AI 中台任务清单AISVC
## 1. 任务拆分原则
- **原子性**:每个任务仅解决一个具体技术点或功能逻辑。
- **可验证性**:任务完成后必须可通过单元测试、接口冒烟或契约校验。
- **弱模型可执行**:任务描述清晰,不依赖 AI 猜测业务逻辑。
## 2. 任务执行计划
### Phase 1: 基础设施FastAPI 框架与多租户基础)
- [x] T1.1 初始化 FastAPI 项目骨架,配置基础环境与日志(包含 X-Tenant-Id 记录) `[AC-AISVC-01]`
- [x] T1.2 实现 `X-Tenant-Id` Header 拦截器,校验必填性并注入 Request State `[AC-AISVC-10, AC-AISVC-12]`
- [x] T1.3 定义基础响应模型 `ErrorResponse` 与异常处理器Exception Handler `[AC-AISVC-03, AC-AISVC-04]`
- [x] T1.4 初始化 PostgreSQL 数据库客户端SQLModel/SQLAlchemy支持租户隔离查询逻辑 `[AC-AISVC-11]`
- [x] T1.5 初始化 Qdrant 客户端,封装按租户动态选择 Collection 的工具函数 `[AC-AISVC-10]`
- [x] T1.6 实现 `/ai/health` 健康检查接口 `[AC-AISVC-20]`
### Phase 2: 存储与检索实现Memory & Retrieval
- [x] T2.1 实现 Memory 层:定义 `chat_sessions``chat_messages` SQLModel 实体 `[AC-AISVC-13]`
- [x] T2.2 实现 Memory 层:完成基于 `(tenant_id, session_id)` 的历史消息加载与追加 API `[AC-AISVC-13]`
- [x] T2.3 实现 Retrieval 层:定义 `BaseRetriever` 抽象基类(插件点预留) `[AC-AISVC-16]`
- [x] T2.4 实现 `VectorRetriever`:集成 `qdrant-client` 完成向量检索,支持 scoreThreshold 过滤 `[AC-AISVC-16, AC-AISVC-17]`
- [x] T2.5 编写 Memory 与 Retrieval 层的独立单元测试Mock 数据库与向量库) `[AC-AISVC-10, AC-AISVC-11]`
### Phase 3: 核心编排Orchestrator & LLM Adapter
- [x] T3.1 实现 LLM Adapter封装 `langchain-openai` 或官方 SDK支持 `generate``stream_generate` `[AC-AISVC-02, AC-AISVC-06]`
- [x] T3.2 实现 Orchestrator实现上下文合并逻辑H_local + H_ext 的去重与截断策略) `[AC-AISVC-14, AC-AISVC-15]`
- [x] T3.3 实现 Orchestrator实现 RAG 检索不足时的置信度下调与 `shouldTransfer` 逻辑 `[AC-AISVC-17, AC-AISVC-18, AC-AISVC-19]`
- [x] T3.4 实现 Orchestrator整合 Memory、Retrieval 与 LLM 完成 non-streaming 生成闭环 `[AC-AISVC-01, AC-AISVC-02]`
- [x] T3.5 验证 non-streaming 响应字段完全符合 `openapi.provider.yaml` 契约 `[AC-AISVC-02]`
### Phase 4: 流式响应SSE 实现与状态机)
- [x] T4.1 在 API 层实现基于 `Accept` 头的响应模式自动切换逻辑 `[AC-AISVC-06]`
- [x] T4.2 实现 SSE 事件生成器:根据 Orchestrator 的增量输出包装 `message` 事件 `[AC-AISVC-07]`
- [x] T4.3 实现 SSE 状态机:确保 `final``error` 事件后连接正确关闭,且顺序不乱 `[AC-AISVC-08, AC-AISVC-09]`
- [x] T4.4 实现流式输出过程中的异常捕获,并转化为 `event: error` 输出 `[AC-AISVC-09]`
### Phase 5: 集成与冒烟测试Quality Assurance
- [x] T5.1 编写集成测试:模拟多租户并发请求,验证数据存储与检索的严格物理/逻辑隔离 `[AC-AISVC-10, AC-AISVC-11]`
- [x] T5.2 编写 RAG 冒烟测试:模拟"检索命中"与"检索未命中"两种场景,验证 confidence 变化与回复兜底 `[AC-AISVC-17, AC-AISVC-18]`
- [x] T5.3 契约测试:验证 provider 契约一致性 `[AC-AISVC-01, AC-AISVC-02]`
### Phase 6: 前后端联调真实对接v0.2.0 迭代)
- [x] T6.1 定义知识库相关实体:`KnowledgeBase`、`Document`、`IndexJob` SQLModel 实体 `[AC-AISVC-21, AC-AISVC-22, AC-AISVC-23, AC-AISVC-24]`
- [x] T6.2 实现 `KBService`:文档上传、存储、列表查询、索引任务状态查询 `[AC-AISVC-21, AC-AISVC-23, AC-AISVC-24]`
- [x] T6.3 实现知识库管理 API`POST /admin/kb/documents` 真实文件存储与异步索引 `[AC-AISVC-21, AC-AISVC-22]`
- [x] T6.4 实现知识库管理 API`GET /admin/kb/documents` 真实数据库查询 `[AC-AISVC-23]`
- [x] T6.5 实现知识库管理 API`GET /admin/kb/index/jobs/{jobId}` 真实任务状态查询 `[AC-AISVC-24]`
- [x] T6.6 实现 RAG 实验室 API`POST /admin/rag/experiments/run` 真实向量检索 `[AC-AISVC-25, AC-AISVC-26]`
- [x] T6.7 实现会话监控 API`GET /admin/sessions` 真实会话列表查询 `[AC-AISVC-27]`
- [x] T6.8 实现会话监控 API`GET /admin/sessions/{sessionId}` 真实会话详情查询 `[AC-AISVC-28]`
- [x] T6.9 前后端联调验证:确认前端页面正常调用后端真实接口 ✅
---
## 3. 待澄清Open Questions
> ✅ 已确认:以下事项均已由产品/架构反馈确认,可直接作为实现基准。
1.**Collection 初始化**:采用**提前预置**模式,不通过业务请求动态创建。
2.**超时策略**Python 内部设置 **20s 硬超时**,防止资源泄露与请求堆积。
3.**SSE 心跳**:必须实现 `: ping` 机制Keep-alive防止网关/中间件断开连接。
4.**置信度**MVP 优先基于 RAG 检索分数Score计算 `confidence`
5.**Token 计数**:统一使用 `tiktoken` 库进行精确 Token 计数(用于 history 截断与证据预算)。
---
## 4. 任务状态说明
- ⏳ 待处理 (Pending)
- 🔄 进行中 (In Progress)
- ✅ 已完成 (Completed)
- ❌ 已取消 (Cancelled)
---
## 5. 完成总结
**Phase 1-7 已全部完成Phase 8 进行中**
| Phase | 描述 | 任务数 | 状态 |
|-------|------|--------|------|
| Phase 1 | 基础设施 | 6 | ✅ 完成 |
| Phase 2 | 存储与检索 | 5 | ✅ 完成 |
| Phase 3 | 核心编排 | 5 | ✅ 完成 |
| Phase 4 | 流式响应 | 4 | ✅ 完成 |
| Phase 5 | 集成测试 | 3 | ✅ 完成 |
| Phase 6 | 前后端联调真实对接 | 9 | ✅ 完成 |
| Phase 7 | 嵌入模型可插拔与文档解析 | 21 | ✅ 完成 |
| Phase 8 | LLM 配置与 RAG 调试输出 | 10 | ⏳ 进行中 |
**已完成: 53 个任务 | 进行中: 10 个任务**
---
### Phase 7: 嵌入模型可插拔与文档解析支持v0.3.0 迭代)
- [x] T7.1 设计 `EmbeddingProvider` 抽象基类:定义 `embed()`、`embed_batch()`、`get_dimension()` 接口 `[AC-AISVC-29]`
- [x] T7.2 实现 `EmbeddingProviderFactory` 工厂类:支持根据配置动态加载提供者 `[AC-AISVC-30]`
- [x] T7.3 实现 `OllamaEmbeddingProvider`:封装 Ollama API 调用 `[AC-AISVC-29, AC-AISVC-30]`
- [x] T7.4 实现 `OpenAIEmbeddingProvider`:封装 OpenAI Embedding API `[AC-AISVC-29, AC-AISVC-30]`
- [x] T7.5 实现嵌入配置管理:支持动态配置与热更新 `[AC-AISVC-31]`
- [x] T7.6 实现嵌入模型错误处理与 fallback 策略 `[AC-AISVC-32]`
- [x] T7.7 实现 `DocumentParser` 抽象接口:定义 `parse()` 方法返回纯文本 `[AC-AISVC-33]`
- [x] T7.8 实现 `PDFParser`:使用 PyMuPDF/pdfplumber 解析 PDF `[AC-AISVC-33]`
- [x] T7.9 实现 `WordParser`:使用 python-docx 解析 Word 文档 `[AC-AISVC-34]`
- [x] T7.10 实现 `ExcelParser`:使用 openpyxl 解析 Excel 文档 `[AC-AISVC-35]`
- [x] T7.11 实现 `DocumentParserFactory`:根据文件扩展名选择解析器 `[AC-AISVC-33, AC-AISVC-34, AC-AISVC-35]`
- [x] T7.12 实现文档解析错误处理与格式校验 `[AC-AISVC-36, AC-AISVC-37]`
- [x] T7.13 实现 `GET /admin/embedding/providers` API返回可用提供者列表 `[AC-AISVC-38]`
- [x] T7.14 实现 `GET /admin/embedding/config` API返回当前配置 `[AC-AISVC-39]`
- [x] T7.15 实现 `PUT /admin/embedding/config` API更新配置 `[AC-AISVC-40]`
- [x] T7.16 实现 `POST /admin/embedding/test` API测试嵌入连接 `[AC-AISVC-41]`
- [x] T7.17 集成嵌入服务到索引流程:替换现有硬编码 Ollama 调用 `[AC-AISVC-29]`
- [x] T7.18 集成文档解析到上传流程:支持多格式文档上传 `[AC-AISVC-33, AC-AISVC-34, AC-AISVC-35]`
- [x] T7.19 编写嵌入服务单元测试 `[AC-AISVC-29, AC-AISVC-30, AC-AISVC-31, AC-AISVC-32]`
- [x] T7.20 编写文档解析单元测试 `[AC-AISVC-33, AC-AISVC-34, AC-AISVC-35, AC-AISVC-36, AC-AISVC-37]`
- [x] T7.21 编写嵌入管理 API 集成测试 `[AC-AISVC-38, AC-AISVC-39, AC-AISVC-40, AC-AISVC-41]`
---
### Phase 8: LLM 配置与 RAG 调试输出v0.4.0 迭代)
- [x] T8.1 设计 `LLMProviderFactory` 工厂类:支持根据配置动态加载提供者 `[AC-AISVC-42]`
- [x] T8.2 实现 `LLMConfigManager` 配置管理:支持动态配置与热更新 `[AC-AISVC-43, AC-AISVC-44]`
- [x] T8.3 实现 `GET /admin/llm/providers` API返回可用提供者列表 `[AC-AISVC-42]`
- [x] T8.4 实现 `GET /admin/llm/config` API返回当前配置 `[AC-AISVC-43]`
- [x] T8.5 实现 `PUT /admin/llm/config` API更新配置 `[AC-AISVC-44]`
- [x] T8.6 实现 `POST /admin/llm/test` API测试 LLM 连接 `[AC-AISVC-45, AC-AISVC-46]`
- [x] T8.7 更新 RAG 实验接口:支持 AI 回复生成 `[AC-AISVC-47, AC-AISVC-49]`
- [x] T8.8 实现 RAG 实验流式输出SSE 流式 AI 回复 `[AC-AISVC-48]`
- [x] T8.9 支持指定 LLM 提供者RAG 实验可选择不同 LLM `[AC-AISVC-50]`
- [x] T8.10 更新 OpenAPI 契约:添加 LLM 管理和 RAG 实验增强接口 ✅