feat(config): 删死配置 + 同步文档(T5 架构审查整改)
- Issue5: 删除 QdrantStoreConfig / VectorStoreConfig.qdrant / task_queue.redis_url - OV1: 同步 6 处文档(api-design §1/§4.3/§5/§6、rag-layer §9、agent-runtime §3、 design §5.5/§8.4.1、config-design、web-ui §4.1)+ tests/fixtures/rag.yaml - TaskQueue 标注 v1 仅 InMemory,Redis/Valkey 为 v2 预留(Scope 缩减裁定) - Storage Adapter 仅 ChromaAdapter,工厂移除 qdrant 分支 - 历史评审记录保留原样不改写 - 新增 3 用例,同步 2 个 qdrant 依赖用例;全量 189 passed / 100.00%(991 stmts/252 br)
This commit is contained in:
+9
-17
@@ -29,13 +29,12 @@ FastAPI Orchestrator(单进程,默认)
|
||||
│
|
||||
├── SessionManager(会话状态机,见 agent-runtime §3)
|
||||
├── Agent 调度(Parser / Impact / Writer / QA)
|
||||
├── TaskQueue 抽象(默认 InMemory,可切 Redis/Valkey)
|
||||
├── TaskQueue 抽象(默认 InMemory;Redis/Valkey 为 v2 预留,见 §5)
|
||||
└── RagService 调用(规则检索)
|
||||
```
|
||||
|
||||
**架构决策**(与用户确认):
|
||||
- **编排形态**:抽象 `TaskQueue` 接口 + 双实现。默认 `InMemoryQueue`(开发/测试/演示零依赖);部署时可切换 `RedisQueue` / `ValkeyQueue`(Redis 协议兼容,`redis-py` 客户端通用)。
|
||||
- **许可说明**:Redis 内部使用合法(RSALv2/SSPLv1 仅限制「提供 Redis 托管服务给第三方」);若需完全开源无限制,使用 Valkey(BSD-3),代码无需改动。
|
||||
- **编排形态**:抽象 `TaskQueue` 接口 + **单一 `InMemoryQueue` 实现**(开发/测试/演示零依赖)。(T5 架构审查整改:Scope 缩减裁定移除 Redis/Valkey 双实现;接口保留供 v2 扩展。)
|
||||
- 所有 API 返回 JSON;长任务(解析/影响调查/生成)采用「异步启动 + 轮询/推送」模式。
|
||||
|
||||
---
|
||||
@@ -196,10 +195,10 @@ WS /api/ws/sessions/{id}
|
||||
Orchestrator 进程内 asyncio 任务池消费队列
|
||||
状态与任务结果共享内存(FastAPI 进程内)
|
||||
|
||||
切换(RedisQueue/ValkeyQueue):
|
||||
(v2 预留)RedisQueue/ValkeyQueue:
|
||||
Orchestrator 投递 → Redis/Valkey Stream
|
||||
worker 进程消费 → 执行 → 状态写回 SQLite / 事件回传
|
||||
需额外部署 worker 容器(见 §6)
|
||||
需额外部署 worker 容器(见 §6)—— v1 不实现(Scope 缩减裁定)
|
||||
```
|
||||
|
||||
---
|
||||
@@ -210,7 +209,7 @@ WS /api/ws/sessions/{id}
|
||||
|
||||
```python
|
||||
class TaskQueue(ABC):
|
||||
"""统一任务队列抽象(内存 / Redis / Valkey 实现)"""
|
||||
"""统一任务队列抽象(v1 仅 InMemory 实现;Redis/Valkey 为 v2 预留,Scope 缩减裁定)"""
|
||||
|
||||
@abstractmethod
|
||||
def enqueue(self, task: TaskSpec) -> TaskHandle: ...
|
||||
@@ -238,14 +237,13 @@ class TaskQueue(ABC):
|
||||
| 实现 | 依赖 | 使用场景 | 说明 |
|
||||
|------|------|---------|------|
|
||||
| `InMemoryQueue` | 无 | 开发 / 测试 / 演示(默认)| asyncio 任务池,进程内状态 |
|
||||
| `RedisQueue` | redis-py | 生产部署 | Redis Streams(RSALv2,内部使用合法)|
|
||||
| `ValkeyQueue` | redis-py(兼容)| 生产部署(零许可风险)| Valkey 兼容 Redis 协议,代码同 RedisQueue |
|
||||
| `RedisQueue` / `ValkeyQueue` | redis-py | **v2 预留**(不实现)| Scope 缩减裁定移除双实现;接口保留供 v2 扩展 |
|
||||
|
||||
### 5.3 幂等去重
|
||||
|
||||
- 任务幂等键:`(session_id, step, chapter_id)`(runtime §7.3)
|
||||
- 重复 enqueue 同一幂等键 → 已完成直接返回缓存结果;进行中则返回原 handle
|
||||
- `InMemoryQueue` 与 `RedisQueue` 行为一致(单测以 MockAdapter 风格覆盖双实现)
|
||||
- v1 仅 `InMemoryQueue` 实现(单测覆盖)
|
||||
|
||||
---
|
||||
|
||||
@@ -266,7 +264,7 @@ docker-compose.yml(最小):
|
||||
command: uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||||
```
|
||||
|
||||
### 6.2 生产(Redis/Valkey 可选)
|
||||
### 6.2 生产(v1 单容器;Redis/Valkey worker 为 v2 预留)
|
||||
|
||||
```
|
||||
docker-compose.yml(扩展):
|
||||
@@ -274,13 +272,7 @@ docker-compose.yml(扩展):
|
||||
api: # FastAPI 编排 + REST/WS
|
||||
...
|
||||
command: uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||||
worker: # 任务消费(仅切换队列时启用)
|
||||
build: .
|
||||
command: python -m app.worker
|
||||
depends_on: [queue]
|
||||
queue: # Redis 或 Valkey 二选一
|
||||
image: valkey/valkey:8 # 零许可风险(或 redis:7,内部使用合法)
|
||||
volumes: ["queue_data:/data"]
|
||||
# worker / queue: v2 预留(Scope 缩减裁定移除 Redis/Valkey 双实现,v1 不启用)
|
||||
```
|
||||
|
||||
### 6.3 目录结构
|
||||
|
||||
Reference in New Issue
Block a user