Hiểu về Thinking Effort trong AI Agent

Phần I · Thử thách những giả định phổ biến

Vì sao bảo AI “nghĩ kỹ hơn” không phải lúc nào cũng cho kết quả tốt hơn.

Một thiết lập thinking effort thực sự thay đổi điều gì, và khi nào bạn nên tăng nó? Bộ slide này đi theo câu hỏi đó qua 21 slide: khái niệm, sự khác biệt giữa reasoning và việc thực thi của agent, các tình huống kỹ thuật thực tế, một kiến trúc production, và cách quyết định dựa trên bằng chứng thay vì trực giác.

One task, three levels of reasoning effort Agent Low effort · direct path Fast answer fine for a simple task ✕ Medium · weighs one alternative Considered answer one alternative dropped ✕ ✕ ✓ High effort · wide search Verified result more time and cost Illustrative. Effort changes how a model reasons, not what evidence exists or what the model can do.
Một task, ba mức reasoning effort. Hình minh họa khái niệm, không phải số đo.

Cách đọc bài này. Các nhận định đi kèm nhãn. Tài liệu nghĩa là được nêu trong tài liệu chính thức hoặc bài báo được liên kết ngay bên cạnh. Đã kiểm chứng nghĩa là tôi đã tự chạy, và callout nói rõ đã chạy gì và lần chạy đó không thể cho thấy điều gì. Quan điểm là cách diễn giải hoặc phán đoán kỹ thuật của tôi. Đề xuất là thiết kế tôi khuyên dùng, không phải thứ nhà cung cấp nào phát hành. Minh họa đánh dấu các con số và tình huống bịa ra để giải thích một ý. Không nhận định nào ở đây là thí nghiệm: tôi không chạy benchmark nào, nên mọi con số trong các slide này hoặc đến từ tài liệu của nhà cung cấp, hoặc được đánh dấu minh họa. Các sơ đồ mang tính khái niệm trừ khi chú thích nói khác.

Kiểm chứng lần cuối: ngày 22 tháng 10 năm 2026. Các thông tin về nhà cung cấp được đối chiếu ngày hôm đó với các trang OpenAI, Anthropic và Google được liên kết. Code ở slide 15 và 18 đã được type-check với openai 7.42.0, @anthropic-ai/sdk 1.1.0 và @google/genai 2.30.0 bằng TypeScript 5.9.3. Không đoạn nào được gửi tới API thật. Tên model và giá trị được chấp nhận thay đổi thường xuyên, nên hãy kiểm tra các trang được liên kết trước khi sao chép.

Cùng model. Cùng prompt. Kết quả khác nhau?

Phần I · Thử thách những giả định phổ biến

Bạn chạy hai lần một yêu cầu trông như y hệt nhau, một lần ra câu trả lời gọn gàng, lần sau lại rối. Trước khi đổ lỗi cho một thiết lập, hãy liệt kê mọi thứ đã thay đổi. Có những task chỉ có một lối đi hiển nhiên và được giải trực tiếp. Có những task có nhiều lối đi hợp lý, và câu trả lời tốt hơn khi hệ thống cân nhắc kỹ hơn hoặc thu thập thêm bằng chứng.

Straightforward task Rename a config key Edit one file Check the build passes One obvious path. Most settings give the same result. Complex task Flaky test: fails 1 run in 20 Race in setup Shared state Timeout tuning Evidence logs, repro, bisect Cause identified Several plausible paths. Depth and evidence both matter. What else changes the outcome Task complexity Model behavior Context available Tool outputs Sampling randomness Configuration (incl. effort)
Task đơn giản có một đường đi. Task phức tạp có nhiều đường, và bằng chứng quyết định chọn đường nào. Effort chỉ là một trong sáu yếu tố.
  • Độ phức tạp và tính mơ hồ của task quyết định có bao nhiêu câu trả lời hợp lý.
  • Context có sẵn và đầu ra của tool quyết định model thực sự có thể biết gì.
  • Tính ngẫu nhiên khi sampling khiến hai lần chạy cùng một prompt có thể khác nhau.
  • Hành vi model và cấu hình đều quan trọng, và effort chỉ là một phần của cấu hình.

Đừng quy một kết quả xấu cho effort trước khi loại trừ thiếu context, kết quả tool yếu và sự dao động thông thường.

Thinking effort cao hơn không tự động có nghĩa là thông minh hơn

Phần I · Thử thách những giả định phổ biến

Có ba giả định phổ biến, và mỗi cái sai theo một cách hữu ích:

  1. “Effort cao hơn luôn cho câu trả lời tốt hơn.” Nó có thể giúp ở một số task. Nó không đảm bảo tính đúng đắn, và với task dễ thì chủ yếu chỉ tốn thêm chi phí.
  2. “Nghĩ lâu hơn nghĩa là suy luận sâu và chính xác hơn.” Độ dài không phải chất lượng. Một chuỗi suy luận dài vẫn có thể dài mà sai.
  3. “Nhiều bước agent hơn làm agent giỏi hơn.” Nhiều bước hơn có thể cộng dồn lỗi dễ như sửa lỗi.
Problem + context More reasoning = wider exploration hypothesis 1 hypothesis 2 hypothesis 3 hypothesis 4 Compare and prune may still choose wrongly Conclusion not guaranteed correct Evidence available logs, code, test output Model capability knowledge, skill Task constraints time, budget, risk also feeds the conclusion Missing evidence is a wall: more reasoning cannot cross it.
Suy luận mở rộng phạm vi tìm kiếm. Kết luận vẫn phụ thuộc vào bằng chứng, năng lực và ràng buộc.

