Skip to content
阅读进度

Tool Calling 怎样把模型输出变成可靠的 Android 操作? ​

返回 Agent 工程 目录

标准回答 ​

Tool Calling 的核心是给模型一份可用工具清单,让它输出工具名称和参数,再由宿主程序执行。模型本身没有因为输出了工具名称就获得 Android 权限,也不负责证明操作成功。

我会为每个工具定义名称、用途、参数结构、返回值和错误类型。例如 connect_device 接收设备标识,而不是接收一段任意系统命令。工具入口先检查名称是否在允许清单中,再检查参数类型、设备是否存在、调用者是否有权限,以及当前任务是否已经取消。需要用户确认的操作,在真正执行前确认本次目标和参数。

执行结果会返回结构化状态,例如成功、需要用户操作、暂时不可用、结果待核实,并附带可供下一步判断的数据。模型根据结果继续说明或规划,但重试次数、总时限和高风险操作规则由程序控制。即使使用严格的结构化输出,也仍需业务校验,因为格式正确不代表设备存在或用户有权操作。

工具输出中的网页、文档或设备名称只当作数据。它们不能修改执行规则,也不能授权新的操作。这样模型负责语言与选择,工具层负责把动作限制在明确、可验证的能力范围内。

关键机制 ​

  • 工具契约描述“做什么、输入什么、返回什么”,避免暴露任意代码执行入口。
  • 参数校验之外,还检查权限、任务状态、目标资源与确认是否仍然有效。
  • 区分业务失败、可重试故障和结果未知;统一记录 taskId、stepId 与调用结果。

通俗例子 ​

模型输出 connect_device(deviceId="A"),但当前设备列表已经没有 A。工具层返回 DEVICE_UNAVAILABLE 和可用设备列表,模型请用户重新选择,而不是修改参数后偷偷连接另一台设备。

追问与回答 ​

模型参数错了,直接再问模型一次吗? ​

我会先返回可修正的具体错误,例如字段缺失或目标不在允许范围内,必要时允许一次受控修正。权限不足、用户拒绝和任务取消不是参数问题,不能让模型通过换一种调用方式继续尝试。连续修正失败就停止,并向用户说明缺少什么信息。

MCP 和 Tool Calling 是什么关系? ​

Tool Calling 解决模型怎样表达调用哪个工具、传什么参数;MCP 提供连接工具和数据服务的一套协议。它们可以配合使用,但不是同一个东西。即使工具通过 MCP 接入,Android 宿主仍然要检查自己的权限、用户确认和任务状态,协议不会替应用绕过系统限制。

易混淆点 ​

JSON 合法、Schema 合法、业务合法、实际执行成功是四层不同的判断。提示词和输出格式都不能替代程序权限检查。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。