Explorar o código

文档:补充 V1 编排、角色预设和兼容使用指南

说明 legacy_auto 与 explicit_validation 的启用方式、核心状态不变量、Planner/Worker/Validator 工具边界、默认存储目录和 V1 限制。同步更新框架架构、Prompt 约束和 preset 扩展规则,明确后续 V2/V3 的替换边界。
SamLee hai 4 días
pai
achega
4c407ca5f0

+ 14 - 0
agent/agent/README.md

@@ -18,6 +18,7 @@ Agent Core 是一个完整的 Agent 执行框架,提供:
 - LLM 集成(Gemini、OpenRouter、Yescode)
 - Skills(领域知识注入)
 - 子 Agent 机制
+- 可选的任务执行与独立验证闭环(V1)
 
 **独立性**:Agent Core 不依赖任何其他模块,可以独立运行。
 
@@ -41,6 +42,13 @@ agent/
 │   ├── api.py             # REST API
 │   └── websocket.py       # WebSocket API
+├── orchestration/         # Task/Attempt/Validation/Decision 显式闭环
+│   ├── models.py          # 领域模型与 Ledger
+│   ├── coordinator.py     # 唯一状态写入口
+│   ├── protocols.py       # Store/Executor/Policy/Event 端口
+│   ├── store.py           # 单进程文件适配器
+│   └── executor.py        # 本地 Worker/Validator Sub-Trace 适配器
+│
 ├── tools/                 # 外部交互工具
 │   ├── registry.py        # 工具注册表
 │   ├── schema.py          # Schema 生成器
@@ -85,6 +93,12 @@ agent/
 
 **实现位置**:`agent/trace/models.py:Message`
 
+### Task Ledger(显式任务状态)
+
+`explicit_validation` 模式的唯一事实来源。Worker 交付只产生 Attempt;Validator 报告只产生评估结论;Planner 接受当前 passed Validation 后 Task 才完成。
+
+**使用文档**:`agent/docs/orchestration-v1.md`、`agent/docs/presets.md`
+
 ---
 
 ## 快速开始

+ 10 - 0
agent/agent/docs/architecture.md

@@ -57,6 +57,13 @@ agent/
 │       ├── skill.py       # 技能加载
 │       └── subagent.py    # agent / evaluate 工具(子 Agent 创建与评估)
+├── orchestration/         # 显式任务执行与独立验证(可选)
+│   ├── models.py          # Task Ledger 领域模型
+│   ├── coordinator.py     # 状态机应用服务、唯一 Ledger 写入口
+│   ├── protocols.py       # 存储、执行器、权限、事件端口
+│   ├── store.py           # 文件系统适配器
+│   └── executor.py        # 本地 Sub-Trace 执行器
+│
 ├── skill/                 # 技能系统
 │   ├── models.py          # Skill
 │   ├── skill_loader.py    # Skill 加载器
