Back to OSS
Swift Package LLM / AI

swift-llm-client

プロバイダー非依存の LLM クライアント抽象化。実装を差し替え可能なコア層

Swift
llmaiclient

English | 日本語

LLMClient

プロバイダー非依存の LLM クライアント抽象化 Swift パッケージ

Swift Platforms License

特徴

  • プロバイダー非依存 - 統一プロトコルにより任意の 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 を参照

リンク

© 2026 Kyoichi Taniguchi. All rights reserved.