当前位置: 代码网 > it编程>编程语言>C# > C#调用DeepSeek API的两种实现方案

C#调用DeepSeek API的两种实现方案

2025年02月13日 C# 我要评论
序deepseek(深度求索) 最近可谓火爆的一塌糊涂,具体的介绍这里不再赘述,您可以各种搜索其信息,即使您不搜索,只要您拿起手机,各种关于 deepseek 的新闻、资讯也会扑面而来的推送到您面前。

deepseek(深度求索) 最近可谓火爆的一塌糊涂,具体的介绍这里不再赘述,您可以各种搜索其信息,即使您不搜索,只要您拿起手机,各种关于 deepseek 的新闻、资讯也会扑面而来的推送到您面前。本人在闲暇之余也想了解一下其提供 api 的支持能力,也想试验一下 “嵌入式” 的应用体验。

打开官网,访问主页右上角的 api 开放平台,查看了一下 api 技术文档,果然不出所料,没有 c# 的调用示例,虽然语法调用都大同小异,但心中还是有些不爽,因此本文旨在提供相关的示例,仅供参考,希望对您有所帮助。根据目前的应用现状,本文提供了两种形式的调用方法:

1、原生官网 api 地址调用。

2、通过腾讯云知识引擎原子调用。(适合原生调用繁忙和失败的备用场景)

开发运行环境

操作系统: windows server 2019 datacenter

.net版本: .netframework4.7.2 

开发工具:vs2019  c#

访问api的一个通用方法

创建webservice类,该类的getresponseresult 方法持续更新,主要根据 deepseek 对话补全的api文档,增加了httpwebrequest.accept 支持,同时增加了 get 访问请求的 webrequest.headrs 的支持。

更新后的代码如下:

    public sealed class webservice
    {
 
        public string errormessage = "";
 
        private static bool validsecurity(object sender, x509certificate certificate, x509chain chain, sslpolicyerrors sslpolicyerrors)
        {
            return true;
        }
        public string getresponseresult(string url, system.text.encoding encoding, string method, string postdata,string[] headers,string contenttype= "application/x-www-form-urlencoded",bool secvalid=true)
        {
            method = method.toupper();
            if (secvalid == false)
            {
                servicepointmanager.servercertificatevalidationcallback = validsecurity;
            }
            system.net.servicepointmanager.securityprotocol = system.net.securityprotocoltype.tls | system.net.securityprotocoltype.tls11 | system.net.securityprotocoltype.tls12;
 
            if (method == "get")
            {
                try
                {
                    webrequest request2 = webrequest.create(@url);
 
                    request2.method = method;
                    webresponse response2 = request2.getresponse();
                    if (headers != null)
                    {
                        for (int i = 0; i < headers.getlength(0); i++)
                        {
                            if (headers[i].split(':').length < 2)
                            {
                                continue;
                            }
 
                            if (headers[i].split(':').length > 1)
                            {
                                if (headers[i].split(':')[0] == "content-type")
                                {
                                    request2.contenttype = headers[i].split(':')[1];
                                    continue;
                                }
                            }
                            request2.headers.add(headers[i]);
                        }
                    }
 
                    stream stream = response2.getresponsestream();
                    streamreader reader = new streamreader(stream, encoding);
                    string content2 = reader.readtoend();
                    return content2;
                }
                catch (exception ex)
                {
                    errormessage = ex.message;
                    return "";
                }
 
            }
            if (method == "post")
            {
 
                stream outstream = null;
                stream instream = null;
                streamreader sr = null;
                httpwebresponse response = null;
 
                httpwebrequest request = null;
                byte[] data = encoding.getbytes(postdata);
                // 准备请求...
                try
                {
                    // 设置参数
                    request = webrequest.create(url) as httpwebrequest;
                    cookiecontainer cookiecontainer = new cookiecontainer();
                    request.cookiecontainer = cookiecontainer;
                    request.allowautoredirect = true;
                    request.method = method;
                    request.timeout = 1000000;
                    request.contenttype = contenttype;
                    if (headers != null)
                    {
                        for (int i = 0; i < headers.getlength(0); i++)
                        {
                            if (headers[i].split(':').length < 2)
                            {
                                continue;
                            }
 
                            if (headers[i].split(':').length > 1)
                            {
                                if (headers[i].split(':')[0] == "host")
                                {
                                    request.host = headers[i].split(':')[1];
                                    continue;
                                }
                                else if (headers[i].split(':')[0] == "content-type")
                                {
                                    request.contenttype = headers[i].split(':')[1];
                                    continue;
                                }
                                else if (headers[i].split(':')[0] == "connection")
                                {
                                    request.keepalive = headers[i].split(':')[1] == "close" ? false : true;
                                    continue;
                                }
                                else if (headers[i].split(':')[0] == "accept")
                                {
                                    request.accept = headers[i].split(':')[1];
                                    continue;
                                }
 
                            }
                            request.headers.add(headers[i]);
                        }
                    }
                    request.contentlength = data.length;
                    outstream = request.getrequeststream();
                    outstream.write(data, 0, data.length);
                    outstream.close();
                    //发送请求并获取相应回应数据
                    response = request.getresponse() as httpwebresponse;
                    //直到request.getresponse()程序才开始向目标网页发送post请求
                    instream = response.getresponsestream();
                    sr = new streamreader(instream, encoding);
                    //返回结果网页(html)代码
                    string content = sr.readtoend();
                    sr.close();
                    sr.dispose();
 
                    return content;
                }
                catch (exception ex)
                {
                    errormessage = ex.message;
                    return "";
                }
            }
            errormessage = "不正确的方法类型。(目前仅支持get/post)";
            return "";
 
        }//get response result
}//class

