Aracılığıyla paylaş


.NET .NET Aspire Community Toolkit Ollama tümleştirmesi

Şunları içerir:Barındırma tümleştirmesi ve Client tümleştirme

Not

Bu tümleştirme, .NET.NET Aspire Topluluk Araç Seti'nin bir parçasıdır ve , .NET.NET Aspire ekibi tarafından resmi olarak desteklenmez.

Ollama, belirli bir istem temelinde metin oluşturmak için kullanılabilecek güçlü ve açık kaynak bir dil modelidir. .NET .NET Aspire Ollama tümleştirmesi, docker.io/ollama/ollama kapsayıcı görüntüsü kullanarak Ollama modellerini barındırmak ve OllamaSharpclientaracılığıyla bunlara erişmek için bir yol sağlar.

Barındırma entegrasyonu

Ollama barındırma tümleştirmesi, Ollama server'ı OllamaResource türünde model olarak oluşturur ve AddModel uzantı yöntemini kullanarak server'ye model ekleyebilme imkanı tanır; bu da modeli OllamaModelResource türünde temsil eder. Bu türlere ve API'lere erişmek ve uygulama konağı projesinde 📦 CommunityToolkit,Aspire. Hosting.Ollama NuGet paketlerini eklemek için.

dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

Daha fazla bilgi için bkz. dotnet add package veya .NET uygulamalarında paket bağımlılıklarını yönetme.

Ollama için yeni kaynak ekle

Uygulama ana bilgisayarı projesinde, Ollama kapsayıcısını uygulama oluşturucusuna eklemek için AddOllama uzantı yöntemini kullanarak Ollama tümleştirmesini kaydedin ve kullanın. Ardından, AddModel uzantısı yöntemini kullanarak kapsayıcı başlatıldığında indirilip çalıştırılan kapsayıcıya model ekleyebilirsiniz.

var builder = DistributedApplication.CreateBuilder(args);

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

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

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

Alternatif olarak, Yüz Tanıma model hub'ından bir model kullanmak istiyorsanız AddHuggingFaceModel uzantısı yöntemini kullanabilirsiniz.

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

.NET .NET Aspire, önceki örnekte docker.io/ollama/ollama görüntüsüyle gösterildiği gibi uygulama konağına bir kapsayıcı görüntüsü eklediğinde, yerel makinenizde yeni bir Ollama örneği oluşturur. Daha fazla bilgi için, bkz Konteyner kaynak yaşam döngüsü.

LLM'yi indirme

Bu tümleştirme için Ollama kapsayıcısı ilk kez çalıştığında, yapılandırılan LLM'leri indirir. Bu indirme işleminin ilerleme durumu, .NET.NET Aspire panosundaki bu tümleştirmenin State sütununda görüntülenir.

Önemli

İndirme tamamlanana kadar .NET.NET Aspire düzenleme uygulamasını açık tutun, aksi takdirde indirme iptal edilir.

LLM'yi önbelleğe alma

Ollama'nın çalıştığı kapsayıcıya bir veya daha fazla LLM indirilir ve varsayılan olarak bu kapsayıcı kısa ömürlüdür. Kapsayıcı yeniden başlatmalarında bir veya daha fazla LLM'yi kalıcı hale getirmek istiyorsanız, WithDataVolume yöntemini kullanarak bir hacmi kapsayıcıya bağlamanız gerekir.

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

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

Kullanılabilir olduğunda GPU'ları kullanma

Ollama'nın çalıştığı kapsayıcıya bir veya daha fazla LLM indirilir ve varsayılan olarak bu kapsayıcı CPU üzerinde çalışır. Kapsayıcıyı GPU'da çalıştırmanız gerekiyorsa, kapsayıcı çalışma zamanı birleştirmelerine bir parametre geçirmeniz gerekir.

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

Daha fazla bilgi için bkz. DesktopGPU desteği.

