次の方法で共有


.NET .NET Aspire Community Toolkit Ollama の統合

含まれるもの:ホスティング統合Client 統合

手記

この統合は .NET.NET Aspire Community Toolkit の一部であり、は .NET.NET Aspire チームによって正式にサポート されていません。

Ollama は、指定されたプロンプトに基づいてテキストを生成するために使用できる、強力なオープン ソース言語モデルです。 .NET .NET Aspire Ollama 統合では、docker.io/ollama/ollama コンテナー イメージ を使用して Ollama モデルをホストし、OllamaSharpclientを介してそれらにアクセスする方法が提供されます。

ホスティング統合

Ollama ホスティング統合は、OllamaResource 型として Ollama server をモデル化し、モデルを OllamaModelResource 型として表す AddModel 拡張メソッドを使用して、server にモデルを追加する機能を提供します。 📦 CommunityToolkit を追加するために、これらの型と API にアクセスして、Aspire.Hosting.Ollama NuGet パッケージを アプリ ホスト プロジェクトに含めます。

dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

詳細については、「dotnet パッケージ の追加」または「.NET アプリケーションでのパッケージの依存関係の管理」を参照してください。

Ollama リソースを追加する

アプリ ホスト プロジェクトで、AddOllama 拡張メソッドを使用して Ollama 統合を登録して使用し、Ollama コンテナーをアプリケーション ビルダーに追加します。 その後、AddModel 拡張メソッドを使用して、コンテナーの起動時にモデルをダウンロードして実行するコンテナーに追加できます。

var builder = DistributedApplication.CreateBuilder(args);

var ollama = builder.AddOllama("ollama");

var phi35 = ollama.AddModel("phi3.5");

var exampleProject = builder.AddProject<Projects.ExampleProject>()
                            .WithReference(phi35);

または、Hugging Face モデル ハブのモデルを使用する場合は、AddHuggingFaceModel 拡張メソッドを使用できます。

var llama = ollama.AddHuggingFaceModel("llama", "bartowski/Llama-3.2-1B-Instruct-GGUF:IQ4_XS");

.NET .NET Aspire 前の例で示したように、docker.io/ollama/ollama イメージを使用してコンテナー イメージをアプリ ホストに追加すると、ローカル コンピューターに新しい Ollama インスタンスが作成されます。 詳細については、「コンテナー リソースのライフサイクルの」を参照してください。

LLM をダウンロードする

この統合の Ollama コンテナーが最初に起動すると、構成済みの LLM がダウンロードされます。 このダウンロードの進行状況は、.NET.NET Aspire ダッシュボードのこの統合の State 列に表示されます。

大事な

ダウンロードが完了するまで .NET.NET Aspire オーケストレーション アプリを開いたままにしておきます。それ以外の場合、ダウンロードは取り消されます。

LLM をキャッシュする

Ollama が実行されているコンテナーに 1 つ以上の LLM がダウンロードされ、既定ではこのコンテナーはエフェメラルです。 コンテナーの再起動中に 1 つ以上の LLM を保持する必要がある場合は、WithDataVolume メソッドを使用してコンテナーにボリュームをマウントする必要があります。

var ollama = builder.AddOllama("ollama")
                    .WithDataVolume();

var llama = ollama.AddModel("llama3");

使用可能な場合は GPU を使用する

Ollama が実行されているコンテナーに 1 つ以上の LLM がダウンロードされ、既定では、このコンテナーは CPU 上で実行されます。 GPU でコンテナーを実行する必要がある場合は、コンテナー ランタイム引数にパラメーターを渡す必要があります。

var ollama = builder.AddOllama("ollama")
                    .AddModel("llama3")
                    .WithContainerRuntimeArgs("--gpus=all");

詳細については、 Desktopでの GPU サポート 参照してください。

ホスティング統合の正常性チェック

