LzXmtHet 发表于 2025-2-18 13:32:47

深入集成:使用 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.cs 或 Startup.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 ( 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, 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:

[*]仅提供 API Key:
var client = new DeepSeekClient(apiKey);
[*]提供自定义的 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);
更多资源


[*]GitHub 仓库
[*]更多使用示例
页: [1]
查看完整版本: 深入集成:使用 DeepSeek SDK for .NET 实现自然语言处理功能