经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
深入集成:使用 DeepSeek SDK for .NET 实现自然语言处理功能
来源:cnblogs  作者:今晚打老虎!  时间:2025/2/20 10:41:40  对本文有异议

快速上手: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 中使用

  1. dotnet add package Ater.DeepSeek.AspNetCore

示例

Program.csStartup.cs 中配置 DeepSeekClient

  1. using DeepSeek.AspNetCore;
  2. using DeepSeek.Core;
  3. using DeepSeek.Core.Models;
  4. using Microsoft.AspNetCore.Mvc;
  5. var builder = WebApplication.CreateBuilder(args);
  6. var apiKey = builder.Configuration["DeepSeekApiKey"];
  7. builder.Services.AddDeepSeek(option =>
  8. {
  9. option.BaseAddress = new Uri("https://api.deepseek.com");
  10. option.Timeout = TimeSpan.FromSeconds(300);
  11. option.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer " + apiKey);
  12. });
  13. var app = builder.Build();
  14. app.MapGet("/test", async ([FromServices] DeepSeekClient client) =>
  15. {
  16. var res = await client.ChatAsync(new ChatRequest
  17. {
  18. Messages = new List<Message>
  19. {
  20. Message.NewUserMessage("Why dotnet is good?")
  21. },
  22. MaxTokens = 200
  23. }, CancellationToken.None);
  24. return res?.Choices.First().Message?.Content;
  25. });
  26. app.Run();

流式返回示例

  1. app.MapGet("/chat", async (HttpContext context, [FromServices] DeepSeekClient client, CancellationToken token) =>
  2. {
  3. context.Response.ContentType = "text/plain;charset=utf-8";
  4. try
  5. {
  6. var choices = client.ChatStreamAsync(new ChatRequest
  7. {
  8. Messages = new List<Message>
  9. {
  10. Message.NewUserMessage("Why dotnet is good?")
  11. },
  12. MaxTokens = 200
  13. }, token);
  14. if (choices != null)
  15. {
  16. await foreach (var choice in choices)
  17. {
  18. await context.Response.WriteAsync(choice.Delta!.Content);
  19. }
  20. }
  21. }
  22. catch (Exception ex)
  23. {
  24. await context.Response.WriteAsync("暂时无法提供服务" + ex.Message);
  25. }
  26. await context.Response.CompleteAsync();
  27. });

其他集成

  1. dotnet add package Ater.DeepSeek.Core

实例化 DeepSeekClient

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

  1. 仅提供 API Key:

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

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

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

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

调用方法

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

  • 列出模型:

    1. var modelResponse = await client.ListModelsAsync(CancellationToken.None);
    2. if (modelResponse != null)
    3. {
    4. foreach (var model in modelResponse.Data)
    5. {
    6. Console.WriteLine(model);
    7. }
    8. }
    9. else
    10. {
    11. Console.WriteLine(client.ErrorMsg);
    12. }

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

  • 获取对话:

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

输出:"They were extremely scared!"

  • 获取对话(流式):

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

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

    1. var httpClient = new HttpClient
    2. {
    3. BaseAddress = new Uri("http://localhost:5000"),
    4. Timeout = TimeSpan.FromSeconds(300),
    5. };
    6. var localClient = new DeepSeekClient(httpClient);
    7. localClient.SetChatEndpoint("/chat");
    8. localClient.SetCompletionEndpoint("/completions");
    9. var res = await localClient.ChatAsync(new ChatRequest
    10. {
    11. Messages = new List<Message>
    12. {
    13. Message.NewUserMessage("hello")
    14. }
    15. }, CancellationToken.None);
    16. Console.WriteLine(res?.Choices.First().Message?.Content);

更多资源

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号