
Ollamasharp为Ollama API提供了.NET绑定,从而简化了与本地和远程Ollama的相互作用。
✅支持Microsoft.extensions.ai和Microsoft语义内核
Ollamasharp将每个Ollama API端点包裹在完全支持响应流的等待方法中。
以下列表显示了一些简单的代码示例。
ℹ尝试本存储库中包含的Full精选演示应用程序
// set up the client
var uri = new Uri ( " http://localhost:11434 " ) ;
var ollama = new OllamaApiClient ( uri ) ;
// select a model which should be used for further operations
ollama . SelectedModel = " llama3.1:8b " ; var models = await ollama . ListLocalModelsAsync ( ) ; await foreach ( var status in ollama . PullModelAsync ( " llama3.1:405b " ) )
Console . WriteLine ( $" { status . Percent } % { status . Status } " ) ; await foreach ( var stream in ollama . GenerateAsync ( " How are you today? " ) )
Console . Write ( stream . Response ) ; var chat = new Chat ( ollama ) ;
while ( true )
{
var message = Console . ReadLine ( ) ;
await foreach ( var answerToken in chat . SendAsync ( message ) )
Console . Write ( answerToken ) ;
}
// messages including their roles and tool calls will automatically be tracked within the chat object
// and are accessible via the Messages property Microsoft建立了一个抽象库,以简化不同AI提供商的使用。如果您打算构建可能使用不同提供商(例如Chatgpt,Claude和Local Models)使用Ollama的应用程序的应用程序,这是一个非常有趣的概念。
我鼓励您阅读他们的接入介绍Microsoft.extensions.ai预览 - .NET的统一AI构建块。
Ollamasharp是其IChatClient和IEmbeddingGenerator的第一个完整实现,它可以像其他所有聊天提供商一样使用Ollama。
为此,只需将OllamaApiClient用作IChatClient而不是IOllamaApiClient 。
// install package Microsoft.Extensions.AI.Abstractions
private static IChatClient CreateChatClient ( Arguments arguments )
{
if ( arguments . Provider . Equals ( " ollama " , StringComparison . OrdinalIgnoreCase ) )
return new OllamaApiClient ( arguments . Uri , arguments . Model ) ;
else
return new OpenAIChatClient ( new OpenAI . OpenAIClient ( arguments . ApiKey ) , arguments . Model ) ; // ChatGPT or compatible
} 笔记
IOllamaApiClient提供了许多Ollama特定的方法,这些方法IChatClient和IEmbeddingGenerator Miss。因为这些是抽象的,所以IChatClient和IEmbeddingGenerator永远不会实施完整的Ollama API规范。但是, OllamaApiClient实现了三个接口:本机IOllamaApiClient和Microsoft IChatClient和IEmbeddingGenerator<string, Embedding<float>>它允许您随时随地将其施放到这两个接口中的任何一个中。
图标和名称是从惊人的Ollama项目中重新使用的。
我要感谢所有花时间改善Ollamasharp的贡献者。首先,米利·坦(Mili-Tan)总是与Ollamasharp保持与Ollama API同步。 ❤