一种与传输方式无关的双向协议,用于 AI 代理与渲染界面之间的通信。一个代理,适配所有界面。
AI 代理会生成结构化输出——表格、表单、图表、状态消息、代码块——但这些输出的渲染方式与传输层和前端框架紧密耦合。为 Web 聊天构建的代理无法在桌面应用中渲染。通过 SSE 流传输的代理无法服务于期望不同协议的移动客户端。
每接入一个新的渲染界面,就需要编写一套定制集成代码。
ARP 定义的是一套协议——而非框架,也非库。就像 Wayland 将应用程序从显示服务器中解耦一样,ARP 将代理从渲染器中解耦。
代理决定显示什么。渲染器决定如何显示。
Agent (backend) Renderer (web, CLI, mobile)
─────────────── ──────────────────────────
Owns surfaces ── render / delta ──► Owns display
Owns UI state ◄── input events ──── Owns input routingheaders 和 rows 的 table——而非 HTML。每条 ARP 消息都是 JSON 格式,至少包含 { v: 1, type: "<type>" }。
| 类型 | 用途 |
|---|---|
hello | 连接时的能力握手 |
delta | 增量文本块 |
tool_start | 工具开始执行 |
tool_end | 工具执行完毕 |
render | 生成式 UI 组件 |
patch | 组件增量更新 |
error | 错误事件 |
commit | 流传输完成 |
| 类型 | 输入类型 | 用途 |
|---|---|---|
input | text | 用户文本消息 |
input | action | 按钮点击 / UI 操作 |
input | form_submit | 表单提交 |
每个符合 ARP 规范的渲染器至少须支持 text。组件声明回退链——chart 回退到 table,table 回退到 text。
/_arp/v1import { ArpClient } from '@haira/arp'
const client = new ArpClient('ws://localhost:8080/_arp/v1', {
onDelta: (text) => appendToChat(text),
onRender: (event) => renderComponent(event.component, event.props),
onDone: () => markStreamComplete(),
})
client.connect()
client.sendText('Show me the sales data')import { ArpChat } from '@haira/arp-react'
function App() {
return (
<ArpChat
url="ws://localhost:8080/_arp/v1"
theme="dark"
title="Data Explorer"
/>
)
}同样可用:@haira/arp-vue(适用于 Vue 3)和 github.com/haira-lang/arp-go(适用于 Go 后端)。
每个 Haira 服务器原生支持 ARP,无需任何配置。
import "ui"
tool query_database(query: string) -> any {
"""Executes a SQL query and displays results."""
rows, err = postgres.query(db, query)
if err != nil {
return ui.status_card("error", "Query Failed", conv.to_string(err))
}
return ui.table("Query Results", headers, rows)
}
agent DataExplorer {
provider: OpenAI
tools: [query_database]
ui: ui
}
@webhook("/chat")
workflow Chat(message: string, session_id: string) -> stream {
return DataExplorer.stream(message, session: session_id)
}新组件遵循受 Wayland 启发的三阶段生命周期:
x-vendor-names-name| 级别 | 必需组件 | 适用场景 |
|---|---|---|
| 最小 | text + 文本输入 | 语音助手、IoT |
| 基础 | text、table、form、confirm、choices | CLI 终端 |
| 标准 | 所有核心组件,完整对象模型 | Web / 桌面 |
| 完整 | 标准级 + 流传输、多界面、文件上传 | 富 Web 应用 |