C# 实战:调用 DeepSeek API 实现高效稳定的访问

468 阅读2分钟

前言

随着人工智能技术的不断发展,API接口成为连接开发者与强大功能的桥梁。

本文将介绍如何在C#中调用DeepSeek API接口,帮助大家快速实现数据交互和智能功能的集成,为项目增添智能化的解决方案。

正文

先上图,结果如下图:

先去官方网站充值 API 费用,默认。

对应的C#代码封装

public class DeepSeekHelper
{
    private static readonly HttpClient client = new HttpClient();
    private const string ApiEndpoint = "https://api.deepseek.com/v1/chat/completions";
    private static readonly string apiKey = "你的apikey";
    public static async Task<string> CallDeepSeekAPI(string userQuestion)
    {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        try
        {
            // 设置请求头
            client.DefaultRequestHeaders.Clear();
            client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
            client.DefaultRequestHeaders.Add("Accept", "application/json");

            // 构建请求体
            var requestBody = new
            {
                model = "deepseek-reasoner", // 根据实际模型调整
                messages = new[]
                {
                new
                {
                    role = "user",
                    content = userQuestion
                }
            },
                temperature = 0.7
            };

            // 序列化请求体
            //var jsonContent = JsonSerializer.Serialize(requestBody);
            var jsonContent = JsonConvert.SerializeObject(requestBody);
            var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");

            // 发送请求
            var response = await client.PostAsync(ApiEndpoint, content);

            // 处理响应
            if (!response.IsSuccessStatusCode)
            {
                throw new Exception($"API请求失败: {response.StatusCode}");
            }

            var responseContent = await response.Content.ReadAsStringAsync();
            var resultModel = JsonConvert.DeserializeObject<DeepSeekResponse>(responseContent);
            if (resultModel != null && resultModel.Choices.Count > 0)
                return resultModel.Choices[0].Message.Content;
            return responseContent;
        }
        catch (Exception ex)
        {
            // 处理异常
            return $"调用API时发生错误: {ex.Message}";
        }
    }
}

public class DeepSeekResponse
{
    public string Id { get; set; }
    public string Object { get; set; }
    public long Created { get; set; }
    public string Model { get; set; }
    public List<Choice> Choices { get; set; }
    public Usage Usage { get; set; }
    public string SystemFingerprint { get; set; }

    // 重写ToString方法以便更好地显示对象信息
    public override string ToString()
    {
        return $"DeepSeekResponse(Id={Id}, Object={Object}, Created={Created}, Model={Model}, Choices={string.Join(", ", Choices)}, Usage={Usage}, SystemFingerprint={SystemFingerprint})";
    }
}

public class Choice
{
    public int Index { get; set; }
    public Message Message { get; set; }
    // 其他Choice相关的属性...

    // 重写ToString方法以便更好地显示Choice信息(这里仅展示Index和Message作为示例)
    public override string ToString()
    {
        return $"Choice(Index={Index}, Message={Message})";
    }
}

public class Message
{
    public string Role { get; set; }
    public string Content { get; set; }
    // 其他Message相关的属性...
}

public class Usage
{
    public int PromptTokens { get; set; }
    public int CompletionTokens { get; set; }
    public int TotalTokens { get; set; }
    // 其他Usage相关的属性,包括嵌套的字典等,可以根据需要添加
}

调用示例

private async void SendButton_Click(object sender, RoutedEventArgs e)
{
    string requestText = RequestTextBox.Text;
    if (!string.IsNullOrWhiteSpace(requestText))
    {
        try
        {
         

            string responseData = await DeepSeekHelper.CallDeepSeekAPI(requestText); // await new DeepSeekApi().CallDeepSeekAPI(chatRequest);
            ResponseTextBox.Text = responseData;
        }
        catch (Exception ex)
        {
            ResponseTextBox.Text = $"Error: {ex.Message}";
        }
    }
    else
    {
        MessageBox.Show("Please enter a request.");
    }
}

常见问题

1、发送请求时出错 InnerException = {"请求被中止: 未能创建 SSL/TLS 安全通道。"}

指定使用TLS1.2加密协议,添加如下代码

ServicePointManager.SecurityProtocol
= SecurityProtocolType.Tls12;

2、收到内容为空白

服务器繁忙,请把deepseek-chat模型切换到deepseek-reasoner 试试,或者换个时间再次尝试.

模型区别如下.代码中默认使用了reasoner模型,俗称满血版.

默认账户赠送10元余额.

总结

本文通过详细的步骤,展示了在C#中调用DeepSeek API接口的方法。我们可以快速掌握如何实现正常访问。希望本文能为大家提供实用的参考,帮助项目智能化升级。

最后

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

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

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

作者:火星大能猫

出处:cnblogs.com/MarsPanda/p/18702486

声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!