Back to OSS
Swift Package LLM / AI
swift-llm-client
プロバイダー非依存の LLM クライアント抽象化。実装を差し替え可能なコア層
Swift
llmaiclient
English | 日本語
LLMClient
プロバイダー非依存の LLM クライアント抽象化 Swift パッケージ
特徴
- プロバイダー非依存 - 統一プロトコルにより任意の LLM プロバイダーを差し替え可能
- Swift Macro ベースツール定義 -
@Toolマクロで型安全な Function Calling を実現 - 構造化出力 -
@Structuredマクロと JSON Schema による型安全な構造化レスポンス - ストリーミング - AsyncThrowingStream によるリアルタイムトークン出力
- チャット管理 - メッセージ履歴・コンテキスト管理の統一 API
インストール
// Package.swift
dependencies: [
.package(url: "https://github.com/no-problem-dev/swift-llm-client.git", .upToNextMajor(from: "1.0.0"))
]
モジュール構成
用途に応じて必要なモジュールのみをインポートできます:
| モジュール | 用途 |
|---|---|
LLMCore |
純粋ドメイン層(LLMMessage, LLMResponse, TokenUsage, ModelProfile 等) |
LLMClient |
クライアントプロトコル・構造化出力・プロンプト DSL(@Structured, SystemPrompt 等) |
LLMTool |
Swift Macro ベースのツール定義(@Tool, @ToolArgument, ToolSet) |
LLMAgentStep |
エージェントループ契約(AgentCapableClient, StreamingAgentEvent) |
LLMChat |
会話継続管理(ChatCapableClient, ConversationHistory) |
LLMContext |
コンテキストウィンドウ内訳・占有トラッキング |
LLMMediaKit |
プラットフォーム I/O(UIImage / AVFoundation 変換等) |
クイックスタート
構造化出力
import LLMClient
// @Structured マクロで型を定義
@Structured("都市情報")
struct CityInfo {
@StructuredField("都市名")
var name: String
@StructuredField("人口(万人単位)")
var population: Int
}
// クライアント(プロバイダー実装)で生成
let client: any StructuredLLMClient<LLMModel> = // 任意のプロバイダー実装
let city: CityInfo = try await client.generate(
input: "東京の人口は約1400万人です",
model: .claude(.sonnet_4_5)
)
print(city.name) // "東京"
print(city.population) // 1400
ツール定義
import LLMTool
@Tool("現在の天気を取得する")
struct GetWeather {
@ToolArgument("都市名")
var city: String
func call() async throws -> String {
// 天気 API を呼び出す
return "東京: 晴れ 25°C"
}
}
let tools = ToolSet {
GetWeather()
}
ドキュメント
詳細なガイドと API リファレンスは DocC ドキュメントを参照してください。
| ガイド | 内容 |
|---|---|
| API Reference | 全パブリック API |
要件
- iOS 17.0+ / macOS 14.0+
- Swift 6.2+
- Xcode 16.0+
ライセンス
MIT License - 詳細は LICENSE を参照