Tài liệu Trong hướng dẫn riêng cho Claude Opus 4.7, Anthropic nói rằng với hầu hết workload, mức cao nhất là max “thêm chi phí đáng kể cho mức cải thiện chất lượng tương đối nhỏ”, và ở một số task structured output hoặc ít đòi hỏi trí tuệ hơn, nó có thể dẫn tới nghĩ quá mức (Anthropic: Effort). Hướng dẫn này viết cho model đó; hướng dẫn cho các model khác thì khác.

Thinking effort nói về tài nguyên suy luận, không chỉ là chờ lâu hơn

Phần II · Nền tảng kỹ thuật

Thinking effort là một cơ chế điều khiển riêng của từng model hoặc nền tảng, nếu có, ảnh hưởng đến lượng nỗ lực dành cho việc suy luận về một task. Đó là một thiết lập trên API công khai. Nó không phải cửa sổ nhìn vào bên trong model.

Public API (documented) Task + context input Effort setting e.g. low … high Model inference internals vary and are not exposed Reasoning behavior ? Computation spent ? Other inference choices ? Effort may influence any of these. It is not a fixed token count. Public API (documented) Answer final output Reasoning summary opt-in, not raw trace Usage report reasoning tokens billed The "?" boxes are deliberately unspecified: the API setting does not expose what happens inside.
Thứ bạn đặt và quan sát được là bề mặt API. Điều xảy ra bên trong phụ thuộc vào model và không được thiết lập này quy định.

Tài liệu Các nhà cung cấp nói gì, bằng lời của chính họ:

  • OpenAI: reasoning token được tính phí như output token, được tính vào max_output_tokens và context window, và xuất hiện trong usage.output_tokens_details.reasoning_tokens. Reasoning thô không được trả về; bản tóm tắt là tùy chọn bật thêm qua reasoning.summary (OpenAI: Reasoning models).
  • Anthropic: effort là “một tín hiệu hành vi, không phải ngân sách token nghiêm ngặt”, và nó ảnh hưởng đến mọi output token, gồm cả văn bản và tool call, không chỉ phần thinking (Anthropic: Effort). Bạn bị tính phí cho toàn bộ phần thinking kể cả khi chỉ bản tóm tắt, hoặc không gì cả, được hiển thị; usage.output_tokens_details.thinking_tokens báo cáo con số đó (Anthropic: Steering thinking).
  • Google: thinking_level nhận một tập mức khác nhau tùy model, giá của response là “tổng của output token và thinking token”, và bản tóm tắt thought là tùy chọn bật thêm (Gemini: Thinking).
  • Giá trị mặc định khác nhau. Anthropic ghi high là mặc định trên hầu hết model và medium trên Claude Opus 5.5 và Claude Haiku 5.5; OpenAI ghi medium là mặc định cho một số model; mặc định của Gemini tùy model. Bỏ trống thiết lập không có cùng một nghĩa ở mọi nơi.

Vậy cùng một từ mang nghĩa khác nhau trên các API khác nhau. Đừng giả định mỗi mức tương ứng một số token, số bước hay lượng tính toán cố định.

Độ phức tạp của task nên ảnh hưởng đến reasoning effort

Phần II · Nền tảng kỹ thuật

Task A convert JSON to a TypeScript interface JSON object Map each field to a type interface Order { … } One path. The output can be checked at a glance. Task B intermittent race condition, distributed system Symptom fails 1 request in 200 Lock ordering Stale cache Duplicate retry Cross-component evidence traces, logs, timing, repro Narrowed cause, edge cases checked Complexity is not the only axis A simple task with severe consequences (a production migration) can still deserve care.
Task A có một đường đi dễ kiểm tra. Task B có nhiều giả thuyết cần bằng chứng liên thành phần.

Task A chuyển một object JSON thành TypeScript interface. Đầu ra nhìn là kiểm tra được. Cân nhắc thêm hiếm khi thay đổi nó.

Task B là một race condition thỉnh thoảng xảy ra trong hệ thống phân tán. Ở đây suy luận có chủ đích có thể đáng giá: so sánh các giả thuyết, cân nhắc trường hợp biên và nối hành vi giữa các thành phần.

Nhưng độ phức tạp không phải trục duy nhất. Một task ngắn với hậu quả nghiêm trọng, như migration dữ liệu production, có thể đáng được suy luận cẩn thận, kiểm tra thêm hoặc con người review, dù nó dễ mô tả.

Suy luận của model và việc thực thi của agent là hai thứ khác nhau

Phần II · Nền tảng kỹ thuật

A · One model invocation Input context Reasoning stage internal to the model call the effort setting applies here Output No tools involved. Can still be a lot of reasoning. B · Agent loop external to the model Model call 1 reasoning may be light Tool call run the tests Observation 2 tests fail Model call 2 decide the next step Stop condition met answer returned repeat until stop
Bên trái, suy luận bên trong một lần gọi model. Bên phải, một vòng lặp bên ngoài gồm các lần gọi model, tool call và quan sát. Mũi tên nét đứt chuyển động khi hệ thống cho phép.

Thinking effort là phần suy luận được áp dụng trong một lần gọi model, khi model và API hỗ trợ cơ chế này.

Agent loop là chu trình bên ngoài: model nhận context, tạo ra một phản hồi hoặc một tool call, nhận kết quả tool, và tiếp tục cho đến khi gặp điều kiện dừng (ReAct là mô tả kinh điển về việc đan xen suy luận với hành động).

Hai thứ này thay đổi độc lập. Một lần gọi có thể chứa rất nhiều suy luận mà không dùng tool. Một agent có thể thực hiện hàng chục tool call trong khi mỗi bước riêng lẻ đều đơn giản.

