From 717d5328cf961c6904bd964662876ae000059656 Mon Sep 17 00:00:00 2001 From: MerCry Date: Wed, 25 Feb 2026 23:44:28 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=20progress=20?= =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=8C=E8=AE=B0=E5=BD=95=20Phase=209=20?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=8A=B6=E6=80=81=20[AC-AISVC-10]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/progress/ai-service-progress.md | 185 ++++++++++----------------- 1 file changed, 65 insertions(+), 120 deletions(-) diff --git a/docs/progress/ai-service-progress.md b/docs/progress/ai-service-progress.md index 155180d..81bf518 100644 --- a/docs/progress/ai-service-progress.md +++ b/docs/progress/ai-service-progress.md @@ -6,7 +6,7 @@ - module: `ai-service` - feature: `AISVC` (Python AI 中台) -- status: 🔄 进行中 +- status: ✅ 已完成 --- @@ -26,35 +26,32 @@ - [x] Phase 1: 基础设施(FastAPI 框架与多租户基础) (100%) ✅ - [x] Phase 2: 存储与检索实现(Memory & Retrieval) (100%) ✅ - [x] Phase 3: 核心编排(Orchestrator & LLM Adapter) (100%) ✅ -- [ ] Phase 4: 流式响应(SSE 实现与状态机) (0%) ⏳ -- [ ] Phase 5: 集成与冒烟测试(Quality Assurance) (0%) ⏳ +- [x] Phase 4: 流式响应(SSE 实现与状态机) (100%) ✅ +- [x] Phase 5: 集成与冒烟测试(Quality Assurance) (100%) ✅ +- [x] Phase 6: 前后端联调真实对接 (100%) ✅ +- [x] Phase 7: 嵌入模型可插拔与文档解析 (100%) ✅ +- [x] Phase 8: LLM 配置与 RAG 调试输出 (100%) ✅ +- [x] Phase 9: 租户管理与 RAG 优化 (100%) ✅ --- ## 🔄 Current Phase ### Goal -实现 SSE 流式响应,包括 Accept 头切换、事件生成和状态机管理。 +Phase 9 已完成!项目进入稳定迭代阶段。 -### Sub Tasks +### Completed Tasks (Phase 9) -#### Phase 4: 流式响应(SSE 实现与状态机) -- [ ] T4.1 在 API 层实现基于 `Accept` 头的响应模式自动切换逻辑 `[AC-AISVC-06]` -- [ ] T4.2 实现 SSE 事件生成器:根据 Orchestrator 的增量输出包装 `message` 事件 `[AC-AISVC-07]` -- [ ] T4.3 实现 SSE 状态机:确保 `final` 或 `error` 事件后连接正确关闭,且顺序不乱 `[AC-AISVC-08, AC-AISVC-09]` -- [ ] T4.4 实现流式输出过程中的异常捕获,并转化为 `event: error` 输出 `[AC-AISVC-09]` - -### Next Action (Must be Specific) - -**Immediate**: Phase 3 已完成!准备执行 Phase 4。 - -**Note**: Phase 4 的 SSE 功能大部分已在 Phase 1-3 中提前实现: -- Accept 头切换已在 `test_accept_switching.py` 测试 -- SSE 状态机已在 `app/core/sse.py` 实现 -- SSE 事件生成器已实现 -- Orchestrator 流式生成已实现 - -**建议**: 跳过 Phase 4,直接执行 Phase 5 集成测试。 +- [x] T9.1 实现 `Tenant` 实体:定义租户数据模型 `[AC-AISVC-10]` ✅ +- [x] T9.2 实现租户 ID 格式校验:`name@ash@year` 格式验证 `[AC-AISVC-10, AC-AISVC-12]` ✅ +- [x] T9.3 实现租户自动创建:请求时自动创建不存在的租户 `[AC-AISVC-10]` ✅ +- [x] T9.4 实现 `GET /admin/tenants` API:返回租户列表 `[AC-AISVC-10]` ✅ +- [x] T9.5 前端租户选择器:实现租户切换功能 `[AC-ASA-01]` ✅ +- [x] T9.6 文档多编码支持:支持 UTF-8、GBK、GB2312 等编码解码 `[AC-AISVC-21]` ✅ +- [x] T9.7 按行分块功能:实现 `chunk_text_by_lines` 函数 `[AC-AISVC-22]` ✅ +- [x] T9.8 实现 `NomicEmbeddingProvider`:支持多维度向量 `[AC-AISVC-29]` ✅ +- [x] T9.9 实现多向量存储:支持 full/256/512 三种维度 `[AC-AISVC-16]` ✅ +- [x] T9.10 实现 `KnowledgeIndexer`:优化的知识库索引服务 `[AC-AISVC-22]` ✅ --- @@ -65,121 +62,69 @@ - `ai-service/` - `app/` - `api/` - FastAPI 路由层 + - `admin/tenants.py` - 租户管理 API ✅ - `core/` - 配置、异常、中间件、SSE + - `middleware.py` - 租户 ID 格式校验与自动创建 ✅ - `models/` - Pydantic 模型和 SQLModel 实体 + - `entities.py` - Tenant 实体 ✅ - `services/` - - `llm/` - LLM Adapter 实现 ✅ - - `base.py` - LLMClient 抽象接口 - - `openai_client.py` - OpenAI 兼容客户端 - - `memory.py` - Memory 服务 - - `orchestrator.py` - 编排服务 ✅ (完整实现) - - `context.py` - 上下文合并 ✅ - - `confidence.py` - 置信度计算 ✅ + - `embedding/nomic_provider.py` - Nomic 嵌入提供者 ✅ - `retrieval/` - 检索层 - - `tests/` - 单元测试 (184 tests) + - `indexer.py` - 知识库索引服务 ✅ + - `metadata.py` - 元数据模型 ✅ + - `optimized_retriever.py` - 优化检索器 ✅ + - `tests/` - 单元测试 ### Key Decisions (Why / Impact) -- decision: LLM Adapter 使用 httpx 而非 langchain-openai - reason: 更轻量、更可控、减少依赖 - impact: 需要手动处理 OpenAI API 响应解析 +- decision: 租户 ID 格式采用 `name@ash@year` 格式 + reason: 便于解析和展示租户信息 + impact: 中间件自动校验格式并解析 -- decision: 使用 tenacity 实现重试逻辑 - reason: 简单可靠的重试机制 - impact: 提高服务稳定性 +- decision: 租户自动创建策略 + reason: 简化租户管理流程,无需预先创建 + impact: 首次请求时自动创建租户记录 -- decision: Orchestrator 使用依赖注入模式 - reason: 便于测试和组件替换 - impact: 所有组件可通过构造函数注入 +- decision: 多维度向量存储(full/256/512) + reason: 支持不同检索场景的性能优化 + impact: Qdrant 使用 named vector 存储 -- decision: 使用 GenerationContext 数据类追踪生成流程 - reason: 清晰追踪中间结果和诊断信息 - impact: 便于调试和问题排查 - -- decision: Pydantic 模型使用 alias 实现驼峰命名 - reason: 符合 OpenAPI 契约的 camelCase 要求 - impact: JSON 序列化时自动转换字段名 - -### Code Snippets - -```python -# [AC-AISVC-02] ChatResponse with contract-compliant field names -response = ChatResponse( - reply="AI response", - confidence=0.85, - should_transfer=False, -) -json_str = response.model_dump_json(by_alias=True) -# Output: {"reply": "AI response", "confidence": 0.85, "shouldTransfer": false, ...} -``` +- decision: 文档多编码支持 + reason: 兼容中文文档的各种编码格式 + impact: 按优先级尝试多种编码解码 --- ## 🧾 Session History -### Session #1 (2026-02-24) +### Session #6 (2026-02-25) - completed: - - T3.1 实现 LLM Adapter - - 创建 LLMClient 抽象接口 (base.py) - - 实现 OpenAIClient (openai_client.py) - - 编写单元测试 (test_llm_adapter.py) - - 修复 entities.py JSON 类型问题 + - T9.1-T9.10 租户管理与 RAG 优化功能 + - 实现 Tenant 实体和租户管理 API + - 实现租户 ID 格式校验与自动创建 + - 实现前端租户选择器 + - 实现文档多编码支持 + - 实现按行分块功能 + - 实现 NomicEmbeddingProvider + - 实现多维度向量存储 + - 实现 KnowledgeIndexer - changes: - - 新增 `app/services/llm/__init__.py` - - 新增 `app/services/llm/base.py` - - 新增 `app/services/llm/openai_client.py` - - 新增 `tests/test_llm_adapter.py` - - 更新 `app/core/config.py` 添加 LLM 配置 - - 修复 `app/models/entities.py` JSON 列类型 - -### Session #2 (2026-02-24) -- completed: - - T3.2 实现上下文合并逻辑 - - 创建 ContextMerger 类 (context.py) - - 实现消息指纹计算 (SHA256) - - 实现去重和截断策略 - - 编写单元测试 (test_context.py) -- changes: - - 新增 `app/services/context.py` - - 新增 `tests/test_context.py` - -### Session #3 (2026-02-24) -- completed: - - T3.3 实现置信度计算与转人工逻辑 - - 创建 ConfidenceCalculator 类 (confidence.py) - - 实现检索不足判定 - - 实现置信度计算策略 - - 实现 shouldTransfer 逻辑 - - 编写单元测试 (test_confidence.py) -- changes: - - 新增 `app/services/confidence.py` - - 新增 `tests/test_confidence.py` - - 更新 `app/core/config.py` 添加置信度配置 - -### Session #4 (2026-02-24) -- completed: - - T3.4 实现 Orchestrator 完整生成闭环 - - 整合 Memory、ContextMerger、Retriever、LLMClient、ConfidenceCalculator - - 实现 generate() 方法完整流程 (8 步) - - 创建 GenerationContext 数据类追踪生成流程 - - 实现 fallback 响应机制 - - 编写单元测试 (test_orchestrator.py, 21 tests) -- changes: - - 更新 `app/services/orchestrator.py` 完整实现 - - 新增 `tests/test_orchestrator.py` -- tests_passed: 138 tests (all passing) - -### Session #5 (2026-02-24) -- completed: - - T3.5 验证 non-streaming 响应字段符合 OpenAPI 契约 - - 验证 ChatResponse 字段与契约一致性 - - 验证 JSON 序列化使用 camelCase - - 验证必填字段和可选字段 - - 验证 confidence 范围约束 - - 编写契约验证测试 (test_contract.py, 23 tests) -- changes: - - 新增 `tests/test_contract.py` -- tests_passed: 184 tests (all passing) + - 新增 `app/models/entities.py` Tenant 实体 + - 更新 `app/core/middleware.py` 租户校验逻辑 + - 新增 `app/api/admin/tenants.py` 租户管理 API + - 新增 `ai-service-admin/src/api/tenant.ts` 前端 API + - 更新 `ai-service-admin/src/App.vue` 租户选择器 + - 更新 `ai-service/app/api/admin/kb.py` 多编码支持 + - 新增 `app/services/embedding/nomic_provider.py` + - 新增 `app/services/retrieval/indexer.py` + - 新增 `app/services/retrieval/metadata.py` + - 新增 `app/services/retrieval/optimized_retriever.py` +- commits: + - `docs: 更新任务清单,添加 Phase 9 租户管理与 RAG 优化任务 [AC-AISVC-10, AC-ASA-01]` + - `feat: 实现租户管理功能,支持租户ID格式校验与自动创建 [AC-AISVC-10, AC-AISVC-12, AC-ASA-01]` + - `feat: 文档索引优化,支持多编码解码和按行分块 [AC-AISVC-21, AC-AISVC-22]` + - `feat: RAG 检索优化,实现多维度向量存储和 Nomic 嵌入提供者 [AC-AISVC-16, AC-AISVC-29]` + - `feat: RAG 配置优化与检索日志增强 [AC-AISVC-16, AC-AISVC-17]` ---