# MCP vs AIOBR — 边界说清

> 一句话：MCP 是**动作层**协议（怎么调用工具、拿到结果）；AIOBR 是**经验/记忆演化层**协议（智能体的记忆怎么随时间变化、衰减、沉淀成技能）。两者**正交**，AIOBR 可以把一次 MCP 工具调用记录成一条 `Transition`。

---

## 1 分钟说清

| | MCP (Model Context Protocol) | AIOBR Protocol |
|---|---|---|
| **它解决什么** | 让 LLM 应用**连上**工具/数据/系统 | 让智能体的**经验随时间演化** |
| **所在层** | 动作 / 接口层（action layer） | 知识 / 经验层（knowledge layer） |
| **核心问题** | “怎么调用一个工具并拿到结构化结果？” | “这次决策之后，我学到了什么？记忆还可靠吗？” |
| **时间维度** | 无（每次调用是独立的 request/response） | 有（`worldVersion` 单调递增，替代时间戳） |
| **状态** | 调用级、通常无跨会话记忆 | 跨会话、带版本与衰减 |
| **数据形态** | Tools / Resources / Prompts（JSON-RPC 原语） | `aku:State` → `aku:Transition` → `aku:Trajectory`（JSON-LD） |
| **是否定义传输** | 是（stdio / SSE·HTTP，JSON-RPC 2.0） | 否（数据 schema + Python runtime，非线协议） |
| **互补性** | 给 AIOBR 提供「可被观察的动作」 | 给 MCP 驱动的 agent 提供「记忆」 |

**记法**：MCP 管“手”，AIOBR 管“脑里的记忆”。一个会动手的 agent 可以同时用两者——MCP 调用工具，AIOBR 记录并反思这些调用。

---

## 分层关系（概念图）

```
┌─────────────────────────────────────────────────────────────┐
│                       Agent / LLM                           │
├───────────────────────┬─────────────────────────────────────┤
│   MCP  (动作层)        │        AIOBR  (经验层)              │
│  ─────────────────    │        ─────────────────            │
│  • Tool call          │        • aku:Transition             │
│  • Resource read      │          (aku:trigger = tool name)  │
│  • Prompt template    │        • aku:State @ worldVersion   │
│  • Sampling (LLM←srv) │        • Decay observer             │
│                       │        • Skill compression          │
│  传输: stdio/SSE/HTTP │        • Counterfactual scorer      │
│  (JSON-RPC 2.0)       │        • World versioning          │
└───────────┬───────────┴───────────────┬─────────────────────┘
            │ 一次 MCP 调用              │ 被记录为一条 Transition
            ▼                           ▼
      External Tools / Data      aku/trajectories/*.json  (JSON-LD)
```

**关键点**：AIOBR 不“替代”MCP，也不“实现”MCP。它站在 MCP 之上做**观察与反思**。一条真实链路是：

1. Agent 通过 MCP 调用 `search_docs` 工具；
2. AIOBR 把这个调用记成 `Transition{aku:trigger: "search_docs", aku:transitionType: "action", aku:delta: {...}}`；
3. 若干版本后，`observer` 算出这次观察的 `currentConfidence` 已衰减；
4. 多条同类轨迹被 `compressor` 聚成一条 `aku:Skill`，下次可直接复用。

---

## 一个具体例子：MCP 工具调用 → AIOBR Transition

假设 agent 通过 MCP 调用了一个“检索文档”工具，结果找到了相关上下文。AIOBR 侧把它落盘成这样一段 JSON-LD（`aku:` 前缀指向 `https://aiobn.com/schema/v1/`，受保护命名空间）：

```json
{
  "@context": { "aku": "https://aiobn.com/schema/v1/" },
  "@type": "aku:Transition",
  "@id": "aku:transition-run-017-step-3",
  "aku:transitionType": "action",
  "aku:trigger": "mcp://filesystem/search_docs",
  "aku:source": "aku:state-run-017-step-2",
  "aku:target": "aku:state-run-017-step-3",
  "aku:delta": {
    "context-found": [false, true],
    "docs-scanned": [0, 12]
  },
  "aku:confidence": 0.94
}
```

注意 `aku:trigger` 用了 `mcp://` 前缀——这不是 AIOBR 强制的，只是一种**约定**：把 MCP server/tool 的标识直接写进 trigger，就能在轨迹里回溯“这个状态变化是由哪个 MCP 调用引起的”。这正是 3.1 适配器（`aku_runtime/adapters/`）做的事：把 LangChain/AutoGen/CrewAI 的回调转成上面的 `aku:Trajectory`。

---

## 什么时候用哪个

**用 MCP，如果……**
- 你要让 LLM 调用一个外部工具（计算器、SQL、API、文件系统）；
- 你需要标准化的工具发现 + 调用 + 返回结构；
- 你关心的是“这一下调用”如何完成。

**用 AIOBR，如果……**
- 你想让 agent 跨会话**记住**经验，而不是每次从零开始；
- 你需要记忆**随时间衰减**（旧观察置信度下降）；
- 你想从多条轨迹里**压缩出可复用的技能**；
- 你想做**反事实反思**（“如果当时选了另一个选项会怎样？”）；
- 你需要一份**可审计、带版本号**的经验账本。

**两者都用（推荐）**：MCP 负责“动手”，AIOBR 负责“记忆与反思”。它们通过 `aku:trigger` 字段自然衔接。

---

## AIOBR 当前**不是**什么（诚实说明）

为避免误用，明确边界：

- **AIOBR 不是工具调用协议**。它不定义传输、不暴露 `tools/list`、不做 JSON-RPC。要连工具，请用 MCP（或你已有的工具层）。
- **AIOBR 不定义线协议**。它是数据 schema（`aku:` JSON-LD）+ Python runtime（`aku_runtime/`）。如果你需要跨进程 RPC，把它放在一个 HTTP/ MCP 服务**后面**。
- **AIOBR 的 skills ≠ MCP tools**。Skill 是“从轨迹压缩出的可复用状态转移模式”，目前是数据描述；把 skill 包装成可被 LLM 调用的 MCP tool 是未来工作，不是当前能力。
- **当前数据仍是演示级**。仓库里只有 2 条科幻叙事轨迹（`story-001/002`），尚未用真实 agent 任务回填（计划 1.1）。世界模型默认是**确定性**基线（`DeterministicWorldModel`）+ LLM 桩（`LLMWorldModel`，未实现）。所以“比 RAG 好”目前是设计主张，尚未有 3.3 基准数字支撑——请勿当成已验证结论对外宣称。

---

## 与协议其它部分的衔接

- **2.1 自动反事实**（已完成）：`scorer.branch_at_decision()` 在决策点自动推演未选路径；MCP 工具调用作为 `action` 型 `Transition` 同样会被纳入反事实评分。
- **3.1 框架适配器**（已完成）：LangChain / AutoGen / CrewAI 的回调 → `aku:Trajectory`；这些框架本身通常通过 MCP 或直接 SDK 调用工具，适配器记录的是其**控制流**。
- **1.1 真实轨迹回填**（待做）：当前 2 条叙事轨迹无法代表真实 MCP 驱动任务；回填真实轨迹后，上面的“MCP→Transition”链路才有真实样本。

---

## 参考

- AIOBR 协议总览：见仓库 `README.md`
- 协议 schema：`aku/schema/v1/`（state / transition / trajectory / observation / projection，JSON-LD）
- 适配器：`aku_runtime/adapters/`（LangChain / AutoGen / CrewAI）
- MCP 官方规范：见 Model Context Protocol 官方文档（Anthropic 提出，开源标准）
