feat(orchestrator): DataGate 机制化 + 任务级持久化(T14/T16 架构审查整改)
- T14 (OV5): 新建 src/genesis/orchestrator/datagate.py
- DataGate.load(source, selector) 机制化:子集加载 + 规模保护(超 500 行
无 selector 拒绝全量,1000 行 Excel 防上下文爆炸)+ token 预算(8000,
复用 CJK 保守估算)+ 未知表容错
- agent-runtime §4.2 原则→机制说明
- T16 (OV7): 新建 src/genesis/orchestrator/task_queue.py
- TaskQueue ABC + PersistentTaskQueue(SQLite 落盘)
- enqueue/poll/update_status/get/cancel/recover/close
- 幂等去重(§5.3 缓存结果)+ recover 将 running→failed、pending 保留
- api-design §5.2/5.3、agent-runtime §3.5/3.6、design §8.4.1 同步
- 新增 test_datagate.py(8 用例)+ test_task_queue.py(11 用例)
- TDD: RED(模块缺失)→ GREEN(聚焦 16 passed)→ 全量 218 passed / 100.00%(1140 stmts/278 br)
This commit is contained in:
@@ -288,13 +288,18 @@ events 表:
|
||||
### 3.5 步骤内部任务队列
|
||||
|
||||
```
|
||||
Task Queue(抽象 `TaskQueue`:v1 仅 InMemoryQueue 实现;RedisQueue/ValkeyQueue 为 v2 预留,接口与幂等键见 api-design §5):
|
||||
Task Queue(抽象 `TaskQueue`:v1 仅 PersistentTaskQueue 实现;RedisQueue/ValkeyQueue 为 v2 预留,接口与幂等键见 api-design §5):
|
||||
task:generate-chapter-3
|
||||
status: pending | running | completed | failed
|
||||
status: pending | running | completed | failed | cancelled
|
||||
payload: {chapter_id, data_refs, rule_refs, prompt_version}
|
||||
result: {chapter_html, source_uris, tokens, time_ms}
|
||||
```
|
||||
|
||||
> **T16 任务级持久化(OV7)**:`PersistentTaskQueue`(SQLite 落盘)已实现于
|
||||
> `src/genesis/orchestrator/task_queue.py`。任务状态/payload/result 全部持久化,
|
||||
> 服务重启不丢;`recover()` 将中断的 running 任务标记 failed、pending 保留,
|
||||
> 由编排层重新消费(幂等键防止重复执行)。
|
||||
|
||||
Writer 逐章生成、Impact 批量推理等重活**进队列异步执行**,提供细粒度进度(「第3章生成中」)与单任务重试。
|
||||
|
||||
### 3.6 失败恢复与重入
|
||||
@@ -308,6 +313,7 @@ Writer 逐章生成、Impact 批量推理等重活**进队列异步执行**,
|
||||
失败的任务重新入队(retry_count 内)
|
||||
已完成的章节保留(result 持久化)
|
||||
中断后继续 → 只执行未完成章节
|
||||
实现: PersistentTaskQueue.recover()(T16,SQLite 落盘)
|
||||
```
|
||||
|
||||
### 3.7 会话并发控制
|
||||
@@ -355,6 +361,18 @@ Writer 逐章生成、Impact 批量推理等重活**进队列异步执行**,
|
||||
实现: 每章配置 data_selector(哪些表、哪些要素)
|
||||
```
|
||||
|
||||
> **T14 机制化(OV5)**:DataGate 已从原则落地为代码组件
|
||||
> `src/genesis/orchestrator/datagate.py`(`DataGate.load(source, selector)`)。
|
||||
> 机制三要素:
|
||||
> 1. **子集加载** — `DataSelector.table_ids` 指定要加载的表,不复制全量
|
||||
> 2. **规模保护** — 源总行数超过 `max_total_rows`(默认 500)且未指定 selector
|
||||
> → 抛 `DataGateError` 拒绝加载(1000 行 Excel 上下文爆炸防护)
|
||||
> 3. **token 预算** — 加载后按 CJK 保守估算 token(复用 inference/token,T9),
|
||||
> 超过 `max_total_tokens`(默认 8000)→ 拒绝
|
||||
>
|
||||
> 未知表 ID 容错:selector 引用不存在的表 → 返回空结果(不抛错)。
|
||||
> 阈值可通过编排层配置注入(对齐 `config/rag.yaml` 检索预算策略)。
|
||||
|
||||
### 4.3 跨 Agent 状态传递格式
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user