DeepSeek V4 Pro (0813): Думковий Повернення та 3-API Матриця

AIHubMix15 хв читання
DeepSeek V4 Pro (0813): Думковий Повернення та 3-API Матриця

Ця стаття охоплює нотатки щодо використання та підводні камені для 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 у повідомленні асистента У режимі думки reasoning_content має бути передано назад до API.
Responses Елемент виходу з type="reasoning" у масиві input У режимі думки reasoning_text має бути передано назад до API.
Messages Блок thinking всередині блоків контенту асистента У режимі думки content[].thinking має бути передано назад до API.
Перевірено (умови спрацьовування): ця валідація спрацьовує послідовно на багатоповоротних запитах, які містять 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_choice disable_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.createdresponse.completed) stream (message_startmessage_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.