684 lines
17 KiB
Markdown
684 lines
17 KiB
Markdown
|
|
# TASK - LangChain Learning Kit 任务拆分
|
||
|
|
|
||
|
|
## 任务依赖图
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
graph TB
|
||
|
|
T1[T1: 项目初始化]
|
||
|
|
T2[T2: 数据库层实现]
|
||
|
|
T3[T3: 配置和工具模块]
|
||
|
|
T4[T4: ModelManager]
|
||
|
|
T5[T5: AsyncJobManager]
|
||
|
|
T6[T6: KnowledgeBaseManager]
|
||
|
|
T7[T7: ConversationManager]
|
||
|
|
T8[T8: AgentOrchestrator]
|
||
|
|
T9[T9: Model API]
|
||
|
|
T10[T10: KB API]
|
||
|
|
T11[T11: Conversation API]
|
||
|
|
T12[T12: Agent API]
|
||
|
|
T13[T13: FastAPI 主程序]
|
||
|
|
T14[T14: Docker 配置]
|
||
|
|
T15[T15: 测试框架]
|
||
|
|
T16[T16: 项目文档]
|
||
|
|
|
||
|
|
T1 --> T2
|
||
|
|
T1 --> T3
|
||
|
|
T2 --> T4
|
||
|
|
T3 --> T4
|
||
|
|
T3 --> T5
|
||
|
|
T4 --> T6
|
||
|
|
T5 --> T6
|
||
|
|
T4 --> T7
|
||
|
|
T4 --> T8
|
||
|
|
T6 --> T8
|
||
|
|
T4 --> T9
|
||
|
|
T6 --> T10
|
||
|
|
T7 --> T11
|
||
|
|
T8 --> T12
|
||
|
|
T9 --> T13
|
||
|
|
T10 --> T13
|
||
|
|
T11 --> T13
|
||
|
|
T12 --> T13
|
||
|
|
T13 --> T14
|
||
|
|
T13 --> T15
|
||
|
|
T14 --> T16
|
||
|
|
T15 --> T16
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T1: 项目初始化
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: 无
|
||
|
|
- **输入数据**: 设计文档 DESIGN_langchain-learning-kit.md
|
||
|
|
- **环境依赖**: Python 3.11+, Git
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- 完整的项目目录结构
|
||
|
|
- requirements.txt 依赖文件
|
||
|
|
- .env.example 环境变量模板
|
||
|
|
- .gitignore 文件
|
||
|
|
- README.md 基础文档
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] 目录结构符合设计文档
|
||
|
|
- [x] requirements.txt 包含所有必要依赖
|
||
|
|
- [x] .env.example 包含所有配置项
|
||
|
|
- [x] .gitignore 排除敏感文件和缓存
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: Python 3.11
|
||
|
|
- **质量要求**:
|
||
|
|
- 依赖版本使用范围约束 (>=x.y,<x+1)
|
||
|
|
- 环境变量命名遵循 UPPER_SNAKE_CASE
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **后置任务**: T2, T3
|
||
|
|
- **并行任务**: 无
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T2: 数据库层实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T1 (项目结构已创建)
|
||
|
|
- **输入数据**: 数据库表设计 (DESIGN 文档第4节)
|
||
|
|
- **环境依赖**: MySQL 8.0+, Python 环境
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/db/models.py`: SQLAlchemy 模型定义
|
||
|
|
- `app/db/session.py`: 数据库会话管理
|
||
|
|
- `app/db/alembic/`: Alembic 迁移配置
|
||
|
|
- `app/db/alembic/versions/001_initial.py`: 初始迁移脚本
|
||
|
|
- **交付物**: 可执行的数据库迁移脚本
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] 所有表模型定义完整 (models, knowledge_bases, documents, conversations, messages, tool_calls)
|
||
|
|
- [x] 外键关系正确
|
||
|
|
- [x] 索引定义完整
|
||
|
|
- [x] Alembic 迁移可执行 (`alembic upgrade head` 成功)
|
||
|
|
- [x] 数据库连接池配置正确
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: SQLAlchemy 2.0+, Alembic 1.12+, PyMySQL
|
||
|
|
- **接口规范**:
|
||
|
|
- 使用 `declarative_base()` 定义模型
|
||
|
|
- 会话管理使用 `sessionmaker` + 依赖注入
|
||
|
|
- **质量要求**:
|
||
|
|
- 类型提示完整
|
||
|
|
- 模型包含 `__repr__` 方法
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T1
|
||
|
|
- **后置任务**: T4, T6, T7, T8
|
||
|
|
- **并行任务**: T3
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T3: 配置和工具模块
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T1 (项目结构已创建)
|
||
|
|
- **输入数据**: 配置设计 (DESIGN 文档第7节)
|
||
|
|
- **环境依赖**: Python 环境
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/config.py`: Pydantic Settings 配置类
|
||
|
|
- `app/utils/logger.py`: 结构化日志配置
|
||
|
|
- `app/utils/exceptions.py`: 自定义异常类
|
||
|
|
- `app/utils/text_splitter.py`: 文本分块工具
|
||
|
|
- `app/utils/faiss_helper.py`: FAISS 辅助函数
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] 配置类支持环境变量读取
|
||
|
|
- [x] 日志输出为 JSON 格式
|
||
|
|
- [x] 异常类包含 code, message, status_code
|
||
|
|
- [x] 文本分块支持按字符数和句子分割
|
||
|
|
- [x] FAISS 辅助函数支持保存/加载索引
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: pydantic-settings, structlog, langchain-text-splitters
|
||
|
|
- **接口规范**:
|
||
|
|
- Settings 继承 BaseSettings
|
||
|
|
- 异常类继承 Exception
|
||
|
|
- **质量要求**:
|
||
|
|
- 完整的文档字符串
|
||
|
|
- 类型提示
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T1
|
||
|
|
- **后置任务**: T4, T5, T6
|
||
|
|
- **并行任务**: T2
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T4: ModelManager 实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T2 (数据库模型), T3 (配置和异常)
|
||
|
|
- **输入数据**: ModelManager 设计 (DESIGN 文档 3.1 节)
|
||
|
|
- **环境依赖**: OpenAI API Key (可选,用于测试)
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/services/model_manager.py`: ModelManager 类实现
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] 实现 CRUD 方法 (create_model, get_model, list_models, update_model, delete_model)
|
||
|
|
- [x] 实现 get_llm() 方法返回 LangChain LLM 实例
|
||
|
|
- [x] 实现 get_embedding() 方法返回 Embeddings 实例
|
||
|
|
- [x] 支持默认模型逻辑
|
||
|
|
- [x] 配置中的 ${VAR} 变量替换功能
|
||
|
|
- [x] 异常处理完善
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: langchain-openai, SQLAlchemy
|
||
|
|
- **接口规范**:
|
||
|
|
```python
|
||
|
|
class ModelManager:
|
||
|
|
def __init__(self, db_session: Session, settings: Settings)
|
||
|
|
def create_model(name: str, type: str, config: Dict) -> Model
|
||
|
|
def get_llm(name: Optional[str] = None) -> BaseLLM
|
||
|
|
def get_embedding(name: Optional[str] = None) -> Embeddings
|
||
|
|
```
|
||
|
|
- **质量要求**:
|
||
|
|
- 单元测试覆盖核心方法
|
||
|
|
- 配置验证
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T2, T3
|
||
|
|
- **后置任务**: T6, T7, T8, T9
|
||
|
|
- **并行任务**: T5
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T5: AsyncJobManager 实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T3 (日志和异常)
|
||
|
|
- **输入数据**: AsyncJobManager 设计 (DESIGN 文档 3.5 节)
|
||
|
|
- **环境依赖**: Python asyncio
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/services/job_manager.py`: AsyncJobManager 类实现
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] 支持异步任务提交 (submit_job)
|
||
|
|
- [x] 任务状态查询 (get_job_status)
|
||
|
|
- [x] 任务结果等待 (wait_for_job)
|
||
|
|
- [x] 异常捕获和记录
|
||
|
|
- [x] 任务 ID 生成 (UUID)
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: Python asyncio, UUID
|
||
|
|
- **接口规范**:
|
||
|
|
```python
|
||
|
|
class AsyncJobManager:
|
||
|
|
async def submit_job(job_fn: Callable, *args, **kwargs) -> str
|
||
|
|
async def get_job_status(job_id: str) -> Dict
|
||
|
|
async def wait_for_job(job_id: str, timeout: int) -> Any
|
||
|
|
```
|
||
|
|
- **质量要求**:
|
||
|
|
- 线程安全
|
||
|
|
- 超时处理
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T3
|
||
|
|
- **后置任务**: T6
|
||
|
|
- **并行任务**: T4
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T6: KnowledgeBaseManager 实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T2 (数据库模型), T3 (工具模块), T4 (ModelManager), T5 (JobManager)
|
||
|
|
- **输入数据**: KBManager 设计 (DESIGN 文档 3.2 节)
|
||
|
|
- **环境依赖**: FAISS, OpenAI Embeddings
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/services/kb_manager.py`: KnowledgeBaseManager 类实现
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] 知识库 CRUD (create_kb, get_kb, list_kb, delete_kb)
|
||
|
|
- [x] 文档摄取 (ingest_documents) - 支持异步
|
||
|
|
- [x] 向量检索 (query_kb)
|
||
|
|
- [x] FAISS 索引持久化 (save_index, load_index)
|
||
|
|
- [x] 文档分块处理
|
||
|
|
- [x] 批量嵌入计算
|
||
|
|
- [x] 索引状态查询
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: FAISS, langchain-community, langchain-openai
|
||
|
|
- **接口规范**:
|
||
|
|
```python
|
||
|
|
class KnowledgeBaseManager:
|
||
|
|
def __init__(self, db_session, model_manager, job_manager, settings)
|
||
|
|
def create_kb(name: str, description: str) -> KnowledgeBase
|
||
|
|
async def ingest_documents(kb_id: int, docs: List[Dict], embedding_name: str) -> str
|
||
|
|
def query_kb(kb_id: int, query: str, k: int, embedding_name: str) -> List[Document]
|
||
|
|
def save_index(kb_id: int) -> bool
|
||
|
|
def load_index(kb_id: int) -> FAISS
|
||
|
|
```
|
||
|
|
- **质量要求**:
|
||
|
|
- FAISS 索引路径管理清晰
|
||
|
|
- 错误处理完善
|
||
|
|
- 单元测试和集成测试
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T2, T3, T4, T5
|
||
|
|
- **后置任务**: T8, T10
|
||
|
|
- **并行任务**: T7
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T7: ConversationManager 实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T2 (数据库模型), T4 (ModelManager)
|
||
|
|
- **输入数据**: ConvManager 设计 (DESIGN 文档 3.3 节)
|
||
|
|
- **环境依赖**: LangChain Memory
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/services/conv_manager.py`: ConversationManager 类实现
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] 会话 CRUD (create_conversation, get_conversation)
|
||
|
|
- [x] 消息管理 (add_message, get_messages)
|
||
|
|
- [x] 聊天功能 (chat) - 支持 RAG
|
||
|
|
- [x] 会话历史构建
|
||
|
|
- [x] Prompt 模板管理
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: LangChain, langchain-openai
|
||
|
|
- **接口规范**:
|
||
|
|
```python
|
||
|
|
class ConversationManager:
|
||
|
|
def __init__(self, db_session, model_manager, kb_manager, settings)
|
||
|
|
def create_conversation(user_id: int, title: str) -> Conversation
|
||
|
|
async def chat(conv_id: int, user_input: str, kb_id: int, llm_name: str, use_rag: bool) -> Message
|
||
|
|
def get_messages(conv_id: int, limit: int, offset: int) -> List[Message]
|
||
|
|
```
|
||
|
|
- **质量要求**:
|
||
|
|
- RAG 上下文注入正确
|
||
|
|
- 消息历史管理
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T2, T4
|
||
|
|
- **后置任务**: T11
|
||
|
|
- **并行任务**: T6
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T8: AgentOrchestrator 实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T2 (数据库模型), T4 (ModelManager), T6 (KBManager)
|
||
|
|
- **输入数据**: Agent 设计 (DESIGN 文档 3.4 节)
|
||
|
|
- **环境依赖**: LangChain Agents
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/services/agent_orchestrator.py`: AgentOrchestrator 类实现
|
||
|
|
- `app/tools/retriever.py`: Retriever Tool
|
||
|
|
- `app/tools/calculator.py`: Calculator Tool
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] Agent 执行 (run_agent)
|
||
|
|
- [x] 工具调用日志 (log_tool_call, get_logs)
|
||
|
|
- [x] Retriever Tool 实现
|
||
|
|
- [x] Calculator Tool 实现
|
||
|
|
- [x] Agent 工具注册机制
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: LangChain Agents, langchain-openai
|
||
|
|
- **接口规范**:
|
||
|
|
```python
|
||
|
|
class AgentOrchestrator:
|
||
|
|
def __init__(self, db_session, model_manager, kb_manager, settings)
|
||
|
|
async def run_agent(agent_name: str, input: str, llm_name: str, tools: List[str], kb_id: int) -> Dict
|
||
|
|
def get_logs(run_id: str) -> List[ToolCall]
|
||
|
|
|
||
|
|
class RetrieverTool:
|
||
|
|
name = "knowledge_base_search"
|
||
|
|
def run(query: str, kb_id: int) -> str
|
||
|
|
|
||
|
|
class CalculatorTool:
|
||
|
|
name = "calculator"
|
||
|
|
def run(expression: str) -> str
|
||
|
|
```
|
||
|
|
- **质量要求**:
|
||
|
|
- 工具调用审计完整
|
||
|
|
- 异常处理
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T2, T4, T6
|
||
|
|
- **后置任务**: T12
|
||
|
|
- **并行任务**: T7
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T9: Model API 实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T4 (ModelManager)
|
||
|
|
- **输入数据**: API 设计 (DESIGN 文档 5.2 节)
|
||
|
|
- **环境依赖**: FastAPI
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/api/v1/models.py`: Model API 路由
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] POST /api/v1/models (创建模型)
|
||
|
|
- [x] GET /api/v1/models (列出模型)
|
||
|
|
- [x] GET /api/v1/models/{id} (获取模型)
|
||
|
|
- [x] PUT /api/v1/models/{id} (更新模型)
|
||
|
|
- [x] DELETE /api/v1/models/{id} (删除模型)
|
||
|
|
- [x] Pydantic 请求/响应模型
|
||
|
|
- [x] 统一响应格式
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: FastAPI, Pydantic
|
||
|
|
- **接口规范**: RESTful API
|
||
|
|
- **质量要求**:
|
||
|
|
- 参数验证
|
||
|
|
- 错误处理
|
||
|
|
- OpenAPI 文档
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T4
|
||
|
|
- **后置任务**: T13
|
||
|
|
- **并行任务**: T10, T11, T12
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T10: Knowledge Base API 实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T6 (KBManager)
|
||
|
|
- **输入数据**: API 设计 (DESIGN 文档 5.2 节)
|
||
|
|
- **环境依赖**: FastAPI
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/api/v1/kb.py`: KB API 路由
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] POST /api/v1/kb (创建知识库)
|
||
|
|
- [x] GET /api/v1/kb (列出知识库)
|
||
|
|
- [x] POST /api/v1/kb/{kb_id}/ingest (文档摄取)
|
||
|
|
- [x] POST /api/v1/kb/{kb_id}/query (向量检索)
|
||
|
|
- [x] GET /api/v1/kb/{kb_id}/status (索引状态)
|
||
|
|
- [x] 文件上传支持 (txt)
|
||
|
|
- [x] 异步任务响应
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: FastAPI, UploadFile
|
||
|
|
- **接口规范**: RESTful API
|
||
|
|
- **质量要求**:
|
||
|
|
- 文件大小限制
|
||
|
|
- 异步处理
|
||
|
|
- 进度查询
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T6
|
||
|
|
- **后置任务**: T13
|
||
|
|
- **并行任务**: T9, T11, T12
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T11: Conversation API 实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T7 (ConvManager)
|
||
|
|
- **输入数据**: API 设计 (DESIGN 文档 5.2 节)
|
||
|
|
- **环境依赖**: FastAPI
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/api/v1/conv.py`: Conversation API 路由
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] POST /api/v1/conversations (创建会话)
|
||
|
|
- [x] GET /api/v1/conversations/{id} (获取会话)
|
||
|
|
- [x] POST /api/v1/conversations/{id}/messages (发送消息)
|
||
|
|
- [x] GET /api/v1/conversations/{id}/messages (消息历史)
|
||
|
|
- [x] 分页支持
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: FastAPI, Pydantic
|
||
|
|
- **接口规范**: RESTful API
|
||
|
|
- **质量要求**:
|
||
|
|
- 流式响应 (可选)
|
||
|
|
- 分页查询
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T7
|
||
|
|
- **后置任务**: T13
|
||
|
|
- **并行任务**: T9, T10, T12
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T12: Agent API 实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T8 (AgentOrchestrator)
|
||
|
|
- **输入数据**: API 设计 (DESIGN 文档 5.2 节)
|
||
|
|
- **环境依赖**: FastAPI
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/api/v1/agent.py`: Agent API 路由
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] POST /api/v1/agent/run (执行 Agent)
|
||
|
|
- [x] GET /api/v1/agent/logs/{run_id} (获取日志)
|
||
|
|
- [x] 工具选择参数
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: FastAPI, Pydantic
|
||
|
|
- **接口规范**: RESTful API
|
||
|
|
- **质量要求**:
|
||
|
|
- 执行日志详细
|
||
|
|
- 超时处理
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T8
|
||
|
|
- **后置任务**: T13
|
||
|
|
- **并行任务**: T9, T10, T11
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T13: FastAPI 主程序实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T9, T10, T11, T12 (所有 API 路由)
|
||
|
|
- **输入数据**: 架构设计
|
||
|
|
- **环境依赖**: FastAPI
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `app/main.py`: FastAPI 应用入口
|
||
|
|
- `app/api/v1/__init__.py`: 路由聚合
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] FastAPI 应用初始化
|
||
|
|
- [x] 所有路由注册
|
||
|
|
- [x] 全局异常处理器
|
||
|
|
- [x] CORS 中间件
|
||
|
|
- [x] 健康检查端点
|
||
|
|
- [x] OpenAPI 文档配置
|
||
|
|
- [x] 应用可启动 (uvicorn)
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: FastAPI, uvicorn
|
||
|
|
- **接口规范**:
|
||
|
|
- API 前缀 `/api/v1`
|
||
|
|
- 自动生成 OpenAPI 文档
|
||
|
|
- **质量要求**:
|
||
|
|
- 依赖注入配置
|
||
|
|
- 中间件配置
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T9, T10, T11, T12
|
||
|
|
- **后置任务**: T14, T15
|
||
|
|
- **并行任务**: 无
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T14: Docker 配置实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T13 (应用可运行)
|
||
|
|
- **输入数据**: 部署设计 (DESIGN 文档第10节)
|
||
|
|
- **环境依赖**: Docker
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `docker/Dockerfile`: 应用镜像定义
|
||
|
|
- `docker/docker-compose.yml`: 服务编排
|
||
|
|
- `.dockerignore`: 构建排除文件
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] Dockerfile 多阶段构建
|
||
|
|
- [x] docker-compose 包含 MySQL 和 App 服务
|
||
|
|
- [x] 数据卷挂载正确
|
||
|
|
- [x] 环境变量传递
|
||
|
|
- [x] 健康检查配置
|
||
|
|
- [x] 容器可成功启动
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: Docker, Docker Compose
|
||
|
|
- **质量要求**:
|
||
|
|
- 镜像体积优化
|
||
|
|
- 安全最佳实践
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T13
|
||
|
|
- **后置任务**: T16
|
||
|
|
- **并行任务**: T15
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T15: 测试框架实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T13 (应用完整)
|
||
|
|
- **输入数据**: 测试策略 (DESIGN 文档第9节)
|
||
|
|
- **环境依赖**: pytest
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `tests/conftest.py`: pytest 配置和 fixture
|
||
|
|
- `tests/unit/test_model_manager.py`: ModelManager 单元测试
|
||
|
|
- `tests/unit/test_kb_manager.py`: KBManager 单元测试
|
||
|
|
- `tests/integration/test_api_models.py`: Model API 集成测试
|
||
|
|
- `tests/integration/test_api_kb.py`: KB API 集成测试
|
||
|
|
- `pytest.ini`: pytest 配置文件
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] 测试数据库 fixture
|
||
|
|
- [x] 核心服务单元测试
|
||
|
|
- [x] API 集成测试
|
||
|
|
- [x] 测试覆盖率 > 60%
|
||
|
|
- [x] 所有测试通过
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: pytest, httpx, pytest-asyncio
|
||
|
|
- **质量要求**:
|
||
|
|
- 测试隔离
|
||
|
|
- Mock 外部依赖
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T13
|
||
|
|
- **后置任务**: T16
|
||
|
|
- **并行任务**: T14
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## T16: 项目文档实现
|
||
|
|
|
||
|
|
### 输入契约
|
||
|
|
- **前置依赖**: T14, T15 (完整系统)
|
||
|
|
- **输入数据**: 所有实现代码
|
||
|
|
- **环境依赖**: Markdown
|
||
|
|
|
||
|
|
### 输出契约
|
||
|
|
- **输出数据**:
|
||
|
|
- `README.md`: 项目介绍和快速开始
|
||
|
|
- `docs/architecture.md`: 架构文档
|
||
|
|
- `docs/runbook.md`: 运维手册
|
||
|
|
- `docs/api.md`: API 使用指南
|
||
|
|
- **验收标准**:
|
||
|
|
- [x] README 包含完整的安装和运行步骤
|
||
|
|
- [x] 架构文档包含系统设计图
|
||
|
|
- [x] Runbook 包含常见问题和解决方案
|
||
|
|
- [x] API 文档包含所有端点的示例
|
||
|
|
|
||
|
|
### 实现约束
|
||
|
|
- **技术栈**: Markdown
|
||
|
|
- **质量要求**:
|
||
|
|
- 文档清晰易懂
|
||
|
|
- 代码示例可运行
|
||
|
|
|
||
|
|
### 依赖关系
|
||
|
|
- **前置任务**: T14, T15
|
||
|
|
- **后置任务**: 无
|
||
|
|
- **并行任务**: 无
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 任务执行顺序总结
|
||
|
|
|
||
|
|
### 第一批 (可并行):
|
||
|
|
- T1: 项目初始化
|
||
|
|
|
||
|
|
### 第二批 (可并行):
|
||
|
|
- T2: 数据库层
|
||
|
|
- T3: 配置和工具
|
||
|
|
|
||
|
|
### 第三批 (可并行):
|
||
|
|
- T4: ModelManager
|
||
|
|
- T5: AsyncJobManager
|
||
|
|
|
||
|
|
### 第四批 (可并行):
|
||
|
|
- T6: KnowledgeBaseManager
|
||
|
|
- T7: ConversationManager
|
||
|
|
|
||
|
|
### 第五批:
|
||
|
|
- T8: AgentOrchestrator
|
||
|
|
|
||
|
|
### 第六批 (可并行):
|
||
|
|
- T9: Model API
|
||
|
|
- T10: KB API
|
||
|
|
- T11: Conversation API
|
||
|
|
- T12: Agent API
|
||
|
|
|
||
|
|
### 第七批:
|
||
|
|
- T13: FastAPI 主程序
|
||
|
|
|
||
|
|
### 第八批 (可并行):
|
||
|
|
- T14: Docker 配置
|
||
|
|
- T15: 测试框架
|
||
|
|
|
||
|
|
### 第九批:
|
||
|
|
- T16: 项目文档
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 总体复杂度评估
|
||
|
|
|
||
|
|
| 任务 | 复杂度 | 预估时间 | 风险等级 |
|
||
|
|
|------|--------|----------|----------|
|
||
|
|
| T1 | 低 | 30分钟 | 低 |
|
||
|
|
| T2 | 中 | 1小时 | 低 |
|
||
|
|
| T3 | 中 | 1小时 | 低 |
|
||
|
|
| T4 | 中 | 1.5小时 | 中 |
|
||
|
|
| T5 | 低 | 45分钟 | 低 |
|
||
|
|
| T6 | 高 | 2小时 | 中 |
|
||
|
|
| T7 | 中 | 1.5小时 | 中 |
|
||
|
|
| T8 | 高 | 2小时 | 中 |
|
||
|
|
| T9 | 低 | 45分钟 | 低 |
|
||
|
|
| T10 | 中 | 1小时 | 低 |
|
||
|
|
| T11 | 低 | 45分钟 | 低 |
|
||
|
|
| T12 | 低 | 45分钟 | 低 |
|
||
|
|
| T13 | 低 | 30分钟 | 低 |
|
||
|
|
| T14 | 中 | 1小时 | 低 |
|
||
|
|
| T15 | 中 | 1.5小时 | 中 |
|
||
|
|
| T16 | 低 | 1小时 | 低 |
|
||
|
|
|
||
|
|
**总计**: 约 17 小时
|