Ollama ホスティング統合により、Ollama server とモデル リソースの正常性チェックが自動的に追加されます。 Ollama serverの場合、正常性チェックが追加され、Ollama server が実行されていること、および接続を確立できることを確認できます。 Ollama モデル リソースの場合、正常性チェックが追加され、モデルが実行されていることと、モデルが使用可能であることを確認します。つまり、モデルがダウンロードされるまで、リソースは異常としてマークされます。

Open WebUI のサポート

Ollama 統合では、Open WebUI を実行し、Ollama コンテナーと通信するためのサポートも提供されました。

var ollama = builder.AddOllama("ollama")
                    .AddModel("llama3")
                    .WithOpenWebUI();

Client 統合

.NET .NET Aspire OllamaSharp 統合の使用を開始するには、📦 CommunityToolkit をインストールします。Aspire.OllamaSharp NuGet パッケージを、clientを使用するプロジェクト、つまり、Ollama clientを使用するアプリケーションのプロジェクトです。

dotnet add package CommunityToolkit.Aspire.OllamaSharp

Ollama client API の追加

client-consuming プロジェクトの Program.cs ファイルで、AddOllamaClientApi 拡張子を呼び出して、依存関係挿入コンテナーを介して使用する IOllamaClientApi を登録します。 アプリ ホストで指定され、client-consuming プロジェクトで参照されているリソースが OllamaModelResourceの場合、AddOllamaClientApi メソッドはモデルを IOllamaClientApiの既定のモデルとして登録します。

builder.AddOllamaClientApi("llama3");

ビルダーに IOllamaClientApi を追加した後、依存関係の挿入を使用して IOllamaClientApi インスタンスを取得できます。 たとえば、サービスからコンテキスト オブジェクトを取得するには、次のようにします。

public class ExampleService(IOllamaClientApi ollama)
{
    // Use ollama...
}

キー付き Ollama client API を追加する

接続名が異なる複数の IOllamaClientApi インスタンスを登録する場合があります。 キー付き Ollama クライアントを登録するには、AddKeyedOllamaClientApi メソッドを呼び出します。

builder.AddKeyedOllamaClientApi(name: "chat");
builder.AddKeyedOllamaClientApi(name: "embeddings");

その後、依存関係の挿入を使用して IOllamaClientApi インスタンスを取得できます。 たとえば、サービスの例から接続を取得するには、次のようにします。

public class ExampleService(
    [FromKeyedServices("chat")] IOllamaClientApi chatOllama,
    [FromKeyedServices("embeddings")] IOllamaClientApi embeddingsOllama)
{
    // Use ollama...
}

構成

Ollama client 統合では、プロジェクトの要件と規則を満たす複数の構成アプローチとオプションが提供されます。

接続文字列を使用する

ConnectionStrings 構成セクションの接続文字列を使用する場合は、AddOllamaClientApi メソッドを呼び出すときに接続文字列の名前を指定できます。

builder.AddOllamaClientApi("llama");

その後、接続文字列は ConnectionStrings 構成セクションから取得されます。

{
  "ConnectionStrings": {
    "llama": "Endpoint=http//localhost:1234;Model=llama3"
  }
}

Microsoft.Extensions.AI との統合

Microsoft.Extensions.AI ライブラリは、ジェネリック インターフェイスを使用して、Ollama client API に対する抽象化を提供します。 OllamaSharp はこれらのインターフェイスをサポートしており、AddOllamaSharpChatClient および AddOllamaSharpEmbeddingGenerator 拡張メソッドを使用して登録できます。 これらのメソッドは、依存関係挿入コンテナーに IOllamaClientApi インスタンスを登録し、複数のインスタンスのキー付きバージョンも持つようになります。

builder.AddOllamaSharpChatClient("llama");

ビルダーに IChatClient を追加した後、依存関係の挿入を使用して IChatClient インスタンスを取得できます。 たとえば、サービスからコンテキスト オブジェクトを取得するには、次のようにします。

public class ExampleService(IChatClient chatClient)
{
    // Use chat client...
}

関連項目