DeepSeek V4 Pro (0813): Thinking Passback & Ma trận 3 API

Hướng dẫn thực hành DeepSeek V4 Pro (0813): công tắc thinking và các mức reasoning_effort, bắt buộc truyền lại lịch sử thinking, tools, caching và ma trận 3 API.

AIHubMixĐọc 15 phút
DeepSeek V4 Pro (0813): Thinking Passback & Ma trận 3 API

Bài viết này trình bày các lưu ý khi sử dụng và những điểm dễ vấp đối với deepseek-v4-pro-0813. Trên AIHubMix, mô hình này có sẵn qua Chat Completions, Responses và Messages API tương thích Claude. Xem thêm: tài liệu API chính thức của DeepSeek.

Các kết luận "Verified" và phản hồi mẫu trong mỗi phần đến từ các lệnh gọi thực tế thực hiện ngày 2026-08-13 qua API của AIHubMix (Chat Completions / Responses / Messages); các thông số không được đánh dấu "Verified" lấy từ tài liệu chính thức của DeepSeek.

1. Định vị mô hình và thông số tóm tắt

V4 Pro là phân khúc cao cấp của thế hệ V4 của DeepSeek (deepseek-v4-flash nhẹ hơn là mô hình anh em của nó). Dòng phát hành bắt nguồn từ DeepSeek-V4 Preview ngày 2026-04-24, còn 0813 là nhãn PHIÊN BẢN MÔ HÌNH mà DeepSeek gán cho bản build hiện tại. Ngoài các thông số thô, có bốn điểm làm nó khác biệt:

  • Một mô hình tiên phong dạng thưa: 1.6T tham số tổng / 49B tham số kích hoạt (kiến trúc MoE, hay mixture-of-experts — mỗi lượt suy luận chỉ kích hoạt một phần các mạng chuyên gia; tổng số tham số quyết định dung lượng tri thức, còn số tham số kích hoạt quyết định chi phí tính toán cho mỗi lần gọi). Model card liệt kê kiến trúc chú ý lai CSA+HCA, mHC và trình tối ưu Muon.
  • Trọng số mở theo giấy phép MIT: deepseek-ai/DeepSeek-V4-Pro được công bố trên HuggingFace theo giấy phép MIT (một trong những giấy phép mã nguồn mở cho phép nhất — cho phép sử dụng thương mại và tái phân phối mã nguồn đóng) và có thể tự triển khai. MIT khá hiếm với một mô hình có quy mô như vậy. Các ghi chú tự triển khai trong model card cũng gợi ý cửa sổ ngữ cảnh ≥384K token khi chạy ở chế độ Think Max (mức suy luận cao nhất) — đây là hướng dẫn triển khai khi tự host, không phải thông số của API được host.
  • Hỗ trợ đa giao thức là của chính hãng, không phải chuyển đổi bên thứ ba: bản thân DeepSeek cung cấp OpenAI Chat API, endpoint tương thích Anthropic (/anthropic, ánh xạ claude-opus* sang mô hình này) và Responses API (DeepSeek mô tả hỗ trợ gốc cho định dạng này, có điều chỉnh cho Codex). Họ cũng cung cấp hoàn thành FIM (fill-in-the-middle) như tính năng Beta trên một endpoint riêng, không thuộc ba API của AIHubMix.
  • Chênh lệch khoảng 120× giữa giá cache-hit và cache-miss: cơ chế giá đã công bố của DeepSeek là cache-hit $0.003625/M so với cache-miss $0.435/M (đầu ra $0.87/M), và caching tự động, không có tham số nào cần thiết lập. Với các khối lượng công việc tái sử dụng tiền tố dài (system prompt, tài liệu dài), khoảng chênh lệch này chi phối phần lớn hóa đơn. Giá bán lẻ thực tế là giá hiển thị trên trang mô hình.
