Ollama 埋め込み

Ollama (英語) を使用すると、さまざまな AI モデル (英語) をローカルで実行し、そこから埋め込みを生成できます。埋め込みは、浮動小数点数のベクトル (リスト) です。2 つのベクトル間の距離は、それらの関連性を測定します。距離が小さいと関連性が高く、距離が大きいと関連性が低いことを示します。

OllamaEmbeddingModel 実装は Ollama Embeddings API [GitHub] (英語) エンドポイントを活用します。

前提条件

まず、ローカルマシンで Ollama を実行する必要があります。ローカルマシンでモデルの実行を開始するには、公式 Ollama プロジェクト README [GitHub] (英語) を参照してください。

自動構成

Spring AI は、Azure Ollama 埋め込みモデル用の Spring Boot 自動構成を提供します。これを有効にするには、Maven pom.xml ファイルに次の依存関係を追加します。

<dependency>
   <groupId>org.springframework.ai</groupId>
   <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-ollama-spring-boot-starter'
}
依存関係管理セクションを参照して、Spring AI BOM をビルドファイルに追加してください。Spring AI アーティファクトは、Spring マイルストーンおよびスナップショットリポジトリで公開されています。これらのリポジトリをビルドシステムに追加するには、リポジトリセクションを参照してください。

埋め込みプロパティ

接頭辞 spring.ai.ollama は、Ollama への接続を構成するためのプロパティ接頭辞です。

プロパティ 説明 デフォルト

spring.ai.ollama.base-url

Ollama API サーバーが実行されているベース URL。

localhost:11434

プレフィックス spring.ai.ollama.embedding.options は、Ollama 埋め込みモデルを構成するプロパティプレフィックスです。これには、modelkeep-alivetruncate などの Ollama リクエスト (詳細) パラメーターと、Ollama モデル options プロパティが含まれます。

Ollama 埋め込みモデルの高度なリクエストパラメーターは次のとおりです。

プロパティ

説明

デフォルト

spring.ai.ollama.embedding.enabled

Ollama 埋め込みモデルの自動構成を有効にします。

true

spring.ai.ollama.embedding.options.model

使用するサポート対象モデル [GitHub] (英語) の名前。専用の埋め込みモデル (英語) 型を使用できます

ミストラル

spring.ai.ollama.embedding.options.keep_alive

リクエスト後にモデルがメモリにロードされたままになる時間を制御します

5 分

spring.ai.ollama.embedding.options.truncate

各入力の末尾を切り捨てて、コンテキストの長さに合わせます。false でコンテキストの長さを超えた場合はエラーを返します。

true

残りの options プロパティは、Ollama の有効なパラメーターと値 [GitHub] (英語) および Ollama 型 [GitHub] (英語) に基づいています。デフォルト値は、Ollama 型のデフォルト [GitHub] (英語) に基づいています。

プロパティ

説明

デフォルト

spring.ai.ollama.embedding.options.numa

NUMA を使用するかどうか。

false

spring.ai.ollama.embedding.options.num-ctx

次のトークンの生成に使用されるコンテキストウィンドウのサイズを設定します。

2048

spring.ai.ollama.embedding.options.num-batch

プロンプト処理の最大バッチサイズ。

512

spring.ai.ollama.embedding.options.num-gpu

GPU に送信するレイヤーの数。macOS では、メタルサポートを有効にする場合はデフォルトで 1、無効にする場合は 0 です。ここで 1 は、NumGPU を動的に設定する必要があることを示します

-1

spring.ai.ollama.embedding.options.main-gpu

複数の GPU を使用する場合、このオプションは、すべての GPU に計算を分割するオーバーヘッドが価値のない小さなテンソルに使用する GPU を制御します。問題の GPU は、一時的な結果用のスクラッチバッファーを保存するために、わずかに多くの VRAM を使用します。

0

spring.ai.ollama.embedding.options.low-vram

-

false

