工具
A3S Code 会保留工具注册表。toolNames() 返回当前会话的工具表面。这个表面由
工作区能力与会话级集成共同组装;因此非本地工作区可以有意隐藏它无法提供服务的工具。
工具活动通过会话事件流传给客户端。界面可以直接展示开始、输出、错误和完成状态, 不需要解析终端文本。
工具表面
当某个工作流依赖特定工具可见时,在测试或应用诊断中使用 toolNames() /
toolDefinitions() 验证。工具可见性不是安全授权。send、run、stream
中的模型选择工具调用会经过当前技能限制、权限策略、确认、钩子、预算、队列与超时、
取消、递归调用保护、输出净化、制品上限与工作区路径检查。session.tool(...)
这类直接 SDK 调用使用另一条显式策略,见下文。activeTools() 回答的是另一个问题:
当前操作中有哪些工具调用正在运行。
统一调用内核
运行时会为每次调用标记来源:
三种来源都经过同一个调用内核。前置钩子可以阻止调用;预算检查在产生副作用前执行; 队列与超时、取消、递归保护、后置钩子以及安全提供程序的输出净化仍然有效。安装 有作用域的调用器后,嵌套调用不能回退到原始注册表。
宿主直接调用策略不是面向终端用户的授权系统。嵌入式应用必须先完成用户身份认证和 授权,再把请求翻译成直接 SDK 辅助方法。关闭会话会通过会话取消作用域中止正在执行的 宿主直接调用工具。
直接工具调用在会话工作区下执行,应视为宿主侧特权操作。它们不更新对话记录,
因此不占用会话的单任务对话租约。session.tool(...)、
session.program(...)、session.git(...)、session.writeFile(...)、
session.ls(...)、session.editFile(...) 和 session.patchFile(...) 返回
ToolResult,读取 output、exitCode 和可选的 metadataJson。类型化
读取、搜索和命令行辅助方法返回更简单的值:readFile、grep、bash 返回字符串,
glob 返回字符串数组。长输出应在进入提示词前先摘要。
结构化输出:generate_object
generate_object 工具会让配置的大语言模型生成 JSON 对象,对响应执行 JSON 模式
校验,并且只在零退出码结果中返回校验后的对象。它有两种使用方式:
- 智能体自主调用:大语言模型在工具列表中看到
generate_object,在需要结构化输出时自行决定调用。 - 直接调用:应用通过
session.tool('generate_object', ...)绕过模型驱动的工具选择步骤;工具内部仍会调用配置的 LLM。
参数
模式
tool:注入一个合成工具,其参数就是模式。这是当前跨服务提供商的默认路径。prompt:将模式指令追加到提示词中。它适合作为仅提示词的回退路径,但更依赖模型遵循指令。auto:当前解析为tool。strict/json:API 接受这两个值,但当前运行路径会解析为tool,因为服务提供商级response_format尚未在这里启用。
流式
通过 session.stream() 调用时,部分对象以 tool_output_delta 事件发出:
修复重试
如果大语言模型输出未通过模式校验,工具会自动将校验错误反馈给模型并重试。这能处理缺少必填字段、枚举值错误等边界情况,无需应用层重试逻辑。
委派子任务可以直接使用 SDK 辅助方法,它们底层仍是同一组核心工具:
自动子智能体委派也使用同一组核心工具。autoParallel: false 只关闭自动并行扇出,
不会移除 parallel_task 或 session.tasks(...)。
程序化工具调用
程序化工具调用不是单次直接工具调用。program 工具会在内嵌 QuickJS 虚拟机中运行
受限 JavaScript 脚本;脚本定义 async function run(ctx, inputs),用一个有边界的
程序替代多轮模型工具调用。
不要让模型反复消耗工具回合:
可以让模型请求 program 运行一个脚本:
SDK 的 session.program(...) 支持内联 source,也支持 workspace 相对路径 .js 或 .mjs 文件:
session.program(...) 等价于 session.tool('program', { type: 'script', language: 'javascript', ... }),只是使用 SDK 原生命名。如果省略 allowedTools / allowed_tools,脚本可以调用除 program 之外的所有已注册工具。需要更小能力面时,再显式传入 allow-list。
QuickJS VM 不获得文件系统、网络、子进程或环境变量权限。脚本唯一有用的能力来自 ctx,这些方法会回到 A3S Code 的受控工具执行路径。PTC 会返回可读的 ToolResult.output,结构化数据位于 ToolResult.metadataJson。原始大输出不应反复塞进 prompt;应先总结发现、证据引用、风险和建议下一步。