快速上手: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);

更多资源

深入集成:使用 DeepSeek SDK for .NET 实现自然语言处理功能的更多相关文章

  1. Android Studio快速集成讯飞SDK实现文字朗读功能

    今天,我们来学习一下怎么在Android Studio快速集成讯飞SDK实现文字朗读功能,先看一下效果图: 第一步 :了解TTS语音服务 TTS的全称为Text To Speech,即“从文本到语音” ...

  2. Unity 下集成第三方原生 SDK,以极光厂商通道为例

    Unity中集成三方SDK有两种方式: Unity 项目开发中时常有集成 Android 第三方 SDK 的需求,比如接入第三方推送,分享等功能.而第三方 SDK 的集成文档提到的往往是基于原生 An ...

  3. Android Studio 项目中集成百度地图SDK报Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()I错误

    Android Studio 项目中集成百度地图SDK报以下错误: java.lang.UnsatisfiedLinkError: Native method not found: com.baidu ...

  4. 痞子衡嵌入式:深扒i.MXRTxxx系列ROM中集成的串行NOR Flash启动SW Reset功能及其应用场合

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中集成的串行NOR Flash启动SW Reset功能及其应用场合. 在串行 NOR Flash 热启动过程 ...

  5. Android Studio集成百度地图SDK

    1.建议先阅读百度地图官方的继承指南,针对了Eclipse和Android Studio. 百度官方集成指南 2.下载百度地图SDK Android SDK v4.1.1 下载有两种: 1.一键下载( ...

  6. Unity3d集成移动MM SDK 2.2的技术要点(坑爹的MM SDK)

    原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140423517951/ U3D集成移动MM的SDK绝对是以坑爹为主的东西. 浪 ...

  7. 远程推送,集成极光的SDK,证书制造

    由于iOS操作系统限制,我们APP在后台不能做操作,也不能接收任何数据,所以需要用推送来接收消息. APNs服务,苹果官方网址:https://developer.apple.com/library/ ...

  8. Xamarin.Android 集成百度地图SDK

    前言:趁着周六闲得没事干,赶紧搞一搞Xamarin,最近也是怪无聊的,枯燥的生活不如打几行代码带劲:好了我们进入正题 我这篇文章时参考一位大佬的博客进行改变的,当然他写的需要一定的经验才可以看得懂,我 ...

  9. Android集成百度地图SDK

    本Demo中所含功能 1:定位,显示当前位置 2:地图多覆盖物(地图描点.弹出该点的具体信息) 3:坐标地址互相换算 4:POI兴趣点检索 5:线路查询(步行,驾车,公交) 6:绘制线路(OpenGL ...

  10. IOS中快速集成短信SDK验证开发(SMSSDK),IOS开发中如何设置手机验证码

    [转载请注明出处] sdk是别人的,我只是下载来集成一下. smssdk下载网站:http://www.mob.com/(也有其他很多网站有类似SDK,譬如https://www.juhe.cn/等等 ...

随机推荐

  1. HarmonyOS Next 入门实战 - 导航框架:页面路由、组件导航(Navigation)

    页面路由 官方不推荐使用页面路由,这里仅做简单介绍. 页面路由用于标识 @Entry 注解的页面间的跳转. 包引入 import { router } from'@kit.ArkUI'; 页面跳转 r ...

  2. 【C++】关于 Visual Studio 的使用技巧(保姆级教程)

    目录 fliter 视图 输出文件位置设置 查看预处理结果 将目标文件转换为可读的汇编 自定义程序入口 调试时查看变量在内存中的具体值 查看代码的反汇编 fliter 视图 visual studio ...

  3. PLC编程—数据类型

    CPU 型号不同,实际的有效数据类型与文中略有不同(大同小异) 数据类型概述 基本数据类型(二进制数.整数.浮点数.定时器.DATE.TOD.LTOD.CHAR.WCHAR) 复杂数据类型(DT.LD ...

  4. 图片渲染 API:极速生成电商、社媒、营销、横幅、证书等图片!

    不知道还有没有同学还记得,当时自己开发智能体时,有一个自动生成证书图片的功能,既方便又实用.今天我们就来带大家回顾一下,如何快速生成图片,并且最重要的是,完全无需通过 HTTP 调用,极大提高了操作的 ...

  5. 2024年1月Java项目开发指南6:接口测试

    我们使用API Fox这款工具对接口进行测试. (你要是会其他的例如postman进行测试也行) https://apifox.com/ 新建一个项目,新增一个接口 因为这个接口没有参数,所以无需填写 ...

  6. 【C#】萌狼学习C#那年写的笔记汇总

    目录 习题汇总 例子汇总 报错解决 考前复习 习题汇总 [C#][平时作业]习题-2-数据类型运算符表达式 - 萌狼蓝天 - 博客园 (cnblogs.com) [C#][平时作业]习题-3-数组 ...

  7. maven打jar包运行main方法

    pom文件添加上这段 <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</ ...

  8. Qt/C++编写视频监控系统80-远程回放视频流

    一.前言 远程回放NVR或者服务器上的视频文件,一般有三种方式,第一种是调用厂家的SDK,这个功能最全,但是缺点明显就是每个厂家的设备都有自己的SDK,只兼容自家的设备,如果你的软件需要接入多个厂家的 ...

  9. Qt编写地图综合应用31-仪表盘

    一.前言 用Qt开发仪表盘控件非常方便,无论是用widget的painter还是qml,尤其是qml,内置的那些动画效果非常适合做这类的应用,这次不讨论如何用qt开发仪表盘,而是直接用echart内置 ...

  10. Jetbrain Fleet体验版linxu环境开发Python初体验

    Jetbrain Fleet体验版linxu环境开发Python初体验 (base) linxu@linxu-PC:~/Projects/FleetProjects$ conda activate d ...