Mục Giá trị
Tên mô hình trên AIHubMix deepseek-v4-pro-0813
Cửa sổ ngữ cảnh 1M token (1,000,000)
Đầu ra tối đa Thuật ngữ chính thức là MAX OUTPUT MAXIMUM: 384K (số token chính xác và mặc định không được công bố)
Phương thức đầu vào Chỉ văn bản. Trang tương thích Responses nêu rõ đầu vào hình ảnh và tệp không được hỗ trợ; trang Messages đánh dấu các khối type="image" là Not Supported; trên Chat Completions, content của tin nhắn người dùng chỉ nhận chuỗi, không có phần nội dung đa phương thức
Chế độ suy luận Hybrid (có thinking / không thinking), mặc định bật thinking
Mức suy luận reasoning_effort nhận low / high / max, mặc định high; medium và xhigh được ánh xạ sang high để tương thích
API khả dụng Chat Completions, Responses, Messages (tương thích Claude)
Đã xác minh: vượt quá max_tokens sẽ bị bước kiểm tra hợp lệ từ chối thay vì cắt âm thầm — gửi max_tokens=9999999 trả về HTTP 400, và nội dung lỗi nêu tên trường cùng giới hạn trần 393216.
# max_tokens=9999999 -> HTTP 400
"...max_tokens... 393216"
❗ Hình ảnh không gây lỗi nhưng bị loại bỏ: nguyên văn chính thức của Responses API là "Image and file inputs are not supported (input_image parts do not cause an error, but are replaced with a placeholder text)" — phần input_image không làm yêu cầu thất bại, mà bị thay bằng văn bản giữ chỗ. Trên Chat Completions, content của tin nhắn người dùng chỉ nhận chuỗi, còn trên Messages các khối type="image" được đánh dấu Not Supported. Khi xây dựng định tuyến đa phương thức, đừng bao giờ coi "không có lỗi" là bằng chứng mô hình thực sự đã nhìn thấy hình ảnh.

2. Làm sao tắt thinking? Ba API, ba dạng trường khác nhau

V4 Pro mặc định có thinking: không gửi tham số nào và phản hồi sẽ trả về nội dung thinking. Việc tắt thinking dùng dạng trường khác nhau trên mỗi API trong ba API.

Chat Completions

Dùng đối tượng thinking ở cấp cao nhất.

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
Đã xác minh: với thinking.type="disabled", cả message.reasoning_content và usage.completion_tokens_details.reasoning_tokens đều biến mất cùng lúc, xác nhận công tắc đã có hiệu lực.

Responses

Responses không có công tắc riêng; tắt thinking nghĩa là đặt mức thành 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
Đã xác minh: reasoning.effort="none" khác biệt rõ rệt so với mức mặc định (số token thinking về không, mục đầu ra reasoning biến mất), xác nhận đã có hiệu lực.

Messages

Cùng tên và cùng dạng với Chat Completions: đối tượng thinking ở cấp cao nhất.

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]
Đã xác minh: khi đã tắt, khối thinking biến mất hoàn toàn và chỉ còn khối text.
Về các mức thinking: low và max đều trả về 200 trên Chat Completions khi thử nghiệm (high là mặc định và áp dụng khi bỏ trống trường), nhưng số token thinking không cho thấy chênh lệch đơn điệu giữa các mức với cùng một câu hỏi (câu dễ: low=43 / max=27; câu khó: low=114 / max=92), và không có gì được phản hồi lại trong response — các mức được chấp nhận, nhưng không quan sát được tín hiệu phân biệt nào từ response. Trên Responses, chỉ mức none (tắt thinking) là có thể xác nhận từ phía response.

3. Tại sao hội thoại nhiều lượt bỗng trả về 400? Nội dung thinking của lịch sử phải được truyền lại nguyên văn

Đây là bẫy phổ biến nhất với mô hình này: ở chế độ thinking, hội thoại nhiều lượt phải truyền lại nguyên văn nội dung thinking của lượt trước, nếu không yêu cầu sẽ bị từ chối. Không phải giảm chất lượng, cũng không phải kém đi — mà là HTTP 400 cứng.

Ba API mang cùng một nội dung thinking dưới các tên trường khác nhau:

API Dạng truyền lại Thông báo lỗi khi thiếu
Chat Completions Trường reasoning_content trên tin nhắn của assistant The `reasoning_content` in the thinking mode must be passed back to the API.
Responses Mục đầu ra có type="reasoning" trong mảng input The `reasoning_text` in the thinking mode must be passed back to the API.
Messages Khối thinking bên trong các khối nội dung của assistant The `content[].thinking` in the thinking mode must be passed back to the API.
Đã xác minh (điều kiện kích hoạt): kiểm tra này luôn kích hoạt trên yêu cầu nhiều lượt có mang tools (mô hình phát lệnh gọi công cụ, sau đó kết quả công cụ được gửi lại). Với yêu cầu nhiều lượt thông thường không có tools, khi mô hình trả lời trực tiếp, kiểm tra không kích hoạt trong đợt thử nghiệm này và yêu cầu trả về 200. Nói cách khác, điều phối công cụ (khối lượng công việc agent / function-calling) là nơi bạn dễ gặp lỗi nhất, vì vậy hãy coi nội dung thinking là một phần của trạng thái hội thoại cần lưu trữ và phát lại.

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
Đã xác minh: một tin nhắn assistant trong lịch sử thiếu reasoning_content sẽ trả về 400; thêm lại trường này thì cùng yêu cầu đó trả về 200 và tiếp tục đúng.

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
Đã xác minh: chỉ cần chèn nguyên response.output trở lại là đủ. Lọc các mục đầu ra theo type == "message" khi ghép lịch sử sẽ làm rơi mục reasoning và gây ra lỗi 400 — đây là cách phổ biến nhất để mắc lỗi.

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
Đã xác minh: xóa khối thinking khỏi mảng nội dung sẽ trả về 400 (với error.type là invalid_request_error).

4. Gọi công cụ (Tool Calling)

Mỗi API khai báo tools theo dạng giao thức riêng; các dạng này không thể thay thế cho nhau.

Chat Completions

Dạng lồng nhau (đối tượng function bao bọc name / parameters). tool_choice dạng hàm được đặt tên sẽ buộc gọi.

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"}
❗ Đã xác minh: tool_choice: "required" không dùng được khi thinking đang bật — trả về 400 Thinking mode does not support this tool_choice; tắt thinking (thinking.type="disabled") khiến cùng yêu cầu đó trả về 200. Khi cần ngữ nghĩa "bắt buộc gọi công cụ", hãy dùng tool_choice dạng hàm được đặt tên (như trên, hoạt động khi thinking bật), hoặc tắt thinking trước rồi mới dùng required.

Responses

Dạng phẳng (type / name / parameters nằm cùng cấp).

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"}
Đã xác minh: sao chép dạng lồng nhau của Chat Completions (function: {...}) sang Responses sẽ trả về 400 — hãy dùng dạng phẳng. tool_choice: "required" cũng chịu cùng hạn chế ở chế độ thinking như trên Chat.

Messages

Dạng gốc của Anthropic (input_schema), với tool_choice: {"type": "any"} để buộc gọi.

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"}
❗ Gọi công cụ song song không thể tắt, theo thiết kế của chính DeepSeek — trang tương thích Anthropic chính thức ghi ở dòng tool_choice rằng disable_parallel_tool_use is ignored, và trang Responses cũng ghi parallel_tool_calls | Ignored (parallel tool calling is always enabled). Thử nghiệm xác nhận: hỏi về hai thành phố cùng lúc với disable_parallel_tool_use: true vẫn trả về hai khối tool_use. Nếu cần thực thi tuần tự, hãy lấy lệnh gọi đầu tiên hoặc tự xếp hàng ở phía client.
Số lượng công cụ và chi phí ngữ cảnh: gửi 200 định nghĩa hàm trong một yêu cầu duy nhất vẫn trả về 200 với câu trả lời bình thường và không kích hoạt bất kỳ kiểm tra số lượng nào (quan sát trên đường dẫn này; các số lượng lớn hơn chưa được kiểm tra). Tuy nhiên, prompt_tokens của yêu cầu đó đạt 6.105 — định nghĩa công cụ được đưa vào ngữ cảnh đầy đủ và bị tính phí. Khi có nhiều công cụ, hãy giới hạn bộ công cụ theo từng kịch bản thay vì khai báo tất cả một cách vô điều kiện.

