Обзор DeepSeek API
DeepSeek предоставляет RESTful API, полностью совместимый с OpenAI API форматом. Это позволяет использовать существующие SDK и библиотеки для быстрой интеграции.
Совместимость
Используйте OpenAI SDK или любые совместимые инструменты для доступа к DeepSeek API
Базовый URL
https://api.deepseek.com
или https://api.deepseek.com/v1 для совместимости с OpenAI
Поддерживаемые модели
- deepseek-chat - стандартная чат-модель
- deepseek-reasoner - модель с режимом рассуждений
⚠️ Важное обновление
Модели deepseek-chat и deepseek-reasoner были обновлены до DeepSeek-V3.2:
- deepseek-chat - стандартный режим DeepSeek-V3.2
- deepseek-reasoner - режим рассуждений (thinking mode) DeepSeek-V3.2
Регистрация и получение API ключа
Шаг 1: Создание аккаунта
- Перейдите на DeepSeek Platform
- Зарегистрируйтесь или войдите в существующий аккаунт
- Подтвердите email (если требуется)
Шаг 2: Получение API ключа
- В личном кабинете перейдите в раздел "API Keys"
- Нажмите "Create new API key"
- Укажите название ключа (например, "Production Key")
- Скопируйте и сохраните ключ в безопасном месте
⚠️ Внимание!
API ключ показывается только один раз при создании! Сохраните его в надежном месте.
Рекомендуемые заголовки запросов
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
Accept: application/json
Ваш первый API запрос
Пример cURL запроса
curl https://api.deepseek.com/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer \${DEEPSEEK_API_KEY}" \
-d '{
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
"stream": false
}'
Ответ сервера
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"model": "deepseek-chat",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?"
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 8,
"total_tokens": 18
}
}
Модели и цены
| Параметр | deepseek-chat | deepseek-reasoner |
|---|---|---|
| Версия модели | DeepSeek-V3.2 (Стандартный режим) | DeepSeek-V3.2 (Режим рассуждений) |
| Длина контекста | 128K токенов | |
| Максимальный вывод | По умолчанию: 4K, Максимум: 8K | По умолчанию: 32K, Максимум: 64K |
| JSON Output | ✓ | ✓ |
| Tool Calls | ✓ | ✓ |
| 1M входных токенов (кэш попадание) | $0.028 | |
| 1M входных токенов (кэш промах) | $0.28 | |
| 1M выходных токенов | $0.42 | |
💰 Правила списания
Расход = количество токенов × цена. Средства списываются с пополненного баланса, а при наличии грантового баланса - сначала с грантового.
См. также Как оплатить DeepSeek из России
Chat Completions API
Эндпоинт
POST https://api.deepseek.com/chat/completions
Обязательные параметры
{
"model": "deepseek-chat",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}
Дополнительные параметры
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
temperature |
float | Креативность (0-2) | 1.0 |
max_tokens |
integer | Максимум токенов ответа | Зависит от модели |
top_p |
float | Качество генерации (0-1) | 1.0 |
stream |
boolean | Потоковый ответ | false |
response_format |
object | Формат ответа (например JSON) | null |
JSON Output (Структурированный вывод)
Для получения ответов в строгом JSON формате:
⚠️ Требования
- Установите
response_format: {'type': 'json_object'} - Включите слово "json" в системный или пользовательский промпт
- Предоставьте пример желаемого JSON формата
- Установите разумное значение
max_tokens
Пример на Python
import json
from openai import OpenAI
client = OpenAI(
api_key="ваш_api_ключ",
base_url="https://api.deepseek.com",
)
system_prompt = """
Пользователь предоставит текст. Пожалуйста, распарсите "вопрос" и "ответ"
и выведите их в JSON формате.
ПРИМЕР ВВОДА:
Какая самая высокая гора в мире? Эверест.
ПРИМЕР JSON ВЫВОДА:
{
"question": "Какая самая высокая гора в мире?",
"answer": "Эверест"
}
"""
user_prompt = "Какая самая длинная река в мире? Нил."
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
]
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
response_format={'type': 'json_object'}
)
print(json.loads(response.choices[0].message.content))
Tool Calls (Вызов инструментов)
Базовый пример
from openai import OpenAI
client = OpenAI(
api_key="ваш_api_ключ",
base_url="https://api.deepseek.com",
)
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Получить погоду в указанном месте",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "Город и область, например: Москва"
}
},
"required": ["location"]
}
}
}
]
messages = [
{"role": "user", "content": "Какая погода в Москве?"}
]
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
tools=tools
)
# Обработка ответа с вызовом функции
message = response.choices[0].message
if message.tool_calls:
tool_call = message.tool_calls[0]
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
print(f"Вызвана функция: {function_name}")
print(f"Аргументы: {arguments}")
Примеры на Python
Базовый клиент
import requests
import json
class DeepSeekClient:
def __init__(self, api_key, base_url="https://api.deepseek.com"):
self.api_key = api_key
self.base_url = base_url
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
def chat_completion(self, messages, model="deepseek-chat", **kwargs):
url = f"{self.base_url}/chat/completions"
payload = {
"model": model,
"messages": messages,
**kwargs
}
try:
response = requests.post(
url,
headers=self.headers,
json=payload,
timeout=60
)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"API Error: {e}")
return None
# Использование
client = DeepSeekClient("ваш_api_ключ")
messages = [
{"role": "system", "content": "Ты полезный ассистент."},
{"role": "user", "content": "Привет!"}
]
response = client.chat_completion(messages, temperature=0.7)
if response:
print(response['choices'][0]['message']['content'])
Потоковый режим
def stream_chat(self, messages, model="deepseek-chat", **kwargs):
url = f"{self.base_url}/chat/completions"
payload = {
"model": model,
"messages": messages,
"stream": True,
**kwargs
}
response = requests.post(
url,
headers=self.headers,
json=payload,
stream=True,
timeout=60
)
response.raise_for_status()
for line in response.iter_lines():
if line:
line = line.decode('utf-8')
if line.startswith("data: "):
data = line[6:]
if data != "[DONE]":
try:
chunk = json.loads(data)
if 'choices' in chunk and chunk['choices']:
delta = chunk['choices'][0].get('delta', {})
if 'content' in delta:
print(delta['content'], end='', flush=True)
except json.JSONDecodeError:
continue
Примеры на JavaScript/Node.js
Базовый клиент
const axios = require('axios');
class DeepSeekClient {
constructor(apiKey, baseUrl = 'https://api.deepseek.com') {
this.apiKey = apiKey;
this.baseUrl = baseUrl;
this.client = axios.create({
baseURL: this.baseUrl,
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
timeout: 60000
});
}
async chatCompletion(messages, options = {}) {
const {
model = 'deepseek-chat',
temperature = 0.7,
max_tokens = 1000,
stream = false,
...otherOptions
} = options;
try {
const response = await this.client.post('/chat/completions', {
model,
messages,
temperature,
max_tokens,
stream,
...otherOptions
});
return response.data;
} catch (error) {
console.error('API Error:', error.response?.data || error.message);
throw error;
}
}
}
// Использование
async function main() {
const client = new DeepSeekClient('ваш_api_ключ');
const messages = [
{ role: 'system', content: 'Ты полезный ассистент.' },
{ role: 'user', content: 'Привет!' }
];
try {
const response = await client.chatCompletion(messages, {
temperature: 0.7,
max_tokens: 500
});
console.log('Ответ:', response.choices[0].message.content);
} catch (error) {
console.error('Ошибка:', error);
}
}
main();
Обработка ошибок
| Код ошибки | Описание | Решение |
|---|---|---|
| 400 | Invalid Format - Неверный формат запроса | Проверьте тело запроса согласно документации |
| 401 | Authentication Fails - Ошибка аутентификации | Проверьте API ключ |
| 402 | Insufficient Balance - Недостаточно средств | Пополните баланс |
| 422 | Invalid Parameters - Неверные параметры | Проверьте параметры запроса |
| 429 | Rate Limit Reached - Превышен лимит запросов | Снизьте частоту запросов |
| 500 | Server Error - Ошибка сервера | Повторите запрос позже |
| 503 | Server Overloaded - Сервер перегружен | Повторите запрос позже |
Пример обработки ошибок на Python
def handle_api_error(error):
"""Обработка ошибок API"""
if isinstance(error, requests.exceptions.HTTPError):
status_code = error.response.status_code
if status_code == 400:
return "Некорректный запрос. Проверьте параметры."
elif status_code == 401:
return "Неверный API ключ. Проверьте аутентификацию."
elif status_code == 429:
return "Превышены лимиты запросов. Попробуйте позже."
elif status_code >= 500:
return "Ошибка сервера DeepSeek. Попробуйте позже."
else:
return f"HTTP ошибка {status_code}: {error.response.text}"
elif isinstance(error, requests.exceptions.Timeout):
return "Таймаут запроса. Проверьте соединение."
elif isinstance(error, requests.exceptions.ConnectionError):
return "Ошибка соединения. Проверьте сеть."
else:
return f"Неизвестная ошибка: {str(error)}"
Лучшие практики
1. Управление API ключами
import os
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv('DEEPSEEK_API_KEY')
2. Рейт-лимитинг
import time
from functools import wraps
def rate_limiter(max_calls, period):
"""Декоратор для ограничения частоты запросов"""
def decorator(func):
calls = []
@wraps(func)
def wrapper(*args, **kwargs):
now = time.time()
calls[:] = [call for call in calls if call > now - period]
if len(calls) >= max_calls:
sleep_time = period - (now - calls[0])
time.sleep(sleep_time)
calls.append(now)
return func(*args, **kwargs)
return wrapper
return decorator
# Использование
@rate_limiter(max_calls=50, period=60) # 50 запросов в минуту
def make_api_call():
# ваш код
pass
3. Рекомендации по temperature
| Тип задачи | Рекомендуемый temperature |
|---|---|
| Программирование / Математика | 0.0 |
| Очистка данных / Анализ | 1.0 |
| Общий разговор | 1.3 |
| Перевод | 1.3 |
| Творческое письмо / Поэзия | 1.5 |
FIM Completion (Заполнение середины) - Beta
⚠️ Beta функция
Для использования требуется базовый URL: https://api.deepseek.com/beta
Максимальное количество токенов: 4K
Пример на Python
from openai import OpenAI
client = OpenAI(
api_key="ваш_api_ключ",
base_url="https://api.deepseek.com/beta",
)
response = client.completions.create(
model="deepseek-chat",
prompt="def fib(a):",
suffix=" return fib(a-1) + fib(a-2)",
max_tokens=128
)
print(response.choices[0].text)
Chat Prefix Completion - Beta
⚠️ Требования
- Последнее сообщение в массиве messages должно иметь роль "assistant"
- Установите
prefix: Trueдля последнего сообщения - Используйте базовый URL:
https://api.deepseek.com/beta
Пример на Python
from openai import OpenAI
client = OpenAI(
api_key="ваш_api_ключ",
base_url="https://api.deepseek.com/beta",
)
messages = [
{"role": "user", "content": "Напишите код быстрой сортировки"},
{"role": "assistant", "content": "```python\n", "prefix": True}
]
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
stop=["```"],
)
print(response.choices[0].message.content)
Лимиты запросов (Rate Limit)
📊 Важная информация
DeepSeek API не ограничивает количество запросов пользователя. Мы стараемся обслуживать каждый запрос.
⚠️ При высокой нагрузке
- Запросы могут занимать больше времени
- HTTP соединение остается открытым
- Вы можете получать пустые строки или keep-alive комментарии
- Если запрос не начал инференс через 10 минут - соединение закрывается
Оптимальные значения
- Таймаут соединения: 10 секунд
- Таймаут чтения: 30 секунд
- Общий таймаут: 60 секунд
- Частота запросов: 10-60 запросов в минуту
Заключение
✅ Ключевые моменты
- DeepSeek API полностью совместим с OpenAI API форматом
- Используйте базовый URL:
https://api.deepseek.com - Все модели обновлены до DeepSeek-V3.2
- Длина контекста: 128K токенов
- Поддерживаются JSON Output, Tool Calls, потоковый режим
- Beta функции доступны через
/betaendpoint
Документация
Официальная документация: platform.deepseek.com/api-docs
Поддержка
Проверяйте баланс и настройки в личном кабинете
Обновления
Следите за обновлениями в официальном блоге и документации