ai-robot-core/docs/progress/ai-service-progress.md

134 lines
4.2 KiB
Markdown
Raw Normal View History

# ai-service - Progress
---
## 📋 Context
- module: `ai-service`
- feature: `AISVC` (Python AI 中台)
- status: 🔄 进行中
---
## 🔗 Spec References (SSOT)
- agents: `agents.md`
- contracting: `spec/contracting.md`
- requirements: `spec/ai-service/requirements.md`
- openapi_provider: `spec/ai-service/openapi.provider.yaml`
- design: `spec/ai-service/design.md`
- tasks: `spec/ai-service/tasks.md`
---
## 📊 Overall Progress (Phases)
- [x] Phase 1: 基础设施FastAPI 框架与多租户基础) (100%) ✅
- [x] Phase 2: 存储与检索实现Memory & Retrieval (100%) ✅
- [ ] Phase 3: 核心编排Orchestrator & LLM Adapter (40%) 🔄
- [ ] Phase 4: 流式响应SSE 实现与状态机) (0%) ⏳
- [ ] Phase 5: 集成与冒烟测试Quality Assurance (0%) ⏳
---
## 🔄 Current Phase
### Goal
实现核心编排层,包括 LLM Adapter 和 Orchestrator 的完整功能。
### Sub Tasks
#### 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]`
- [ ] T3.3 实现 Orchestrator实现 RAG 检索不足时的置信度下调与 `shouldTransfer` 逻辑 `[AC-AISVC-17, AC-AISVC-18, AC-AISVC-19]`
- [ ] T3.4 实现 Orchestrator整合 Memory、Retrieval 与 LLM 完成 non-streaming 生成闭环 `[AC-AISVC-01, AC-AISVC-02]`
- [ ] T3.5 验证 non-streaming 响应字段完全符合 `openapi.provider.yaml` 契约 `[AC-AISVC-02]`
### Next Action (Must be Specific)
**Immediate**: 执行 T3.3 - 实现 RAG 检索不足时的置信度下调与 `shouldTransfer` 逻辑。
**Details**:
1. 定义"检索不足"的判定条件:
- `hits.size < minHits`
- `max(score) < scoreThreshold`
- evidence token 超限
2. 实现置信度计算策略:
- 基于检索分数计算 confidence
- 检索不足时下调 confidence
3. 实现 `shouldTransfer` 逻辑:
-`confidence < T_low``shouldTransfer=true`
- 添加 `transferReason` 说明
4. reference:
- `spec/ai-service/design.md` Section 4.3 - 检索不中兜底与置信度策略
- `spec/ai-service/requirements.md` AC-AISVC-17, AC-AISVC-18, AC-AISVC-19
---
## 🏗️ Technical Context
### Module Structure
- `ai-service/`
- `app/`
- `api/` - FastAPI 路由层
- `core/` - 配置、异常、中间件、SSE
- `models/` - Pydantic 模型和 SQLModel 实体
- `services/`
- `llm/` - LLM Adapter 实现 ✅
- `base.py` - LLMClient 抽象接口
- `openai_client.py` - OpenAI 兼容客户端
- `memory.py` - Memory 服务
- `orchestrator.py` - 编排服务
- `retrieval/` - 检索层
- `tests/` - 单元测试
### Key Decisions (Why / Impact)
- decision: LLM Adapter 使用 httpx 而非 langchain-openai
reason: 更轻量、更可控、减少依赖
impact: 需要手动处理 OpenAI API 响应解析
- decision: 使用 tenacity 实现重试逻辑
reason: 简单可靠的重试机制
impact: 提高服务稳定性
### Code Snippets
```python
# [AC-AISVC-02] LLM Response generation
response = await llm_client.generate(messages, config=LLMConfig(...))
# [AC-AISVC-06] Streaming generation
async for chunk in llm_client.stream_generate(messages):
yield create_message_event(delta=chunk.delta)
```
---
## 🧾 Session History
### Session #1 (2026-02-24)
- completed:
- T3.1 实现 LLM Adapter
- 创建 LLMClient 抽象接口 (base.py)
- 实现 OpenAIClient (openai_client.py)
- 编写单元测试 (test_llm_adapter.py)
- 修复 entities.py JSON 类型问题
- 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 列类型
---
## 🚀 Startup Guide
1. 读取本进度文档,定位当前 Phase 与 Next Action。
2. 打开并阅读 Spec References 指向的模块规范。
3. 直接执行 Next Action遇到缺口先更新 spec 再编码。