5. Đầu ra có cấu trúc

Chat Completions

response_format hỗ trợ chế độ 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}
Đã xác minh: đầu ra là JSON hợp lệ.

Responses

Khai báo JSON Schema qua text.format, với chế độ strict được hỗ trợ.

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}
Đã xác minh: đầu ra tuân thủ nghiêm ngặt schema đã cho.

Messages

Giao thức Messages (Anthropic) không có tương đương với response_format / text.format. Cách làm thông thường là đưa schema vào một công cụ — khai báo một công cụ có input_schema là schema mục tiêu của bạn, đặt tool_choice: {"type": "any"}, rồi đọc kết quả có cấu trúc từ input của khối tool_use. Đợt kiểm thử này không xác minh riêng mẫu này; khi cần đảm bảo schema chặt chẽ, nên ưu tiên Chat Completions hoặc Responses.

6. Làm thế nào để bật bộ nhớ đệm ngữ cảnh? Bạn không cần bật, nó tự động

Bộ nhớ đệm ngữ cảnh (các tiền tố giống nhau được tái sử dụng, và phần được lưu đệm được tính phí với mức thấp hơn) được bật mặc định và không cần tham số. Yêu cầu thứ hai với cùng tiền tố dài sẽ báo cáo lần trúng cache trong usage, dưới tên trường khác nhau tùy theo API. Để biết chi tiết về bộ nhớ đệm và giá hiện tại, xem trang mô hình; về chiến lược bộ nhớ đệm đa mô hình và kỹ thuật nâng tỷ lệ trúng, xem các thực hành bộ nhớ đệm prompt.

Chat Completions

# usage of the second call with an identical long prefix
"prompt_tokens_details": {"cached_tokens": 640}   # first call: 0
Đã xác minh: hai lệnh gọi liên tiếp với cùng tiền tố dài trên cùng kênh đã làm cached_tokens tăng từ 0 lên 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
Đã xác minh: tiền tố ở trên đã được làm nóng bởi một yêu cầu Responses có nội dung giống hệt, và lệnh gọi Messages đầu tiên trúng ngay 896 — phù hợp với việc bộ nhớ đệm được khóa theo tiền tố nội dung và dùng chung giữa các bề mặt giao thức.

7. logprobs: Chat trả về hai kênh

logprobs (xác suất logarit — chi tiết độ tin cậy theo từng token ứng viên của mô hình) được trả về theo các dạng khác nhau trên hai API, và mã phân tích cú pháp phải xử lý riêng từng loại.

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
❗ Đã xác minh: Chat trả về logprobs cho cả content và reasoning_content. Mã chỉ đọc logprobs.content, theo cấu trúc phản hồi OpenAI chuẩn, sẽ không báo lỗi nhưng sẽ âm thầm bỏ sót kênh suy luận; nếu mã của bạn giả định một mảng duy nhất dưới logprobs, hãy thêm kiểm tra cấu trúc trước.

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
Đã xác minh: Responses chỉ gắn logprobs vào mục văn bản cuối cùng — không có cấu trúc hai kênh như trên Chat.

Messages

Giao thức Messages (Anthropic) không có trường tương đương. Để lấy chi tiết xác suất ở mức token, hãy dùng Chat Completions hoặc Responses.

8. API nào có thể tìm kiếm web?

Tìm kiếm web ở đây là một công cụ phía máy chủ (việc truy xuất chạy trên máy chủ; phía client không tự gửi yêu cầu), và nó thực sự được thực thi trên cả hai API Responses và Messages trong quá trình kiểm thử.

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"]
Đã xác minh: một mục web_search_call xuất hiện trong chuỗi đầu ra, nghĩa là máy chủ thực sự đã chạy một lần truy xuất.

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
Đã xác minh: usage.server_tool_use.web_search_requests đếm được 1 — yêu cầu truy xuất thực sự đã diễn ra và được tính phí.

Chat Completions

