工具与权限
伙伴除了回复消息,还可以通过工具读取文件、查找资料、管理记忆或操作其他应用。你提出目标后,模型根据当前开放的工具选择操作,infOS 负责检查权限、执行并返回结果。
工具回答「伙伴可以请求做什么」,能力负责连接具体的执行方式。例如,伙伴可以请求操作网页,浏览器能力提供者接收操作并返回结果。角色设置、会话模式、权限和设备连接共同决定哪些操作可用。
从请求到结果
- 准备工具:系统根据角色、场景、会话模式和工具开关,向模型提供可用的工具说明。
- 提出调用:模型选择工具并填写参数,例如要读取的文件路径。
- 检查和执行:执行器检查调用范围、资源路径与权限;需要确认时进入审批,然后执行获准的操作。
- 返回结果:工具将结果交回模型,伙伴可以据此继续调用工具或回复你。操作失败时,伙伴也会收到相应结果。
聊天中的工具卡片可以展示调用过程和结果。实际展示内容随工具和会话而变化。
工具与相关资源
| 来源 | 作用 |
|---|---|
| 内置工具 | 提供文件、记忆、知识、终端、浏览器和任务等功能。可用范围取决于当前环境和配置。 |
| MCP 服务 | 连接 MCP 服务后,将发现的工具接入工具目录。在左侧「工具与扩展」的「MCP 服务」中管理连接。 |
| 扩展与子应用 | 已启用的扩展或子应用可以提供工具;其可见范围和调用权限由相应配置与应用边界管理。 |
| 技能 | 技能提供完成某类工作的说明及资源,伙伴可以按需加载,并在权限允许时使用所需工具。在「工具与扩展」的「技能管理」中管理技能。 |
浏览器操作、桌面操作和远程终端等高级工具按需展开:伙伴先通过工具获取当前可用的详细说明,再进行调用。展开负责提供工具定义,具体执行仍受会话设置、授权与审批约束。
能力在哪里执行?
部分工具由服务端直接处理;需要特定设备或运行环境的操作,会由相应的能力提供者完成。能力目录记录可提供的操作、提供者状态和位置,并根据调用需求选择可用提供者。执行前还会检查能力绑定和授权。
例如,网页操作需要可用的浏览器能力;桌面截图、鼠标和键盘操作需要相应桌面能力。远程节点也可以在接入并获授权后提供它所支持的能力。
桌面版中,Electron 客户端可以提供本机桌面等能力。远程连接时,服务端与客户端可能位于不同设备,操作会交给匹配的提供者。使用 Docker 或浏览器访问时,可用能力取决于已接入的提供者和配置。更多结构见 AIOS 架构。
权限门禁如何工作?
一次工具调用会结合角色、场景、会话、具体参数和执行环境判断。系统先整理提供给模型的工具菜单;模型提出调用后,执行器会再次检查当前权限,并根据操作进入执行、审批或拒绝流程。
| 检查环节 | 决定什么 |
|---|---|
| 场景与角色 | 工具是否支持当前场景,以及该角色在场景中有哪些工具。主应用的桌面工作、据点群聊和社交应用各有自己的范围。 |
| 会话模式与开关 | 当前会话选择的极简、聊天或工作模式,以及「会话工具」中逐项设置的开关,进一步决定本轮开放哪些工具。 |
| 资源与参数 | 按工具检查路径、操作参数和策略。例如文件写入会涉及工作区范围,终端命令会经过相应的命令与风险策略。 |
| 执行权限与审批 | 根据会话选择的执行权限,结合具体操作的策略,决定直接执行、等待人工审批、交给自动审批模型,或返回拒绝结果。 |
| 能力提供者 | 需要能力节点时,系统还会检查匹配的提供者、连接状态、能力绑定与句柄。提供者离线或授权失效时,本次调用会返回失败。 |
具体路径会随工具而变化:例如截图等平台能力通过能力提供者执行;子应用工具还受应用自身的访问边界约束。系统常驻工具也有各自的特殊处理,仍受适用的场景与会话模式限制。
场景、会话与临时能力
角色能力配置按场景保存。CapabilityGate 根据角色、场景及当前请求计算可用工具,结合工具本身支持的场景生成名单;缺少对应场景配置时,普通工具的能力名单为空。上下文编译和工具执行都会使用这套门禁。
会话模式和逐项开关继续限制当前会话的工具。高级工具还要先在当前执行中展开,展开后的名单会按当时权限确定。技能可以在加载时为当前执行会话临时解锁所需工具;工具适用的场景、会话模式、资源范围及审批仍会继续生效。部分请求还会使用更窄的作用范围,例如到期跟进使用专门的工具名单。
文件范围和操作策略
文件写入、编辑、删除与终端工作目录等操作,会结合工作区、工具的资源范围配置和当前执行权限处理。资源范围可以配置允许的目录和受限路径;工具还可以配置命令、参数长度等策略。扩展修改参数时,策略检查使用修改后的参数。
读取与写入的范围需要分别理解:部分只读文件工具支持读取运行服务的设备上的绝对路径,相对路径以伙伴工作区为基准;能读取某处文件,与在那里写入或删除是不同权限。远程终端的路径由远程节点解释。
工作区外的操作会随执行权限和具体工具采用不同处理。例如「手动审批」下,适用的越界操作需要确认;「自动执行」下,工作区外删除仍需确认,其他部分越界操作可自动放行。操作系统自身的文件权限、工具的具体校验和受保护资源规则也会影响最终结果。
终端尤其需要留意:当前本地执行器主要通过工作目录、策略和审批控制操作,操作系统级强隔离需要额外支持。通过受限只读检查的部分查询可以由宿主直接处理;一般终端命令则按所选执行权限进入相应审批流程。
能力句柄与节点
当操作需要能力提供者时,能力目录会选择满足需求且可用的提供者。调用时还会检查绑定是否有效、提供者是否在线及租约是否有效,并核对能力句柄允许操作的对象和动作。句柄可以设置有效期或撤销;委派出的句柄会受到父句柄范围约束。
因此,同一个工具能否完成操作,既取决于前面的工具门禁和执行权限,也取决于对应设备和能力连接的状态。
在哪里设置工具?
设置角色在各场景中的工具
- 打开左侧「角色管理」,选择伙伴。
- 进入「能力协议」,选择「桌面工作」或「据点群聊」。
- 在「工具权限」中勾选需要的工具,点击「同步档案」保存。
同一页还展示「常驻工具」和「专业技能」。常驻工具属于系统执行协议;各场景和会话模式仍会决定实际开放范围。社交应用的工具单独管理。
调整当前会话
在「对话」的输入栏点击「会话工具」,可以查看和调整本会话的工具开关与「执行权限」。列表会标明「系统必需」或「模式未开放」的工具,设置作用于当前会话。
输入栏还可以切换「极简」「聊天」「工作」模式,控制本会话的工具范围:极简模式保留少量基础操作;聊天模式开放日常助理和文本处理相关工具;工作模式提供更广的工具范围。具体工具仍以角色授权、会话开关和当前环境为准。
选择执行权限
「会话工具」中的「执行权限」决定当前会话如何处理需要确认的操作:
| 模式 | 行为 |
|---|---|
| 手动审批 | 需要确认的操作交由你审批。 |
| 自动执行 | 适用操作自动执行;一般终端命令和工作区外删除仍由你确认。通过受限只读检查的终端查询可直接处理。 |
| 自动审批 | 适用操作自动执行;一般终端命令、工作区外删除等操作交由审批模型判断。自动审批拒绝或出现异常时,该次调用会返回相应结果。 |
| 完整权限 | 已开放工具直接执行,跳过执行器的审批和风险策略。场景、会话工具开关、应用边界及能力提供者等检查仍然适用。 |
自动审批模型可在「模型配置」的「任务指派」中,为「工具审批」选择;未指派时跟随主模型。审批结果和异常会影响对应调用。工具与场景的开放条件、能力提供者的可用状态等仍会影响调用。
选择「完整权限」之前
这一档会跳过执行器的审批和风险策略,已开放的工具直接执行。请先确认伙伴可用的工具和操作范围,特别是终端和工作区外的写入、删除。
审批卡片如何处理?
需要你确认时,审批卡片会展示操作原因、风险等级和工具名称;点击「参数与审计」可以查看参数摘要与审批记录,也可以填写附言。卡片根据工具提供以下选项:
- 允许本次:允许当前这次工具调用。一次性授权与本次工具及参数对应。
- 本轮对话允许:在当前执行会话中允许该工具的后续调用;部分需要逐次确认的操作仍按其策略处理。
- 拒绝:拒绝本次调用;附言会随结果提供给伙伴,帮助它调整后续操作。
普通对话会等待审批后继续处理原调用;后台任务会记录等待状态,在决定后按任务流程继续。取消当前执行时,对应的等待审批也会结束。自动审批的决定来自审批模型,相关结果会在工具调用中标明来源。
NIT 脚本编排
NIT 是 infOS 内置的脚本编排语言。对于步骤明确的批量读取、条件判断、循环或独立并行操作,模型可以通过 Function Calling 调用 run_script 工具,在 code 参数中提交脚本,将多次工具调用组织在一起;简单操作也可以直接调用工具。脚本变量在本次执行中使用。
run_script 出现在适用的工具菜单中,实际开放范围由场景和会话模式决定。持久后台任务通过各自的工具逐步执行,并使用任务检查点;查看图片原图时,模型直接调用 read_image。
一段脚本如何运行?
语句按换行分隔,工具参数使用 名称=值,代码块使用花括号。普通语句和 for 循环按顺序等待结果:
results = []
for file in ["README.md", "package.json"] {
results.push(read_file(file_path=file))
}
return merge(results, separator="\n---\n")读取路径、工具开放情况和文件内容以当前工作区与权限为准。对于互相独立的读取,可以使用 parallel;结果按表达式顺序排列:
results = parallel {
read_file(file_path="README.md")
read_file(file_path="package.json")
}
return merge(results)需要先后依赖或修改同一资源的操作适合顺序执行;并行分支适合各自返回结果,再统一汇总。遇到需要重新理解结果或图片的决策点,模型可以先结束脚本,再决定下一步。NIT 支持数组、if/else、for/in、try/catch、return、比较和短路逻辑,以及部分数组与字符串方法。工具结果以文本返回;JSON 文本可以用 parse_json 解析。filter() 用于过滤假值。
这是一门专用 DSL,使用自己的语法:变量直接写名称,工具参数使用 =;函数定义、对象字面量和 async/await 等 JavaScript 语法目前未提供。高级工具需要先在脚本外展开;脚本内部的操作在同一脚本中编排,嵌套调用 run_script 会被拒绝。
执行范围与取消
- 脚本内部调用沿用当前场景、会话、工具开关和授权,并经过相应的路径检查与审批。脚本中的工具调用也可以显示在执行过程里。
- 一次脚本最多启动 50 次内部工具调用,解释器另有 1000 次节点执行限制。
- 脚本自身累计执行预算为 30 秒,等待工具和审批时暂停计时。包含等待的总耗时默认最多 10 分钟,可用
timeout_ms缩短,也受父任务截止时间约束。 - 普通工具错误可以由脚本捕获;取消和截止时间会终止脚本。并行分支发生错误时,系统会向同组其他分支发出取消并等待处理。
- 脚本结束时,系统会取消并回收脚本创建的受管终端。需要跨脚本保留的服务可以通过终端工具直接创建,并由使用者管理生命周期。
工具返回后,还要根据结果判断工作是否完成。例如,拿到终端或任务句柄后,可以使用相应工具等待和查询状态。取消会向底层工具传递;对于尚未确认结束的工具,系统会记录告警。