Một AI agent không chỉ là một model

Phần II · Nền tảng kỹ thuật

Luồng khái niệm: task và context của người dùng → model suy luận → quyết định trả lời hoặc gọi tool → thực thi tool → context được cập nhật → quyết định tiếp theo. Nó lặp lại cho đến khi task xong hoặc gặp điều kiện dừng.

Orchestration layer · harness code Model layer Execution layer · tools Final answer when a stop rule fires 1 · Task + context prompt, files, history Stop rules done · limit · budget 5 · Updated context tool result appended 2 · Reasoning inside the model call effort acts here 3 · Decision answer or tool? Verification a checkpoint, any layer 4 · Tool execution search, read, run tests answer tool call 6 · next decision Reasoning effort changes step 2 only. Context, tools, stop rules and checks are the system around the model.
Sáu bước trong ba lớp. Chỉ bước 2 chịu ảnh hưởng của reasoning effort. Các mũi tên nét đứt chuyển động là vòng lặp; kiểm chứng là một điểm kiểm tra, không phải một lớp.

Effort tác động lên một bước của vòng lặp này, phần suy luận bên trong lần gọi model. Hiệu năng tổng thể còn phụ thuộc vào chất lượng context, có những tool nào, cách harness điều phối retry và việc dừng, và liệu có thứ gì kiểm chứng kết quả hay không. Slide 15 biến vòng lặp này thành một kiến trúc tham chiếu cho production.

Tài liệu Bài Building effective agents của Anthropic nêu một ý liên quan: hệ thống agentic đánh đổi latency và chi phí để lấy hiệu quả task, nên sự phức tạp thêm vào cần được biện minh.

Các mức effort khác nhau là các đánh đổi khác nhau

Phần II · Nền tảng kỹ thuật

Tendencies, not measurements Quality on a hard task lower higher Quality on a simple task lower higher Latency lower higher Cost lower higher lower effort setting higher effort setting Positions are qualitative. The size of each gap depends on the model, the task and how you measure. On simple tasks the quality gap tends to shrink while latency and cost still rise.
Biểu đồ định tính. Vị trí các dấu chỉ cho thấy xu hướng; không phải kết quả benchmark.
Effort thấp hơn Effort cao hơn
Latency thường thấp hơn thường cao hơn
Chi phí thường thấp hơn thường cao hơn
Task khó, nhiều bước có thể kém kỹ lưỡng hơn có thể kỹ lưỡng hơn
Task đơn giản thường là đủ lợi ích ít, vẫn tốn hơn

Đây là xu hướng, không phải đảm bảo. Khoảng cách lớn đến đâu phụ thuộc vào model, task và cách đo. Bài này không đưa ra con số cải thiện nào vì không con số nào khái quát được; slide 16 và 17 chỉ cách tự tạo số liệu của bạn.

Khi nào thinking effort cao hơn đáng giá?

Phần III · Tình huống kỹ thuật thực tế

Một API thỉnh thoảng trả về HTTP 500. Một model có reasoning effort cao hơn có thể giỏi hơn trong việc giữ nhiều giả thuyết cùng lúc, kiểm tra các dependency và cân nhắc trường hợp biên. Nó vẫn không đọc được log mà không ai thu thập.

Hypotheses (unverified) Evidence (observed) Symptom intermittent HTTP 500 H1 · DB pool exhausted DB wait p99 is normal metrics dashboard ✕ refutes H2 · Upstream timeouts Upstream calls succeed distributed traces ✕ refutes H3 · Cache stampede No miss spike at 500s cache metrics ✕ refutes H4 · Old build on one instance 500s only on instance 3 access logs ✓ supports Verified fix roll back instance 3; 500s stop Missing logs from instance 5? Reasoning cannot replace evidence nobody collected. Solid blue = observed evidence. Dashed = hypothesis not yet verified.
Ô nét đứt là giả thuyết. Ô nét liền là bằng chứng quan sát được. Chỉ bản sửa đã được kiểm chứng mới tính là đã giải quyết.

Một quy trình tốt xen kẽ suy luận với quan sát:

  1. Tạo giả thuyết, và nói rõ bằng chứng nào sẽ xác nhận hoặc bác bỏ từng giả thuyết.
  2. Thu thập bằng chứng đó (log, metric, trace).
  3. Cập nhật giả thuyết. Bỏ những gì bằng chứng bác bỏ.
  4. Áp dụng bản sửa, rồi kiểm chứng triệu chứng đã hết.

Suy luận nhiều hơn giúp bạn dùng bằng chứng. Nó không thể tạo ra bằng chứng chưa từng được thu thập.

Một thay đổi một dòng và một đợt refactor toàn hệ thống không cần cùng một chiến lược

Phần III · Tình huống kỹ thuật thực tế

Reasoning needs tend to grow with coupling, uncertainty and consequence narrow, local broad, uncertain 1 · Rename a local variable • scope-aware rename • compiler stays happy • tests unchanged 2 · Refactor auth middleware • caller dependencies • security implications • backward compatibility • test coverage 3 · Investigate a post-deploy regression • code diffs • logs and errors • test results • recent changes No effort level is universally right for a category Treat the spectrum as a starting hypothesis and measure on your own tasks.
Ba task của coding agent trên một phổ minh họa về mức độ ràng buộc, bất định và hệ quả.
  • Đổi tên một biến cục bộ. Chủ yếu là cơ học. Trình biên dịch hoặc bộ test là đủ để chốt.
  • Refactor authentication middleware. Suy luận phải bao quát nơi gọi, hệ quả bảo mật, tương thích ngược và các test chứng minh hành vi được giữ nguyên.
  • Điều tra regression sau khi deploy. Suy luận chỉ tốt bằng những gì nó đọc được: diff, log, kết quả test và lịch sử thay đổi gần đây.

