网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > .Net >

.Net9中通过HttpClient简单调用Ollama中的DeepSeek R1模型

时间:2025-02-08 15:28

人气:

作者:admin

标签:

导读:本文主要使用.Net9中的HttpClient组件,调用本地部署的Ollama提供的API接口,获取对应的问答信息。 1、#129351;测试环境 VS2022; .Net9控制台程序; HttpClient组件; 本地部署的Ollama环境 DeepSee...

本文主要使用.Net9中的HttpClient组件,调用本地部署的Ollama提供的API接口,获取对应的问答信息。

  • VS2022;

  • .Net9控制台程序;

  • HttpClient组件;

  • 本地部署的Ollama环境

  • DeepSeek R1模型(deepseek-r1:1.5b)

关于本地部署的Ollama环境,可参见文章【通过Ollama本地部署DeepSeek R1以及简单使用的教程(超详细)】。


我们使用VS2022创建一个基于.Net9的控制台程序,具体如下所示:

控制台程序

控制台程序

控制台程序

上述我们就创建好了一个控制台程序。


Ollama为我们提供了多种接口,最常用的接口为:

  • POST /api/generate

  • POST /api/chat

上述两个接口为最常用的,具体说明可参见【https://github.com/ollama/ollama/blob/main/docs/api.md】说明,如下所示为部分使用说明的截图:

Ollama接口

Ollama接口


4.1、????generate接口

我们在Program.cs文件中编写具体的代码。

具体代码实现如下所示(复制粘贴即可运行),都有对应的说明:

using System.Data;
using System.Text;
using System.Text.Json;

// HttpClient实例
var httpClient = new HttpClient();

// Ollama API请求地址
var requestUrl = "http://localhost:11434/api/generate";

Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("请输入对话内容(输入exit退出):");

while (true)
{
    // 读取输入的内容
    var input = Console.ReadLine();

    if (input != null && input.ToLower() == "exit")
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("程序即将退出...");

        // 退出循环,程序结束
        break;
    }

    // 请求参数
    var requestData = new
    {
        // 指定模型标识符
        model = "deepseek-r1:1.5b",
        // 输入的提示文本
        prompt = input,
        // 是否启用流式响应
        stream = true,
        // 其他选项
        options = new
        {
            // 控制生成随机性(0-1)
            temperature = 0.7,
            // 最大生成 token 数
            max_tokens = 500
        }
    };

    // 创建HttpRequestMessage实例以及设置请求内容
    using var request = new HttpRequestMessage(HttpMethod.Post, requestUrl);
    request.Content = new StringContent(JsonSerializer.Serialize(requestData), Encoding.UTF8, "application/json");

    // 发送请求并获取响应
    using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
    await using var stream = await response.Content.ReadAsStreamAsync();
    using var reader = new StreamReader(stream);

    // 循环读取响应流
    while (!reader.EndOfStream)
    {
        var content = await reader.ReadLineAsync();
        if (!string.IsNullOrEmpty(content))
        {
            var partialResponse = JsonSerializer.Deserialize<OllamaResponse>(content);

            // 输出响应内容
            Console.ForegroundColor = ConsoleColor.White;
            Console.Write(partialResponse?.response);
        }
    }

    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("\r\n\r\n请输入对话内容(输入exit退出):");
}

/// <summary>
/// Ollama API响应实体类
/// </summary>
public class OllamaResponse
{
    /// <summary>
    /// 模型标识符
    /// </summary>
    public string model { get; set; }

    /// <summary>
    /// 创建时间戳
    /// </summary>
    public string created_at { get; set; }

    /// <summary>
    /// 响应内容
    /// </summary>
    public string response { get; set; }

    /// <summary>
    /// 是否完成
    /// </summary>
    public bool done { get; set; }

    /// <summary>
    /// 完成原因
    /// </summary>
    public string done_reason { get; set; }

    public int[] context { get; set; }
    public long total_duration { get; set; }
    public long load_duration { get; set; }
    public int prompt_eval_count { get; set; }
    public long prompt_eval_duration { get; set; }
    public int eval_count { get; set; }
    public long eval_duration { get; set; }
}

运行效果:

运行效果

4.2、????chat接口

我们在Program.cs文件中编写具体的代码。

具体代码实现如下所示(复制粘贴即可运行),都有对应的说明:

using System.Data;
using System.Text;
using System.Text.Json;

// HttpClient实例
var httpClient = new HttpClient();

// Ollama API请求地址
var requestUrl = "http://localhost:11434/api/chat";

Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("请输入对话内容(输入exit退出):");

while (true)
{
    // 读取输入的内容
    var input = Console.ReadLine();

    if (input != null && input.ToLower() == "exit")
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("程序即将退出...");

        // 退出循环,程序结束
        break;
    }

    // 请求参数
    var requestData = new
    {
        // 指定模型标识符
        model = "deepseek-r1:1.5b",
        // 输入的提示文本
        messages = new[]
        {
            new { role = "user", content = input }
        },
        // 是否启用流式响应
        stream = true,
        // 其他选项
        options = new
        {
            // 控制生成随机性(0-1)
            temperature = 0.7,
            // 最大生成 token 数
            max_tokens = 500
        }
    };

    // 创建HttpRequestMessage实例以及设置请求内容
    using var request = new HttpRequestMessage(HttpMethod.Post, requestUrl);
    request.Content = new StringContent(JsonSerializer.Serialize(requestData), Encoding.UTF8, "application/json");

    // 发送请求并获取响应
    using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
    await using var stream = await response.Content.ReadAsStreamAsync();
    using var reader = new StreamReader(stream);

    // 循环读取响应流
    while (!reader.EndOfStream)
    {
        var content = await reader.ReadLineAsync();
        if (!string.IsNullOrEmpty(content))
        {
            var partialResponse = JsonSerializer.Deserialize<OllamaResponse>(content);

            // 输出响应内容
            Console.ForegroundColor = ConsoleColor.White;
            Console.Write(partialResponse?.message.content);
        }
    }

    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("\r\n\r\n请输入对话内容(输入exit退出):");
}

/// <summary>
/// Ollama API响应实体类
/// </summary>
public class OllamaResponse
{
    /// <summary>
    /// 模型标识符
    /// </summary>
    public string model { get; set; }

    /// <summary>
    /// 创建时间戳
    /// </summary>
    public string created_at { get; set; }

    /// <summary>
    /// 响应内容
    /// </summary>
    public OllamaResponseMessage message { get; set; }

    /// <summary>
    /// 是否完成
    /// </summary>
    public bool done { get; set; }

    /// <summary>
    /// 完成原因
    /// </summary>
    public string done_reason { get; set; }

    public long total_duration { get; set; }
    public long load_duration { get; set; }
    public int prompt_eval_count { get; set; }
    public long prompt_eval_duration { get; set; }
    public int eval_count { get; set; }
    public long eval_duration { get; set; }
}

/// <summary>
/// Ollama API响应实体类的message子类
/// </summary>
public class OllamaResponseMessage
{
    /// <summary>
    /// 角色
    /// </summary>
    public string role { get; set; }

    /// <summary>
    /// 内容
    /// </summary>
    public string content { get; set; }
}

运行效果:

运行效果


到此,通过.Net9的HttpClient简单调用Ollama的API就完成了。


温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信