使用 foundation models 框架提升性能。深入了解引导式生成的工作方式,并使用指南、正则表达式和生成方案来获取自定的结构化响应。我们将向你展示如何使用工具调用让模型自动访问外部信息并执行操作,从而实现个性化体验。

为了充分从这个视频中获益,建议你先观看“了解 foundation models 框架”。

视频封面
视频地址

此文章由AI生成,可能存在错误,如有问题,请联系djs66256@163.com

深入探索 Foundation Models 框架:从基础会话到工具调用

Foundation Models 框架为开发者提供了直接在设备端运行大型语言模型的能力,支持 macOS、iPadOS、iOS 和 visionOS 平台。本文将系统介绍该框架的核心功能,包括会话机制、Generable 技术、动态模式以及工具调用。

基础会话机制

Foundation Models 框架通过 LanguageModelSession 类提供简洁的会话接口。开发者只需导入框架并创建会话实例,即可开始生成文本内容。

import FoundationModels

func respond(userInput: String) async throws -> String {
  let session = LanguageModelSession(instructions: """
    你是一位像素世界里的友善咖啡师。
    请回答玩家的问题。
    """
  )
  let response = try await session.respond(to: userInput)
  return response.content
}

会话具有状态性,每次响应调用都会记录在会话历史中。开发者需要注意上下文窗口限制问题,当超出限制时可选择创建新会话或保留部分历史记录。

var session = LanguageModelSession()

do {
  let answer = try await session.respond(to: prompt)
  print(answer.content)
} catch LanguageModelSession.GenerationError.exceededContextWindowSize {
  session = newSession(previousSession: session)
}

Generable 技术:获取结构化输出

@Generable 宏是获取结构化输出的关键工具。它允许开发者定义 Swift 结构体或枚举,模型将据此生成符合类型规范的数据。

@Generable
struct NPC {
  let name: String
  let coffeeOrder: String
}

通过 Guide 宏可以进一步约束输出。开发者可以为数值类型指定范围,为数组指定数量,甚至使用正则表达式精确控制字符串格式。

@Generable
struct NPC {
  @Guide(description: "全名")
  let name: String
  @Guide(.range(1...10))
  let level: Int
  @Guide(.count(3))
  let attributes: [Attribute]
}

动态模式:运行时定义结构

对于需要在运行时动态定义结构的情况,Foundation Models 提供了 DynamicGenerationSchema。开发者可以在运行时构建模式,模型将据此生成符合规范的内容。

let riddleSchema = DynamicGenerationSchema(
  name: "Riddle",
  properties: [
    .init(name: "question", mode: .string),
    .init(name: "answers", mode: .array(element: .reference("Answer")))
  ]
)

动态模式特别适用于用户自定义内容的场景,如游戏关卡编辑器等应用。

工具调用:扩展模型能力

工具调用功能使模型能够访问开发者定义的函数,极大地扩展了模型的能力。开发者需要定义符合 Tool 协议的结构体。

struct FindContactTool: Tool {
  let name = "findContact"
  let description = "从指定年龄段查找联系人。"
    
  @Generable
  struct Arguments {
    let generation: Generation
  }
  
  func call(arguments: Arguments) async throws -> ToolOutput {
    // 实现联系人查找逻辑
    return ToolOutput(contactName)
  }
}

工具特别适合访问隐私敏感数据,如通讯录或日历信息。由于 Foundation Models 在设备端运行,这些数据不会离开用户设备。

总结与最佳实践

Foundation Models 框架为开发者提供了强大的设备端 AI 能力。以下是一些关键建议:

  1. 对于固定结构的内容,优先使用 @Generable
  2. 需要运行时定义结构时,考虑使用动态模式
  3. 工具调用是实现个性化体验的强大工具
  4. 注意处理上下文窗口限制和语言支持问题

通过合理组合这些功能,开发者可以在保护用户隐私的同时,创造出丰富多样的 AI 体验。