.NET 全面接入 DeepSeek API SDK 实现智能模型调用

430 阅读3分钟

前言

随着人工智能技术的快速发展,越来越多的个人和企业希望通过集成强大的 AI 模型来增强系统功能。

DeepSeek 提供了多种先进的 AI 模型,如 deepseek-chat 和 deepseek-reasoner,支持文本生成、代码编写、情感分析等功能。

为了简化 .NET 开发与 DeepSeek API 的集成,推荐使用 Ater.DeepSeek.AspNetCore 组件。它为 .NET 开发提供了简单易用的接口,帮助开发快速集成 DeepSeek 的强大功能,从而显著提升开发效率。

项目介绍

DeepSeekSDK-NET 是一个为 .NET 开发设计的 SDK,简化与 DeepSeek API 的集成。

通过该 SDK 可以轻松调用 DeepSeek 的 API,实现文本生成、代码编写、情感分析、翻译等功能。无论是构建聊天机器人、内容生成器,还是其他 AI 驱动的应用。

项目特点

支持多种模型:包括 deepseek-chat 和 deepseek-reasoner 等模型。

聊天与流式聊天:支持同步和异步的聊天功能。

补全与流式补全:支持同步和异步的补全功能(测试版)。

用户余额查询:支持查询用户余额。

本地模型支持:支持调用本地部署的模型。

ASP.NET Core 集成支持:与 ASP.NET Core 的无缝集成。

项目使用

1、安装 NuGet 包

通过 NuGet 安装 Ater.DeepSeek.Core 包:

dotnet add package Ater.DeepSeek.Core

或者通过 VS NuGet 包管理器安装,具体如下图所示:

2、实例化 DeepSeekClient

提供了两种实例化 DeepSeekClient 的方法:

// 方法一:仅提供 apiKe
var client = new DeepSeekClient(apiKey);

//方法二:提供 HttpClient 和 apiKey
var httpClient = new HttpClient();
var client = new DeepSeekClient(httpClient, apiKey);

3、调用方法

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

Task<ModelResponse?> ListModelsAsync(CancellationToken cancellationToken);
Task<ChatResponse?> ChatAsync(ChatRequest request, CancellationToken cancellationToken);
Task<IAsyncEnumerable<Choice>?> ChatStreamAsync(ChatRequest request, CancellationToken cancellationToken);
Task<ChatResponse?> CompletionsAsync(CompletionRequest request, CancellationToken cancellationToken);
Task<IAsyncEnumerable<Choice>?> CompletionsStreamAsync(CompletionRequest request, CancellationToken cancellationToken);
Task<UserResponse?> GetUserBalanceAsync(CancellationToken cancellationToken);

项目示例

1、列出模型

var client = new DeepSeekClient(apiKey);
var modelResponse = await client.ListModelsAsync(new CancellationToken());
if (modelResponse is null)
{
    Console.WriteLine(client.ErrorMsg);
    return;
}
foreach (var model in modelResponse.Data)
{
    Console.WriteLine(model);
}

2、聊天示例

var client = new DeepSeekClient(apiKey);
var request = new ChatRequest
{
    Messages = [
        Message.NewSystemMessage("You are a language translator"),
        Message.NewUserMessage("Please translate 'They are scared! ' into English!")
    ],
    Model = Constant.Model.ChatModel
};

var chatResponse = await client.ChatAsync(request, new CancellationToken());
if (chatResponse is null)
{
    Console.WriteLine(client.ErrorMsg);
}
Console.WriteLine(chatResponse?.Choices.First().Message?.Content);

3、流式聊天示例

var client = new DeepSeekClient(apiKey);
var request = new ChatRequest
{
    Messages = [
        Message.NewSystemMessage("You are a language translator"),
        Message.NewUserMessage("Please translate 'They are scared! ' into English!")
    ],
    Model = Constant.Model.ChatModel
};

var choices = client.ChatStreamAsync(request, new CancellationToken());
if (choices is null)
{
    Console.WriteLine(client.ErrorMsg);
    return;
}
await foreach (var choice in choices)
{
    Console.Write(choice.Delta?.Content);
}
Console.WriteLine();

ASP.NET Core 集成

1、安装 NuGet 包

通过 NuGet 安装 Ater.DeepSeek.AspNetCore 包:

dotnet add package Ater.DeepSeek.AspNetCore

2、在 ASP.NET Core 中使用

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
    }, new CancellationToken());

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

app.Run();

3、流式聊天示例

app.MapGet("/chat", async (HttpContext context, [FromServices] DeepSeekClient client, CancellationToken token) =>
{
    context.Response.ContentType = "text/text;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();
});

项目地址

GitHub:github.com/niltor/Deep…

总结

以上仅展示了DeepSeekSDK-NET的部分功能。更多实用特性和详细信息,请大家访问项目地址。

DeepSeekSDK-NET 是一个功能强大且易于使用的 .NET SDK,它为开发者提供了与 DeepSeek API 集成的便捷途径。通过其简洁的接口、灵活的 API 密钥管理以及对 ASP.NET Core 的支持,可以快速构建智能应用。

不管是开发聊天机器人、内容生成器,还是其他 AI 驱动的应用,感兴趣的小伙伴可以试试。

希望通过本文能为 DeepSeek AI 开发方面提供有价值的参考。欢迎在评论区留言交流,分享您的宝贵经验和建议。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!