docs: confirm open questions and update design [AC-AISVC-01]
This commit is contained in:
parent
1b73706574
commit
cc70ffeca6
|
|
@ -111,6 +111,7 @@ inputs:
|
||||||
|
|
||||||
2) **Embedding**
|
2) **Embedding**
|
||||||
- 由 `EmbeddingProvider` 生成向量(可复用 LLM 适配层或独立适配层)。
|
- 由 `EmbeddingProvider` 生成向量(可复用 LLM 适配层或独立适配层)。
|
||||||
|
- ✅ 已确认:Token 计数统一使用 `tiktoken` 进行精确计算(用于 history 截断与证据预算)。
|
||||||
|
|
||||||
3) **向量检索**(Qdrant)
|
3) **向量检索**(Qdrant)
|
||||||
- 按租户隔离选择 collection(见 5.1)。
|
- 按租户隔离选择 collection(见 5.1)。
|
||||||
|
|
@ -163,6 +164,7 @@ MVP 提供 `VectorRetriever(Qdrant)`。
|
||||||
- 以 `T_low` 为阈值(可配置),检索不足场景通常产生较低 `confidence`。
|
- 以 `T_low` 为阈值(可配置),检索不足场景通常产生较低 `confidence`。
|
||||||
3) 转人工建议:
|
3) 转人工建议:
|
||||||
- `confidence < T_low` 时 `shouldTransfer=true`,可附 `transferReason`。
|
- `confidence < T_low` 时 `shouldTransfer=true`,可附 `transferReason`。
|
||||||
|
- ✅ 已确认:MVP 阶段 `confidence` 优先基于 RAG 检索分数(Score)计算(并结合检索不中兜底下调)。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -181,6 +183,7 @@ MVP 提供 `VectorRetriever(Qdrant)`。
|
||||||
|
|
||||||
#### 5.1.3 租户生命周期
|
#### 5.1.3 租户生命周期
|
||||||
- tenant 创建:初始化 collection(含向量维度与 index 参数)。
|
- tenant 创建:初始化 collection(含向量维度与 index 参数)。
|
||||||
|
- ✅ 已确认:采用**提前预置**模式,不通过业务请求动态创建 collection。
|
||||||
- tenant 删除:删除 collection。
|
- tenant 删除:删除 collection。
|
||||||
- tenant 扩容:独立配置 HNSW 参数或分片(依赖 Qdrant 部署模式)。
|
- tenant 扩容:独立配置 HNSW 参数或分片(依赖 Qdrant 部署模式)。
|
||||||
|
|
||||||
|
|
@ -252,6 +255,9 @@ MVP 提供 `VectorRetriever(Qdrant)`。
|
||||||
- 客户端断开:
|
- 客户端断开:
|
||||||
- 立即停止 LLM 流(如果适配层支持 cancel),并避免继续写入 response。
|
- 立即停止 LLM 流(如果适配层支持 cancel),并避免继续写入 response。
|
||||||
|
|
||||||
|
- ✅ 已确认:必须实现 SSE 心跳(Keep-alive),以注释行形式定期发送 `: ping`(不改变事件模型),防止网关/中间件断开连接。
|
||||||
|
- ✅ 已确认:Python 内部设置 **20s 硬超时**(包含 LLM 调用与检索/存储等关键步骤的总体超时控制),防止资源泄露与请求堆积。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 7. 上下文合并规则(Java history + 本地持久化 history)
|
## 7. 上下文合并规则(Java history + 本地持久化 history)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
---
|
||||||
|
feature_id: "AISVC"
|
||||||
|
title: "Python AI 中台(ai-service)任务清单"
|
||||||
|
status: "pending"
|
||||||
|
version: "0.1.0"
|
||||||
|
last_updated: "2026-02-24"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Python AI 中台任务清单(AISVC)
|
||||||
|
|
||||||
|
## 1. 任务拆分原则
|
||||||
|
- **原子性**:每个任务仅解决一个具体技术点或功能逻辑。
|
||||||
|
- **可验证性**:任务完成后必须可通过单元测试、接口冒烟或契约校验。
|
||||||
|
- **弱模型可执行**:任务描述清晰,不依赖 AI 猜测业务逻辑。
|
||||||
|
|
||||||
|
## 2. 任务执行计划
|
||||||
|
|
||||||
|
### Phase 1: 基础设施(FastAPI 框架与多租户基础)
|
||||||
|
- [ ] T1.1 初始化 FastAPI 项目骨架,配置基础环境与日志(包含 X-Tenant-Id 记录) `[AC-AISVC-01]`
|
||||||
|
- [ ] T1.2 实现 `X-Tenant-Id` Header 拦截器,校验必填性并注入 Request State `[AC-AISVC-10, AC-AISVC-12]`
|
||||||
|
- [ ] T1.3 定义基础响应模型 `ErrorResponse` 与异常处理器(Exception Handler) `[AC-AISVC-03, AC-AISVC-04]`
|
||||||
|
- [ ] T1.4 初始化 PostgreSQL 数据库客户端(SQLModel/SQLAlchemy),支持租户隔离查询逻辑 `[AC-AISVC-11]`
|
||||||
|
- [ ] T1.5 初始化 Qdrant 客户端,封装按租户动态选择 Collection 的工具函数 `[AC-AISVC-10]`
|
||||||
|
- [ ] T1.6 实现 `/ai/health` 健康检查接口 `[AC-AISVC-20]`
|
||||||
|
|
||||||
|
### Phase 2: 存储与检索实现(Memory & Retrieval)
|
||||||
|
- [ ] T2.1 实现 Memory 层:定义 `chat_sessions` 与 `chat_messages` SQLModel 实体 `[AC-AISVC-13]`
|
||||||
|
- [ ] T2.2 实现 Memory 层:完成基于 `(tenant_id, session_id)` 的历史消息加载与追加 API `[AC-AISVC-13]`
|
||||||
|
- [ ] T2.3 实现 Retrieval 层:定义 `BaseRetriever` 抽象基类(插件点预留) `[AC-AISVC-16]`
|
||||||
|
- [ ] T2.4 实现 `VectorRetriever`:集成 `qdrant-client` 完成向量检索,支持 scoreThreshold 过滤 `[AC-AISVC-16, AC-AISVC-17]`
|
||||||
|
- [ ] T2.5 编写 Memory 与 Retrieval 层的独立单元测试(Mock 数据库与向量库) `[AC-AISVC-10, AC-AISVC-11]`
|
||||||
|
|
||||||
|
### Phase 3: 核心编排(Orchestrator & LLM Adapter)
|
||||||
|
- [ ] T3.1 实现 LLM Adapter:封装 `langchain-openai` 或官方 SDK,支持 `generate` 与 `stream_generate` `[AC-AISVC-02, AC-AISVC-06]`
|
||||||
|
- [ ] 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]`
|
||||||
|
|
||||||
|
### 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]`
|
||||||
|
|
||||||
|
### Phase 5: 集成与冒烟测试(Quality Assurance)
|
||||||
|
- [ ] T5.1 编写集成测试:模拟多租户并发请求,验证数据存储与检索的严格物理/逻辑隔离 `[AC-AISVC-10, AC-AISVC-11]`
|
||||||
|
- [ ] T5.2 编写 RAG 冒烟测试:模拟“检索命中”与“检索未命中”两种场景,验证 confidence 变化与回复兜底 `[AC-AISVC-17, AC-AISVC-18]`
|
||||||
|
- [ ] T5.3 契约测试:使用外部工具(如 Schemathesis 或 Newman)验证 provider 契约一致性(L2 级自检) `[AC-AISVC-01, AC-AISVC-02]`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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)
|
||||||
Loading…
Reference in New Issue