具体的参数说明和更新的日志可访问文章:

c#使用融合通信api发送手机短信息_c#教程_代码网

c#实现访问web api url提交数据并获取处理结果_c#教程_代码网

原生官网实现

申请 api key

访问官网 deepseek,如下:

如图使用您的手机号注册一个帐户,然后再点击右上角 “api 开放平台” 链接申请 api key。

点击如下图:

访问左侧 api keys 功能菜单,点击 “创建 api key” 按钮,按提示输入名称等点击确认即可生成 key 值,请务必妥善存储,这是调用 api 的关键认证信息值。  

调用实现

创建 deepseek 类,类说明如下表:

序号成员名称成员类型类型说明
1apiurl属性string访问的api路径
2apikey属性string申请的 api key 值
3model属性string使用的模型名称
4errormessage属性string反馈的异常信息
5resultjson属性string得到的json结果信息
6chat(string say)方法void

调用原生对话api,参数为问题内容,

方法会写入 errormessage和resultjson属性值

7tc_chat(string say)方法void

调用腾讯云封装对话api,参数为问题内容,

方法会写入 errormessage和resultjson属性值

类实现代码如下:

public class deepseek
    {
        public string apiurl { get; set; }
        public string apikey { get; set; }
        public string model { get; set; }
        public string errormessage = "";
        public string resultjson = "";
        public deepseek(string apikey = "")
        {
            apikey = apikey;
        }
        public void chat(string say)
        {
            apiurl = "https://api.deepseek.com/chat/completions";
            model = "deepseek-chat";
            webservice ws = new webservice();
            string[] headers = new string[3];
            headers[0] = "content-type:application/json";
            headers[1] = "accept:application/json";
            headers[2] = "authorization:bearer " + apikey + "";
 
            var readydata = new
            {
                model = model,
                messages = new[]{
                    new {role="user",content=say}
                }
            };
            string postdata = newtonsoft.json.jsonconvert.serializeobject(readydata);
 
            errormessage = "";
            resultjson = "";
            string rs = ws.getresponseresult(apiurl, encoding.utf8, "post", postdata, headers);
            errormessage = ws.errormessage;
            resultjson = rs;
 
        }
        public void tc_chat(string say)
        {
            apiurl = "https://api.lkeap.cloud.tencent.com/v1/chat/completions";
            model = "deepseek-r1";
            webservice ws = new webservice();
            string[] headers = new string[3];
            headers[0] = "content-type:application/json";
            headers[1] = "accept:application/json";
            headers[2] = "authorization:bearer " + apikey + "";
 
            var readydata = new
            {
                model = model,
                messages = new[]{
                    new {role="user",content=say}
                }
            };
            string postdata = newtonsoft.json.jsonconvert.serializeobject(readydata);
 
            errormessage = "";
            resultjson = "";
            string rs = ws.getresponseresult(apiurl, encoding.utf8, "post", postdata, headers);
            errormessage = ws.errormessage;
            resultjson = rs;
 
 
 
        }
 
    }

调用示例

示例代码如下:

string ak = "";  //您申请的 api key
 
deepseek dp = new deepseek(ak);
dp.chat("你好!");
string debug = string.format("errormessage:{0}\r\nresultjson:{1}", dp.errormessage, dp.resultjson);

腾讯云知识引擎原子调用

申请 api key

访问产品官网 https://console.cloud.tencent.com/lkeap,登录成功如下:

如图选择左侧“立即接入”菜单功能,选择 使用 openai sdk方式接入,点击“创建 api key”按钮,按提示操作即可创建,创建成功如下图:

如图选择“apk key 管理”,即可查看已经成功创建的 key 列表,点击“查看”链接可以复制键值,如下图中操作步骤。

调用示例

在原生实现章节中已经实现了方法调用编写,这里仅展示调用示例,代码如下:

string ak = "";  //您申请的 api key
 
deepseek dp = new deepseek(ak);
dp.tc_chat("你好!");
string debug = string.format("errormessage:{0}\r\nresultjson:{1}", dp.errormessage, dp.resultjson);

调用方法的区别在于调用了 tc_chat 方法,其它无需改变代码。 

小结

以上就是c#调用deepseek api的两种实现方案的详细内容,更多关于c#调用deepseek api的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com