Quan điểm Hãy coi thứ tự này là giả thuyết khởi đầu, không phải quy tắc. Một lần đổi tên có thể rủi ro trong ngôn ngữ động, và một regression khó có thể cần bằng chứng nhiều hơn là cân nhắc.

Chọn đúng cơ chế cho đúng vấn đề

Phần III · Tình huống kỹ thuật thực tế

Khi một agent làm sai, “nghĩ kỹ hơn” chỉ là một trong nhiều đòn bẩy, và không phải lúc nào cũng đúng.

The agent result is wrong or stuck What actually failed? Shallow analysis facts were available Raise effort more careful comparison Missing facts not in context Add tools or search repo search, fetch docs Plan contradicted a test or log disagrees with the hypothesis Iterate again revise with new evidence Task too broad many parts, unfocused Decompose the task better orchestration These interventions complement each other Example: add a search tool, allow one more iteration, and raise effort for the one hard step. Not sure which one failed? Read the trace and add a verification step before changing settings.
Ánh xạ kiểu thất bại sang can thiệp phù hợp. Các can thiệp kết hợp được; chúng không cạnh tranh nhau.
  • Nếu model chưa cân nhắc các giả thuyết hiện có, tăng reasoning effort có thể giúp.
  • Nếu nó thiếu thông tin về repository, một tool tìm kiếm sẽ giúp nhiều hơn việc nghĩ thêm.
  • Nếu một kết quả test phản bác giả thuyết ban đầu, thêm một vòng lặp agent với kết quả đó là bước đúng.
  • Nếu task quá rộng, chia nhỏ giúp nhiều hơn bất kỳ thiết lập đơn lẻ nào.

Một lời giải thích thuyết phục không phải bằng chứng của tính đúng đắn

Phần III · Tình huống kỹ thuật thực tế

Model có thể đưa ra kết luận nghe hợp lý nhưng sai vì thiếu thông tin, giả định sai hoặc các giới hạn khác. Độ trôi chảy của một lời giải thích nói rất ít về việc nó có đúng hay không.

Tài liệu Nghiên cứu về các reasoning model cho thấy phần suy luận được nêu ra thường bỏ sót những yếu tố thực sự ảnh hưởng đến câu trả lời, nên đọc lời giải thích không phải cách kiểm toán đáng tin cậy (Chen và cộng sự, 2025).

Plausible, but unverified Model proposal fluent, confident Reads well no check ran Accepted on trust status: unknown Supported by evidence Model proposal diff + explanation Automated tests Type check and lint Review the diff Logs and run output Acceptance criteria Security checks, if relevant Pass evidence recorded Fail feedback to the model revise and re-check Check quality is independent of how deep the reasoning looked.
Trên: nghe hợp lý nhưng chưa kiểm chứng. Dưới: cùng đề xuất đó được kiểm tra bằng bằng chứng thực thi được, với phản hồi khi thất bại.

Với coding agent, kiểm chứng nghĩa là các cơ chế cụ thể: test tự động, kiểm tra kiểu và lint, đọc diff được tạo ra, xem log và kết quả thực thi, đối chiếu tiêu chí chấp nhận, và chạy kiểm tra bảo mật khi phù hợp. Hãy đánh giá chất lượng của các kiểm tra đó độc lập với việc phần suy luận trông sâu đến đâu.

Chất lượng, latency và chi phí

Phần IV · Hệ thống production

Quality correctness, completion, robustness Latency response and task time Cost model use, tool calls, cost per success A B C Illustrative workloads A · Interactive autocomplete leans toward latency B · Overnight migration agent leans toward quality C · High-volume classification leans toward cost Positions are conceptual. They are not measurements. There is no single universal metric: you choose the trade-off per workload.
Ba chiều kéo nhau. Workload nằm ở đâu là quyết định sản phẩm. Vị trí ở đây mang tính khái niệm.
  • Chất lượng: tính đúng, hoàn thành task, độ bền vững và xử lý trường hợp biên.
  • Latency: thời gian phản hồi, và tổng thời gian hoàn thành một task.
  • Chi phí: mức dùng model, chi phí inference liên quan đến reasoning nếu có, tool call, và trên hết là tổng chi phí cho mỗi task thành công.

Mục tiêu không phải chất lượng tối đa bằng mọi giá, hay latency tối thiểu bằng mọi giá. Đó là một đánh đổi chấp nhận được cho workload và yêu cầu kinh doanh của nó. Ba chiều này không quy được về một điểm số chung.

Chi phí có ba lớp, và mỗi lớp trả lời một câu hỏi khác nhau:

Lớp Đếm những gì Con số đến từ đâu
Lần gọi model Input, cached input, output và reasoning token, nhân với giá mỗi token của nhà cung cấp Object usage của mỗi response, và trang giá của nhà cung cấp
Lần chạy agent Mọi lần gọi model trong lần chạy, cộng với thực thi tool, retry, thời gian sandbox hoặc CI, và review của con người Trace và hóa đơn hạ tầng của bạn
Kết quả task Tổng chi phí và thời gian, chia cho số task đã qua kiểm chứng Kết quả đánh giá của bạn

Effort tác động lên lớp thứ nhất, nhưng quyết định thuộc về lớp thứ ba. Một thiết lập làm mỗi lần gọi rẻ hơn có thể làm task đắt hơn nếu các lần chạy thất bại thường hơn và cần retry, hoặc cần một người, để hoàn thành.

