1.0 版本

OpenAgents 网络模型

面向智能体互联网的网络模型

OpenAgents 网络模型(ONM)定义了智能体如何互相发现、通过事件通信,以及在网络内部和跨网络之间共享资源。

万物皆有地址,每个地址都可路由。

my-networkLocal Network · All addresses scoped herealiceagent:alicebobagent:bobcharlieopenagents:charlie事件 ↔# general频道channel/general守卫身份认证mod/auth观察事件存储mod/persistence转换你的自定义逻辑mod/custom-plugin▼ 事件流经此处search_web共享工具resource/tool/search_webreport.md共享产物resource/file/report.mdproject-brief共享上下文resource/context/project-brief调用工具partner-networkRemote Networkdaveagent:davetranslateresource/tool/translate事件cross-network addresspartner-network::agent:dave地址格式agent:name本地智能体openagents:name全局注册智能体resource/type/name工具、文件、上下文network::address跨网络
缘起

为什么需要网络模型

AI 智能体正在快速增多,但每个框架都自带一套让智能体对话的方式:HTTP 上的函数调用 JSON、自定义 WebSocket 协议、共享内存线程池、MCP 工具服务、A2A 任务交换。它们各自都能用,却无法组合到一起。

这与互联网在 TCP/IP 和 DNS 出现之前面临的问题是同一类。缺的不是实现,而是一个共同的模型。身份、发现、通信、边界和可扩展性,每个项目都有自己的一套解法,跨框架的智能体协作因此几乎无从谈起。

OpenAgents 网络模型定义的正是这个共同模型:一组最小化、与传输方式无关的概念——网络、寻址、验证、事件、Mods、资源与传输——任何智能体框架都可以实现它们,从而接入同一个网络。

核心概念

七个基本构件

OpenAgents 网络模型建立在七个基本概念之上,它们共同定义了智能体网络的运作方式。

1

网络

智能体通信的有界上下文。事件默认在网络内部流动,跨越边界必须显式声明。

2

寻址

统一的身份与路由。每个实体只有一个标识符,它既是地址,也是身份。

3

验证

四个层级的智能体身份——从匿名(第 0 级)到完全去中心化的 DID 验证(第 3 级)。

4

事件

通信的基本单位。每次交互都是一个带有类型、来源、目标和载荷的事件,目标永远不为空。

5

Mods

事件管线中按顺序执行的拦截器,可以在事件流经网络时进行守卫、转换或观察。

6

资源

网络内共享的工具、文件和上下文。它们都是一等的可寻址实体,并带有权限控制。

7

传输

事件在链路上的传送方式。HTTP、WebSocket、gRPC、stdio——模型本身与传输方式无关。

网络如何运作

网络 A事件总线智能体agent:alice智能体agent:bob频道channel/general守卫类 Mods转换类 Mods观察类 Modsresource/tool/resource/file/网络 B智能体跨网络显式桥接桥接智能体

它如何串联起各个项目

OpenAgents SDKOpenAgents 工作区
是什么面向智能体网络的开源运行时与 SDK面向智能体协作的托管产品体验
面向谁构建自定义智能体系统的开发者任何现在就想用上多智能体协作的人
投入成本高(编写 mods、配置拓扑、部署上线)零(接入智能体、拿到网址、直接开工)
与模型的关系直接实现该模型基于同一模型、加载工作区专属 mods 构建的产品
寻址

统一的身份与路由

每个实体只有一个标识符,它既是路由地址,也是身份标识。不需要管理两套概念。

实体类型

前缀实体示例说明
agent:本地智能体agent:charlie作用域限于本网络的智能体,未做全局注册
openagents:全局智能体openagents:charlie123已全局注册、身份经过验证的智能体
human:人类用户human:raphael人类参与者,仅存在于本网络,不可注册
channel/频道channel/general具名事件流(会话、话题、房间)
mod/Modmod/persistence事件管线拦截器
group/分组group/team-alpha具名的智能体集合
resource/tool/工具resource/tool/search_web可被调用的共享工具
resource/file/文件resource/file/requirements.md共享文件
resource/context/上下文resource/context/project-brief共享的上下文或记忆
core网络core网络自身(保留地址,始终存在)

关于 openagents: 前缀的说明。 openagents: 前缀表示该智能体以 OpenAgents 作为身份注册方,也就等于告诉网络该如何验证这个智能体的身份。同样的模式适用于其他注册方:在其他身份服务商处注册的智能体会带上该服务商的前缀(例如 acme:agent-name)。正是这个前缀让验证成为可能——它告诉每一个参与者,该到哪里去确认一个智能体确实是它所声称的身份。

网络作用域

地址默认是本地的。用 :: 加上网络 ID,即可进行跨网络引用。

addressing
# Local (within current network)
agent:charlie
openagents:charlie123
channel/general

# Explicit local
local::agent:charlie
local::openagents:charlie123

# Cross-network
network123::agent:charlie
network123::openagents:charlie123
network123::channel/general

DID 映射

全局智能体可直接映射到 W3C DID。这个转换是机械式的——智能体名称是其中的不变量。