@@ -81,6 +88,9 @@ agent/
 | **tools/** | 与外部世界交互(文件、命令、网络、浏览器) |
 | **skill/** | 技能系统(Skills)                         |
 | **llm/**   | LLM Provider 适配                          |
+| **orchestration/** | 可选的 Task→Attempt→Validation→Decision 闭环 |
+
+显式闭环的详细状态语义、角色边界和扩展点见 `orchestration-v1.md`。它不改变默认 `legacy_auto` 行为,也不依赖任何业务包。
 
 ### 三层记忆模型
 

+ 99 - 0
agent/agent/docs/orchestration-v1.md

@@ -0,0 +1,99 @@
+# V1 任务执行与独立验证
+
+V1 提供一套与具体业务无关的显式任务闭环:主 Agent 负责规划和决策,Worker 只执行,Validator 只评估。Worker 或 Validator 的 Trace 结束都不等于 Task 完成。
+
+```text
+Planner -> Task -> Worker Attempt -> Artifact Snapshot
+        -> independent Validator -> Planner Decision
+```
+
+## 两种完成策略
+
+- `legacy_auto`:默认值。保留原有 `agent`、`evaluate`、`goal` 和 Goal 父节点级联语义。
+- `explicit_validation`:启用 V1。只能配合带 `planner`、`worker`、`validator` role 的 preset 使用,且必须先装配 `TaskCoordinator`。
+
+显式模式的状态由 `TaskLedger` 决定。`GoalTree` 只用于兼容展示;二者不一致时可调用 `TaskCoordinator.reconcile_goal_tree()` 修复 Goal 投影。
+
+## 最小装配
+
+```python
+from agent import (
+    AgentRunner,
+    FileSystemTraceStore,
+    FileSystemTaskStore,
+    FileSystemArtifactStore,
+    OrchestrationConfig,
+    wire_orchestration,
+)
+
+trace_store = FileSystemTraceStore(".trace")
+runner = AgentRunner(trace_store=trace_store, llm_call=my_llm_call)
+
+coordinator = wire_orchestration(
+    runner,
+    FileSystemTaskStore(".trace"),
+    FileSystemArtifactStore(".trace"),
+    OrchestrationConfig(max_parallel_tasks=4),
+)
+```
+
+主 Agent 使用:
+
+```python
+from agent import CompletionPolicy, RunConfig
+
+config = RunConfig(
+    agent_type="planner",
+    completion_policy=CompletionPolicy.EXPLICIT_VALIDATION,
+    tool_groups=None,
+)
+
+result = await runner.run_result(
+    [{"role": "user", "content": "根据目标制定任务树并执行;每个任务必须独立验证。"}],
+    config,
+)
+```
+
+通过 `invoke_agent()` 启动本地项目时,如果项目 `RUN_CONFIG` 使用 `explicit_validation`,SDK 会用项目的 `TRACE_STORE_PATH` 自动装配文件 Store。项目可以在 `config.py` 暴露 `ORCHESTRATION_CONFIG` 覆盖并行度和 preset 名称。
+
+## Agent 工具
+
+Planner:
+
+- `task_plan`:创建顶层/子 Task、插入同级 Task、切换焦点。
+- `dispatch_tasks`:运行一个或多个互相隔离的 Worker→Validator 闭环。
+- `task_decide`:执行 accept、repair、retry、revise、split、block、unblock、cancel、supersede。
+- `validate_attempt`:仅在 Validator error、stopped、expired 后,对未变化的 Snapshot 发起新 Validator Trace。
+
+Worker 只能使用 `submit_attempt` 正式交付。Validator 只能使用 `submit_validation` 正式提交结构化报告。二者都是 terminal tool:结果会先写入 Trace,然后结束当前 Agent Loop。
+
+## 关键不变量
+
+- Planner 是唯一可以改变任务树和作出完成决策的角色。
+- Worker 看不到且不能执行 `agent`、`evaluate`、`goal` 或 Planner/Validator 工具。
+- Validator 使用独立 Trace,只能访问 preset 明确允许的只读工具。
+- Worker 未调用 `submit_attempt`,Attempt 失败,Task 进入 `needs_replan`。
+- Validator 未调用 `submit_validation`,Validation 状态为 `error`,不是业务 `failed`。
+- `passed` 只让 Task 进入 `awaiting_decision`;只有 Planner 对当前版本、当前 Attempt、当前 Snapshot 执行 `accept` 才完成。
+- `failed`、`inconclusive` 没有 override 接受入口。
+- 同一 TaskSpec 最多 repair 一次;repair 产生新 Attempt 和 Snapshot,但续用原 Worker Trace。retry、revise 使用新 Worker Trace。
+- 子 Task 全部完成后,父 Task 进入 `needs_replan`,不会自动完成。
+
+## 存储与扩展点
+
+默认目录:
+
+```text
+.trace/{root_trace_id}/orchestration/
+├── ledger.json
+├── artifacts/{snapshot_id}.json
+└── events.jsonl
+```
+
+`TaskStore`、`ArtifactStore`、`AgentExecutor`、`ToolPolicy`、`EventSink` 都是端口。V2 可增加远程执行器和公开 API,V3 可增加队列与分布式 Store,而不改变 Task 状态机和 Coordinator 决策语义。
+
+## V1 限制
+
+- 显式闭环只支持本地 Sub-Trace;远程 Agent 继续使用 `legacy_auto`。
+- 没有 Task/Attempt/Validation HTTP API。
+- 默认 Store 只保证单进程内并发安全;跨进程/分布式调度不在 V1 范围。

+ 31 - 0
agent/agent/docs/presets.md

@@ -0,0 +1,31 @@
+# Agent Preset 与角色边界
+
+`agent_type` 表示使用哪套具体 preset,`role` 表示框架安全边界。调用方不能在 `RunConfig` 里直接声明 role;Runner 始终从 preset 解析。
+
+内置 preset:
+
+| preset | role | 用途 |
+|---|---|---|
+| `default`、`delegate`、`explore`、`evaluate` | `legacy` | 兼容旧运行方式 |
+| `planner` | `planner` | 规划、派发和决策 |
+| `worker` | `worker` | 执行一个 TaskSpec 并提交 Attempt |
+| `validator` | `validator` | 只读评估固定 Snapshot |
+
+自定义显式 preset 必须声明 `role`。例如给 Validator 增加业务只读查询工具:
+
+```json
+{
+  "my_validator": {
+    "role": "validator",
+    "allowed_tools": ["read_file", "grep_content", "lookup_readonly", "submit_validation"],
+    "denied_tools": ["write_file", "edit_file", "bash_command"],
+    "max_iterations": 30,
+    "temperature": 0,
+    "skills": []
+  }
+}
+```
+
+有效工具集合按以下顺序计算:RunConfig 候选工具,与 preset 白名单取交集,再减去 preset、RunConfig 和 role 的禁用项。Schema 生成和真实执行前都会执行相同授权检查,因此模型伪造未授权 Tool Call 也不会进入工具函数。
+
+`legacy_auto` 继续使用原来的 tools/tool_groups 并集算法,但 V1 orchestration 工具不会出现在 legacy Schema 中。

+ 4 - 0
agent/agent/docs/prompt-guidelines.md

@@ -8,6 +8,10 @@ Prompt 是写给 LLM 的行为指令,不是写给人看的系统文档。判
 
 ## 一、角色定位
 
+### 框架角色契约不可由业务 Prompt 覆盖
+
+`explicit_validation` 模式会在 Host Prompt、skills 和 memory 之后强制追加 Planner、Worker 或 Validator 契约。业务 Prompt 只描述领域目标和判断标准,不要重复定义谁能规划、谁能完成 Task,也不要要求 Worker 创建子 Agent 或 Validator 修改成果;这些是 Runner 的安全边界。
+
 ### 描述能力,不要给标签
 
 LLM 不需要知道自己"叫什么",需要知道**怎么行动**。好的角色定位激活训练数据中的行为模式。