4.2 KiB
Agent 工具与运行时边界
版本: 2026-08-07 整合版
主来源: 01.当前有效设计/02.正式方案/运行时与智能体工具.md
辅助来源: 01.当前有效设计/APP架构设计.md、90.历史设计归档/01.前期分析与设计/tool-action-design.md
1. 当前权威结论
当前最重要的结论是:
Agent Tool 是 Runtime 发布给远端 Agent 的受控调用契约,不是用户按钮,也不是 MiniApp 内部函数的别名。
这是当前设计相对于早期草案最重要的收敛之一。
2. Agent 当前扮演什么角色
远端 Agent 当前应该被理解为:
- 用户意图的理解者;
- Runtime 已发布能力的调用者;
- 结果解释与后续编排者。
它不应该被理解为:
- 本地 Runtime 的替身;
- MiniApp 内部状态的直接操作者;
- Host 权限的直接调用者;
- 任意前端函数的远程执行入口。
3. 三条入口必须分开
当前有效设计明确把三条入口区分开了:
3.1 Agent Tool
由远端 Agent 发起,经过 Runtime 校验、持久化、路由和回传。
3.2 本地 UI Action
由用户在 MiniApp 页面中的点击、输入、拖动等触发,经 SDK / Surface Bridge 进入 Runtime。
3.3 Host 生命周期意图
由前后台切换、返回、关闭、恢复、锁屏等本地环境事实触发,经 Runtime 的生命周期裁决进入状态机。
这三条入口可以复用内部业务动作,但不能混同身份。
4. 为什么早期工具三分法不能直接作为当前主模型
agent_ops/设计/01.前期分析与设计/tool-action-design.md 中的 app / toolset / action 三分法,在早期用于说明不同工具形态,很有价值;但它已经不能完整表达当前 Runtime 模型,原因是:
- 当前 Runtime 要管理 Inventory 可见性;
- 要管理 Tool Call 的幂等、状态、回执和终态;
- 要管理激活过程、App 就绪条件、前台要求和 operation;
- 要把 Tool、MiniApp instance、子会话、业务 operation 区分开。
因此,当前主模型应优先使用:
- Agent Tool;
- Agent Inventory;
- Tool Call;
- 协议回执 / 进度;
- 业务结果;
- MiniApp activation;
- operation。
5. 当前 Runtime 对 Tool 的唯一所有权
Tool 相关的这些职责都必须由 Runtime 统一承担:
- 发布 Inventory;
- 校验调用;
- 做幂等去重;
- 决定是否可见;
- 决定是否允许启动或复用 MiniApp;
- 持久化业务状态与 outbox;
- 回传协议回执与最终结果。
这意味着:
- MiniApp 不能自己向 Agent 宣传 Tool;
- Surface 不能直接把前端动作伪造成 Tool Call;
- Agent 不能绕过 Inventory 直接指定任意 instance 或内部函数;
- Host 事件也不能伪造成 Tool 调用。
6. 当前与项目实际情况一致的几个重点
结合当前 lineup-app 的实现方向,以下几个判断具有最高优先级:
- Tool 是 Runtime 语义的一部分,不是单独漂浮在外的协议层;
- Interact / MiniApp / Workspace / Focus / Lifecycle 与 Tool 调用之间已经形成一套统一模型;
- 长时业务行为需要区分“调用被接受”“激活已就绪”“业务已开始”“业务已完成”;
- 用户本地操作、Agent 远程调用和 Host 生命周期变化必须各自可审计、可恢复。
7. 对旧设计中仍可保留的部分
早期协议文档中这些认识仍然有价值:
- 结构化调用比自然语言裸发更稳定;
- 工具定义需要 schema 化;
- 消息需要统一信封与版本化;
- 调用与返回需要成对、可追踪。
但这些内容如今应作为当前 Runtime Tool 模型的背景,而不是替代它。
8. 本轮整合后的使用建议
如果后续在设计、实现或迭代文档里出现以下歧义,优先按本文判断:
- 某个按钮是不是 Agent Tool;
- 某个本地事件能不能当成 Tool 调用;
- 某个 MiniApp 能不能直接发消息给 Agent;
- 某个 operation 是否等同于一次 Tool Call;
- 某个实例 ID 是否能由 Agent 任意指定。
这些问题的默认答案,都应该先经过 Runtime 边界来裁决,而不是回退到早期直连协议思路。