Không thể kích hoạt tìm kiếm web trên Chat. API Chat chính thức của DeepSeek không chứa trường công cụ tìm kiếm nào trong lược đồ yêu cầu (đây là kết luận vắng mặt, được xác lập bằng cách rà soát từng trường trong danh sách; DeepSeek không có tuyên bố rõ ràng phủ nhận hỗ trợ). API có tuyên bố hỗ trợ tìm kiếm phía máy chủ rõ ràng từ chính thức là Responses (web_search), và trang tương thích Messages chính thức cũng liệt kê các khối nội dung liên quan đến tìm kiếm.

# 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
Đã xác minh: gửi web_search_options hoặc enable_search không gây lỗi, nhưng cũng không truy xuất được gì — phản hồi không có annotations (danh sách trích dẫn đính kèm phản hồi khi tìm kiếm web chạy), và usage khớp với nhóm đối chứng từng trường một. Để truy cập web, hãy dùng API Responses hoặc Messages.

9. Ghi chú sử dụng: Thiết kế của DeepSeek và các sai lệch trên đường dẫn của chúng tôi

Tất cả các mục dưới đây đều trả về HTTP 200 nhưng hoạt động trái với trực giác. Nguyên nhân khác nhau, và cách xử lý cũng khác nhau, nên chúng được liệt kê riêng: nhóm đầu tiên là cách DeepSeek thiết kế mô hình, và việc đổi nhà cung cấp sẽ không thay đổi điều đó; nhóm thứ hai là hành vi hiện tại trên đường dẫn AIHubMix, mà chúng tôi đang xử lý.

9.1 Theo thiết kế của DeepSeek

Hành vi Diễn đạt chính thức Cách xử lý
Responses không lưu trữ trạng thái phiên hay metadata Trang tương thích Responses chính thức nêu rõ, từng dòng một, store | Not supported. The response always carries store: false, metadata | Not supported và safety_identifier | Not supported (trong bốn trường đó, chỉ user là Supported). Kiểm thử khớp: yêu cầu trả về 200, nhưng metadata là null, safety_identifier không xuất hiện, và store luôn là false Giữ dữ liệu tương quan yêu cầu ở phía client; không dựa vào việc lưu trữ phía máy chủ
Các tham số lấy mẫu không có tác dụng ở chế độ suy luận DeepSeek nêu rõ rằng temperature và top_p bị vô hiệu một cách âm thầm ở chế độ suy luận. Khi kiểm thử, cả hai đều trả về 200 mà không phản hồi lại gì và không thay đổi cấu trúc phản hồi Không dựa vào tham số lấy mẫu để đảm bảo đầu ra ổn định ở chế độ suy luận; dùng đầu ra có cấu trúc khi cần tính xác định
Tiếp tục tiền tố / FIM chỉ có ở endpoint beta chính thức Mô tả chính thức của prefix là "(Beta) … You must set base_url="https://api.deepseek.com/beta" to use this feature", và hoàn thành FIM cũng là tính năng Beta. Đã xác minh trên môi trường production AIHubMix: gửi prefix: true tới endpoint tiêu chuẩn trả về 200 nhưng tiền tố bị bỏ qua một cách âm thầm, phù hợp về hướng với diễn đạt chính thức Để kiểm soát định dạng đầu ra, dùng đầu ra có cấu trúc (mục 5) hoặc cắt bớt bằng stop
Không thể tắt gọi công cụ song song Xem mục 4: DeepSeek nêu trên cả trang Responses và trang Anthropic rằng công tắc này bị bỏ qua và gọi song song luôn bật Xếp hàng các lệnh gọi ở phía client khi cần thực thi tuần tự

9.2 Hành vi hiện tại trên đường dẫn AIHubMix

