找回密码
 立即注册
首页 业界区 安全 Ollama系列06:C#使用OllamaSharp集成Ollama服务 ...

Ollama系列06:C#使用OllamaSharp集成Ollama服务

铜坠匍 2025-6-1 20:25:38
本文是Ollama系列教程的第6篇,主要介绍如何通过SDK将ollama集成到c#程序中。
Ollama系列教程目录(持续更新中):

  • 轻松3步本地部署deepseek
  • 快速上手搭建私有的AI对话框和智能体—chatbox版
  • 快速上手搭建私有的AI对话框和智能体—cherryStudio版
  • 进阶篇-搭建专属的知识库和问答系统—cherryStudio版
  • 进阶篇-Ollama API 使用指南
Ollama 提供了HTTP API的访问,如果需要使用SDK集成到项目中,需要引用第三方库OllamaSharp,直接使用nuget进行安装即可。
1.jpeg

功能亮点


  • 简单易用:几行代码就能玩转Ollama
  • 值得信赖:已为Semantic Kernal、.NET Aspire和Microsoft.Extensions.AI提供支持
  • 全接口覆盖:支持所有Ollama API接口,包括聊天对话、嵌入生成、模型列表查看、模型下载与创建等
  • 实时流传输:直接将响应流推送到您的应用
  • 进度可视化:实时反馈模型下载等任务的进度状态
  • 工具引擎:通过源码生成器提供强大的工具支持
  • 多模态能力:支持视觉模型处理
调用示例

初始化client
  1. // set up the client
  2. var uri = new Uri("http://localhost:11434");
  3. var ollama = new OllamaApiClient(uri);
复制代码
获取模型列表
  1. // list models
  2. var models = await ollama.ListLocalModelsAsync();
  3. if (models != null && models.Any())
  4. {
  5.     Console.WriteLine("Models: ");
  6.     foreach (var model in models)
  7.     {
  8.         Console.WriteLine("  " + model.Name);
  9.     }
  10. }
复制代码
创建对话
  1. // chat with ollama
  2. var chat = new Chat(ollama);
  3. Console.WriteLine();
  4. Console.WriteLine($"Chat with {ollama.SelectedModel}");
  5. while (true)
  6. {
  7.     var currentMessageCount = chat.Messages.Count;
  8.     Console.Write(">>");
  9.     var message = Console.ReadLine();
  10.     await foreach (var answerToken in chat.SendAsync(message, Tools))
  11.         Console.Write(answerToken);
  12.     Console.WriteLine();
  13.     // find the latest message from the assistant and possible tools
  14.     var newMessages = chat.Messages.Skip(currentMessageCount - 1);
  15.     foreach (var newMessage in newMessages)
  16.     {
  17.         if (newMessage.ToolCalls?.Any() ?? false)
  18.         {
  19.             Console.WriteLine("\nTools used:");
  20.             foreach (var function in newMessage.ToolCalls.Where(t => t.Function != null).Select(t => t.Function))
  21.             {
  22.                 Console.WriteLine($"  - {function!.Name}");
  23.                 Console.WriteLine($"    - parameters");
  24.                 if (function?.Arguments is not null)
  25.                 {
  26.                     foreach (var argument in function.Arguments)
  27.                         Console.WriteLine($"      - {argument.Key}: {argument.Value}");
  28.                 }
  29.             }
  30.         }
  31.         if (newMessage.Role.GetValueOrDefault() == OllamaSharp.Models.Chat.ChatRole.Tool)
  32.             Console.WriteLine($"    - results: "{newMessage.Content}"");
  33.     }
  34. }
复制代码
Tools
如果是LLM是大脑,那么工具就是四肢,通过工具我们能具备LLM与外界交互的能力。
定义工具:
  1. /// <summary>
  2. /// Gets the current datetime
  3. /// </summary>
  4. /// <returns>The current datetime</returns>
  5. [OllamaTool]
  6. public static string GetDateTime() => $"{DateTime.Now: yyyy-MM-dd HH:mm:ss ddd}";
复制代码
使用工具:
  1. public static List<object> Tools { get; } = [
  2.     new GetDateTimeTool(),
  3. ];
  4. await chat.SendAsync(message, Tools)
复制代码

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册