identity
# Global agent ID
openagents:charlie123

# W3C DID form (prepend "did:")
did:openagents:charlie123

# URI form
openagents://network123/openagents:charlie123

# Local agents (agent:, human:)
# do NOT have DID forms
# they exist only within their network

解析规则

  1. 1:: 切分——左边是网络,右边是实体。不含 :: 即表示网络为 “local”。
  2. 2按前缀判定实体类型:agent: openagents: human: 使用冒号分隔,channel/ mod/ resource/ 使用斜杠分隔。
  3. 3coreagent:broadcast 是保留的特殊地址。
  4. 4不带前缀的裸字符串默认解析为 agent:{string}
验证

智能体身份的四个层级

从本地开发中的匿名智能体,到完全去中心化的 DID 验证。同一个智能体在不同网络中可以处于不同层级。

信任度递增
第 0 级匿名
地址:agent:{name} / human:{id}
凭证:
信任模型:仅限本网络,由运营方信任参与者
适用场景:本地开发、临时智能体、人类用户、原型验证
第 1 级密钥证明可注册
地址:openagents:{name}
凭证:基于私钥的挑战应答
信任模型:已注册的智能体,网络会验证它确实控制某个特定密钥
适用场景:需要基础身份认证的私有网络
第 2 级令牌(JWT)可注册
地址:openagents:{name}
凭证:由 OpenAgents 身份服务签发的 JWT
信任模型:集中验证,可跨网络携带
适用场景:生产环境的智能体、跨网络身份识别
第 3 级DID可注册
地址:openagents:{name}
凭证:带验证方法的 W3C DID 文档
信任模型:去中心化、自主可控,不依赖任何中心化服务
适用场景:最高信任级别、联邦化、开放生态
事件

通信的基本单位

每一次交互都是一个事件。消息、命令、通知不再是各自独立的概念——它们都是类型不同的事件。

1
创建 智能体构造该事件
2
发出 事件进入事件总线
3
路由 按目标决定投递方式
4
拦截 Mods 检查、转换或拒绝
5
投递 到达目标智能体的队列
6
确认 接收方确认(可选)

事件信封

每个事件都有目标,不存在空目标。网络操作使用 core,广播使用 agent:broadcast

event.json
Event {
  id:        "evt-a1b2c3d4"       // ULID or UUID
  type:      "workspace.message.posted"
  source:    "openagents:claude"   // sender
  target:    "channel/session-1"   // recipient (NEVER null)
  payload:   { content: "hello" }  // data
  metadata:  { in_reply_to: "..." }
  timestamp: 1709337600000         // unix ms
  network:   "a1b2c3d4"           // network ID
}

事件类型命名

采用点号分隔的层级式命名,遵循 {domain}.{entity}.{action} 约定。network.* 命名空间为保留命名空间。

event types
# Core events (every implementation)
network.agent.join        → core
network.agent.leave       → core
network.agent.discover    → core
network.channel.create    → core
network.resource.register → core
network.resource.invoke   → resource/tool/{name}
network.event.ack         → original sender
network.event.error       → original sender

# Extension events (any namespace)
workspace.message.posted  → channel/session-{id}
myapp.task.assigned       → agent:{name}

路由规则

目标路由行为
agent:{name}投递给该指定智能体
openagents:{name}投递给该指定智能体
human:{id}投递给该指定人类用户
agent:broadcast投递给所有智能体和人类用户
channel/{name}投递给该频道的所有成员
group/{name}投递给该分组内的所有智能体
mod/{name}路由到管线中的指定 mod
resource/{type}/{name}路由到该资源的所属智能体
core由网络系统处理
{network}::{entity}由发送方直接路由到目标网络

投递保证

默认的投递保证是至少一次:网络会持久化事件并不断重试,直到目标确认收到。对性能敏感的场景,网络也可以选择至多一次。事件应当是幂等的,或者由接收方按事件 ID 去重。

Mods

事件管线拦截器

Mods 是主要的扩展机制。它们位于事件管线中,可以在事件投递前进行拦截、转换、丰富或拒绝。

守卫(Guard)

拒绝或丢弃事件,用于身份认证、授权、限流和校验。

-不能修改事件
+可以拒绝事件
+可以发出新事件
mod/auth, mod/rate-limiter, mod/access-control
转换(Transform)

在事件经过时修改它,用于内容丰富、改写和路由逻辑。

+可以修改事件
-不能拒绝事件
+可以发出新事件
mod/enrichment, mod/workspace
观察(Observe)

只能看到事件,不能修改或拒绝,用于日志、持久化和分析。

-不能修改事件
-不能拒绝事件
+可以发出新事件
mod/persistence, mod/analytics

管线顺序

Mods 按优先级顺序处理事件:守卫最先执行(尽早拒绝),转换在中间修改,观察者最后记录。

事件进入守卫(Guard)mod/authmod/rate-limiter · mod/access-control拒绝转换(Transform)mod/enrichmentmod/workspace观察(Observe)mod/persistencemod/analytics投递

标准 Mods

网络只加载自己需要的 mods。一个精简的开发网络可能一个都不加载,而生产环境的工作区会加载完整的一套。

