Mô hình suy luận reasoning_effort Suy luận mở rộng OpenAI API Claude API

Tham số API của mô hình suy luận, so sánh giữa các nhà cung cấp

reasoning_effort của OpenAI, thinking của Anthropic, và thinkingBudget của Gemini đều điều khiển các token suy luận ẩn được tính phí như đầu ra. Mỗi núm hoạt động ra sao và chúng khác nhau thế nào.

AveMujica API 12 phút đọc

Mô hình suy luận thêm một bước mà bạn không thể thấy: trước khi viết một câu trả lời, mô hình sinh ra các token suy luận ẩn, và những token đó tốn tiền, tiêu thụ cửa sổ ngữ cảnh, và thêm độ trễ. Mọi nhà cung cấp cho bạn một núm vặn để điều khiển bao nhiêu chuyện này xảy ra, nhưng ba cái núm có tên khác nhau, thang giá trị khác nhau, và mặc định khác nhau — reasoning_effort trên OpenAI, thinking trên Anthropic, thinkingConfig trên Gemini. Làm đúng với mô hình suy luận chủ yếu là hiểu ba cái núm đó và một sự thật chung: các token suy luận được tính phí như token đầu ra mặc dù bạn không bao giờ đọc chúng. Bài viết này đi qua các tham số của từng nhà cung cấp, các trường usage phơi bày chi phí ẩn, và nơi các trừu tượng ngừng thẳng hàng.

Mô hình tư duy chung

Bất kể nhà cung cấp nào, một yêu cầu suy luận có cùng một giải phẫu. Các token đầu vào của bạn đi vào. Mô hình sinh ra hai loại đầu ra: các token suy luận ẩn và các token câu trả lời hiển thị. Cả hai đều được tính phí ở mức đầu ra, cả hai đều tính vào cửa sổ ngữ cảnh của mô hình, và chỉ những cái hiển thị mới quay về với bạn (tùy chọn kèm theo một bản tóm tắt của phần suy luận, không bao giờ là phần suy luận thô trên hầu hết các mô hình). Cái núm mà mỗi nhà cung cấp phơi bày thay đổi số token ẩn mà mô hình sẵn lòng tiêu. Vặn nó lên cho các bài toán khó và các vòng lặp agentic nhiều bước; vặn nó xuống cho các tác vụ nhạy độ trễ, nông. Mọi thứ bên dưới là một biến thể của chủ đề đó.

OpenAI: reasoning_effort và đối tượng reasoning

Trên các mô hình suy luận của OpenAI bạn đặt effort. Chat Completions nhận một chuỗi reasoning_effort ở cấp cao nhất; Responses API nhận một đối tượng reasoning mà trường effort của nó làm cùng công việc và thêm chỗ cho một bản tóm tắt cùng các điều khiển ngữ cảnh.

from openai import OpenAI
client = OpenAI(base_url="https://your-gateway.example.com/v1", api_key="AVE_GATEWAY_API_KEY")

# Responses API
resp = client.responses.create(
    model="gpt-5.6",
    input="Prove there are infinitely many primes p with p mod 4 == 3.",
    reasoning={"effort": "high", "summary": "auto"},
)

Các giá trị effort phụ thuộc vào mô hình và có thể bao gồm none, minimal, low, medium, high, và xhigh; mặc định thay đổi theo từng mô hình. Effort thấp hơn ưu tiên tốc độ và ít token hơn, effort cao hơn cho đầu ra kỹ lưỡng hơn với chi phí cao hơn. Công việc ẩn được đo đếm: các token suy luận xuất hiện trong usage dưới output_tokens_details như reasoning_tokens, nên bạn có thể theo dõi khoản chi vô hình ngay cả khi bản thân các token bị giữ lại. Để thấy vì sao mô hình đi đến một kết luận, hãy yêu cầu một bản tóm tắt (summary: "auto" hoặc "detailed"), thứ trả về một dấu vết suy luận đã tóm tắt trong mục đầu ra reasoning — bạn phải chọn tham gia; nó không được bao gồm theo mặc định.