Minh họa Số liệu bịa ra, chỉ để minh họa phép tính. Thiết lập A tốn $0.40 mỗi lần chạy và qua kiểm chứng ở 50 trên 100 lần chạy: tiêu $40, tức $0.80 mỗi task thành công. Thiết lập B tốn $0.60 mỗi lần chạy và qua kiểm chứng ở 80 trên 100: tiêu $60, tức $0.75 mỗi task thành công. B đắt hơn 50% mỗi lần chạy nhưng rẻ hơn mỗi lần thành công, và khoảng cách còn rộng hơn khi tính cả người phải hoàn thành mỗi task thất bại. Với các con số khác thì A thắng, và đó là lý do bạn phải đo.

Đừng mặc định dùng effort tối đa cho mọi yêu cầu

Phần IV · Hệ thống production

Chiến lược thích ứng coi effort là quyết định theo từng task: nhận task, đánh giá độ phức tạp, độ bất định và rủi ro, chọn một thiết lập được hỗ trợ, thực thi, kiểm chứng, và leo thang, thử lại hoặc thu thập thêm bằng chứng nếu kiểm chứng thất bại.

Receive task Assess complexity, uncertainty, risk rules · classifier · model router Router can err measure it Select a supported setting effort level or model Lower effort routine, low risk Medium effort typical work Higher effort hard or high risk Execute the task Verify the result tests, checks, acceptance criteria pass Done fail Escalate: retry, raise effort, or gather evidence then execute again
Định tuyến theo task, kiểm chứng kết quả và leo thang khi thất bại. Mũi tên nét đứt là vòng leo thang.

Việc định tuyến có thể dùng quy tắc, bộ phân loại, router dựa trên model, hoặc chính sách dựa trên phản hồi.

Tài liệu Nghiên cứu về test-time compute cho thấy phân bổ nỗ lực inference một cách thích ứng theo từng prompt có thể vượt trội so với dùng đồng đều (Snell và cộng sự, 2024). Đó là lập luận ủng hộ phân bổ thích ứng nói chung, không phải lời hứa cho workload của bạn.

Hai lưu ý. Việc phân loại task có thể sai, nên hãy đánh giá router như mọi thành phần khác. Và chỉ dùng các mức effort mà model hay API đã chọn hỗ trợ.

Kiến trúc tham chiếu cho agent loop

Phần IV · Hệ thống production

Loop controller · your harness, not the model Checked before every model call: step, token and time budgets · repeated-action detector · stop rules tool result + status (ok · error · timeout) re-enters context Context task + history Model call effort acts here Decision answer or tool? Tool policy allow · ask · deny Tool runner timeout · retry Verifier tests · types · spec Done verified + traced Escalate to a human risky action · budget · stuck loop answer pass needs approval fail: the failing checks re-enter context as feedback Trace every step, one span each model call: model, effort, input / output / reasoning tokens, latency · tool call: name, status, duration verification: checks run, result · run: iterations, retries, stop reason, failure class Classify every failed run Reasoning facts present, wrong plan Tool execution error, timeout, bad data Orchestration loop, lost context, budget Verification check missing or wrong
Một harness được đề xuất, không phải hành vi của nhà cung cấp. Effort tác động bên trong một ô; mọi thứ khác là code của bạn.

Đề xuất Vòng lặp trong slide này là khuyến nghị của tôi cho một harness production. Không nhà cung cấp nào phát hành nó nguyên dạng.

Vấn đề Cơ chế kiểm soát đề xuất
Vòng lặp chạy mất kiểm soát Ngân sách số bước, token và thời gian thực, kiểm tra trước mỗi lần gọi model
Vòng lặp không tiến triển Dừng khi cùng một tool call với cùng tham số lặp lại, hoặc cùng một kiểm tra liên tục thất bại
Tool lỗi và timeout Mỗi tool một timeout. Chỉ retry các tool idempotent. Trả lỗi và timeout về cho model như kết quả; đừng giấu chúng
Hành động có hệ quả Một policy cho mỗi tool: cho phép tool chỉ đọc, hỏi người trước khi ghi, deploy, xóa hoặc thanh toán, từ chối phần còn lại. Chạy code trong sandbox
Context Thêm mỗi kết quả tool cùng trạng thái của nó; cắt bớt đầu ra lớn và giữ con trỏ tới artifact đầy đủ
Khả năng quan sát Một trace span cho mỗi lần gọi model, tool call và kiểm tra, ghi lại thiết lập effort và lượng token dùng
Kết quả cuối Chỉ chấp nhận những gì qua verifier
const LIMITS = { maxSteps: 30, maxOutputTokens: 400_000, maxWallClockMs: 15 * 60_000, maxRepeats: 3 };

async function runTask(task: Task): Promise<RunResult> {
  const ctx = newContext(task);
  const startedAt = Date.now();
  let outputTokens = 0;

  for (let step = 1; step <= LIMITS.maxSteps; step++) {
    if (outputTokens > LIMITS.maxOutputTokens || Date.now() - startedAt > LIMITS.maxWallClockMs) {
      return { outcome: "stopped", reason: "budget_exhausted", suspected: "orchestration" };
    }

    // The only place the effort setting acts.
    const turn = await trace("model_call", () => callModel(ctx, { effort: chooseEffort(task) }));
    outputTokens += turn.usage.outputTokens;

    if (turn.kind === "answer") {
      const check = await trace("verify", () => verify(task, turn.answer));
      if (check.passed) return { outcome: "verified", answer: turn.answer, check };
      ctx.append({ type: "verification_failed", findings: check.findings });
      continue;
    }

    const call = turn.toolCall;
    if (repeatCount(ctx, call) >= LIMITS.maxRepeats) {
      return { outcome: "stopped", reason: "no_progress", suspected: "reasoning" };
    }

    const policy = toolPolicy(call); // "allow" | "ask" | "deny"
    if (policy === "deny" || (policy === "ask" && !(await askHuman(call)))) {
      ctx.append({ type: "tool_denied", call });
      continue;
    }

    // Retry only idempotent tools; errors and timeouts go back to the model as results.
    const result = await trace("tool_call", () =>
      runTool(call, { timeoutMs: 60_000, retries: call.idempotent ? 2 : 0 }),
    );
    ctx.append({ type: "tool_result", call, result });
  }

  return { outcome: "stopped", reason: "step_limit", suspected: "orchestration" };
}

