AnyLanguageModel 工具调用完全指南:3 个案例让大模型替你执行代码 AnyLanguageModel 工具调用完全指南3 个案例让大模型替你执行代码【免费下载链接】AnyLanguageModelAn API-compatible, drop-in replacement for Apples Foundation Models framework with support for custom language model providers.项目地址: https://gitcode.com/gh_mirrors/an/AnyLanguageModelAnyLanguageModel 是一个开源 Swift 库作为苹果 Foundation Models 框架的 API 兼容平替drop-in replacement支持接入 OpenAI、Anthropic、Gemini、Ollama 等多种大模型提供商只需把import FoundationModels改成import AnyLanguageModel即可无缝迁移。本文是 AnyLanguageModel 工具调用Tool Calling的完整上手指南通过 3 个实战案例一步步教你如何让大模型替你执行代码、查询实时数据、甚至在你确认后再调用系统能力。 什么是工具调用为什么大模型需要双手大模型本身只能说不能做。它不知道今天的天气、读不了你的文件、也算不了复杂的公式——除非你通过**工具调用Tool Calling**给它装上双手。在 AnyLanguageModel 中工具就是一个遵守Tool协议的对象name工具的唯一名称如getWeatherdescription用自然语言描述什么时候、怎么用这个工具模型靠它决定是否调用call(arguments:)真正执行代码的地方把结果返回给模型继续推理核心协议定义在 Tool.swift会话与执行编排在 LanguageModelSession.swift 中。整个流程就像一次问答接力你提问 → 模型判断需要工具 → 模型发起工具调用 → 你的代码执行 → 结果回传 → 模型基于结果给出最终答案⚙️ 零基础快速接入安装与最小可运行示例最快安装方法在Package.swift中声明依赖仓库地址https://gitcode.com/gh_mirrors/an/AnyLanguageModeldependencies: [ .package(url: https://gitcode.com/gh_mirrors/an/AnyLanguageModel, from: 0.8.0) ]要求 Swift 6.1支持 iOS 17 / macOS 14 / visionOS 1 / Linux。一个 30 秒的最小示例import AnyLanguageModel struct WeatherTool: Tool { let name getWeather let description 查询指定城市的天气 Generable struct Arguments { Guide(description: 要查询天气的城市) var city: String } func call(arguments: Arguments) async throws - String { \(arguments.city)今天晴气温 23°C } } let model SystemLanguageModel.default let session LanguageModelSession(model: model, tools: [WeatherTool()]) let response try await session.respond { Prompt(北京今天天气怎么样) } print(response.content)短短几行模型就能自己决定调用你的工具来回答天气问题。 案例一最基础的天气查询工具入门必备这个案例用来理解工具调用的三个关键组件Tool协议、Generable宏、Guide宏。用 Generable 定义强类型参数Generable struct Arguments { Guide(description: 要查询天气的城市) var city: String }Generable让结构体自动获得参数解析、Schema 生成等能力宏实现见 GenerableMacro.swiftGuide给每个参数补充自然语言说明还可以附加约束例如.range(1...10)限制数值范围见 GuideMacro.swift执行与回传func call(arguments: Arguments) async throws - String { \(arguments.city)今天晴气温 23°C }工具输出会以Transcript.ToolCall→Transcript.ToolOutput的形式写回会话记录见 Transcript.swift模型据此继续推理。测试代码可参考 Tools.swift。 案例二让大模型直接执行你的代码计算器实战这是大模型替你执行代码的核心场景模型把算式解析成参数你的代码负责真正运行。struct CalculatorTool: Tool { let name evaluateMath let description 计算一个数学表达式的值 Generable struct Arguments { Guide(description: 要计算的数学表达式例如 (35)*2) var expression: String } func call(arguments: Arguments) async throws - String { let result try MathEvaluator.evaluate(arguments.expression) // 你的计算逻辑 return \(arguments.expression) \(result) } }当用户问帮我算一下 (35)×2 等于多少模型会自动调用evaluateMath你的 Swift 代码完成计算并把结果返回模型再组织成自然语言回答。模型负责理解你的代码负责执行这正是工具调用的精髓。️ 案例三多工具协作 执行前人工确认生产级进阶真实 App 中工具调用往往需要观察、拦截、甚至中止。AnyLanguageModel 提供了专属的ToolExecutionDelegate见 ToolExecution.swift让你全程掌控工具执行actor ToolExecutionObserver: ToolExecutionDelegate { // 1. 模型生成了哪些工具调用 func didGenerateToolCalls(_ calls: [Transcript.ToolCall], in session: LanguageModelSession) async { print(模型请求调用: \(calls)) } // 2. 决定如何处理执行 / 停止 / 绕过 func toolCallDecision(for call: Transcript.ToolCall, in session: LanguageModelSession) async - ToolExecutionDecision { // 这里可以弹窗询问用户确认后再执行 .execute } // 3. 工具执行完成 func didExecuteToolCall(_ call: Transcript.ToolCall, output: Transcript.ToolOutput, in session: LanguageModelSession) async { print(执行完成: \(call.toolName)) } } session.toolExecutionDelegate ToolExecutionObserver()ToolExecutionDecision 三种决策决策作用适用场景.execute立即执行工具无副作用的安全查询.stop只生成调用但不执行终止会话需要用户补充信息.provideOutput(...)不执行工具直接注入结果缓存命中、外部系统代执行多工具协作时模型还能把工具 A 的输出作为工具 B 的输入如先查航班再订票。完整的委托测试覆盖可参考 ToolExecutionDelegateTests.swift。 支持的模型提供商一次接入处处可换工具调用在所有提供商中通用llama.cpp 除外切换模型只需更换LanguageModel实例提供商类型工具调用Apple Foundation Models / System系统级✅Core ML / MLX端侧✅Ollama本地服务✅OpenAI (Chat/Responses)云端✅Anthropic Claude云端✅Google Gemini云端✅llama.cpp (GGUF)端侧❌每种模型封装在 Models 目录下接口完全一致真正做到一处写工具处处能调用。 快速上手清单3 步搞定工具调用定义工具实现Tool协议用GenerableGuide声明参数创建会话LanguageModelSession(model:tools:)传入工具数组观察与控制需要拦截时设置toolExecutionDelegate实现 4 个回调方法想深入源码推荐从 Tool.swift 和 ToolExecution.swift 开始配合测试目录里的 ToolSpy.swift 理解执行细节。快克隆仓库试试让大模型真正替你干活吧【免费下载链接】AnyLanguageModelAn API-compatible, drop-in replacement for Apples Foundation Models framework with support for custom language model providers.项目地址: https://gitcode.com/gh_mirrors/an/AnyLanguageModel创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考