Barındırma tümleştirme sağlık durumu denetimleri

Ollama barındırma tümleştirmesi, Ollama server ve model kaynakları için otomatik olarak bir sistem durumu denetimi ekler. Ollama serveriçin, Ollama server'in çalıştığını ve bağlantı kurulabildiğini doğrulamak amacıyla bir sağlık kontrolü eklenir. Ollama modeli kaynakları için, modelin çalıştığını ve modelin kullanılabilir olduğunu doğrulamak için bir sistem durumu denetimi eklenir, yani kaynak, model indirilene kadar iyi durumda değil olarak işaretlenir.

WebUI desteğini açma

Ollama tümleştirmesi, Open WebUI çalıştırma ve Ollama kapsayıcısıyla iletişim kurma desteği de sağladı.

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

Client entegrasyonu

.NET .NET Aspire OllamaSharp tümleştirmesini kullanmaya başlamak için 📦 CommunityToolkit'i yükleyin.AspireOllamaSharp NuGet paketini clientkullanan projede, yani Ollama clientkullanan uygulamanın projesinde.

dotnet add package CommunityToolkit.Aspire.OllamaSharp

Ollama client API'sini ekle

clientkullanan projenizin Program.cs dosyasında, bağımlılık enjeksiyonu kapsayıcısı aracılığıyla kullanmak üzere bir IOllamaClientApi kaydetmek için AddOllamaClientApi uzantısını çağırın. Uygulama sunucusunda sağlanan ve clientkullanan projede başvurulan kaynak bir OllamaModelResourceise, AddOllamaClientApi yöntemi modeli IOllamaClientApiiçin varsayılan model olarak kaydedecektir.

builder.AddOllamaClientApi("llama3");

Oluşturucuya IOllamaClientApi ekledikten sonra bağımlılık ekleme kullanarak IOllamaClientApi örneğini alabilirsiniz. Örneğin, hizmetten bağlam nesnenizi almak için:

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

Anahtarlı Ollama client API'sini ekle

Farklı bağlantı adlarına sahip birden çok IOllamaClientApi örneğini kaydetmek istediğiniz durumlar olabilir. Anahtarlı Ollama istemcilerini kaydetmek için AddKeyedOllamaClientApi yöntemini çağırın:

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

Daha sonra bağımlılık ekleme kullanarak IOllamaClientApi örneklerini alabilirsiniz. Örneğin, bağlantıyı örnek bir hizmetten almak için:

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

Konfigürasyon

Ollama client tümleştirmesi, projenizin gereksinimlerini ve kurallarını karşılamak için birden çok yapılandırma yaklaşımı ve seçeneği sağlar.

Bağlantı dizesi kullanma

ConnectionStrings yapılandırma bölümünden bir bağlantı dizesi kullanırken, AddOllamaClientApi yöntemini çağırırken bağlantı dizesinin adını sağlayabilirsiniz:

builder.AddOllamaClientApi("llama");

Ardından bağlantı dizesi ConnectionStrings yapılandırma bölümünden alınır:

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

Microsoft.Extensions.AI ile tümleştirme

Microsoft.Extensions.AI kitaplığı, genel arabirimleri kullanarak Ollama client API'sinin üzerinde bir soyutlama sağlar. OllamaSharp bu arabirimleri destekler ve AddOllamaSharpChatClient ve AddOllamaSharpEmbeddingGenerator uzantı yöntemleri kullanılarak kaydedilebilir. Bu yöntemler ayrıca IOllamaClientApi örneklerini bağımlılık ekleme kapsayıcısıyla kaydeder ve birden çok örnek için anahtarlı sürümlere sahiptir.

builder.AddOllamaSharpChatClient("llama");

Oluşturucuya IChatClient ekledikten sonra bağımlılık ekleme kullanarak IChatClient örneğini alabilirsiniz. Örneğin, hizmetten bağlam nesnenizi almak için:

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

Ayrıca bkz.