spring.ai.ollama.embedding.options.f16-kv

-

true

spring.ai.ollama.embedding.options.logits-all

最後のトークンだけでなく、すべてのトークンの logits を返します。補完が logprob を返すようにするには、これが true である必要があります。

-

spring.ai.ollama.embedding.options.vocab-only

重みではなく語彙のみをロードします。

-

spring.ai.ollama.embedding.options.use-mmap

デフォルトでは、モデルはメモリにマップされるため、システムは必要に応じてモデルの必要な部分のみを読み込むことができます。ただし、モデルが RAM の合計量よりも大きい場合、またはシステムの使用可能なメモリが少ない場合は、mmap を使用するとページアウトのリスクが高まり、パフォーマンスに悪影響を与える可能性があります。mmap を無効にすると読み込み時間が遅くなりますが、mlock を使用していない場合はページアウトが減る可能性があります。モデルが RAM の合計量よりも大きい場合、mmap をオフにするとモデルがまったく読み込まれなくなることに注意してください。

null

spring.ai.ollama.embedding.options.use-mlock

モデルをメモリにロックし、メモリマップ時にスワップアウトされないようにします。これによりパフォーマンスは向上しますが、実行により多くの RAM が必要になり、モデルが RAM にロードされるときにロード時間が遅くなる可能性があるため、メモリマッピングの利点の一部が失われます。

false

spring.ai.ollama.embedding.options.num-thread

計算中に使用するスレッドの数を設定します。デフォルトでは、Ollama は最適なパフォーマンスを得るためにこれを検出します。この値を、(論理コア数ではなく) システムに搭載されている物理 CPU コア数に設定することをお勧めします。0 = ランタイムに決定させる

0

spring.ai.ollama.embedding.options.num-keep

-

4

spring.ai.ollama.embedding.options.seed

生成に使用する乱数シードを設定します。これを特定の数値に設定すると、モデルは同じプロンプトに対して同じテキストを生成します。

-1

spring.ai.ollama.embedding.options.num-predict

テキストを生成するときに予測するトークンの最大数。(-1 = 無限生成、-2 = コンテキストを埋める)

-1

spring.ai.ollama.embedding.options.top-k

ナンセンスが生成される確率を減らします。値が大きいほど (100 など)、より多様な回答が得られますが、値が小さいほど (10 など) より保守的になります。

40

spring.ai.ollama.embedding.options.top-p

top-k と連携します。値が大きいほど (0.95 など)、より多様なテキストが生成され、値が小さいほど (0.5 など)、より焦点が絞られた控えめなテキストが生成されます。

0.9

spring.ai.ollama.embedding.options.tfs-z

テールフリーサンプリングは、出力からの可能性の低いトークンの影響を軽減するために使用されます。値が大きいほど (2.0 など)、影響はさらに軽減されますが、値 1.0 はこの設定を無効にします。

1.0

spring.ai.ollama.embedding.options.typical-p

-

1.0

spring.ai.ollama.embedding.options.repeat-last-n

繰り返しを防ぐために、モデルがどこまで遡るかを設定します。(デフォルト: 64, 0 = 無効、-1 = num_ctx)

64

spring.ai.ollama.embedding.options.temperature

モデルの温度。温度を上げると、モデルはより創造的に答えられるようになります。

0.8

spring.ai.ollama.embedding.options.repeat-penalty

繰り返しをどの程度強くペナルティするかを設定します。値が大きいほど (1.5 など)、繰り返しに対するペナルティがより強くなり、値が小さいほど (0.9 など) ペナルティがより緩やかになります。

1.1

spring.ai.ollama.embedding.options.presence-penalty

-

0.0

spring.ai.ollama.embedding.options.frequency-penalty

-

0.0

spring.ai.ollama.embedding.options.mirostat

複雑さを制御するために Mirostat サンプリングを有効にします。(default: 0, 0 = 無効、1 = ミロスタット、2 = ミロスタット 2.0)