Đã kiểm chứng Vòng lặp này qua tsc --strict (TypeScript 5.9.3) với các khai báo stub cho những helper nó gọi (callModel, verify, runTool và các hàm còn lại). Tôi cũng chạy nó trên Node.js 26.9.0 với một model giả và các tool giả theo kịch bản, và 8 trên 8 test luồng điều khiển đều qua: câu trả lời đã kiểm chứng, phản hồi từ kiểm chứng, dừng khi lặp lại cùng lời gọi, giới hạn số bước, ngân sách token, tool bị từ chối và chưa được phê duyệt, không retry cho tool không idempotent, và timeout của tool được trả về cho model. Ngân sách thời gian thực chưa được test. Không có model thật nào được gọi, nên điều này cho thấy luồng điều khiển hoạt động, chứ không cho thấy model nào hành xử ra sao bên trong nó. Các giới hạn là giá trị giữ chỗ cần tinh chỉnh.

Tài liệu Anthropic khuyến nghị phần lõi của thiết kế này: agent nên lấy “ground truth” từ môi trường ở mỗi bước, và nên có điều kiện dừng “chẳng hạn số vòng lặp tối đa” (Building effective agents).

Gắn nhãn mọi lần chạy thất bại theo loại hỏng đầu tiên, bằng cách đọc trace của nó. Reasoning: dữ kiện đã có trong context mà kế hoạch vẫn sai. Thực thi tool: một lỗi, một timeout, hoặc đầu ra sai. Orchestration: mất context, một vòng lặp, hoặc cạn ngân sách. Kiểm chứng: một kiểm tra bị thiếu, chập chờn hoặc sai. Trường suspected trong code chỉ là phỏng đoán đầu tiên; trace mới là thứ quyết định.

Quan điểm Chỉ loại đầu tiên là lý do để thử tăng effort. Ba loại còn lại được sửa trong harness.

Đo xem effort cao hơn có thực sự giúp ích không

Phần IV · Hệ thống production

Hãy xây một bộ đánh giá đại diện cho workload thật của bạn: các task thật, mỗi task có một verifier được viết trước khi bạn nhìn vào bất kỳ kết quả nào. Rồi so sánh các thiết lập mà model hỗ trợ trong điều kiện chỉ khác nhau ở effort.

TEMPLATE · no measured data · replace every "—" with your own experiment results Verified task success — % First-attempt success — % Test pass rate — % Latency P50 — s Latency P95 — s Cost per successful task $ — Average retries per task — Tool calls per task — Agent wall-clock time — s Success vs. cost, one marker per effort setting verified success cost per successful task placeholder positions, not data Protocol checklist • Settings: only those the model supports • Same tasks, same tools, same budget • N repeated trials per task and setting • Report intervals across runs, not one run • Judge success by checks, not answer length
Một mẫu, không phải kết quả. Mọi giá trị là dấu gạch vì ở đây không báo cáo thí nghiệm nào.

Giữ mọi thứ khác không đổi. Cố định và ghi lại:

  • ID snapshot của model và phiên bản SDK;
  • system prompt, định nghĩa tool và phiên bản harness;
  • context mà mỗi task bắt đầu: commit của repository, fixture, tài liệu được truy xuất;
  • giới hạn output (max_output_tokens hoặc max_tokens) và ngân sách vòng lặp từ slide 15;
  • verifier và tiêu chí đạt của nó.

Chỉ thay đổi giá trị effort, chỉ dùng các giá trị mà model có tài liệu, và xen kẽ các thiết lập theo thời gian để một thay đổi phía nhà cung cấp hay một giờ chậm không rơi vào chỉ một thiết lập.

Chạy mỗi task nhiều lần cho mỗi thiết lập. Hai lần chạy cùng một prompt có thể khác nhau, nên một lần chạy mỗi task đo may rủi nhiều ngang với đo thiết lập. Cố định số lần chạy trước khi bắt đầu, so sánh các thiết lập theo từng task trên cùng các task, và báo cáo một khoảng, không chỉ một giá trị trung bình. Với tỷ lệ thành công, một khoảng nhị thức như khoảng Wilson là phù hợp; với latency và chi phí, hãy bootstrap theo task.

Quan điểm Năm lần chạy cho mỗi task và mỗi thiết lập, trên 30 đến 50 task, là một lượt đầu hợp lý. Nếu khoảng của hai thiết lập chồng lấn nhiều, bạn chưa chứng minh được khác biệt; hãy thêm task hoặc lần chạy trước khi kết luận điều gì.

Đừng đánh giá thành công bằng độ dài câu trả lời hay số reasoning token: cả hai đo nỗ lực đã bỏ ra, không phải chất lượng đã đạt.

Một mẫu benchmark để bạn tự điền

Phần IV · Hệ thống production

Định nghĩa mọi chỉ số trước lần chạy đầu tiên, để các con số không thể được chọn sau khi bạn đã thấy chúng:

