laravel-deepseek maintained by idpromogroup
Laravel DeepSeek
Laravel-пакет для DeepSeek Chat Completions. Внешний контракт совпадает с LorService (setMessage, setModel, execute, шаблоны, function calls, биллинг). Внутри — POST /chat/completions на https://api.deepseek.com.
Installation
composer require idpromogroup/laravel-deepseek
Опубликовать конфиг и миграции:
php artisan vendor:publish --provider="Idpromogroup\LaravelDeepseek\LaravelDeepseekServiceProvider"
php artisan migrate
В .env:
DEEPSEEK_API_KEY=sk-...
DEEPSEEK_MODEL=deepseek-v4-flash
Usage
use Idpromogroup\LaravelDeepseek\Services\LdsService;
$service = new LdsService($externalKey, 'Your message here');
$result = $service->setModel('deepseek-v4-flash')
->setInstructions('You are a helpful assistant')
->execute();
if ($result->success) {
echo $result->getMsg();
}
Images
DeepSeek не имеет Files API. JPG/PNG/WEBP уходят как image_url (data-URL). Нужна vision-модель:
$service = new LdsService($externalKey, 'Describe this image')
->setModel('deepseek-v4-flash-vision-exp')
->attachLocalFile(storage_path('app/photo.jpg'));
$result = $service->execute();
PDF не поддерживается API — attachLocalFile() для PDF бросит исключение.
Templates
$service = new LdsService($externalKey, 'Your message')
->useTemplate('analysis_template')
->execute();
$service->useTemplate(1);
Conversation mode
У DeepSeek нет server-side conversations: история хранится в lds_conversations.messages и пересылается целиком.
$service = new LdsService($externalKey, 'Hello')
->setConversation('user123')
->execute();
$service = new LdsService($externalKey, 'Follow up question')
->setConversation('user123')
->execute();
Function calls
В config/deepseek.php:
'function_handler' => App\Services\MyFunctionHandler::class,
class MyFunctionHandler
{
public function execute(string $functionName, array $args)
{
switch ($functionName) {
case 'get_weather':
return $this->getWeather($args['location']);
default:
return ['error' => 'Unknown function'];
}
}
}
Advanced
$service = new LdsService($externalKey, 'Your message')
->setModel('deepseek-v4-pro')
->setInstructions('Custom instructions')
->setTemperature(0.7)
->setTools([
['type' => 'function', 'function' => [...]]
])
->setJSONSchema([
'type' => 'object',
'properties' => [...]
])
->execute();
file_search, vector store и OpenAI Files API в DeepSeek нет — из пакета убраны.
Usage and cost tracking
После успешного вызова токены и оценка USD (peak rates) пишутся в lds_request_logs. Цены — config/deepseek.php → prices.
- Выключить:
DEEPSEEK_BILLING=false. - Контекст биллинга:
$service->setBillingContext(billingSourceCode: 0, billingUser: 42)
->setApiKey($userDeepSeekKey)
->execute();
use Idpromogroup\LaravelDeepseek\Facades\Lds;
$sum = Lds::usage()
->forExternalKey($externalKey)
->betweenDates(now()->startOfMonth(), now())
->whereNotNull('total_cost')
->sum('total_cost');
License
MIT License