前言
随着人工智能技术的不断发展,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
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!