0

spring.ai.ollama.embedding.options.mirostat-tau

出力の一貫性と多様性の間のバランスを制御します。値を低くすると、より焦点が絞られた一貫したテキストになります。

5.0

spring.ai.ollama.embedding.options.mirostat-eta

生成されたテキストからのフィードバックにアルゴリズムがどれだけ早く応答するかに影響します。学習率が低いと調整が遅くなり、学習率が高いとアルゴリズムの応答性が高くなります。

0.1

spring.ai.ollama.embedding.options.penalize-newline

-

true

spring.ai.ollama.embedding.options.stop

使用する停止シーケンスを設定します。このパターンが発生すると、LLM はテキストの生成を停止して戻ります。モデルファイルで複数の個別の停止パラメーターを指定することにより、複数の停止パターンを設定できます。

-

spring.ai.ollama.embedding.options.functions

単一のプロンプトリクエストで関数呼び出しを有効にするために、名前で識別される関数のリスト。これらの名前を持つ関数は、functionCallbacks レジストリに存在する必要があります。

-

spring.ai.ollama.embedding.options というプレフィックスが付いたすべてのプロパティは、リクエスト固有のランタイムオプションを EmbeddingRequest 呼び出しに追加することで実行時にオーバーライドできます。

ランタイムオプション

OllamaOptions.java [GitHub] (英語) は、使用するモデル、低レベルの GPU および CPU チューニングなどの Ollama 構成を提供します。

デフォルトのオプションは、spring.ai.ollama.embedding.options プロパティを使用して構成することもできます。

開始時に、OllamaEmbeddingModel(OllamaApi ollamaApi, OllamaOptions defaultOptions) を使用して、すべての埋め込みリクエストに使用されるデフォルトのオプションを構成します。実行時に、OllamaOptions インスタンスを EmbeddingRequest の一部として使用して、デフォルトのオプションをオーバーライドできます。

たとえば、特定のリクエストのデフォルトのモデル名をオーバーライドするには、次のようにします。

EmbeddingResponse embeddingResponse = embeddingModel.call(
    new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
        OllamaOptions.builder()
            .withModel("Different-Embedding-Model-Deployment-Name"))
            .withtTuncates(false)
            .build());

サンプルコントローラー

これにより、クラスに注入できる EmbeddingModel 実装が作成されます。以下は、EmbeddingModel 実装を使用する単純な @Controller クラスの例です。

@RestController
public class EmbeddingController {

    private final EmbeddingModel embeddingModel;

    @Autowired
    public EmbeddingController(EmbeddingModel embeddingModel) {
        this.embeddingModel = embeddingModel;
    }

    @GetMapping("/ai/embedding")
    public Map embed(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of(message));
        return Map.of("embedding", embeddingResponse);
    }
}

手動構成

Spring Boot を使用していない場合は、OllamaEmbeddingModel を手動で構成できます。このために、プロジェクトの Maven pom.xml ファイルに spring-ai-ollama 依存関係を追加します。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-ollama</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-ollama'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。
spring-ai-ollama 依存関係により、OllamaChatModel へのアクセスも提供されます。OllamaChatModel の詳細については、Ollama チャットクライアントセクションを参照してください。

次に、OllamaEmbeddingModel インスタンスを作成し、専用の chroma/all-minilm-l6-v2-f32 埋め込みモデルを使用して 2 つの入力テキストの埋め込みを計算します。

var ollamaApi = new OllamaApi();

var embeddingModel = new OllamaEmbeddingModel(ollamaApi,
        OllamaOptions.builder()
			.withModel(OllamaModel.MISTRAL.id())
            .build());

EmbeddingResponse embeddingResponse = embeddingModel.call(
    new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
        OllamaOptions.builder()
            .withModel("chroma/all-minilm-l6-v2-f32"))
            .withTruncate(false)
            .build());

OllamaOptions は、すべての埋め込みリクエストの構成情報を提供します。