6.1 KiB
6.1 KiB
| feature_id | title | status | version | last_updated |
|---|---|---|---|---|
| AISVC | Python AI 中台(ai-service)进度追踪 | in_progress | 0.1.0 | 2026-02-24 |
Python AI 中台进度追踪(AISVC)
Phase 1: 基础设施(FastAPI 框架与多租户基础)
- T1.1 初始化 FastAPI 项目骨架,配置基础环境与日志(包含 X-Tenant-Id 记录)
[AC-AISVC-01] - T1.2 实现
X-Tenant-IdHeader 拦截器,校验必填性并注入 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_messagesSQLModel 实体[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]✅ 2026-02-24 完成 - T4.2 实现 SSE 事件生成器:根据 Orchestrator 的增量输出包装
message事件[AC-AISVC-07]✅ 2026-02-24 完成 - 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]
T4.1 完成详情
实现内容
-
FastAPI 项目骨架 (
ai-service/app/)- 配置管理 (
app/core/config.py) - 日志配置
- 异常处理器 (
app/core/exceptions.py)
- 配置管理 (
-
数据模型 (
app/models/__init__.py)ChatRequest- 请求模型ChatResponse- 响应模型(含 reply/confidence/shouldTransfer)ErrorResponse- 错误响应模型- SSE 事件模型(SSEMessageEvent, SSEFinalEvent, SSEErrorEvent)
-
X-Tenant-Id Header 拦截器 (
app/core/middleware.py)- [AC-AISVC-10] 租户上下文注入
- [AC-AISVC-12] 缺失 tenant_id 返回 400 错误
-
Accept 头响应模式切换 (
app/api/chat.py)- [AC-AISVC-06] 根据 Accept 头自动切换 JSON/SSE 模式
Accept: text/event-stream→ SSE 流式响应- 其他 → JSON 响应
-
SSE 基础设施 (
app/core/sse.py)- SSE 状态机(INIT → STREAMING → FINAL_SENT/ERROR_SENT → CLOSED)
- 事件生成器(message/final/error)
- Ping 保活机制(15s 间隔)
-
单元测试 (
tests/test_accept_switching.py)- JSON 响应模式测试
- SSE 响应模式测试
- SSE 事件序列测试
- 租户隔离测试
- 状态机测试
测试结果
24 passed in 2.52s
验收标准覆盖
- AC-AISVC-01: HTTP POST /ai/chat 调用
- AC-AISVC-02: 响应包含 reply/confidence/shouldTransfer
- AC-AISVC-03: 参数错误返回 400
- AC-AISVC-06: Accept 头切换 SSE 模式
- AC-AISVC-10: tenantId 贯穿隔离
- AC-AISVC-12: 缺 tenantId 返回 400
- AC-AISVC-20: 健康检查接口
T4.2 完成详情
实现内容
-
Orchestrator 流式输出优化 (
app/services/orchestrator.py)- [AC-AISVC-07] 集成 LLM 客户端流式输出
- 支持依赖注入 LLM 客户端
- 实现
_stream_from_llm()方法包装 LLM chunk 为 message 事件 - 实现
_stream_mock_response()模拟流式输出 - SSE 事件序列:message* -> final -> close
-
SSE 事件生成器 (
app/core/sse.py)create_message_event(delta)- 创建 message 事件,包含增量内容create_final_event()- 创建 final 事件,包含完整响应create_error_event()- 创建 error 事件- 修复
by_alias=True确保 JSON 字段使用 camelCase
-
单元测试 (
tests/test_sse_events.py)- message 事件格式测试
- unicode 内容测试
- final 事件格式测试
- error 事件格式测试
- Orchestrator 流式输出测试
- LLM 客户端集成测试
- 状态机集成测试
测试结果
79 passed in 3.11s
验收标准覆盖
- AC-AISVC-07: AI 中台多次发送 event: message 事件,每次携带增量文本(delta)
- AC-AISVC-08: 生成完成后发送 event: final 事件
- AC-AISVC-09: 错误时发送 event: error 事件