Hành vi Kết quả kiểm thử Cách xử lý
Kiểu type không chuẩn trên đối tượng lỗi của Responses Trường error.type trong phản hồi 4xx là Aihubmix_api_error, trong khi cùng loại lỗi trên Messages trả về invalid_request_error chuẩn Phân nhánh theo mã trạng thái HTTP, không phân nhánh theo chuỗi error.type
Token suy luận được tính là 0 trên Messages Phản hồi có khối thinking, nhưng usage.output_tokens_details.thinking_tokens luôn bằng 0, mâu thuẫn với nội dung suy luận thực sự được tạo ra; theo hợp đồng Anthropic mà chúng tôi tích hợp, trường này là bắt buộc và phải ≤ output_tokens Để tính chi phí suy luận, dùng completion_tokens_details.reasoning_tokens trên Chat hoặc output_tokens_details.reasoning_tokens trên Responses
Messages trả lại model là deepseek-v4-pro Yêu cầu gửi deepseek-v4-pro-0813 và phản hồi trả lại deepseek-v4-pro. Nguyên nhân nằm ở cách đặt tên: tên mô hình API chính thức duy nhất của DeepSeek là deepseek-v4-pro, còn 0813 là nhãn phiên bản Không dùng riêng trường model trong phản hồi làm căn cứ để kiểm tra định tuyến mô hình hoặc quy kết sử dụng

9.3 DeepSeek chưa định nghĩa, nên chưa có kết luận nào

Gửi một giá trị nằm ngoài enum của reasoning_effort (ví dụ bogus_xyz) trả về 200 với câu trả lời bình thường, không có lỗi và không có tác động quan sát được. Sự thật khá rõ ràng — đường dẫn này hiện không kiểm tra enum của reasoning_effort. Điều chưa rõ là liệu nó có nên làm vậy: DeepSeek công bố enum hợp lệ nhưng không bao giờ nói rõ mức không hợp lệ có nên bị từ chối hay không, nên không có cơ sở để đối chiếu, nghĩa là điều này không được coi là hành vi chính thức cũng không phải lỗi trên đường dẫn của chúng tôi. Cách an toàn phía client: tự kiểm tra mức suy luận và không trông chờ API bắt lỗi.

10. Ma trận hỗ trợ năng lực × API

Các ô dưới đây thể hiện cách viết tham số / trường cho từng API. Trừ những chỗ được đánh dấu là diễn đạt rõ ràng của DeepSeek, mọi kết luận đều đến từ các lệnh gọi thực tế thực hiện ngày 2026-08-13 trên API production của AIHubMix.

Năng lực Chat Completions Responses Messages
Chat cơ bản / chỉ dẫn hệ thống ✅ messages ✅ input + instructions ✅ messages + system ở cấp cao nhất
Streaming ✅ stream + stream_options ✅ stream (response.created … response.completed) ✅ stream (message_start … message_stop)
Giới hạn đầu ra ✅ max_tokens (400 khi vượt quá, giới hạn 393216) ✅ max_output_tokens ✅ max_tokens
Tắt suy luận ✅ thinking: {"type": "disabled"} ✅ reasoning: {"effort": "none"} ✅ thinking: {"type": "disabled"}
Mức suy luận 🟡 reasoning_effort được chấp nhận, không có tín hiệu phân biệt ✅ reasoning.effort (chỉ none xác nhận được) 🟡 output_config.effort được chấp nhận, không phản hồi lại gì
Trả về nội dung suy luận ✅ trường reasoning_content ✅ mục đầu ra reasoning ✅ khối nội dung thinking
Bắt buộc truyền lại lịch sử suy luận ✅ thiếu reasoning_content → 400 ✅ thiếu mục reasoning → 400 ✅ thiếu khối thinking → 400
Gọi công cụ ✅ tools lồng nhau + tool_choice có tên ✅ tools phẳng ✅ input_schema + tool_choice: {"type":"any"}
Buộc gọi bằng required ❗ 400 khi bật suy luận; hãy tắt suy luận trước ❗ giống bên trái ✅ {"type": "any"}
Gọi công cụ song song (không thể tắt) ➖ không có trường như vậy trên API Chat chính thức ❗ DeepSeek nêu rằng parallel_tool_calls bị bỏ qua và gọi song song luôn bật ❗ DeepSeek nêu rằng disable_parallel_tool_use bị bỏ qua; kiểm thử vẫn trả về hai khối tool_use
Đầu ra có cấu trúc ✅ response_format (json_object) ✅ text.format (json_schema + strict) ➖ không có trường protocol; hãy đưa schema vào một tool
Đo lường cache-hit tự động ✅ usage.prompt_tokens_details.cached_tokens ✅ usage.input_tokens_details.cached_tokens ✅ usage.cache_read_input_tokens
logprobs ❗ kênh kép: content + reasoning_content ✅ top_logprobs chỉ trên mục văn bản cuối cùng ➖
Tìm kiếm web ➖ Chat API chính thức không có trường tìm kiếm; gửi trường này cũng không kích hoạt việc truy xuất ✅ tools: [{"type": "web_search"}] ✅ web_search_20250305
Stop sequences ✅ stop ➖ không có trường stop-sequence trong giao thức (chỉ max_output_tokens giới hạn độ dài) ✅ stop_sequences (stop_reason: "stop_sequence")

