Ce este Tokeni de Gândire (etichetele think)?

Capabilități Avansate și Fenomene DeepSeek-R1, Qwen3, API-urile OpenAI și Anthropic (2026)

Tokenii pe care un model de raționament îi generează înainte de răspunsul final și felul în care fiecare furnizor îi separă, afișează sau ascunde.

Denumire completă

Raționamentul generat înaintea răspunsului: între etichete în modelele deschise, ca blocuri separate sau ascuns în API-urile comerciale

Modelele de raționament generează întâi un text de gândire, apoi răspunsul. Felul în care este separat acest text diferă de la un furnizor la altul; nu există un standard comun.

Modelele deschise DeepSeek-R1 și Qwen3 pun gândirea între etichetele <think> și </think>. La DeepSeek-R1-Zero, formatul era impus printr-o recompensă de format în timpul RL. Qwen3 are comutatorul enable_thinking în chat template și comenzile /think și /no_think în mesaje.

API-urile comerciale nu folosesc etichete în text. OpenAI nu expune tokenii de raționament brut; ei ocupă context și se plătesc ca tokeni de ieșire, iar API-ul poate întoarce un rezumat al raționamentului. API-ul Claude întoarce blocuri separate de tip thinking, cu o semnătură criptografică; de la Claude Opus 4.7, câmpul thinking este gol implicit, iar textul rezumat se primește doar la cerere.

Concepte cheie și caracteristici

Concept / Parametru Descriere practică
<think> ... </think> Etichetele de gândire la DeepSeek-R1 și Qwen3 (la Qwen3, </think> are ID-ul 151668 în exemplul oficial de parsare).
enable_thinking Qwen3: activează sau dezactivează gândirea în apply_chat_template (implicit True).
reasoning.effort / summary OpenAI: nivelul de raționament și cererea unui rezumat al raționamentului.
thinking (bloc de conținut) Anthropic: raționamentul ca bloc separat, cu signature; se trimite înapoi nemodificat împreună cu rezultatele uneltelor.
Istoricul conversației Qwen3: istoricul trebuie să conțină doar răspunsurile finale, fără gândire. Claude: depinde de model; pe modelele recente blocurile anterioare sunt păstrate și ocupă context.

Exemple practice și scenarii reale

Exemplul 1: Separarea gândirii de răspuns la Qwen3

Adaptat din exemplul oficial din model card: se caută ultimul token </think> (ID 151668) în ieșire.

output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
try:
    index = len(output_ids) - output_ids[::-1].index(151668)  # </think>
except ValueError:
    index = 0
thinking = tokenizer.decode(output_ids[:index], skip_special_tokens=True).strip("\n")
content = tokenizer.decode(output_ids[index:], skip_special_tokens=True).strip("\n")

Exemplul 2: Forma unui răspuns cu gândire (exemplu ilustrativ)

<think>
Verific dacă 997 este prim: încerc divizorii primi până la 31 (sqrt(997) ≈ 31,6).
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31: niciunul nu îl divide.
</think>

997 este număr prim.

Greșeli frecvente și capcane

  • Pui un max_tokens prea mic. Tokenii de gândire intră în limita de ieșire, așa că modelul se poate opri înainte de răspuns; la OpenAI cererea devine incomplete.
  • Trimiți gândirea veche înapoi în istoric la modelele care nu o așteaptă (Qwen3 recomandă explicit să nu o incluzi) sau, invers, o modifici la Claude: blocurile thinking trebuie trimise exact cum au venit, altfel API-ul dă eroare.
  • Afișezi gândirea brută utilizatorilor finali. Model card-ul gpt-oss spune că lanțul de raționament complet nu este destinat utilizatorilor finali; DeepSeek recomandă, în schimb, forțarea începutului cu <think> când modelul sare peste gândire.

Noțiuni și module înrudite