Chỉ số Định nghĩa Cần để ý
Tỷ lệ task thành công đã kiểm chứng Số lần chạy có kết quả cuối qua verifier, chia cho tổng số lần chạy Con số chính
Tỷ lệ thành công ở lần đầu Số lần chạy đạt ngay ở câu trả lời đầu tiên, không có phản hồi kiểm chứng và không retry, chia cho tổng số lần chạy Bao nhiêu phần thành công đến từ khả năng phục hồi của vòng lặp
Tỷ lệ qua test Số test qua chia cho số test đã chạy, ở cuối mỗi lần chạy Điểm từng phần; không bao giờ thay thế được thành công đã kiểm chứng
Latency, trung vị và P95 Thời gian thực từ lúc bắt đầu task tới kết quả cuối, cho mỗi lần chạy P95 cần nhiều lần chạy mới có ý nghĩa
Chi phí mỗi task thành công Tổng chi phí trên mọi lần chạy, kể cả lần thất bại, chia cho số lần thành công đã kiểm chứng Thêm chi phí tool và hạ tầng nếu có thể
Số lần retry trung bình Số lần gọi model sau một kiểm tra thất bại hoặc một lỗi tool, cho mỗi lần chạy Tách riêng khỏi tổng số lần gọi model

Minh họa Một mẫu, không phải kết quả. Mọi ô là dấu gạch vì bài này không báo cáo thí nghiệm nào.

Thiết lập Số lần chạy Thành công đã kiểm chứng (95% CI) Thành công ở lần đầu Tỷ lệ qua test Latency P50 / P95 Chi phí mỗi lần thành công Retry trung bình
low — — — — — / — — —
medium — — — — — / — — —
high — — — — — / — — —

Công bố nó cùng ngày chạy, snapshot model, phiên bản SDK, phiên bản bộ task, phiên bản verifier và số lần chạy mỗi task.

Vì sao phải đo thay vì giả định? Effort cao hơn có thể giúp ở các task cần cân nhắc nhiều hơn, và nó cũng thường làm tăng latency và output token. Hiệu ứng nào thắng phụ thuộc vào model, tập task và độ mạnh của verifier, và có thể thay đổi khi model thay đổi.

Tài liệu Hướng dẫn effort của Anthropic nói “tác động của các mức effort khác nhau tùy loại task” và khuyên bạn “đánh giá hiệu năng trên các use case cụ thể của mình trước khi triển khai” (Anthropic: Effort). OpenAI nói các giá trị được hỗ trợ phụ thuộc vào model (OpenAI: Reasoning models).

Biến reasoning effort thành một quyết định kỹ thuật tường minh

Phần IV · Hệ thống production

Khi nhà cung cấp hỗ trợ, effort là một tham số của request. Đây là một request OpenAI Responses API theo dạng được tài liệu hóa, với số reasoning token được đọc lại từ response:

import OpenAI from "openai";

const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-6-astra",
  reasoning: { effort: "high" }, // the setting this slide is about
  input: "Analyze this production bug...",
});

console.log(response.output_text);
console.log(response.usage?.output_tokens_details.reasoning_tokens);

Tài liệu Hướng dẫn của OpenAI cho thấy reasoning: { effort } trên responses.create, liệt kê none, minimal, low, medium, high, xhigh và max, và nói các giá trị được hỗ trợ phụ thuộc vào model. GPT-6 Astra, model mà chính ví dụ trong hướng dẫn dùng, từ chối none bằng HTTP 400 (OpenAI: Reasoning models); trang model của nó liệt kê từ low đến max (GPT-6 Astra).

Thiết lập này diễn đạt mức suy luận cần áp dụng. Nó không trả về suy luận riêng tư của model; chỉ có bản tóm tắt, tùy chọn bật thêm.

Cùng request đó trên Messages API của Anthropic và trên Gemini Interactions API:

import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic();

const message = await anthropic.messages.create({
  model: "claude-opus-5-5",
  max_tokens: 16000, // thinking counts toward this cap
  output_config: { effort: "high" },
  messages: [{ role: "user", content: "Analyze this production bug..." }],
});

console.log(message.usage.output_tokens_details?.thinking_tokens);
import { GoogleGenAI } from "@google/genai";

const gemini = new GoogleGenAI({});

const interaction = await gemini.interactions.create({
  model: "gemini-3.8-flash",
  input: "Analyze this production bug...",
  generation_config: { thinking_level: "high" },
});

console.log(interaction.output_text);
console.log(interaction.usage?.total_thought_tokens);

Đã kiểm chứng Cả ba đoạn code đều qua tsc --strict (TypeScript 5.9.3) với openai 7.42.0, @anthropic-ai/sdk 1.1.0 và @google/genai 2.30.0. Để làm đối chứng âm, một giá trị effort không tồn tại, effort đặt ở cấp cao nhất của request Anthropic, adaptive truyền làm giá trị effort, và thinkingLevel viết camelCase trên Interactions API đều thất bại ở cùng phép kiểm tra đó. Type check không thể biết một tên model có tồn tại hay không, hay model chấp nhận những giá trị nào, và không request nào trong số này được gửi đi.

Tên giống nhau, hợp đồng khác nhau. Không có định dạng chung:

Nhà cung cấp và API Trường trong request Giá trị trong tài liệu Trường usage cho reasoning Nguồn
OpenAI, Responses reasoning: { effort } none, minimal, low, medium, high, xhigh, max usage.output_tokens_details.reasoning_tokens Reasoning models
Anthropic, Messages output_config: { effort } low, medium, high, xhigh, max usage.output_tokens_details.thinking_tokens Effort, Steering thinking
Google, Interactions generation_config: { thinking_level } minimal, low, medium, high usage.total_thought_tokens Thinking
Google, generateContent config.thinkingConfig.thinkingLevel trong JavaScript SDK cùng bốn mức đó usageMetadata.thoughtsTokenCount API reference; vị trí trường được kiểm tra trong type của SDK

