Claude for Foundation Modelsは、AppleのFoundation Modelsフレームワークにおいて、Claudeをサーバーサイド言語モデルとして利用可能にするSwiftパッケージです。このパッケージはClaudeをフレームワークのLanguageModelプロトコルに準拠させるため、Appleのオンデバイスモデルで使用するのと同じLanguageModelSession APIで操作できます。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: .sonnet4_6,
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: .opus4_8, auth: auth)定数はAPIモデルIDを反映しており(.opus4_8はclaude-opus-4-8)、各モデルのケイパビリティを保持しています。新しいモデルはパッケージリリースで新しい定数として提供されます。最新のリストはXcodeでClaudeModelを確認し、モデルの比較にはモデル概要を参照してください。
各ClaudeModelは、受け付ける内容を宣言します。サンプリングパラメータ、エフォートレベル、アダプティブシンキング、構造化出力、画像入力などです。モデルが拒否するフィールドを送信するとハードエラーになるため、パッケージはこの情報を使用してどのリクエストフィールドを送信するかを決定します。定数は正しいケイパビリティを保持しています。コンパイルに含まれていないIDの場合は、モデルが受け付ける内容を宣言してください(推測する省略記法は意図的に用意されていません)。
let model = ClaudeModel(
id: "claude-experimental-x",
capabilities: .init(samplingParams: false, effortLevels: [.low, .high])
)
ClaudeLanguageModel(name: model, auth: auth)fixedEffort:を使用すると、すべてのリクエストに対してClaudeのエフォートレベルを固定できます。これはフレームワークのリクエストごとの推論ヒントよりも優先されます。また、フレームワークの推論レベルはhighまでしかないため、.xhighや.maxをリクエストする唯一の方法でもあります。エフォートが送信されない場合、APIはデフォルトでhighを使用します。
ClaudeLanguageModel(name: .opus4_8, auth: auth, fixedEffort: .xhigh)レベルはモデルが受け付けるものでなければなりません。各ClaudeModelは、5つのレベル(low、medium、high、xhigh、max)のうちどれを受け付けるか(受け付ける場合)を宣言します。エフォートをまったく受け付けないモデルもあります。
Appleのオンデバイスモデルは高速でプライベート、オフラインでも動作しますが、軽量なタスク向けのサイズです。より大きなコンテキスト、最先端の推論、またはウェブ検索やコード実行などのサーバーサイドツールが必要な場合はClaudeにエスカレートしてください。どちらも同じLanguageModelSession APIを使用するため、model:引数を入れ替えるだけで切り替えられます。
auth:パラメータで認証情報を設定します。
開発中はAPIキーを直接渡します。
ClaudeLanguageModel(name: .sonnet4_6, auth: .apiKey("YOUR_API_KEY"))アプリにバンドルされたキーは出荷バイナリから抽出可能であり、抽出した人は誰でもあなたのアカウントに課金されるリクエストを実行できます。.apiKeyは開発時のみに使用し、リリース前にプロキシに切り替えてください。
本番環境では、.proxiedを使用して自身のバックエンド経由でリクエストをルーティングします。baseURLにあるリレーがサーバーサイドでClaude APIの認証情報を追加するため、アプリにキーを含める必要がありません。指定したheadersはすべてのリクエストで送信されるため、プロキシは呼び出し元を認可できます。不要な場合は[:]を渡してください。
ClaudeLanguageModel(
name: .sonnet4_6,
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: .sonnet4_6,
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?