最近DeepSeek超級火爆,很多開發(fā)者問起Webman Ai如何接入DeepSeek,今天圖文教程來了,非常簡單,只需要三步即可。
因為DeepSeek官方負(fù)載較大,接口返回很慢失敗率很高,這里推薦幾個流暢的DeepSeek-R1滿血平臺。
通過邀請碼注冊的還贈送一些額度。
Novita AI 此連接贈送20美元
派歐算力云 此連接贈送 5¥+15¥額度
硅基流動 此連接贈送14¥
進(jìn)入管理后臺 http://example.com/app/admin
AI模型里添加如圖模型
名稱:DeepSeek
類型:deepseek
模型處理器:plugin\ai\app\handler\Gpt
(plus版默認(rèn)值) plugin\gpt\app\handler\Gpt
(基礎(chǔ)版默認(rèn)值)
支持的模型:
deepseek-chat
deepseek-reasoner
api:https://api.deepseek.com
(DeepSeek官方地址,如果是其它平臺地址有所不同)
apikey:sk-xxxx
DeepSeek官方apikey獲取地址
"deepseek-chat": "deepseek-chat",
"deepseek-reasoner": "deepseek-reasoner"
注意
deepseek-reasoner 不支持設(shè)置角色提示詞。
如果你本地有大顯存顯卡,也可以本地部署DeepSeek,參見 DeepSeek本地部署教程
支持大佬
下面是Driver下的文件
<?php
namespace plugin\ai\app\handler\driver;
use Exception;
use support\exception\BusinessException;
use Workerman\Http\Client;
use Workerman\Http\Response;
class DeepSeek extends Base
{
/**
* @var string api地址
*/
protected $api = 'http://127.0.0.1:11434/';
/**
* @var float
*/
protected $version = '2023-06-01';
/**
* @param $options
*/
public function __construct($options)
{
parent::__construct($options);
$this->api = $options['api'] ?? $this->api;
}
/**
* @desc completions
* @param array $data
* @param array $options
*/
public function completions(array $data, array $options)
{
$headers = $this->getHeaders($options);
// $this->api.= '/api/generate';
// $headers['x-api-key'] = $this->apikey;
// $headers['anthropic-version'] = $this->version;
$data['stream'] = false;
$data['prompt'] = end($data['messages'])['content'];
// if (isset($options['stream'])) {
// $data['stream'] = true;
// }
// if ($data['stream'] ?? false) {
// $headers['Accept'] = 'text/event-stream';
// }
$options = $this->formatOptions($options);
// var_dump($data);
// $data = static::formatData($data);
// var_dump($data);
$requestOptions = [
'method' => 'POST',
'data' => json_encode($data),
'headers' => $headers,
'progress' => function ($buffer) use ($options) {
$message = static::formatResponse((string)$buffer);
if($message['response']){
$data = [
'content' => $message['response']
];
}else{
$data = [];
// if(!$message['done']){
// $data = [
// 'error' => [
// 'code' => 500,
// 'message' => '網(wǎng)絡(luò)鏈接錯誤,請稍后重試!',
// 'detail' => json_decode($buffer, true)
// ],
// ];
// }else{
// $data = [];
// }
}
$options['stream']($data);
},
'success' => function (Response $response) use ($options) {
$options['complete'](static::formatResponse((string)$response->getBody()), $response);
},
'error' => function ($exception) use ($options) {
$options['complete']([
'error' => [
'code' => 'exception',
'message' => $exception->getMessage(),
'detail' => (string) $exception
],
], new Response(0));
}
];
$http = new Client(['timeout' => 600]);
$http->request($this->api, $requestOptions);
}
/**
* 格式化消息
* @param array $data
* @return array
*/
protected static function formatData(array $data)
{
$model = $data['model'] ?? '';
$temperature = $data['temperature'] ?? null;
$maxTokens = $data['max_tokens']??1024;
$messages = static::formatMessages($data['messages']);
$data = [
'model' => $model,
'messages' => $messages,
'max_tokens' => $maxTokens,
'stop_sequences' => array("\n\nHuman:")
];
if ($temperature !== null) {
$data['temperature'] = $temperature;
}
return $data;
}
public static function formatResponse($buffer)
{
$json = json_decode($buffer, true);
if ($json) {
return $json;
}
}
}
你這里寫的可能有問題,
if($message['response'])
改成
if($message['response'] || $message['response']==='0')
本地是用的ollama,兩個4070tisuper16g 可以跑32b和32b以下的,70b就很慢,一個字一個字往外蹦的那種(還是顯存太小了)70b預(yù)計是需要至少32g以上的顯存。
部署deepseek主要是吃顯存,見過有大佬用魔改的多個2080ti22g部署,這個沒有嘗試過,不知道可不可行
https://www.bilibili.com/opus/1028826816959217669