Mỗi danh sách là hợp của các giá trị trên mọi model; một model cụ thể chỉ chấp nhận một phần. Và tên giống nhau không có nghĩa là hành vi giống nhau. high trên model này không được hiệu chỉnh tương đương với high trên model khác, kể cả cùng một nhà cung cấp.

Tài liệu Anthropic nói các mức effort của Claude Sonnet 5.5 đã được hiệu chỉnh lại, nên một mức “không tạo ra cùng lượng thinking như cùng mức đó trên Claude Sonnet 5”, và khuyên chạy lại một đợt quét effort mới (Anthropic: Effort).

Một heuristic khởi đầu để chọn effort

Phần V · Điều rút ra áp dụng được

Quan điểm Ma trận này là heuristic kỹ thuật của tôi cho cấu hình đầu tiên, không phải quy tắc và không phải hướng dẫn của nhà cung cấp. Hãy kiểm chứng mọi gợi ý của nó trên workload của chính bạn.

Yếu tố Nghiêng về effort thấp hơn Nghiêng về effort cao hơn Đòn bẩy thường tốt hơn
Độ phức tạp của task Một đường đi rõ ràng, một thay đổi cục bộ Nhiều phần tương tác, nhiều đường đi hợp lý Chia nhỏ một task rộng chứ không sâu
Độ bất định và mơ hồ Spec chính xác Các giả thuyết cạnh tranh cần cân nhắc Hỏi lại khi chính spec, chứ không phải phần suy luận, bị mơ hồ
Context Mọi thứ cần thiết đã có trong prompt Context đầy đủ nhưng phức tạp Truy xuất file, log hoặc tài liệu khi thiếu dữ kiện
Nhu cầu thông tin bên ngoài Không có Tự nó không phải lý do Gọi một tool; effort không tạo ra được dữ kiện
Cái giá của kết quả sai Dễ hoàn tác Đắt hoặc không thể đảo ngược Phê duyệt của con người và kiểm tra mạnh hơn, đi cùng với effort
Kiểm chứng tự động Test mạnh và nhanh, nên lặp lại rẻ Kiểm tra yếu hoặc không có, nên câu trả lời đầu quan trọng hơn Viết test còn thiếu trước khi tăng effort
Ngân sách latency và chi phí Tương tác, khối lượng lớn, ngân sách chặt Việc offline hoặc batch với giá trị cao mỗi task Định tuyến theo task (slide 14) thay vì một thiết lập chung

Cách dùng: bắt đầu mỗi route ở mức mà hướng dẫn của nhà cung cấp khuyên cho loại workload đó, hoặc ở mức mặc định được ghi trong tài liệu. Chỉ tăng effort ở những route mà các thất bại qua trace chủ yếu là thất bại reasoning (slide 15) và verifier đủ mạnh để cho thấy khác biệt. Giảm nó ở nơi tỷ lệ thành công đã kiểm chứng vẫn giữ được ở mức thấp hơn. Sau đó chạy benchmark ở slide 16 và 17, và để các con số quyết định thay cho bảng.

Trước khi tăng thinking effort, hãy tự hỏi năm câu này

Phần V · Điều rút ra áp dụng được

  1. Task này có thực sự phức tạp hoặc bất định không?Nếu nó thường lệ và kiểm tra được, suy luận thêm chủ yếu chỉ tốn chi phí.
  2. Model đang gặp khó trong suy luận, hay thiếu thông tin quan trọng?Dữ kiện còn thiếu cần retrieval hoặc tool, không cần nghĩ thêm.
  3. Một tool khác hoặc một bước kiểm chứng có giúp nhiều hơn không?Một lần chạy test thường hơn thêm một đoạn cân nhắc.
  4. Mức cải thiện chất lượng kỳ vọng có đáng với latency và chi phí tăng thêm không?So sánh chi phí mỗi task thành công, không phải chi phí mỗi request.
  5. Tôi đã đo sự khác biệt trên các task thực tế đại diện chưa?Nếu chưa, hãy coi câu trả lời cho bốn câu còn lại là phỏng đoán.

Hãy giữ nó như một thẻ quyết định dùng lại được: nếu bạn không trả lời “có” cho câu 1 và câu 5, có lẽ bạn chưa nên tăng thiết lập.

Agent tốt nhất không phải là agent nghĩ nhiều nhất. Mà là agent phân bổ effort đúng chỗ cần thiết.

Phần V · Điều rút ra áp dụng được

Agent Quick path enough for easy tasks Deliberate path reasoning where it matters Evidence path search, read, run selected for this task Verify Result Allocate effort where it matters, then check the result.
Chọn đường mà task cần, rồi kiểm tra kết quả trước khi chấp nhận.
  1. Thinking effort có thể ảnh hưởng cách model xử lý một task. Nó không đảm bảo tính đúng đắn.
  2. Suy luận, dùng tool, truy xuất context và kiểm chứng giải quyết những vấn đề khác nhau.
  3. Cấu hình phù hợp đến từ việc đánh giá workload của chính bạn.

Thay vì hỏi "Làm sao để AI nghĩ nhiều hơn?", hãy hỏi "Task này cần bao nhiêu suy luận để hoàn thành một cách đáng tin cậy?"

Tài liệu tham khảo và đọc thêm

Mọi trang của nhà cung cấp được kiểm tra lần cuối ngày 22 tháng 10 năm 2026.