Ця стаття описує нотатки щодо використання та типові пастки для deepseek-v4-pro-0813. На AIHubMix модель доступна через Chat Completions, Responses та Messages API, сумісний з Claude. Дивіться також: офіційну документацію DeepSeek API.
Висновки з позначкою "Verified" і зразки відповідей у кожному розділі отримано з реальних викликів 2026-08-13 через API AIHubMix (Chat Completions / Responses / Messages). Пункти специфікації без позначки "Verified" взято з офіційної документації DeepSeek.
1. Позиціонування моделі та короткі характеристики
V4 Pro є топовим рівнем покоління DeepSeek V4 (легкий deepseek-v4-flash є його «сестринською» моделлю). Лінійка релізів веде відлік від DeepSeek-V4 Preview, опублікованої 2026-04-24, а 0813 — це мітка ВЕРСІЇ МОДЕЛІ, яку DeepSeek присвоїв поточній збірці. Окрім сирих характеристик, виділяють чотири речі:
- Розріджена модель передового рівня: 1,6T загальних параметрів / 49B активованих (архітектура MoE, або mixture-of-experts: під час кожного проходу інференсу активується лише частина експертних мереж. Загальна кількість параметрів визначає ємність знань, а активовані параметри — обчислювальні витрати на один виклик). Картка моделі перелічує гібридну увагу CSA+HCA, mHC і оптимізатор Muon.
- Відкриті ваги за ліцензією MIT:
deepseek-ai/DeepSeek-V4-Proопубліковано на HuggingFace за ліцензією MIT (одна з найдозвільніших ліцензій відкритого коду: дозволено комерційне використання та закрите перепоширення) і її можна розгорнути самостійно. Ліцензія MIT для моделі такого розміру є рідкісною. У примітках картки щодо самостійного розгортання також рекомендовано контекстне вікно ≥384K токенів у режимі Think Max (найвищому рівні мислення). Це рекомендація щодо розгортання, а не специфікація розміщеного API. - Підтримка кількох протоколів є власною, а не сторонньою перекладною обгорткою: DeepSeek сам пропонує OpenAI Chat API, ендпоїнт, сумісний з Anthropic (
/anthropic, який відображаєclaude-opus*на цю модель), та Responses API (DeepSeek описує нативну підтримку цього формату з адаптаціями для Codex). Також доступне FIM-доповнення (fill-in-the-middle) у beta-режимі на окремому ендпоїнті, який не входить до трьох API AIHubMix. - Приблизно 120-кратна різниця між ціною за промах і попадання в кеш: опублікований механізм ціноутворення DeepSeek передбачає $0.003625/M за попадання в кеш проти $0.435/M за промах (вихід $0.87/M), а кешування працює автоматично без параметрів для налаштування. Для навантажень, які повторно використовують довгі префікси (системні промпти, довгі документи), ця різниця визначає більшість рахунку. Фактична роздрібна ціна — та, що показана на сторінці моделі.
| Елемент | Значення |
|---|---|
| Назва моделі на AIHubMix | deepseek-v4-pro-0813 |
| Контекстне вікно | 1M токенів (1,000,000) |
| Максимальний вихід | Офіційне формулювання: MAX OUTPUT MAXIMUM: 384K (точна кількість токенів і значення за замовчуванням не опубліковані) |
| Вхідні модальності | Лише текст. На сторінці сумісності Responses прямо сказано, що вхідні зображення та файли не підтримуються; на сторінці Messages блоки type="image" позначено як Not Supported; у Chat Completions поле content повідомлення користувача приймає лише рядок, без мультимодальних частин контенту |
| Режим мислення | Гібридний (з мисленням / без мислення), мислення увімкнено за замовчуванням |
| Рівні мислення | reasoning_effort приймає low / high / max, за замовчуванням high; medium і xhigh для сумісності відображаються на high |
| Доступні API | Chat Completions, Responses, Messages (сумісний з Claude) |
Verified: перевищенняmax_tokensвідхиляється валідацією, а не мовчки обрізається. Надсиланняmax_tokens=9999999повертає HTTP 400, а тіло помилки називає поле і вказує граничне значення393216.
# max_tokens=9999999 -> HTTP 400
"...max_tokens... 393216"
❗ Зображення не викликають помилки, але їх відкидають: офіційне формулювання для Responses API таке: "Image and file inputs are not supported (input_image parts do not cause an error, but are replaced with a placeholder text)". Тобто частинаinput_imageне призводить до збою запиту, а замінюється текстовою заглушкою. У Chat Completions полеcontentповідомлення користувача приймає лише рядок, а блокиtype="image"у Messages позначено як Not Supported. Під час побудови мультимодальної маршрутизації ніколи не сприймайте відсутність помилки як доказ того, що модель справді бачила зображення.
2. Як вимкнути мислення? Три API, три форми полів
V4 Pro думає за замовчуванням: якщо не надсилати жодних параметрів, відповідь містить вміст мислення. Щоб вимкнути його, на кожному з трьох API використовується різна форма поля.
Chat Completions
Використовуйте об'єкт верхнього рівня thinking.
from openai import OpenAI
client = OpenAI(
base_url="https://aihubmix.com/v1",
api_key="<AIHUBMIX_API_KEY>",
)
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "What is 2 + 2?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# Thinking on (default): message.reasoning_content present, reasoning_tokens = 43
# Thinking off (disabled): reasoning_content absent, reasoning_tokens absent
Verified: заthinking.type="disabled"одночасно зникаютьmessage.reasoning_contentіusage.completion_tokens_details.reasoning_tokens, що підтверджує, що перемикач спрацював.
Responses
Окремого перемикача в Responses немає; щоб вимкнути мислення, встановіть рівень none.
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="What is 2 + 2?",
reasoning={"effort": "none"},
)
# effort="none": usage.output_tokens_details.reasoning_tokens = 0
# output[0] is the message item directly (no reasoning item)
# effort unset : output always starts with a reasoning item
Verified:reasoning.effort="none"помітно відрізняється від рівня за замовчуванням (кількість токенів мислення падає до нуля, елемент виводуreasoningзникає), що підтверджує, що параметр спрацював.
Messages
Та сама назва і та сама форма, що й у Chat Completions: об'єкт верхнього рівня thinking.
from anthropic import Anthropic
client = Anthropic(
api_key="<AIHUBMIX_API_KEY>",
base_url="https://aihubmix.com",
)
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
messages=[{"role": "user", "content": "What is 2 + 2?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# Thinking on (default): content = [thinking block, text block]
# Thinking off (disabled): content = [text block]
Verified: після вимкнення блокthinkingзникає повністю, і лишається лише блокtext.
Про рівні мислення: у тестуванні на Chat Completionslowіmaxобидва повернули 200 (highє значенням за замовчуванням і застосовується, коли поле пропущено). Проте кількість токенів мислення не має монотонної різниці між рівнями для одного й того самого запитання (просте запитання: low=43 / max=27; складне запитання: low=114 / max=92), а у відповіді нічого не повертається назад. Рівні приймаються, але з відповіді не видно жодного відмінного сигналу. У Responses з боку відповіді можна підтвердити лише рівеньnone(мислення вимкнено).
3. Чому багатоходова розмова раптово повертає 400? Попередній вміст мислення потрібно передавати назад без змін
Це найпоширеніша пастка з цією моделлю: у режимі мислення багатоходова розмова має передавати вміст мислення попереднього ходу назад без змін, інакше запит відхиляється. Це не деградація чи зниження якості, а жорстка помилка HTTP 400.
Три API передають той самий вміст мислення під різними назвами полів:
| API | Форма передачі назад | Тіло помилки за відсутності |
|---|---|---|
| Chat Completions | Поле reasoning_content у повідомленні асистента |
The `reasoning_content` in the thinking mode must be passed back to the API. |
| Responses | Елемент виводу з type="reasoning" у масиві input |
The `reasoning_text` in the thinking mode must be passed back to the API. |
| Messages | Блок thinking всередині блоків контенту асистента |
The `content[].thinking` in the thinking mode must be passed back to the API. |
Verified (умови спрацювання): ця валідація стабільно спрацьовує в багатоходових запитах, що містять tools (модель робить виклик інструмента, а потім результат інструмента надсилається назад). У простих багатоходових запитах без інструментів, де модель відповідає напряму, валідація в цьому раунді тестування не спрацювала, і запит повернув 200. Іншими словами, оркестрація інструментів (агентні навантаження або function calling) є місцем, де ця помилка трапляється найчастіше, тож вважайте вміст мислення частиною стану розмови, який потрібно зберігати й відтворювати.Chat Completions
# Multi-turn: pass the previous assistant message back verbatim, including reasoning_content
messages = [
{"role": "user", "content": "What is 1 + 1? Remember the result."},
{
"role": "assistant",
"content": "2",
"reasoning_content": "<reasoning_content from the previous response>",
},
{"role": "user", "content": "Add 1 to the result."},
]
# Dropping reasoning_content -> HTTP 400 invalid_request_error
Verified: історичне повідомлення асистента без reasoning_content повертає 400; якщо додати це поле назад, той самий запит повертає 200 і коректно продовжується.Responses
# Multi-turn: input = previous input + response.output (reasoning item included) + new message
input = previous_input + response.output + [
{"role": "user", "content": "Add 1 to the result."}
]
# Filtering out the type="reasoning" item -> HTTP 400
Verified: достатньо просто повернутиresponse.outputу незмінному вигляді. Фільтрація елементів виводу заtype == "message"під час збирання історії відкидає елементreasoningі спричиняє 400. Це найпоширеніший спосіб нарватися на помилку.
Messages
# Multi-turn: pass response.content back verbatim as the assistant message
messages = [
{"role": "user", "content": "What's the weather in Paris?"},
{"role": "assistant", "content": response.content}, # thinking + tool_use blocks
{"role": "user", "content": [tool_result_block]},
]
# Stripping the thinking block -> HTTP 400
Verified: видалення блокуthinkingз масиву контенту повертає 400 (при цьомуerror.typeмає значенняinvalid_request_error).
4. Виклик інструментів
Кожен API оголошує інструменти у власній протокольній формі, і ці форми не є взаємозамінними.
Chat Completions
Вкладена форма (об'єкт function, що обгортає name / parameters). Примусовий виклик конкретної функції задається через tool_choice з назвою функції.
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather for a city",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
},
}],
tool_choice={"type": "function", "function": {"name": "get_weather"}},
)
# Observed: finish_reason "tool_calls", tool_calls[0].function.arguments = {"city": "Paris"}
❗ Verified:tool_choice: "required"не можна використовувати, коли мислення увімкнено. Запит повертає 400 з повідомленнямThinking mode does not support this tool_choice. Вимкнення мислення (thinking.type="disabled") робить той самий запит успішним із кодом 200. Якщо потрібна семантика "обов'язково викликати інструмент", використовуйте named-functiontool_choice(як вище, це працює з увімкненим мисленням) або спочатку вимкніть мислення, а потім використовуйтеrequired.
Responses
Плоска форма (type / name / parameters на одному рівні).
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="What's the weather in Paris?",
tools=[{
"type": "function",
"name": "get_weather",
"description": "Get weather for a city",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
)
# Observed output items: ["reasoning", "function_call"]; arguments = {"city": "Paris"}
Verified: якщо скопіювати вкладену форму Chat Completions (function: {...}) у Responses, запит повертає 400. Використовуйте плоску форму. Дляtool_choice: "required"діє те саме обмеження режиму мислення, що й у Chat.
Messages
Нативна для Anthropic форма (input_schema), а для примусового виклику — tool_choice: {"type": "any"}.
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
tools=[{
"name": "get_weather",
"description": "Get weather for a city",
"input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
tool_choice={"type": "any"},
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
)
# Observed: content contains a tool_use block, name = get_weather, input = {"city": "Paris"}
❗ Паралельні виклики інструментів не можна вимкнути, це задумано самим DeepSeek: офіційна сторінка сумісності з Anthropic у рядкуtool_choiceпрямо говорить, щоdisable_parallel_tool_use is ignored. Сторінка Responses так само вказуєparallel_tool_calls | Ignored (parallel tool calling is always enabled). Тестування це підтверджує: запит про два міста одночасно зdisable_parallel_tool_use: trueвсе одно повертає два блокиtool_use. Якщо потрібне послідовне виконання, візьміть лише перший виклик або організуйте чергу самостійно на боці клієнта.
Кількість інструментів і вартість контексту: надсилання 200 визначень функцій в одному запиті все ще повертало 200 з нормальною відповіддю і не спрацьовувало жодної перевірки кількості (спостерігалося на цьому шляху; більші кількості не тестувались). Але prompt_tokens для цього запиту досяг 6 105 — визначення інструментів потрапляють у контекст повністю і тарифікуються. Коли інструментів багато, обмежуйте набір інструментів залежно від сценарію, а не оголошуйте все безумовно.5. Структурований вивід
Chat Completions
response_format підтримує режим JSON.
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Return {\"a\": 1} as JSON."}],
response_format={"type": "json_object"},
)
# Observed response content: {"a":1}
Перевірено: вивід є дійсним JSON.
Responses
Оголошуйте JSON Schema через text.format; режим strict підтримується.
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Return the number 1 under key a.",
text={
"format": {
"type": "json_schema",
"name": "extract",
"strict": True,
"schema": {"type": "object", "properties": {"a": {"type": "integer"}}, "required": ["a"]},
}
},
)
# Observed output text: {"a":1}
Перевірено: вивід суворо відповідає заданій схемі.
Messages
Протокол Messages (Anthropic) не має еквівалента response_format / text.format. Типовий обхідний шлях — передати схему через інструмент: оголосити інструмент, у якого input_schema є вашою цільовою схемою, встановити tool_choice: {"type": "any"} і прочитати структурований результат із input блоку tool_use. Цей раунд тестування спеціально не перевіряв такий шаблон; коли потрібні жорсткі гарантії схеми, краще використовуйте Chat Completions або Responses.
6. Як увімкнути кешування контексту? Не потрібно, це автоматично
Кешування контексту (ідентичні префікси повторно використовуються, а кешована частина тарифікується за нижчою ставкою) увімкнено за замовчуванням і не потребує параметрів. Другий запит із тим самим довгим префіксом повідомляє про попадання в кеш у usage під назвою поля, яка різниться залежно від API. Деталі кешування та актуальні ціни дивіться на сторінці моделі; стратегію кешування між моделями та методи підвищення частки попадань дивіться в практиках кешування промптів.
Chat Completions
# usage of the second call with an identical long prefix
"prompt_tokens_details": {"cached_tokens": 640} # first call: 0
Перевірено: два послідовні виклики з тим самим довгим префіксом на одному каналі змінили cached_tokens з 0 на 640.Responses
# usage of the second call with identical long instructions
"input_tokens_details": {"cached_tokens": 896} # first call: 0
Messages
# usage of a call whose long system prefix was already warmed
"cache_read_input_tokens": 896
Перевірено: префікс вище був «прогрітий» запитом Responses з ідентичним вмістом, і перший виклик Messages одразу отримав попадання на 896 токенів — це узгоджується з тим, що кешування прив'язане до префікса вмісту і спільне для різних протокольних поверхонь.
7. logprobs: Chat повертає два канали
logprobs (логарифми ймовірностей — деталізована впевненість моделі для кожного токена-кандидата) повертаються у різних структурах на двох API, тому код парсингу має обробляти їх окремо.
Chat Completions
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "Say hi."}],
logprobs=True,
top_logprobs=2,
)
# Observed: choices[0].logprobs contains TWO arrays
# logprobs.content[] -> tokens of the final answer
# logprobs.reasoning_content[] -> tokens of the thinking text
❗ Перевірено: Chat повертає логарифми ймовірностей як дляcontent, так і дляreasoning_content. Код, що читає лишеlogprobs.contentзгідно зі стандартною структурою відповіді OpenAI, не видасть помилку, але мовчки пропустить канал міркувань; якщо ваш код припускає один масив уlogprobs, спершу додайте перевірку структури.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Say hi.",
top_logprobs=3,
)
# Observed: logprobs only on the final message item
# output[-1].content[0].logprobs[] with logprob + top_logprobs details
Перевірено: Responses прикріплює logprobs лише до фінального текстового елемента — жодної двоканальної структури, як у Chat.
Messages
Протокол Messages (Anthropic) не має еквівалентного поля. Для деталей ймовірностей на рівні токенів використовуйте Chat Completions або Responses.
8. Які API можуть шукати в мережі?
Веб-пошук тут є серверним інструментом (пошук виконується на сервері; клієнт сам не надсилає запит), і в тестуванні він справді виконується як на API Responses, так і на API Messages.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="What is the latest stable version of Python?",
tools=[{"type": "web_search"}],
)
# Observed output item sequence:
# ["reasoning", "web_search_call", "reasoning", "message"]
Перевірено: у послідовності виводу з'являється елемент web_search_call, що означає, що сервер справді виконав пошук.Messages
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
tools=[{"type": "web_search_20250305", "name": "web_search"}],
messages=[{"role": "user", "content": "What is the latest stable version of Python?"}],
)
# Observed content block sequence:
# ["thinking", "server_tool_use", "web_search_tool_result", "thinking", "text"]
# usage.server_tool_use.web_search_requests = 1
Перевірено: usage.server_tool_use.web_search_requests дорівнює 1 — запит пошуку справді відбувся і був врахований у тарифікації.Chat Completions
Веб-пошук на Chat не можна запустити. Офіційний довідник Chat API від DeepSeek не містить жодного поля для пошукового інструмента в схемі запиту (це відсутність, встановлена шляхом перевірки списку полів по одному; DeepSeek не робив жодної явної заяви про відсутність підтримки). API з чітким офіційним підтвердженням підтримки серверного пошуку — Responses (web_search), а офіційна сторінка сумісності Messages також перелічує блоки контенту, пов'язані з пошуком.
# Three control groups, same question requiring live information, all HTTP 200:
# A no search field -> "cannot retrieve", annotations = null
# B web_search_options -> "cannot retrieve", annotations = null, usage identical to A
# C enable_search -> "cannot retrieve", annotations = null, usage identical to A
Перевірено: надсиланняweb_search_optionsабоenable_searchне викликає помилки, але й нічого не шукає — у відповіді немаєannotations(список цитувань, що додається до відповіді, коли виконується веб-пошук), а usage збігається з контрольною групою поле в поле. Для доступу до мережі використовуйте API Responses або Messages.
9. Примітки щодо використання: дизайн DeepSeek та відхилення на нашому шляху
Усе нижче повертає HTTP 200, але поводиться контрінтуїтивно. Причини різні, і різними є дії, які слід вжити, тому вони перелічені окремо: перша група — це те, як DeepSeek спроєктував модель, і зміна провайдера цього не змінить; друга група — поточна поведінка на шляху AIHubMix, над якою ми працюємо.
9.1 За дизайном DeepSeek
| Поведінка | Офіційне формулювання | Що робити |
|---|---|---|
| Responses не зберігає стан сесії чи метадані | Офіційна сторінка сумісності Responses послідовно зазначає store | Not supported. The response always carries store: false, metadata | Not supported та safety_identifier | Not supported (із цих чотирьох полів лише user підтримується). Тестування збігається: запит повертає 200, але metadata має значення null, safety_identifier відсутнє, а store завжди дорівнює false |
Зберігайте дані для кореляції запитів на клієнті; не покладайтеся на серверне зберігання |
| Параметри семплювання не впливають у режимі міркування | DeepSeek прямо зазначає, що temperature і top_p тихо не діють у режимі міркування. У тестуванні обидва повертають 200 без жодного відлуння у відповіді та без зміни її структури |
Не покладайтеся на параметри семплювання для стабільності виводу в режимі міркування; використовуйте структурований вивід, коли потрібен детермінізм |
| Продовження префікса / FIM доступне лише на офіційному бета-ендпоінті | Офіційний опис prefix: «(Beta) … Ви повинні встановити base_url="https://api.deepseek.com/beta", щоб використовувати цю функцію», а FIM-доповнення також є бета-функцією. Перевірено на продакшені AIHubMix: надсилання prefix: true на стандартному ендпоінті повертає 200, але префікс мовчки ігнорується, що узгоджується за напрямом з офіційним формулюванням |
Для контрольованого формату виводу використовуйте структурований вивід (розділ 5) або обрізання через stop |
| Паралельний виклик інструментів не можна вимкнути | Див. розділ 4: DeepSeek зазначає на сторінках і Responses, і Anthropic, що перемикач ігнорується і паралельні виклики завжди увімкнені | Якщо потрібне послідовне виконання, ставте виклики в чергу на клієнті |
9.2 Поточна поведінка на шляху AIHubMix
| Поведінка | Що показує тестування | Що робити |
|---|---|---|
Нестандартний type в об'єктах помилок Responses |
error.type у відповідях 4xx має значення Aihubmix_api_error, тоді як помилка того самого класу в Messages повертає канонічний invalid_request_error |
Розгалужуйте логіку за HTTP-кодом статусу, а не за рядком error.type |
| Токени міркування враховуються як 0 у Messages | Відповідь містить блок thinking, але usage.output_tokens_details.thinking_tokens завжди дорівнює 0, що суперечить фактичному вмісту міркувань; згідно з контрактом Anthropic, з яким ми інтегруємося, це поле є обов'язковим і має бути ≤ output_tokens |
Для обліку вартості міркувань використовуйте completion_tokens_details.reasoning_tokens у Chat або output_tokens_details.reasoning_tokens у Responses |
Messages повертає model як deepseek-v4-pro |
Запит надсилає deepseek-v4-pro-0813, а відповідь повертає deepseek-v4-pro. Причина в найменуванні: єдине офіційне ім'я моделі в API від DeepSeek — deepseek-v4-pro, а 0813 є її міткою версії |
Не використовуйте поле model у відповіді як єдину основу для перевірок маршрутизації моделей або розподілу використання |
9.3 Не визначено DeepSeek, тому вердикту немає ні в який бік
Надсилання значення поза переліком для reasoning_effort (наприклад, bogus_xyz) повертає 200 із нормальною відповіддю, без помилки і без помітного ефекту. Факт достатньо зрозумілий: цей шлях наразі не перевіряє перелік значень reasoning_effort. Незрозуміло інше — чи має він це робити: DeepSeek публікує допустимий перелік, але ніколи не зазначає, чи має недопустимий рівень відхилятися, тож немає базису для оцінки, отже це не вважається ні офіційною поведінкою, ні дефектом на нашому шляху. Безпечний підхід на стороні клієнта: самостійно перевіряти рівень і не розраховувати, що API його зловить.
10. Матриця підтримки можливостей за API
Комірки нижче містять написання параметра / поля для кожного API. За винятком місць, позначених як явне формулювання DeepSeek, кожен висновок отримано з реальних викликів, зроблених 2026-08-13 до продакшн-API AIHubMix.
| Можливість | Chat Completions | Responses | Messages |
|---|---|---|---|
| Базовий чат / системні інструкції | ✅ messages |
✅ input + instructions |
✅ messages + верхньорівневе system |
| Потокова передача | ✅ stream + stream_options |
✅ stream (response.created … response.completed) |
✅ stream (message_start … message_stop) |
| Верхня межа виводу | ✅ max_tokens (400 при перевищенні, межа 393216) |
✅ max_output_tokens |
✅ max_tokens |
| Вимкнення міркування | ✅ thinking: {"type": "disabled"} |
✅ reasoning: {"effort": "none"} |
✅ thinking: {"type": "disabled"} |
| Рівень міркування | 🟡 reasoning_effort приймається, без помітного сигналу розрізнення |
✅ reasoning.effort (підтверджується лише none) |
🟡 output_config.effort приймається, нічого не повертається у відповіді |
| Повернення вмісту міркувань | ✅ поле reasoning_content |
✅ елемент виводу reasoning |
✅ блок вмісту thinking |
| Обов'язкова передача історії міркувань | ✅ відсутній reasoning_content → 400 |
✅ відсутній елемент reasoning → 400 |
✅ відсутній блок thinking → 400 |
| Виклики інструментів | ✅ вкладені tools + іменований tool_choice |
✅ плоскі tools |
✅ input_schema + tool_choice: {"type":"any"} |
Примусовий виклик через required |
❗ 400, поки міркування увімкнене; спершу вимкніть міркування | ❗ те саме, що ліворуч | ✅ {"type": "any"} |
| Паралельний виклик інструментів (не вимикається) | ➖ такого поля в офіційному Chat API немає | ❗ DeepSeek зазначає, що parallel_tool_calls ігнорується, а паралельні виклики завжди увімкнені |
❗ DeepSeek зазначає, що disable_parallel_tool_use ігнорується; тестування все ще повертає два блоки tool_use |
| Структурований вивід | ✅ response_format (json_object) |
✅ text.format (json_schema + strict) |
➖ немає поля protocol; схему передають через інструмент |
| Автоматичний облік попадань у кеш | ✅ usage.prompt_tokens_details.cached_tokens |
✅ usage.input_tokens_details.cached_tokens |
✅ usage.cache_read_input_tokens |
| logprobs | ❗ подвійний канал: content + reasoning_content |
✅ top_logprobs лише для останнього текстового елемента |
➖ |
| Вебпошук | ➖ в офіційному Chat API немає поля search; його надсилання також не запускає пошук | ✅ tools: [{"type": "web_search"}] |
✅ web_search_20250305 |
| Стоп-послідовності | ✅ stop |
➖ у протоколі немає поля стоп-послідовностей (довжину обмежує лише max_output_tokens) |
✅ stop_sequences (stop_reason: "stop_sequence") |
Легенда: ✅ перевірено, працює · 🟡 приймається, але ефект підтвердити не вдається · ❗ потребує уваги (див. примітки вище) · ➖ такого поняття в цьому API немає
Часті запитання
Які API підтримує deepseek-v4-pro-0813 на AIHubMix?
Chat Completions (/v1/chat/completions), Responses (/v1/responses) і сумісний із Claude API Messages (/v1/messages).
Чому багатоходова розмова раптово повертає 400?
Найпоширеніша причина — не передано історію мислення. У режимі мислення вміст мислення попереднього ходу має бути відтворений дослівно: reasoning_content у повідомленні асистента для Chat, елемент виводу type="reasoning" для Responses і блок вмісту thinking для Messages. Найбільше це проявляється в багатоходових розмовах з інструментами — багато фреймворків під час збирання історії фільтрують елементи виводу за type == "message", і це відкидає елемент reasoning.
Чи можна вимкнути мислення?
Так. Надішліть thinking: {"type": "disabled"} для Chat або Messages і reasoning: {"effort": "none"} для Responses. Після вимкнення зникають і вміст мислення, і токени мислення.
Чи відрізняються три рівні reasoning_effort?low / high / max приймаються всі (за замовчуванням high; medium і xhigh для сумісності відображаються на high). Під час тестування кількість токенів мислення для одного й того самого запитання не демонструє монотонної різниці між рівнями, і нічого не повертається назад, тож різницю неможливо підтвердити з боку викликача. Лише рівень none у Responses (мислення вимкнено) дає помітну різницю.
Чому tool_choice: "required" повертає 400?
Це значення не приймається, коли мислення увімкнено (тіло помилки: Thinking mode does not support this tool_choice). Щоб примусово викликати конкретну функцію при увімкненому мисленні, використайте tool_choice з іменованою функцією ({"type": "function", "function": {"name": "..."}}), або спочатку вимкніть мислення, а потім використайте required.
Як увімкнути контекстне кешування?
Нічого вмикати не потрібно — це автоматично. Розмістіть стабільний, незмінний вміст (системні промпти, фрагменти знань, визначення інструментів) на початку запиту, а кількість попадань у кеш відображається у usage: prompt_tokens_details.cached_tokens для Chat, input_tokens_details.cached_tokens для Responses і cache_read_input_tokens для Messages.
Ціни та поточний статус див. на сторінці моделі deepseek-v4-pro-0813; більше моделей — у галереї моделей.
Пов'язані практичні посібники: практичний посібник з Kimi K3 (нові параметри та матриця підтримки трьох API) і зміни в кешуванні промптів та тарифікації GPT-5.6.



