Ця стаття охоплює нотатки щодо використання та підводні камені для deepseek-v4-pro-0813. На AIHubMix модель доступна через API Chat Completions, Responses та Messages, сумісний з Claude. Дивіться також: офіційна документація API DeepSeek.
"Перевірені" висновки та приклади відповідей у кожному розділі походять з фактичних викликів, зроблених 2026-08-13 через API AIHubMix (Chat Completions / Responses / Messages); елементи специфікації, не позначені як "Перевірені", походять з офіційної документації DeepSeek.
1. Позиціонування моделі та специфікації на перший погляд
V4 Pro є висококласним рівнем покоління V4 DeepSeek (легкий deepseek-v4-flash є його побратимом). Лінія випуску веде до DeepSeek-V4 Preview від 2026-04-24, а 0813 є міткою ВЕРСІЇ МОДЕЛІ, яку DeepSeek призначив поточній збірці. Окрім сирих специфікацій, чотири речі відрізняють його:
- Розріджена прикордонна модель: 1.6T загальних параметрів / 49B активованих (архітектура MoE, або змішання експертів — кожен прохід інференції активує лише підмножину експертних мереж: загальні параметри визначають ємність знань, активовані параметри визначають вартість обчислень за викликом). Картка моделі вказує на гібридну увагу 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*на цю модель), та API Responses (DeepSeek описує нативну підтримку формату, з адаптаціями для Codex). Він також пропонує FIM (заповнити посередині) завершення як бета-функцію на окремій точці доступу, яка не є частиною трьох 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" як Непідтримувані; у Chat Completions повідомлення користувача content приймає лише рядок, без мультимодальних частин контенту |
| Режим думки | Гібридний (думка / недумка), думка за замовчуванням увімкнена |
| Рівні думки | reasoning_effort приймає low / high / max, за замовчуванням high; medium та xhigh відображаються на high для сумісності |
| Доступні API | Chat Completions, Responses, Messages (сумісні з Claude) |
Перевірено: перевищенняmax_tokensвідхиляється валідацією, а не тихо обрізається — надсиланняmax_tokens=9999999повертає HTTP 400, а тіло помилки називає поле та вказує стелю393216.
# max_tokens=9999999 -> HTTP 400
"...max_tokens... 393216"
❗ Зображення не викликають помилок, але вони відкидаються: офіційна формулювання для API Responses звучить так: "Вхідні зображення та файли не підтримуються (частини input_image не викликають помилку, але замінюються текстом-заповнювачем)" — частинаinput_imageне призводить до помилки запиту, вона замінюється текстом-заповнювачем. У Chat Completions повідомлення користувачаcontentприймає лише рядок, а у Messages блокиtype="image"позначені як Непідтримувані. При побудові мультимодальної маршрутизації ніколи не вважайте "без помилок" доказом того, що модель насправді бачила зображення.
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": "Що таке 2 + 2?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# Думка увімкнена (за замовчуванням): message.reasoning_content присутнє, reasoning_tokens = 43
# Думка вимкнена (вимкнено): reasoning_content відсутнє, reasoning_tokens відсутні
Перевірено: з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="Що таке 2 + 2?",
reasoning={"effort": "none"},
)
# effort="none": usage.output_tokens_details.reasoning_tokens = 0
# output[0] є елементом повідомлення без елемента reasoning
# effort не встановлено: output завжди починається з елемента reasoning
Перевірено: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": "Що таке 2 + 2?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# Думка увімкнена (за замовчуванням): content = [блок думки, текстовий блок]
# Думка вимкнена (вимкнено): content = [текстовий блок]
Перевірено: після вимкнення блокthinkingзникає повністю, і залишається лише блокtext.
Щодо рівнів думки:lowтаmaxобидва повернули 200 у Chat Completions під час тестування (highє за замовчуванням і застосовується, коли поле пропущено), але кількість токенів думки не показує монотонної різниці між рівнями для одного й того ж запитання (легке запитання: low=43 / max=27; важке запитання: low=114 / max=92), і нічого не відображається у відповіді — рівні приймаються, але жодного відмінного сигналу не спостерігається у відповіді. У Responses лише рівеньnone(думка вимкнена) може бути підтверджений з боку відповіді.
3. Чому багатоповоротна розмова раптово повертає 400? Історію думок потрібно передавати вербально
Це найпоширеніша проблема з цією моделлю: у режимі думки багатоповоротна розмова повинна передавати попередній контент думки вербально, інакше запит відхиляється. Не знижений, не нижчої якості — жорсткий HTTP 400.
Три API несуть один і той же контент думки під різними назвами полів:
| API | Форма повернення | Тіло помилки при відсутності |
|---|---|---|
| Chat Completions | Поле reasoning_content у повідомленні асистента |
У режимі думки |
| Responses | Елемент виходу з type="reasoning" у масиві input |
У режимі думки |
| Messages | Блок thinking всередині блоків контенту асистента |
У режимі думки |
Перевірено (умови спрацьовування): ця валідація спрацьовує послідовно на багатоповоротних запитах, які містять tools (модель виконує виклик інструмента, потім результат інструмента надсилається назад). На простих багатоповоротних запитах без інструментів, де модель відповідає безпосередньо, валідація не спрацювала в цьому раунді тестування, і запит повернув 200. Іншими словами, оркестрація інструментів (агент / навантаження викликів функцій) є місцем, де ви найімовірніше натрапите на це, тому розглядайте контент думки як частину стану розмови, який ви зберігаєте та відтворюєте.Chat Completions
# Багатоповоротний: передайте попереднє повідомлення асистента назад вербально, включаючи reasoning_content
messages = [
{"role": "user", "content": "Що таке 1 + 1? Запам'ятайте результат."},
{
"role": "assistant",
"content": "2",
"reasoning_content": "<reasoning_content з попередньої відповіді>",
},
{"role": "user", "content": "Додайте 1 до результату."},
]
# Відкидання reasoning_content -> HTTP 400 invalid_request_error
Перевірено: історичне повідомлення асистента, в якому відсутнє reasoning_content, повертає 400; додавання його назад робить ідентичний запит, що повертає 200 і продовжується правильно.Responses
# Багатоповоротний: input = попередній input + response.output (включаючи елемент reasoning) + нове повідомлення
input = previous_input + response.output + [
{"role": "user", "content": "Додайте 1 до результату."}
]
# Фільтрація елемента type="reasoning" -> HTTP 400
Перевірено: вставкаresponse.outputназад як є — це все, що потрібно. Фільтрація вихідних елементів заtype == "message"під час складання історії відкидає елементreasoningі викликає 400 — це найпоширеніший спосіб отримати удар.
Messages
# Багатоповоротний: передайте response.content назад вербально як повідомлення асистента
messages = [
{"role": "user", "content": "Яка погода в Парижі?"},
{"role": "assistant", "content": response.content}, # блоки думки + використання інструментів
{"role": "user", "content": [tool_result_block]},
]
# Видалення блоку думки -> HTTP 400
Перевірено: видалення блоку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": "Яка погода в Парижі?"}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "Отримати погоду для міста",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
},
}],
tool_choice={"type": "function", "function": {"name": "get_weather"}},
)
# Спостережено: finish_reason "tool_calls", tool_calls[0].function.arguments = {"city": "Paris"}
❗ Перевірено:tool_choice: "required"не може бути використано, поки думка увімкнена — це повертає 400Режим думки не підтримує цей tool_choice; вимкнення думки (thinking.type="disabled") робить ідентичний запит, що повертає 200. Коли вам потрібна семантика "обов'язковий виклик інструмента", використовуйте іменовану функціюtool_choiceзамість цього (як вище, що працює з увімкненою думкою), або спочатку вимкніть думку, а потім використовуйтеrequired.
Responses
Плоска форма (type / name / parameters на одному рівні).
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Яка погода в Парижі?",
tools=[{
"type": "function",
"name": "get_weather",
"description": "Отримати погоду для міста",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
)
# Спостережено вихідні елементи: ["reasoning", "function_call"]; arguments = {"city": "Paris"}
Перевірено: копіювання вкладеної форми 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": "Отримати погоду для міста",
"input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
tool_choice={"type": "any"},
messages=[{"role": "user", "content": "Яка погода в Парижі?"}],
)
# Спостережено: контент містить блок використання інструмента, name = get_weather, input = {"city": "Paris"}
❗ Паралельний виклик інструментів не може бути вимкнений, за власним дизайном DeepSeek — офіційна сторінка сумісності Anthropic стверджує, що в рядкуtool_choicedisable_parallel_tool_use ігнорується, а сторінка Responses також стверджуєparallel_tool_calls | Ігнорується (паралельний виклик інструментів завжди увімкнено). Тестування підтверджує: запит про дві міста одночасно з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": "Поверніть {\"a\": 1} як JSON."}],
response_format={"type": "json_object"},
)
# Спостережено контент відповіді: {"a":1}
Перевірено: вихід є дійсним JSON.
Responses
Оголосіть JSON-схему через text.format, з підтримкою strict режиму.
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Поверніть число 1 під ключем a.",
text={
"format": {
"type": "json_schema",
"name": "extract",
"strict": True,
"schema": {"type": "object", "properties": {"a": {"type": "integer"}}, "required": ["a"]},
}
},
)
# Спостережено вихідний текст: {"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
# використання другого виклику з ідентичним довгим префіксом
"prompt_tokens_details": {"cached_tokens": 640} # перший виклик: 0
Перевірено: два послідовні виклики з тим же довгим префіксом на одному каналі перемістили cached_tokens з 0 до 640.Responses
# використання другого виклику з ідентичними довгими інструкціями
"input_tokens_details": {"cached_tokens": 896} # перший виклик: 0
Messages
# використання виклику, чий довгий системний префікс вже був прогрітий
"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": "Скажи привіт."}],
logprobs=True,
top_logprobs=2,
)
# Спостережено: choices[0].logprobs містить ДВІ масиви
# logprobs.content[] -> токени остаточної відповіді
# logprobs.reasoning_content[] -> токени тексту думки
❗ Перевірено: Chat повертає логарифмічні ймовірності для якcontent, так іreasoning_content. Код, який читає лишеlogprobs.content, відповідно до стандартної форми відповіді OpenAI, не викликатиме помилок, але тихо пропустить канал думки; якщо ваш код передбачає єдиний масив підlogprobs, спочатку додайте перевірку форми.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Скажи привіт.",
top_logprobs=3,
)
# Спостережено: logprobs лише на останньому елементі повідомлення
# output[-1].content[0].logprobs[] з логарифмічною ймовірністю + деталями top_logprobs
Перевірено: Responses прикріплює logprobs лише до останнього текстового елемента — жодної подвійної канальної форми, що спостерігається в Chat.
Messages
Протокол Messages (Anthropic) не має еквівалентного поля. Для деталі ймовірності на рівні токенів використовуйте Chat Completions або Responses.
8. Які API можуть шукати в Інтернеті?
Веб-пошук тут є інструментом на стороні сервера (отримання виконується на сервері; клієнт ніколи не надсилає запит самостійно), і він дійсно виконується на обох API Responses та Messages під час тестування.
Responses
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Яка остання стабільна версія Python?",
tools=[{"type": "web_search"}],
)
# Спостережено послідовність вихідних елементів:
# ["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": "Яка остання стабільна версія Python?"}],
)
# Спостережена послідовність блоків контенту:
# ["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. Офіційна довідка API Chat DeepSeek не містить жодного поля пошуку в схемі запиту (це відсутність, встановлена шляхом проходження списку полів одне за одним; DeepSeek не зробив жодної явної заяви про заперечення підтримки). API з явною офіційною заявою про підтримку пошуку на стороні сервера — це Responses (web_search), а офіційна сторінка сумісності Messages також перераховує блоки контенту, пов'язані з пошуком.
# Три контрольні групи, одне й те саме запитання, що вимагає живої інформації, всі HTTP 200:
# A без поля пошуку -> "не можна отримати", анотації = null
# B web_search_options -> "не можна отримати", анотації = null, використання ідентичне A
# C enable_search -> "не можна отримати", анотації = null, використання ідентичне A
Перевірено: надсиланняweb_search_optionsабоenable_searchне викликає помилки, але також нічого не отримує — відповідь не містить жоднихannotations(список цитат, прикріплений до відповіді, коли виконується веб-пошук), а використання відповідає контрольній групі поле за полем. Для доступу до вебу використовуйте API Responses або Messages замість цього.
9. Нотатки щодо використання: Дизайн DeepSeek проти відхилень на нашому шляху
Все нижче повертає HTTP 200, але поводиться контрінтуїтивно. Причини різняться, і те, що ви повинні з ними робити, також різниться, тому вони перераховані окремо: перша група — це те, як DeepSeek спроектував модель, і зміна постачальників не змінить це; друга група — це поточна поведінка на шляху AIHubMix, над якою ми працюємо.
9.1 За дизайном DeepSeek
| Поведение | Офіційна формулювання | Що робити |
|---|---|---|
| Responses не зберігає стан сесії або метадані | Офіційна сторінка сумісності Responses стверджує, ряд за рядом, store | Не підтримується. Відповідь завжди містить store: false, metadata | Не підтримується, і safety_identifier | Не підтримується (з цих чотирьох полів лише 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"} |
| Паралельний виклик інструментів (не вимкнений) | ➖ немає такого поля в офіційному API Chat | ❗ DeepSeek стверджує, що parallel_tool_calls ігнорується, і паралельний виклик завжди увімкнено |
❗ DeepSeek стверджує, що disable_parallel_tool_use ігнорується; тестування все ще повертає два tool_use блоки |
| Структурований вихід | ✅ response_format (json_object) |
✅ text.format (json_schema + strict) |
➖ немає протокольного поля; перенесіть схему в інструмент |
| Автоматичне вимірювання кеш-попадання | ✅ usage.prompt_tokens_details.cached_tokens |
✅ usage.input_tokens_details.cached_tokens |
✅ usage.cache_read_input_tokens |
| logprobs | ❗ подвійний канал: content + reasoning_content |
✅ top_logprobs лише на останньому текстовому елементі |
➖ |
| Веб-пошук | ➖ немає поля пошуку в офіційному API Chat; надсилання одного також нічого не отримує | ✅ 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?
Це значення не приймається, поки думка увімкнена (тіло помилки читає Режим думки не підтримує цей tool_choice). Використовуйте іменовану функцію tool_choice ({"type": "function", "function": {"name": "..."}}), щоб примусити конкретний виклик з увімкненою думкою, або спочатку вимкніть думку, а потім використовуйте required.
Як увімкнути кешування контексту?
Ви не можете — це автоматично. Помістіть стабільний, незмінний контент (системні підказки, фрагменти знань, визначення інструментів) на початку запиту, і кількість попадань відображається у використанні: 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.




