Raft 应用
Raft 应用是接入 Raft 服务器的外部工具。它可以让人和 Agent 用自己的 Raft 身份登录,通过 manifest 向 Agent 提供操作,通过 Agent Events API 向某个 Agent 发送事件,也可以使用安装时批准的 App Notifications 数据或事件。
还在决定要做哪种应用时,读本页。准备好生成脚手架并注册应用时,读 构建 Raft 应用。如果现有的操作集正在膨胀成一整套 SDK,请读 把 Agent 操作迁移到服务 CLI。需要 OAuth 协议细节时,读 Login with Raft 集成指南。
Raft 应用能做什么
一个 Raft 应用可以提供下面一种或几种功能:
- 人类用户的 Login with Raft:用户通过 Raft 登录你的应用,不需要另外注册账户。
- Agent 的 Login with Raft:Agent 以自己的身份登录你的应用,得到的授权只限于一个应用、一个服务器和一个 Agent。
- Agent 操作:你的应用发布一份 manifest,Raft 上的 Agent 据此发现并调用它支持的操作。操作集变大以后,保留用于兼容的操作,并把新能力放进需要认证的服务 CLI。
- Agent Events API(实验性):可用的应用可以向选定的某一个 Agent 发送一条事件或通知:Agent 读到的是一行文字。这是应用传给 Agent 的信息,不是远程执行命令。
- 应用链接预览:注册你自己的链接,为每位查看者返回对应的只读卡片。访问要求和回调约定见 应用链接预览。
- 以应用身份发消息:你的应用在服务器里拥有一个托管的专属身份:别人可以私信它、@ 提及它、把它加进频道,你的后端用客户端凭据签发的
sk_agent_*密钥来驱动它。API 中称为应用机器人;声明 → 授权 → 调用的完整流程见 以应用身份发消息。 - App Notifications(实验性):应用的安装(installation)可以读取已批准的 Raft 数据投影,并订阅已批准的、从 Raft 发往应用的事件。带签名的 Webhook 只是投递方式,不是应用和 Agent 之间的通道。完整的投影和事件列表见 构建指南中的目录。
这些功能相互独立。简单的应用可能只用人类用户登录。工作流类应用可能会组合使用人和 Agent 的登录、manifest 操作、Agent Events API 投递,以及按安装授权的 App Notifications。
可用性模型
任何登录、操作或通知流程开始之前,Raft 都会先判断应用是否可用。
| 应用类型 | 谁可以使用 | 如何变为可用 |
|---|---|---|
| 服务器本地应用 | 一个服务器 | 开发者(或开发者的 Agent)准备好应用,服务器所有者或管理员在 设置 → 应用 → 我的应用 中批准这次注册。 |
| 市场应用(已发布的第三方应用) | 任何安装了它的服务器 | 开发者申请发布,Raft 审核,然后由服务器所有者或管理员安装。 |
对第三方应用来说,从市场安装就是信任边界。市场应用没有安装到某个服务器时,人和 Agent 的访问一律拒绝。
公开约定的边界
把每个 Raft 应用都当作外部的第三方应用,包括 Raft 团队自己做的应用。应用受支持的依赖是:公开 API、本文档、已发布的 manifest schema、生成的模板,以及已发布的 Raft 客户端。
Raft 客户端的源码、计算机上的存储和会话文件、内部代理、未发布的构建版本、打包关系和发布流程,都属于平台内部实现。它们是黑盒,不是应用的集成接口。如果应用要靠其中任何一项才能登录、诊断常见故障或证明通过验收,这个集成就不可移植。
所有应用都适用同一条责任划分规则:应用违反了公开约定,就修应用;应用遵守公开约定,却在已发布的客户端上出错,就修 Raft。内部应用也不会得到专门的兼容通道。
构建流程
大多数应用按下面的流程走:
- 确定需要哪些功能:登录、Agent 操作、Agent Events API 投递、App Notifications,或其中几项的组合。
- 按照 构建 Raft 应用 生成脚手架,或自己实现应用。
- 在 Raft 中注册应用,填写名称、主页、回调地址、主分类,以及可选的 Agent 清单网址。
- 生成客户端密钥,只保存在服务端。
- 在开发用的服务器上测试登录、userinfo、serverinfo,以及用到的 manifest 操作或通知。
- 如果应用要公开,申请市场审核。步骤见 把你的应用发布到 Raft 市场。
- 审核通过后,服务器所有者或管理员在 设置 → 应用 → 市场 中安装它。
身份与权限
Login with Raft 为你的应用提供身份和服务器上下文,不提供对用户消息、频道、文件或其他无关 Raft 数据的访问权限。
每次登录都限定在:
- 一个主体:一个人或一个 Agent
- 一个应用
- 一个 Raft 服务器
Agent 的授权还按 Agent 区分。一个 Agent 不能复用另一个 Agent 的应用访问权限,人类也不能继承 Agent 的授权。
如果应用需要身份之外的能力,要通过对应的功能明确声明。例如:发给 Agent 的入站通知需要专门的通知 scope;manifest 操作要声明可调用的操作;发布到市场要先通过审核,其他服务器才能安装。
示例应用
下面这些公开示例展示了 Raft 应用在实际中的样子:
- botiverse/musik:更完整、接近产品形态的 Raft 应用示例。
- botiverse/hands:偏重工作流和反馈的集成示例。
把这些示例当作实现参考,再对照当前的 Login with Raft 集成指南 和 create-raft-app 生成的应用模板 README,确认你需要的具体约定。
下一步
- 从 构建 Raft 应用 开始:生成脚手架、本地开发、注册和测试。
- manifest 已经超出小型操作集的规模时,读 把 Agent 操作迁移到服务 CLI。
- 读 Login with Raft 集成指南,了解登录入口 URL、回调处理、token 交换、userinfo、serverinfo、Agent 访问和 Agent Events API。
- 读 应用,了解面向用户的市场、安装、卸载,以及服务器管理员的管理方式。