Hai tính năng quan trọng cho các thiết lập không trạng thái (stateless) và agentic. Để vận hành zero-retention, hãy gửi store: false và thêm reasoning.encrypted_content vào mảng include; API trả về phần suy luận được mã hóa mà bạn truyền lại ở lượt tiếp theo để bảo toàn tính liên tục mà máy chủ không lưu trữ gì. Và reasoning.context (auto, current_turn, hoặc all_turns) điều khiển mô hình có thể rút ra từ những mục suy luận trước nào xuyên suốt một cuộc hội thoại được nối chuỗi.

Tham số bạn không được quên là max_output_tokens. Nó giới hạn tổng token được sinh — suy luận cộng với câu trả lời hiển thị — nên nếu bạn đặt nó quá thấp, ngân sách có thể bị tiêu thụ hoàn toàn bởi suy luận ẩn và bạn nhận được một status là incomplete (với incomplete_details viện dẫn max_output_tokens) và không có văn bản hiển thị, trong khi vẫn trả tiền cho các token đầu vào và suy luận. OpenAI khuyến nghị dành một khoảng dư hào phóng (cỡ hàng chục nghìn token) cho suy luận cộng đầu ra khi bạn mới bắt đầu. Việc lập ngân sách cho khoảng dư đó là cùng kỷ luật được mô tả trong quản lý cửa sổ ngữ cảnh LLM.

Anthropic: từ budget_tokens đến adaptive thinking

Extended thinking của Anthropic trong lịch sử dùng một ngân sách token tường minh. Bạn bật nó với một đối tượng thinking có type: "enabled" và một trần budget_tokens:

import anthropic
client = anthropic.Anthropic(base_url="https://your-gateway.example.com", api_key="AVE_GATEWAY_API_KEY")

msg = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=16000,
    thinking={"type": "enabled", "budget_tokens": 10000},
    messages=[{"role": "user", "content": "Are there infinitely many primes p with p mod 4 == 3?"}],
)

Ba quy tắc chi phối budget_tokens. Nó đặt số token tối đa cho suy luận nội bộ và phải nhỏ hơn max_tokens (ngoại trừ khi thinking đan xen (interleaved) với công cụ cho phép giới hạn trở thành toàn bộ cửa sổ ngữ cảnh). Mô hình có thể không dùng hết ngân sách, đặc biệt ở các giá trị lớn. Và phần suy luận hiện ra dưới dạng các khối nội dung thinking — mỗi khối mang một văn bản thinking và một signature — trước các khối text; bạn bị tính phí cho toàn bộ các token thinking được sinh ra, không phải bản tóm tắt ngắn hơn, nên số đếm đầu ra bị tính phí sẽ không khớp với những gì bạn thấy được.

Có một sự chia tách phiên bản quan trọng cần lên kế hoạch. budget_tokens đang bị loại bỏ: nó bị deprecated trên một số mô hình hiện tại và trả về 400 trên những mô hình mới nhất (ví dụ thế hệ Opus 4.8/4.7 và Sonnet 5), những mô hình này thay vào đó dùng adaptive thinking — một đối tượng thinking có type: "adaptive" ghép cặp với một thiết lập effort, đưa Anthropic về mặt khái niệm gần hơn với núm effort của OpenAI. Khi bạn xây dựng, hãy rẽ nhánh theo mô hình: gửi budget_tokens tới các mô hình vẫn chấp nhận nó và dạng adaptive/effort tới những mô hình yêu cầu nó. Một gateway có thể che giấu một phần chuyện này, như phần tiếp theo cho thấy.

Một quy tắc tool-use là không thể thương lượng: trong một vòng lặp công cụ bạn phải truyền lại các khối thinking của mô hình không sửa đổi trong message assistant kế tiếp, nếu không API từ chối yêu cầu với một lỗi 400. Các khối mã hóa phần suy luận dẫn đến lệnh gọi công cụ, và sắp xếp lại hoặc chỉnh sửa chúng phá vỡ tính liên tục. Điều này phản chiếu lời khuyên của OpenAI về việc trả lại các mục suy luận cùng với các lệnh gọi hàm, và đó là lý do gọi công cụ khả chuyển giữa các nhà cung cấp coi việc bảo toàn khối suy luận là một phần của một vòng lặp công cụ đúng đắn.