Chú thích: ✅ đã xác minh hoạt động · 🟡 được chấp nhận nhưng không thể xác nhận có hiệu lực · ❗ cần chú ý (xem các ghi chú phía trên) · ➖ API này không có khái niệm tương ứng

Câu hỏi thường gặp

deepseek-v4-pro-0813 hỗ trợ những API nào trên AIHubMix?
Chat Completions (/v1/chat/completions), Responses (/v1/responses) và Messages API tương thích Claude (/v1/messages).

Vì sao một cuộc hội thoại nhiều lượt bất ngờ trả về 400?
Nguyên nhân phổ biến nhất là lịch sử thinking không được gửi lại. Ở chế độ thinking, nội dung thinking của lượt trước phải được phát lại nguyên văn: reasoning_content trong tin nhắn assistant với Chat, mục đầu ra type="reasoning" với Responses, và khối nội dung thinking với Messages. Hội thoại nhiều lượt có tool là trường hợp dễ gặp lỗi nhất, vì nhiều framework lọc các mục đầu ra theo type == "message" khi tập hợp lịch sử, và việc này làm mất mục reasoning.

Có thể tắt thinking không?
Có. Gửi thinking: {"type": "disabled"} với Chat hoặc Messages, và reasoning: {"effort": "none"} với Responses. Khi đã tắt, cả nội dung thinking lẫn token thinking đều biến mất.

Ba mức reasoning_effort có khác nhau không?
Cả low / high / max đều được chấp nhận (mặc định là high; medium và xhigh được ánh xạ thành high để tương thích). Qua thử nghiệm, số token thinking cho cùng một câu hỏi không cho thấy sự khác biệt đơn điệu giữa các mức, và không có gì được trả lại, nên không thể xác nhận sự khác biệt từ phía người gọi API. Chỉ mức none trên Responses (tắt thinking) mới tạo ra khác biệt rõ ràng có thể quan sát được.

Vì sao tool_choice: "required" trả về 400?
Giá trị này không được chấp nhận khi thinking đang bật (nội dung lỗi là Thinking mode does not support this tool_choice). Hãy dùng tool_choice chỉ định tên hàm ({"type": "function", "function": {"name": "..."}}) để buộc gọi một hàm cụ thể khi thinking bật, hoặc tắt thinking trước rồi mới dùng required.

Làm cách nào để bật context caching?
Bạn không cần bật — tính năng này tự động. Đặt nội dung ổn định, không thay đổi (system prompt, đoạn tri thức, định nghĩa tool) ở đầu request, và số lần hit sẽ được báo trong usage: prompt_tokens_details.cached_tokens với Chat, input_tokens_details.cached_tokens với Responses, và cache_read_input_tokens với Messages.


Để xem giá và trạng thái thời gian thực, hãy xem trang mô hình deepseek-v4-pro-0813; để tìm thêm mô hình, hãy truy cập thư viện mô hình.

Hướng dẫn thực hành liên quan: hướng dẫn thực hành Kimi K3 (các tham số mới và ma trận hỗ trợ ba API) và thay đổi về prompt caching và tính phí của GPT-5.6.

Một cổng duy nhất tới nhiều nhà cung cấp AI. Sẵn sàng cho môi trường production.

Truy cập AIHubMix