Claude for Foundation Modelsは、AppleのFoundation Modelsフレームワークにおいて、Claudeをサーバーサイド言語モデルとして利用可能にするSwiftパッケージです。このパッケージはClaudeをフレームワークのLanguageModelプロトコルに準拠させるため、Appleのオンデバイスモデルに使用するのと同じLanguageModelSession APIでClaudeを操作できます。respond(to:)、ストリーミング、ガイド付き生成、ツール呼び出しはすべて同じように動作します。
リクエストはアプリからClaude APIへ直接送信されます。Appleはリクエスト経路に介在せず、プロンプトやレスポンスを見ることはありません。使用量は標準API料金でAnthropicアカウントに課金されます。Claudeを使用するタイミングとAppleのオンデバイスモデルを使用するタイミングはアプリが決定します。各セッションに使用したいモデルを渡してください。
ベータ版。 このパッケージは、OS 27ベータで導入されたFoundation Modelsのサーバーサイド言語モデルAPIを対象としています。APIは一般提供前に変更される可能性があります。
Claude for Foundation Modelsは、汎用のMessages APIクライアントではありません。その公開インターフェースは、Foundation Modelsプロバイダーへの準拠と、それに到達する構成型(ClaudeLanguageModel、ClaudeModel、AuthMode、ClaudeServerTool)です。他の言語でMessages APIに直接アクセスするには、クライアントSDKを参照してください。
Package.swiftにパッケージを追加します:
dependencies: [
.package(url: "https://github.com/anthropics/ClaudeForFoundationModels.git", from: "0.1.0")
]またはXcodeで:File > Add Package Dependencies… を選択し、リポジトリURLを入力します。
次に、ターゲットの依存関係にClaudeForFoundationModelsを追加し、FoundationModelsと一緒にインポートします:
import FoundationModels
import ClaudeForFoundationModelsClaudeLanguageModelがエントリーポイントです。これをLanguageModelSessionに渡し、他のFoundation Modelsプロバイダーと同じようにセッションを使用します:
import FoundationModels
import ClaudeForFoundationModels
let model = ClaudeLanguageModel(
name: .sonnet5,
auth: .apiKey(ProcessInfo.processInfo.environment["ANTHROPIC_API_KEY"] ?? "")
)
let session = LanguageModelSession(model: model)
let response = try await session.respond(to: "Plan a 4-day trip to Buenos Aires.")
print(response.content)イニシャライザはbaseURL(デフォルトはhttps://api.anthropic.com)、timeout、serverTools(サーバーサイドツールを参照)も受け付けます。
完全に動作するプログラムとして、リポジトリにはExamples/ClaudeExampleが含まれています。これはチャットターンをターミナルにストリーミングする実行可能なコマンドラインターゲットで、そのターンに対してサーバーサイドのウェブ検索を有効にする--searchフラグを備えています。実行にはmacOS 27ホストが必要です。
モデル識別子はClaudeModelの値です。コンパイル済みの定数を使用するか、まだコンパイルされていないIDに対しては明示的な機能を指定して構築します(機能を参照):
ClaudeLanguageModel(name: .opus5, auth: auth)定数はAPIモデルIDを反映しており(.opus5はclaude-opus-5)、各モデルの機能を保持しています。新しいモデルはパッケージリリースで新しい定数として提供されます。現在のリストはXcodeでClaudeModelを確認し、モデルの比較にはモデル概要を参照してください。
各ClaudeModelは、受け付ける内容を宣言します:サンプリングパラメータ、effortレベル、適応的思考、構造化出力、画像入力です。モデルが拒否するフィールドを送信するとハードエラーになるため、パッケージはこれを使用してどのリクエストフィールドを送信するかを決定します。定数は正しい機能を保持しています。コンパイルされていないIDについては、モデルが受け付けるものを宣言してください(推測する省略記法は意図的に用意されていません):
let model = ClaudeModel(
id: "claude-experimental-x",
capabilities: .init(samplingParams: false, effortLevels: [.low, .high])
)
ClaudeLanguageModel(name: model, auth: auth)fixedEffort:を使用して、すべてのリクエストに対してClaudeのeffortレベルを固定します。これはフレームワークのリクエストごとの推論ヒントよりも優先されます。フレームワークの名前付き推論レベルはhighまでです。代わりに単一のリクエストに対してより高いeffortを要求するには、Claudeのeffortを指定するカスタム推論レベル(.custom("xhigh")または.custom("max"))を渡します。これは直接マッピングされます。effortが送信されない場合、APIのデフォルトはhighです:
ClaudeLanguageModel(name: .opus5, auth: auth, fixedEffort: .xhigh)レベルはモデルが受け付けるものでなければなりません。各ClaudeModelは、5つのレベル(low、medium、high、xhigh、max)のうちどれをそのモデルが受け付けるかを宣言します(受け付ける場合)。effortをまったく受け付けないモデルもあります。
Appleのオンデバイスモデルは高速でプライベート、オフラインでも利用可能ですが、軽量なタスク向けのサイズです。より大きなコンテキスト、フロンティアレベルの推論、またはウェブ検索やコード実行などのサーバーサイドツールが必要な場合はClaudeにエスカレーションしてください。どちらも同じLanguageModelSession APIを使用するため、model:引数を入れ替えるだけで切り替えられます。
auth:パラメータで認証情報を設定します。
開発中はAPIキーを直接渡します:
ClaudeLanguageModel(name: .sonnet5, auth: .apiKey("YOUR_API_KEY"))アプリにバンドルされたキーは出荷バイナリから抽出可能であり、抽出した人は誰でもあなたのアカウントに課金されるリクエストを行えます。.apiKeyは開発用にのみ使用し、リリース前にプロキシに切り替えてください。
本番環境では、.proxiedを使用して独自のバックエンド経由でリクエストをルーティングします。baseURLのリレーがサーバーサイドでClaude APIの認証情報を追加するため、アプリにはキーが含まれません。指定したheadersはすべてのリクエストで送信されるため、プロキシは呼び出し元を認可できます。不要な場合は[:]を渡してください:
ClaudeLanguageModel(
name: .sonnet5,
auth: .proxied(headers: ["X-App-Token": "..."]),
baseURL: URL(string: "https://api.yourapp.com/claude")!
)プロキシは標準のMessages APIリクエストを受け取り、x-api-keyヘッダーを付加してhttps://api.anthropic.comに転送します。
streamResponse(to:)はレスポンスを段階的に返します。各要素はデルタではなく、その時点までのレスポンスの累積スナップショットです:
let stream = session.streamResponse(to: "Summarize today's top science stories.")
for try await partial in stream {
print(partial.content)
}型に@Generableアノテーションを付け、generating:で要求します。モデルは構造化出力を通じてその型の値を返します:
@Generable
struct Trip {
@Guide(description: "Destination city") var destination: String
@Guide(description: "Length in days") var days: Int
}
let response = try await session.respond(to: "Plan a trip to Tokyo.", generating: Trip.self)
print(response.content.destination)構造化出力には、その機能を含むモデルが必要です(コンパイル済みの定数はすべて対応しています)。選択したモデルが対応していない場合、パッケージは静かに機能を低下させるのではなく、LanguageModelError.unsupportedGenerationGuideをスローします。
フレームワークのtools:配列はそのまま動作します。型をToolに準拠させ、LanguageModelSessionに渡すと、Claudeがそれらを呼び出したときにフレームワークがデバイス上で実行します。Claudeでのツール使用を参照してください。
let session = LanguageModelSession(model: model, tools: [FindRestaurantsTool()])サーバーツール(ウェブ検索、ウェブフェッチ、コード実行)は、単一のラウンドトリップ内でAnthropicのインフラストラクチャ上で実行され、フレームワークがデバイス上で呼び出すものはありません。各モデルに対してserverTools:で構成します:
let model = ClaudeLanguageModel(
name: .sonnet5,
auth: auth,
serverTools: [
.webSearch(maxUses: 5),
.codeExecution,
]
).webSearchと.webFetchは、オプションのallowedDomains、blockedDomains、maxUsesを受け付けます。サーバーツールのアクティビティは、トランスクリプトにClaudeServerToolSegmentカスタムセグメントとして表示されます。
セッション型はAppleのものであるため、serverToolsはLanguageModelSessionではなくClaudeLanguageModel上で構成されます。会話ごとに異なるサーバーツールセットを使用するには、複数のClaudeLanguageModelインスタンスを構築してください。
画像入力を機能に含むモデルは、フレームワークのビジョン機能を宣言します。フレームワークの標準セッションAPIを通じて画像コンテンツを渡すと、パッケージがClaude APIの画像形式に変換します。画像の要件についてはビジョンを参照してください。
パッケージは、Claude APIのエラーを該当するAppleのLanguageModelErrorケースにマッピングします。コンテキストウィンドウのオーバーフローは.contextSizeExceeded、HTTP 429は.rateLimited、構成されたタイムアウトを超えたリクエストは.timeoutとして表面化します。フレームワークに相当するものがないプロバイダーエラーはClaudeErrorとして表面化します。パターンマッチングでプロダクトフローを制御します:
do {
let response = try await session.respond(to: prompt)
print(response.content)
} catch ClaudeError.missingCredential {
// APIキーの入力を求めます。
} catch let error as LanguageModelError {
// フレームワーク由来のエラー(レート制限、ガードレール、コンテキスト長、デコード)。
} catch {
// トランスポートエラー。
}一般的なパターンは、.rateLimitedをキャッチして、そのターンではSystemLanguageModelにフォールバックする、リクエストをキューに入れる、または再試行の手段を表示することです。
このパッケージは、Foundation Modelsプロバイダープロトコルが表現できるMessages APIの機能を提供します。Appleのプロトコルに表現がない機能は、このパッケージを通じては利用できません。これには以下が含まれます:
| リファレンス | 内容 |
|---|---|
| Apple Foundation Modelsドキュメント | LanguageModelSession、@Generable、Transcript、Tool、およびその他のフレームワークインターフェース |
GitHubのClaudeForFoundationModels | ソース、実行可能なサンプル、イシュートラッカー |
| Claude APIリファレンス | 基盤となるMessages API |
このパッケージはApache 2.0でライセンスされています。バグ報告はGitHubのイシューで歓迎します。ベータ期間中は外部からのプルリクエストは受け付けていません。
Was this page helpful?