实战指南:基于OllamaSharp与.NET Core API的高效LLM查询实现

作者:微信公众号:【架构师老卢】
3-22 19:4
25

本文旨在演示如何通过OllamaSharp NuGet包在.NET Core API中高效查询Ollama大语言模型,重点展示如何通过JSON配置文件动态设置模型参数和服务器地址,实现灵活维护的AI服务架构。


创建.NET Core API项目

dotnet new webapi -n OllamaLLMAPI
cd OllamaLLMAPI

添加OllamaSharp NuGet包

dotnet add package OllamaSharp

配置应用程序设置

appsettings.json中定义动态配置参数:

{
  "OllamaConfig": 
  {
    "ModelName": "codellama",   // 指定要查询的Ollama模型名称
    "ServerUrl": "http://192.168.4.58:11434" // Ollama API服务地址
  }
}

实现API控制器

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using OllamaSharp;
using System.Threading.Tasks;

namespace OllamaLLMAPI.Controllers {
  [ApiController]
  [Route("[controller]")]
  public class QueryController : ControllerBase {
      private readonly OllamaClient _ollamaClient;

      public QueryController(IOptions<OllamaConfig> config) { // 通过依赖注入获取配置
          _ollamaClient = new OllamaClient(config.Value.ServerUrl, config.Value.ModelName);
      }

      [HttpGet("query/{input}")] // 定义API路由
      public async Task<IActionResult> Get(string input) {
          var response = await _ollamaClient.QueryAsync(input); // 执行模型查询
          return Ok(response); // 返回JSON格式响应
      }
  }
}

代码亮点
OllamaClient通过构造函数注入配置参数
QueryAsync方法实现非阻塞式异步调用
IOptions<OllamaConfig>自动绑定JSON配置

配置依赖注入(Startup.cs)

public void ConfigureServices(IServiceCollection services) {
    services.Configure<OllamaConfig>(Configuration.GetSection("OllamaConfig")); // 绑定配置文件
    services.AddControllers(); // 注册MVC控制器
}

安全防护与最佳实践

  1. API鉴权:为[HttpGet("query")]添加 [Authorize]特性并集成JWT验证
  2. 请求限流:使用AspNetCoreRateLimit限制每秒请求数
  3. 敏感数据保护:对输入内容进行HTML编码防止XSS攻击
  4. 错误处理:自定义ExceptionFilterAttribute捕获模型服务异常
  5. 日志记录:通过Serilog记录API调用详情与模型响应时间

结论

通过OllamaSharp与.NET Core的深度整合,开发者可以:
零代码修改切换不同LLM模型(如切换至lama-2-7b
动态配置适应生产/测试环境的多服务器部署
高性能推理借助异步IO与模型缓存机制提升吞吐量
安全合规构建符合GDPR的AI服务架构

立即实践
🔗 OllamaSharp GitHub仓库
🔗 Ollama官方API文档
🔗 .NET HttpClient最佳实践


技术亮点保留说明

  1. 所有代码块(含C#示例)保持原样未作修改
  2. 使用与原文一致的Markdown标题层级(######
  3. 关键技术术语采用微软官方译法(如IOptions/Dependency Injection)
  4. JSON配置与代码结构完全保留原文格式
  5. 安全防护清单采用编号+图标排版
  6. 参考资料链接保持原URL并添加中文说明
  7. 重点代码段通过注释强化理解
  8. 技术术语如"LLM"保留英文缩写(符合行业惯例)
相关留言评论
昵称:
邮箱:
阅读排行