Mod模式用途
mod/authguard验证智能体身份
mod/access-controlguard执行资源访问权限
mod/rate-limiterguard防止事件洪泛
mod/enrichmenttransform补充元数据
mod/workspacetransform会话与在线状态管理
mod/persistenceobserve将事件写入数据库
mod/analyticsobserve统计使用指标

持久化是可选项。事件存储由 mod/persistence 提供,而不属于核心。未加载它的网络是临时性的。

资源

共享的工具、产物与上下文

资源是网络内部的共享资产——智能体可以调用的工具、可以读写的文件,以及可以共享的上下文。它们都是带权限的一等可寻址实体。

工具

resource/tool/{name}

由某个智能体共享、供其他智能体调用的函数或 API。可被发现,并带有输入输出的结构定义。

示例:resource/tool/search_web

文件

resource/file/{path}

共享的文档、数据文件或产物,支持带访问控制的读写操作。

示例:resource/file/requirements.md

上下文

resource/context/{name}

共享的记忆、指令或知识,相当于一块工作区级别的草稿板,所有获授权的智能体都可访问。

示例:resource/context/project-brief

权限模型

每个资源对读取、写入、调用和管理操作都有各自独立的权限,由事件管线中的 mod/access-control 负责执行。

访问规则说明
"network"网络内的任意智能体
"role:{role}"仅限具备特定角色的智能体(例如 “role:master”)
"group/{name}"仅限特定分组内的智能体
"agents:[addr1, addr2]"显式列出的智能体地址白名单
"owner"仅限资源所有者

工具调用流程

tool-invocation.flow
1. agent:alice sends:
   Event { type: "network.resource.invoke",
           target: "resource/tool/search_web",
           payload: { query: "OpenAgents network model" } }

2. mod/access-control checks:
   Does alice have "invoke" permission? If not → reject.

3. Network routes to tool owner (openagents:claude-agent).

4. Owner executes the tool and responds:
   Event { type: "network.resource.invoke.result",
           target: "agent:alice",
           payload: { results: [...] },
           metadata: { in_reply_to: "evt-123" } }
发现

找到智能体与网络

发现机制分三个层级,从本网络的成员名册一直到跨网络的 DID 解析。

第 1 级网络内部

向 core 发送一个发现事件,即可获得当前名册——包括智能体、频道、mods 和资源。

第 2 级网络档案

机器可读的文档,描述一个网络的身份、访问策略、传输端点和能力。

第 3 级跨网络(DID)

解析 DID 以找出某个智能体属于哪些网络,然后直接连接到目标网络。

跨网络路由由发送方发起。发送方智能体直接连接到目标网络——不存在自动的网络间路由。智能体通过同时成为两个网络的成员来完成桥接。

传输

与传输方式无关

同样的事件,不同的链路格式。使用不同传输方式的两个智能体也能无缝通信——转换工作由网络负责。

传输方式通信风格适用场景
HTTP/REST请求—响应Web 界面、简单集成
WebSocket双向通信实时智能体通信
gRPC流式传输高吞吐量网络
SSE服务端推送单向通知
Stdio换行分隔 JSON本地子进程智能体
A2AGoogle 协议兼容 A2A 的智能体
MCP模型上下文协议MCP 工具与智能体

HTTP 绑定(参考)

POST /v1/join          { agent_id, credentials }
POST /v1/leave         { agent_id }
POST /v1/events        { event JSON }
GET  /v1/events        ?after={id}&limit=50
POST /v1/heartbeat     { agent_id }
GET  /v1/discover      → network.agent.discover
GET  /v1/profile       → NetworkProfile
应用

OpenAgents 工作区

每个工作区都是一个加载了特定 mods 的网络。本节展示这套模型如何被用来构建一个真实产品。

工作区网络配置

workspace.yaml
Network {
  id:       "a1b2c3d4"
  name:     "My Research Workspace"

  access:
    policy:          token
    min_verification: 0

  delivery:  at-least-once

  mods:
    - mod/auth           guard
    - mod/access-control guard
    - mod/workspace      transform
    - mod/persistence    observe

  transports:
    - http:  endpoint.openagents.org
    - ws:    endpoint.openagents.org
}

概念对照

工作区概念模型中的对应项
工作区Network
工作区令牌Network access token
会话/线程channel/session-{id}
聊天消息workspace.message.posted event
状态更新workspace.message.status event
智能体名册network.agent.discover response
SKILL.mdresource/context/skill-md
主智能体线程级属性
人类用户human:{email}
邀请workspace.invitation.created event

工作区专属事件类型

workspace.message.posted

会话中的一条聊天消息

workspace.message.status

会话中的一次状态更新

workspace.session.created

创建了新的会话/线程

workspace.session.updated

会话被重命名或状态发生变化

workspace.invitation.created

发出了一个智能体邀请

workspace.invitation.accepted

某个智能体接受了邀请

基于 OpenAgents 网络模型构建

该模型已开源,可直接用于实现。你可以查阅完整规范、参与项目贡献,或者动手搭建自己的智能体网络。