Gemini: thinkingConfig và thinkingBudget

Gemini điều khiển suy luận thông qua một thinkingConfig bên trong generationConfig. Trường then chốt là thinkingBudget, một khoản cấp phát token cho việc suy nghĩ, với hai giá trị đặc biệt: -1 để mô hình tự quyết định một cách động, và (trên các mô hình cho phép tắt) 0 tắt việc suy nghĩ. Một cờ includeThoughts yêu cầu API trả về một bản tóm tắt suy nghĩ. Phần suy luận đã tiêu thụ xuất hiện trong usageMetadata dưới dạng một số đếm token suy nghĩ, một lần nữa được tính phí như đầu ra.

from google import genai
from google.genai import types

client = genai.Client()
resp = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="Are there infinitely many primes p with p mod 4 == 3?",
    config=types.GenerateContentConfig(
        thinking_config=types.ThinkingConfig(thinking_budget=-1, include_thoughts=True),
    ),
)

Những mô hình nào cho phép bạn tắt việc suy nghĩ, và các dải ngân sách chính xác, thay đổi theo từng bậc mô hình — hãy kiểm tra trang mô hình thay vì giả định một giá trị được chuyển giao qua các thế hệ.

Một gateway chuẩn hóa gì, và dừng ở đâu

Sau một endpoint tương thích OpenAI duy nhất, gateway chuyển tiếp tham số suy luận của từng nhà cung cấp tới thượng nguồn hiểu chúng: reasoning_effort và đối tượng reasoning tới OpenAI, thinking tới Anthropic, thinkingConfig tới Gemini. Nó cũng gộp ba số đếm token ẩn khác nhau vào một dạng usage thống nhất, để chi phí đầu ra thực sự của yêu cầu suy luận hiển thị trong nhật ký bất kể nhà cung cấp nào phục vụ nó.

Gateway này còn cung cấp một tiện lợi đáng biết: nó có thể phân tích hậu tố effort trên tên mô hình và dịch thành tham số suy luận riêng của nhà cung cấp. Thêm -high, -medium, -low, -minimal, -xhigh hoặc -max vào model id, chẳng hạn claude-opus-4-8-high hoặc một biến thể -thinking, cho phép client chỉ đặt được chuỗi model vẫn chọn mức effort; gateway ánh xạ hậu tố tới đúng tham số của nhà cung cấp đích. Các biến thể model/effort đã đăng ký và giá theo từng mô hình được công bố trên trang giá công khai.

Hãy tường minh về các giới hạn, bởi các trừu tượng thực sự không thẳng hàng:

  • Các thang khác nhau. effort của OpenAI là một enum, budget_tokens cũ của Anthropic là một số đếm token tuyệt đối, và thinkingBudget của Gemini là một số đếm token với các giá trị sentinel. "High effort" và "10.000 budget token" không phải là bản dịch của nhau; ánh xạ cái này sang cái kia là một suy nghiệm, không phải một sự tương đương.
  • Mặc định khác nhau. Một số mô hình suy luận theo mặc định, một số thì không, và effort mặc định phụ thuộc từng mô hình. Đừng giả định sự im lặng nghĩa là "không suy luận."
  • Phạm vi tính năng khác nhau. Tính liên tục suy luận được mã hóa, bản tóm tắt suy nghĩ, và việc tắt suy nghĩ được hỗ trợ không đồng đều giữa các nhà cung cấp. Một gateway có thể truyền một trường đi qua, nhưng nó không thể làm cho một nhà cung cấp tôn trọng một khả năng mà nhà cung cấp đó không cung cấp.

Hãy coi gateway như lớp cho bạn một cái nhìn tính phí duy nhất và một đường truyền thẳng duy nhất, và giữ logic riêng của từng nhà cung cấp ở nơi thực sự tồn tại một khoảng trống khả năng.

