auto-sync: 2026-05-14 09:18:17

This commit is contained in:
cfdaily
2026-05-14 09:18:17 +08:00
parent a75173b850
commit db4a371ef0
+345 -1
View File
@@ -1325,16 +1325,360 @@ sub-agent 完成后,archiver 自动把 transcript 归档到任务目录。
| 庞统对话 | 庞统主 session (webchat) | 用户通过 Control Center 对话 |
| 庞统查进展 | curl GET daemon API | 实时查询 SQLiteAI 生成汇报 |
| 庞统操作任务 | curl POST daemon API | 创建/规划/启动/暂停/恢复任务 |
| Agent 调度 | Gateway WS API → Agent 主 session | 发消息到 agent:xxx:main,不创建 sub-agent |
| Agent 调度 | Gateway WS API → Agent 主 session | 简单步骤发到主 session |
| Agent 调度(复杂) | sessions_spawn + cleanup=delete | 复杂步骤用 sub-agent 隔离 |
| Agent 回报 | curl POST daemon API | 完成/失败/进度上报 |
| Agent 查黑板 | curl GET daemon API | 查询任务上下文/计划/产出物 |
| Daemon 通知庞统 | Gateway WS API systemEvent | 步骤完成/异常/需要裁决时 |
| Agent 上下文管理 | Gateway reset | 定期 reset Agent 主 session 防止膨胀 |
| 知识检索 | wiki-query skill (Agent 侧) | Agent 需要时可调用 |
| 数据持久化 | SQLite (daemon) + 文件系统 (artifacts) | 状态在 SQLite,产出物在文件系统 |
| 执行历史归档 | daemon archiver | sub-agent 完成后 transcript 复制到任务目录 |
---
### 3.9 共享意识空间物理结构
> "可预测骨架 + AI 动态填充" 的物理载体。
> SQLite 存状态(查询快、事务安全),文件系统存内容(代码/数据/文档,git 可追踪)。
> 同一信息只存在一个地方,不重复。
#### 3.9.1 SQLite 表结构
```sql
-- 任务表
CREATE TABLE tasks (
id TEXT PRIMARY KEY, -- UUID
title TEXT NOT NULL,
goal TEXT NOT NULL, -- 用户原始需求
state TEXT NOT NULL DEFAULT 'exploring',
phase INTEGER NOT NULL DEFAULT 1, -- 1=探索, 2=规划, 3=执行, 4=验收
context_json TEXT, -- {goal, constraints, clarifications, confidence}
plan_json TEXT, -- {steps: [{id, title, intent, agent_hint, depends_on}]}
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
created_by TEXT DEFAULT 'user', -- user | pangtong
token_budget_used INTEGER DEFAULT 0,
token_budget_limit INTEGER DEFAULT 500000
);
-- 步骤表
CREATE TABLE steps (
id TEXT PRIMARY KEY, -- "{task_id}-s{seq}"
task_id TEXT NOT NULL REFERENCES tasks(id),
seq INTEGER NOT NULL,
title TEXT NOT NULL,
intent TEXT NOT NULL, -- 步骤目标(给 Agent 的指令)
end_state TEXT, -- Agent 应该达到的产出状态
state TEXT NOT NULL DEFAULT 'pending',
assigned_agent TEXT, -- agent-id 或 null(待分配)
execution_mode TEXT DEFAULT 'sub_agent', -- sub_agent | main_session | human
depends_on TEXT, -- JSON array of step_ids
output_json TEXT, -- {artifacts: [...], confidence, summary}
started_at TEXT,
completed_at TEXT,
retry_count INTEGER DEFAULT 0,
max_retries INTEGER DEFAULT 3
);
-- 事件流(Moments
CREATE TABLE moments (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task_id TEXT NOT NULL REFERENCES tasks(id),
step_id TEXT, -- nullable(任务级事件没有 step_id
type TEXT NOT NULL, -- 事件类型(从 events.yaml 加载)
agent TEXT, -- 触发 Agent
data_json TEXT NOT NULL, -- 事件详情
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX idx_moments_task ON moments(task_id, created_at);
-- Agent 状态(心跳)
CREATE TABLE agent_status (
agent_id TEXT PRIMARY KEY,
status TEXT NOT NULL DEFAULT 'idle', -- idle | busy | offline
current_task_id TEXT,
current_step_id TEXT,
last_heartbeat TEXT,
capabilities TEXT -- JSON array(从 agent-registry.json 加载)
);
-- AI 决策记录(可追溯)
CREATE TABLE decisions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task_id TEXT NOT NULL REFERENCES tasks(id),
step_id TEXT,
decision_type TEXT NOT NULL, -- agent_selected | plan_adjusted | anomaly_handled | escalated
reasoning TEXT NOT NULL, -- AI 的思考过程
outcome TEXT NOT NULL, -- 决策结果
model TEXT, -- 使用的模型
token_cost INTEGER,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
-- 经验库
CREATE TABLE experiences (
id INTEGER PRIMARY KEY AUTOINCREMENT,
source_task_id TEXT NOT NULL,
source_step_id TEXT,
category TEXT NOT NULL, -- pattern | pitfall | best_practice | tool_usage
title TEXT NOT NULL,
content TEXT NOT NULL, -- Markdown 格式
tags TEXT, -- JSON array
relevance_score REAL DEFAULT 0.5,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
```
#### 3.9.2 文件系统结构
```
sanguo_moziplus_v2/
└── artifacts/
└── task-{uuid}/
├── context.json # 任务上下文(冗余 SQLite 的 context_json,供 Agent 直接 read
│ # {goal, constraints, clarifications, confidence, phase_history}
├── plan.json # 执行计划(冗余 SQLite 的 plan_json,供 Agent 直接 read
│ # {steps: [{id, title, intent, end_state, assigned_agent, depends_on, state}]}
├── steps/ # 各步骤产出物
│ ├── s1/
│ │ ├── output.json # {artifacts: [{path, type, size}], confidence, summary, duration_s}
│ │ ├── transcript.jsonl # 执行历史归档(从 OpenClaw session transcript 复制)
│ │ ├── hs300_daily.csv # ← 实际产出文件(Agent 直接写到这里)
│ │ └── data_quality.json # ← 数据质量报告
│ ├── s2/
│ │ ├── output.json
│ │ ├── transcript.jsonl
│ │ ├── strategy.py # ← 策略代码
│ │ └── backtest_result.json
│ └── s3/
│ └── ...
├── moments.jsonl # 原子事件流(冗余 SQLite moments 表,追加写入)
│ # 每行: {"type":"step_completed","ts":"...","agent":"zhaoyun","data":{...}}
├── decisions.jsonl # AI 决策记录(冗余 SQLite decisions 表)
│ # 每行: {"type":"agent_selected","ts":"...","reasoning":"...","outcome":"zhangfei"}
└── experience.md # 任务完成后 AI 提取的经验(Markdown
```
**为什么 SQLite 和文件都有?**
- **SQLite**:给 daemon 内部用(查询、事务、索引、复杂条件筛选)
- **文件系统**:给 Agent 用(`read` 工具直接读,Agent 不能访问 daemon 的 SQLite
- 两者通过 daemon API 同步,SQLite 是权威源,文件是缓存/视图
---
### 3.10 Daemon API 接口定义
> RESTful + JSON,端口 8080(沿用 v1.0)。
> 所有请求/响应都记录到 moments 表。
#### 3.10.1 任务生命周期 API
```
POST /api/tasks # 创建任务
GET /api/tasks/{id} # 查询任务状态
GET /api/tasks/{id}/status # 轻量状态查询(给庞统用)
PUT /api/tasks/{id}/context # 更新任务上下文
POST /api/tasks/{id}/plan # 提交执行计划
POST /api/tasks/{id}/start # 启动执行(Phase 3
POST /api/tasks/{id}/pause # 暂停
POST /api/tasks/{id}/resume # 恢复
POST /api/tasks/{id}/cancel # 取消
POST /api/tasks/{id}/replan # 重新规划(用户改需求或异常调整)
GET /api/tasks/{id}/moments # 查询事件流
GET /api/tasks/{id}/decisions # 查询决策记录
```
**POST /api/tasks** — 创建任务
```json
// Request
{
"title": "均线策略回测",
"goal": "对沪深300做双均线交叉策略回测",
"constraints": ["5年日线数据", "滑点0.2%"],
"metadata": {} // 可选
}
// Response
{
"ok": true,
"task_id": "t-uuid-001",
"state": "exploring"
}
```
**GET /api/tasks/{id}/status** — 轻量状态查询(庞统用,返回人类可读摘要)
```json
{
"task": { "title": "均线策略回测", "state": "executing", "phase": 3 },
"plan": {
"steps": [
{ "id": "s1", "title": "数据获取", "state": "completed", "agent": "zhaoyun" },
{ "id": "s2", "title": "策略编码", "state": "executing", "agent": "zhangfei" }
],
"completed": 1, "total": 4
},
"current_step": {
"id": "s2", "agent": "zhangfei", "started_at": "...",
"progress": null // Agent 可选上报进度
},
"recent_moments": [
{ "type": "step_completed", "agent": "zhaoyun", "summary": "数据获取完成" }
],
"anomalies": [],
"token_budget": { "used": 120000, "limit": 500000 }
}
```
#### 3.10.2 步骤执行 API
```
POST /api/steps/{id}/assign # 分配 Agent
POST /api/steps/{id}/start # 标记开始执行
POST /api/steps/{id}/complete # Agent 回报完成
POST /api/steps/{id}/fail # Agent 回报失败
POST /api/steps/{id}/block # Agent 回报阻塞
POST /api/steps/{id}/progress # Agent 上报进度(可选)
POST /api/steps/{id}/escalate # Agent 请求人工介入
GET /api/steps/{id} # 查询步骤详情
GET /api/steps/{id}/output # 查询步骤产出
```
**POST /api/steps/{id}/complete** — Agent 回报完成
```json
// Request
{
"artifacts": [
{ "path": "artifacts/task-xxx/steps/s1/hs300_daily.csv", "type": "data", "size_bytes": 1048576 }
],
"confidence": 0.95,
"summary": "获取沪深300 5年日线数据,共1218条记录,含缺失值处理报告"
}
// Response
{
"ok": true,
"state": "completed",
"validation": {
"files_exist": true,
"sizes_reasonable": true,
"passed": true
}
}
```
**POST /api/steps/{id}/fail** — Agent 回报失败
```json
// Request
{
"error": "数据源返回403,权限不足",
"retry_suggested": true,
"partial_artifacts": []
}
```
#### 3.10.3 查询 & 管理API
```
GET /api/agents # 所有 Agent 状态
GET /api/agents/{id}/status # 单个 Agent 状态
POST /api/agents/{id}/heartbeat # Agent 心跳
GET /api/experiences # 经验检索(给 AI 用)
POST /api/experiences # 写入经验
GET /api/health # Daemon 健康检查
GET /api/stats # 统计信息(任务数、成功率等)
```
**GET /api/experiences** — 经验检索
```json
// Query: ?tags=data_cleaning,backtest&limit=5
{
"experiences": [
{
"id": 1,
"source_task": "t-uuid-001",
"category": "pitfall",
"title": "数据缺失值必须在策略编码前处理",
"content": "...",
"tags": ["data_cleaning", "backtest"],
"relevance_score": 0.92
}
]
}
```
#### 3.10.4 AI Native 扩展 API
```
POST /api/tasks/{id}/steer # 用户中途改方向(不改 goal)
POST /api/tasks/{id}/takeover/{step_id} # 用户接管某步骤
POST /api/tasks/{id}/intervene # 用户主动干预
POST /api/steps/{id}/review # 触发 challenge 审查
POST /api/tasks/{id}/distill # 触发经验蒸馏
```
**POST /api/tasks/{id}/steer** — 用户改方向
```json
// Request
{
"direction": "改用MACD策略",
"reason": "用户要求",
"affected_steps": ["s2"] // 哪些步骤受影响(可选,AI自动判断)
}
// Response
{
"ok": true,
"action": "replanning",
"paused_steps": ["s2"],
"message": "正在重新规划受影响的步骤..."
}
```
---
### 3.11 经验沉淀引擎
> 每次任务完成后自动触发,提取可复用的经验存入经验库。
#### 3.11.1 沉淀流程
```
任务完成
Daemon 检测到任务 state = completed
Daemon 通过 Gateway 触发 AI session 做经验蒸馏
- 输入: task context + plan + 所有 steps 的 transcript.jsonl + moments
- AI 分析:
1. 哪些决策是好的?(pattern)
2. 哪些坑踩了?(pitfall
3. 有什么可复用的做法?(best_practice
4. 工具使用技巧?(tool_usage
- 输出: 3-5 条经验
Daemon 写入 SQLite experiences 表 + 生成 experience.md
下次创建类似任务时,Daemon 自动检索相关经验注入 context
```
#### 3.11.2 经验检索时机
| 时机 | 触发者 | 检索内容 |
|------|--------|----------|
| Phase 2 规划 | Daemon | 检索与任务 goal 相关的经验,注入 plan 上下文 |
| Phase 3 Agent 选择 | Daemon | 检索与步骤类型相关的经验(如"这类任务哪个 Agent 做得好" |
| Agent 执行前 | Daemon | 注入与步骤相关的经验到 task 描述 |
| 异常处理 | Daemon/庞统 | 检索类似异常的历史处理方式 |
## 4. 已决策 & 待讨论
### 已决策