深入集成:使用 DeepSeek SDK for .NET 实现自然语言处理功能

快速上手:DeepSeek SDK for .NET 全面指南

简介

Ater.DeepSeek.AspNetCore 是专门为 .NET 开发者提供的 DeepSeek API SDK。它旨在简化与 DeepSeek AI 平台的集成,使开发者能够快速构建和部署基于自然语言处理的应用程序。

功能特性

  • 列出模型: 获取 DeepSeek 提供的所有可用模型。
  • 对话补全(包含流式): 实现与 DeepSeek 的对话交互,支持实时流式响应。
  • FIM实例(包含流式): 支持 Fine-tuned Inference Model (FIM) 实例的调用,同样支持流式响应。
  • 查询余额: 检查账户中的余额,确保有足够的资金进行 API 调用。
  • 支持调用本地模型: 可以通过自定义 HttpClient 调用本地部署的 DeepSeek 模型。
  • 对 ASP.NET Core 的集成支持: 提供了与 ASP.NET Core 的无缝集成,方便在 Web 应用中使用。

注册并获取 API Key

请访问 DeepSeek 官方网站,注册账号并申请 ApiKey

在 ASP.NET Core 中使用

dotnet add package Ater.DeepSeek.AspNetCore

示例

Program.csStartup.cs 中配置 DeepSeekClient

using DeepSeek.AspNetCore;
using DeepSeek.Core;
using DeepSeek.Core.Models;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);

var apiKey = builder.Configuration["DeepSeekApiKey"];
builder.Services.AddDeepSeek(option =>
{
    option.BaseAddress = new Uri("https://api.deepseek.com");
    option.Timeout = TimeSpan.FromSeconds(300);
    option.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer " + apiKey);
});

var app = builder.Build();

app.MapGet("/test", async ([FromServices] DeepSeekClient client) =>
{
    var res = await client.ChatAsync(new ChatRequest
    {
        Messages = new List<Message>
        {
            Message.NewUserMessage("Why dotnet is good?")
        },
        MaxTokens = 200
    }, CancellationToken.None);

    return res?.Choices.First().Message?.Content;
});

app.Run();

流式返回示例

app.MapGet("/chat", async (HttpContext context, [FromServices] DeepSeekClient client, CancellationToken token) =>
{
    context.Response.ContentType = "text/plain;charset=utf-8";
    try
    {
        var choices = client.ChatStreamAsync(new ChatRequest
        {
            Messages = new List<Message>
            {
                Message.NewUserMessage("Why dotnet is good?")
            },
            MaxTokens = 200
        }, token);

        if (choices != null)
        {
            await foreach (var choice in choices)
            {
                await context.Response.WriteAsync(choice.Delta!.Content);
            }
        }
    }
    catch (Exception ex)
    {
        await context.Response.WriteAsync("暂时无法提供服务" + ex.Message);
    }
    await context.Response.CompleteAsync();
});

其他集成

dotnet add package Ater.DeepSeek.Core

实例化 DeepSeekClient

SDK 提供了两种方式来实例化 DeepSeekClient

  1. 仅提供 API Key:

    var client = new DeepSeekClient(apiKey);
    
  2. 提供自定义的 HttpClient 和 API Key:

    这种方式适合通过 HttpClientFactory 来管理 HttpClient,从而更好地控制连接池和超时设置。

    var httpClient = new HttpClient();
    var client = new DeepSeekClient(httpClient, apiKey);
    

    注意: 内部 HttpClient 的默认超时时间为 120 秒,可以通过 SetTimeout() 方法或 CancellationTokenSource 设置具体请求的超时时间。

调用方法

DeepSeekClient 类提供了多个异步方法来调用 DeepSeek 的 API:

  • 列出模型:

    var modelResponse = await client.ListModelsAsync(CancellationToken.None);
    if (modelResponse != null)
    {
        foreach (var model in modelResponse.Data)
        {
            Console.WriteLine(model);
        }
    }
    else
    {
        Console.WriteLine(client.ErrorMsg);
    }
    

    输出:
    Model { Id = deepseek-chat, Object = model, OwnedBy = deepseek }
    Model

  • 获取对话:

    var request = new ChatRequest
    {
        Messages = [
            Message.NewSystemMessage("你是一个语言翻译家"),
            Message.NewUserMessage("请翻译'它们害怕极了!'为英语!")
        ],
        Model = Constant.Model.ChatModel
    };
    
    var chatResponse = await client.ChatAsync(request, CancellationToken.None);
    Console.WriteLine(chatResponse?.Choices.First().Message?.Content);
    

输出:"They were extremely scared!"

  • 获取对话(流式):

    var choices = client.ChatStreamAsync(request, CancellationToken.None);
    await foreach (var choice in choices ?? Enumerable.Empty<Choice>())
    {
        Console.Write(choice.Delta?.Content);
    }
    Console.WriteLine();
    
  • 调用本地模型:

    如果需要调用本地部署的模型,可以自定义 HttpClient 并设置 BaseAddress 为本地地址。

    var httpClient = new HttpClient
    {
        BaseAddress = new Uri("http://localhost:5000"),
        Timeout = TimeSpan.FromSeconds(300),
    };
    var localClient = new DeepSeekClient(httpClient);
    localClient.SetChatEndpoint("/chat");
    localClient.SetCompletionEndpoint("/completions");
    
    var res = await localClient.ChatAsync(new ChatRequest
    {
        Messages = new List<Message>
        {
            Message.NewUserMessage("hello")
        }
    }, CancellationToken.None);
    Console.WriteLine(res?.Choices.First().Message?.Content);
    

更多资源

本文作者:今晚打老虎!

本文链接:https://www.cnblogs.com/netcore5/p/18721767

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   今晚打老虎!  阅读(1214)  评论(2编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起