镖师 发表于 2025-2-11 16:59:04

开一帖:纯php搭建DeepSeek教程

最近老坛们都在讨论DeepSeek。也看到有些大佬非要把简单的搞那么复杂,还搞个什么桌面端的就出来了。只能说这个对站长没有任何用处。谁会安装个CURL别人的加个壳的呢?其实最好的方法还是去他们官网上面提问聊天。毕竟免费的。如果实在要搬到自己的网站上面。官方也是有提供API地址的。(收费的居然也想CURL他的接口,充分说明是用来搞火车头采集的)。

若还有老坛们不是奔着采集的,那小编也可以简单写个php的CURL。分为流式的(打字机般输出体验号)与非流式的(便于火车采集)。下面上干货:
<?php$apikey =$add_deepseekkey;//到deepseek申请$enwse=$_GET['moshi'];if($enwse==='sse'){ //流式输出接口的$postData = ["model"=>'deepseek-chat',"stream"=>true,"max_tokens"=>4000];}else{$postData = ["model"=>'deepseek-chat',"max_tokens"=>4000];      }$context = json_decode($_POST['context']?: "[]", true) ?: [];if (!empty($context)) {$context = array_slice($context, -5);foreach ($context as $message) {$postData['messages'][] = ['role' => 'user', 'content' => str_replace("\n", "\\n", $message)];$postData['messages'][] = ['role' => 'assistant', 'content' => str_replace("\n", "\\n", $message)];}}$postData['messages'][] = ['role' => 'user', 'content' =>$_POST['message']];$postData = json_encode($postData);$deepseekapiurl="https://api.deepseek.com/v1/chat/completions";//deepseek接口地址if($enwse==='sse'){ //流式输出接口header('Access-Control-Allow-Origin: *');header("Content-Type: text/event-stream");ini_set('output_buffering', 'off');ini_set('zlib.output_compression', false);while (@ob_end_flush()) {}header('Cache-Control: no-cache');header('Connection: keep-alive');header('X-Accel-Buffering: no');setcookie("errcode", ""); setcookie("errmsg", "");$ch = curl_init();$headers= ['Content-Type: application/json','Authorization: Bearer ' . $apikey];$callback = function ($ch, $data) {$complete = json_decode($data);if (isset($complete->error)) {setcookie("errcode", $complete->error->type);setcookie("errmsg", $complete->error->message);      echo "event: close".PHP_EOL;echo "data: Connection closed".PHP_EOL . PHP_EOL;ob_flush();flush();}echo $data;      ob_flush();flush();      return strlen($data);};curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);curl_setopt($ch, CURLOPT_URL, $deepseekapiurl);curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_WRITEFUNCTION, $callback);curl_exec($ch);curl_close($ch);}else{//非流式$ch = curl_init();      $headers= ['Content-Type: application/json','Authorization: Bearer ' . $apikey];curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);curl_setopt($ch, CURLOPT_URL, $deepseekapiurl);curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);$response=curl_exec($ch);$response=json_decode($response, true);$result = array('code'=> 200,'asktext'=>str_replace( "\\n", "\n", $response['choices']['message']['content']),'time'=>date('Y-m-d H:i:s'),);echo json_encode($result, JSON_UNESCAPED_UNICODE);exit(); }代码没有对用户输入的 $_GET['moshi']、$_POST['context'] 和 $_POST['message'] 进行充分的验证和过滤,可能会导致安全问题。建议添加输入验证逻辑,确保输入数据的合法性。

浅生 发表于 2025-2-11 16:59:28

另外SSE要支持POST请求需要引入see.js这个组件。(自行下载)
另外要让代码能高亮显示,表格需要显示等,需要自行下载highlight.min.js,remarkable.js,showdown.min.js

调用的时候就是这样的
var alltext = "";var data = {message: alytyqw,context: JSON.stringify(contextarray),};var jsondata=JSON.stringify(data);eventSource = new SSE("deepseek.php?moshi=sse",{headers: {'Content-Type': 'text/event-stream'},payload: jsondata,method:'POST'});eventSource.addEventListener("open", (event) => {console.log("连接已建立");});eventSource.addEventListener("message", (event) => {if(event.data == ""){contextarray.push(alytyqw, alltext);contextarray = contextarray.slice(-5); eventSource.close();return;console.log("连接已关闭");      }var result = JSON.parse(event.data);if(result.choices.finish_reason == "stop"){return;}      alltext += result.choices.delta.content;      let newalltext = alltext;newalltext = newalltext.replace(/\\n/g, '\n');newalltext = mdHtml.render(newalltext);newalltext = newalltext.replace(/\\t/g, '    ');$("#q" + answer).html(newalltext);$('.RightCont').scrollTop($('.RightCont').scrollHeight );//将滚动条始终保持在底部});eventSource.addEventListener("close", (event) => {console.log("连接已关闭", JSON.stringify(event.data));});

浅生 发表于 2025-2-11 17:00:16

把DeepSeek的Ai运用到彩票下期开奖的效果图

拾光 发表于 2025-2-11 17:00:46

设备配置跟不上呀,原来也想架到本地用用的

Crystαl 发表于 2025-2-11 17:01:00

看变量 $enwse
帝国的影子

独家记忆 发表于 2025-2-11 17:01:35

不错,感谢分享

62450812 发表于 2025-2-11 17:57:21

谢谢楼主分享!
页: [1]
查看完整版本: 开一帖:纯php搭建DeepSeek教程