Các mặc định thực dụng

Một vài quy tắc khởi đầu giúp tiết kiệm tiền và độ trễ:

  1. Khớp effort với độ sâu của tác vụ, không phải với tầm quan trọng. Một lần trích xuất khó cần nhiều suy luận hơn một lần tóm tắt dài nhưng nông. Effort là về cấu trúc bài toán, không phải mức độ đặt cược.
  2. Luôn dành khoảng dư đầu ra. Với bất kỳ mô hình suy luận nào, hãy đặt trần đầu ra tối đa đủ cao để suy luận ẩn không thể bỏ đói câu trả lời hiển thị, nếu không bạn sẽ trả tiền cho suy luận và chẳng nhận được gì.
  3. Đo lường các token ẩn. Theo dõi reasoning_tokens / các token thinking trong nhật ký sử dụng của bạn; một tác vụ mà các token suy luận lấn át các token câu trả lời là một ứng viên cho effort thấp hơn hoặc một mô hình không suy luận, một quyết định được đề cập trong chọn đúng mô hình LLM.

FAQ

Các token suy luận có bị tính phí dù tôi không bao giờ thấy chúng không?

Có. Các token suy luận ẩn được tính phí ở mức token đầu ra trên cả ba nhà cung cấp và cũng chiếm cửa sổ ngữ cảnh. Đó là lý do số đếm đầu ra bị tính phí lớn hơn những gì câu trả lời hiển thị gợi ý, và là lý do việc theo dõi trường token-suy-luận trong nhật ký sử dụng của bạn quan trọng — nó là khoản chi thực mà bạn không thể thấy trong phần thân phản hồi.

Vì sao tôi nhận được một phản hồi rỗng hoặc không đầy đủ từ một mô hình suy luận?

Thường thì trần đầu ra quá thấp và suy luận đã tiêu thụ toàn bộ ngân sách. OpenAI trả về một status là incomplete viện dẫn max_output_tokens; Anthropic yêu cầu budget_tokens phải nhỏ hơn max_tokens. Hãy nâng giới hạn đầu ra tổng để suy luận ẩn không thể bỏ đói câu trả lời hiển thị, và dành khoảng dư hào phóng trên các route suy luận.

budget_tokens của Anthropic có giống reasoning_effort của OpenAI không?

Chúng phục vụ cùng mục đích nhưng không tương đương. reasoning_effort là một enum (low/medium/high và các giá trị liên quan); budget_tokens là một số đếm token tuyệt đối. Trên các mô hình mới nhất của Anthropic budget_tokens không được hỗ trợ và adaptive thinking với một thiết lập effort thay thế nó. Một gateway có thể ánh xạ một nhãn effort lên tham số của một nhà cung cấp, nhưng ánh xạ đó là gần đúng, không phải một bản dịch một-một.

Làm sao tôi đặt một mức suy luận nếu client của tôi chỉ có thể gửi một tên mô hình?

Dùng hậu tố effort của gateway. Thêm -high, -medium, -low, -minimal, -xhigh, hoặc -max vào model id và gateway phân tích nó rồi áp dụng tham số suy luận khớp cho nhà cung cấp đích. Điều này cho phép các client mỏng chọn một mức effort mà không cần tự gửi trường riêng của nhà cung cấp.

Tìm điểm gấp khúc effort cho tác vụ của bạn

Chạy cùng một prompt khó ba lần ở mức effort thấp, trung bình và cao qua gateway, rồi mỗi lần ghi lại hai số từ nhật ký sử dụng: token suy luận và chất lượng câu trả lời theo tiêu chí riêng. Bạn thường sẽ thấy một điểm gấp khúc nơi thêm effort không còn cải thiện câu trả lời nhưng vẫn tiếp tục tiêu token. Ghim tuyến của bạn ngay dưới điểm đó — phép đo trên chính tác vụ của bạn hữu ích hơn bất kỳ mặc định nào của nhà cung cấp.

Tài liệu tham khảo