Claude: Blog (Web)
65

Mô hình

Hướng dẫn tối ưu hóa Claude Code: Lựa chọn mô hình và cấp độ nỗ lực (Effort)

(giờ Việt Nam)

Tóm tắt AI

Bài viết giải thích cách tùy chỉnh mô hình và cấp độ nỗ lực trong Claude Code để cải thiện hiệu suất lập trình, giúp bạn biết khi nào nên nâng cấp mô hình hoặc tăng độ sâu xử lý tác vụ.

Bản dịch AI

Cách thức hoạt động của việc lựa chọn mô hình

Khi bạn nhấn Enter, Claude Code sẽ tập hợp tin nhắn của bạn cùng với system prompt, các định nghĩa công cụ, tệp CLAUDE.md, lịch sử trò chuyện và bất kỳ tệp nào trong ngữ cảnh. Tất cả những nội dung này được gửi đi dưới dạng một yêu cầu duy nhất tới API.

Tuy nhiên, mô hình không bao giờ nhìn thấy nội dung đó dưới dạng văn bản thuần túy. Điều đầu tiên xảy ra trên máy chủ là tokenization (mã hóa token); văn bản được chia thành các phần nhỏ, và mỗi phần được ánh xạ tới một số nguyên từ một từ vựng cố định mà mô hình đã được huấn luyện. Ví dụ: const có thể ánh xạ tới 1978, await có thể ánh xạ tới 4293. Từ đây trở đi, prompt của bạn là một mảng các số nguyên.

Công việc của mô hình là lấy mảng đó và dự đoán token tiếp theo sẽ là gì. Nó thực hiện việc này bằng cách tính toán xác suất cho mọi token trong từ vựng của mình và chọn ra token có xác suất cao nhất. Sau cụm const x = await, một mô hình được huấn luyện tốt sẽ đặt xác suất cao cho fetch (rất có khả năng) và gần bằng 0 cho banana (hoàn toàn không có khả năng).

Thứ biến các token đầu vào của bạn thành những xác suất đó chính là các trọng số (còn gọi là tham số). Đây là hàng tỷ con số được tổ chức thành các ma trận lớn. Để dự đoán một token, mô hình chạy dữ liệu đầu vào của bạn qua các ma trận đó, một chuỗi dài các phép nhân ma trận, và đọc các xác suất ở cuối. Trọng số chính là nơi lưu trữ mọi thứ mà mô hình "biết".

Trọng số của mỗi mô hình được thiết lập trong quá trình huấn luyện, và đến khi bạn gửi yêu cầu, chúng đã ở trạng thái chỉ đọc (read-only). Không có gì trong prompt, tệp CLAUDE.md hay ngữ cảnh của bạn có thể thay đổi chúng. (Nếu bạn từng bắt gặp từ inference, thì đó chính là ý nghĩa của nó: sử dụng mô hình sau khi quá trình huấn luyện đã hoàn tất, với các trọng số được cố định).

Mọi thứ Claude biết về TypeScript, các framework phổ biến, Go thành thạo, hay bất kỳ kiến thức lập trình tổng quát nào khác, đều đã được mã hóa vào các trọng số đó tại thời điểm huấn luyện.

Prompt và ngữ cảnh của bạn vẫn có thể điều hướng dự đoán (việc đưa mã nguồn thực tế của bạn vào trước mặt Claude chính là điều hướng, và nó hoạt động rất hiệu quả), nhưng chúng không thêm bất cứ điều gì vào chính các trọng số đó.

Nếu một thư viện chưa tồn tại khi mô hình được huấn luyện, nó sẽ không có trong các trọng số. Bạn có thể đưa tài liệu vào ngữ cảnh và Claude sẽ sử dụng chúng, nhưng đó là điều hướng, không phải là dạy học. Phản hồi của Claude sẽ chỉ bị ảnh hưởng cho yêu cầu đó; mô hình nền tảng không hề lưu giữ thông tin này.

Vì vậy, khi Claude tự tin gọi một API không tồn tại (hiện tượng ảo giác - hallucination), đó là do các trọng số tạo ra một chuỗi token trông có vẻ hợp lý dựa trên các khuôn mẫu huấn luyện, chứ không phải do tra cứu thất bại.

Vậy việc thay đổi mô hình thực sự làm được gì? Nó thay đổi bộ trọng số cố định nào sẽ xử lý yêu cầu của bạn.

Mô hình không tạo ra toàn bộ câu trả lời cùng một lúc. Nó dự đoán từng token một, thêm nó vào chuỗi, và chạy lại toàn bộ quá trình tính toán để lấy token tiếp theo. Một phản hồi dài 200 token tương đương với 200 lần chạy qua các trọng số. Vòng lặp này chính là nơi chiếm phần lớn thời gian chờ đợi và chi phí đầu ra của bạn.

Do đó, cài đặt mô hình quyết định trọng số nào xử lý yêu cầu của bạn, đồng thời cũng quyết định chi phí cho mỗi token đầu ra.

Điều mà nó không quyết định là có bao nhiêu token được tạo ra. Con số đó có thể thay đổi rất nhiều cho cùng một prompt, tùy thuộc vào khối lượng công việc mà Claude quyết định thực hiện.

Đây chính là điều mà mức độ nỗ lực (effort level) kiểm soát: khối lượng công việc mà Claude quyết định thực hiện cho mỗi lượt phản hồi.

Cách thức hoạt động của nỗ lực

Khi Claude Code đang thực hiện một tác vụ, các token mà nó tạo ra thuộc về một vài danh mục:

Đây đều là các token đầu ra thông thường từ cùng một vòng lặp, được tính phí theo cùng một mức giá. Ví dụ, các token suy luận (thinking tokens) được tạo ra chính xác giống như các token đầu ra khác và vẫn nằm trong ngữ cảnh cho phần còn lại của lượt đó.

Khi Claude chuyển sang viết mã, các suy luận trước đó của nó trở thành một phần của đầu vào, giống như một tệp mà nó đã đọc.

Mức độ nỗ lực thay đổi điều này như thế nào? Mức độ nỗ lực được gửi đến mô hình như một phần của yêu cầu, ngay bên cạnh prompt của bạn. Mô hình đã được huấn luyện để hiểu cách hành xử ở mỗi mức độ nỗ lực và hành vi đã học đó được tích hợp sẵn vào các trọng số cố định.

Khi yêu cầu của bạn đến, mức độ nỗ lực là một đầu vào bổ sung mà mô hình phản hồi, giống như cách nó phản hồi văn bản prompt của bạn. Điều này thiết lập hành vi của Claude về mức độ kỹ lưỡng và chắc chắn mà nó cần đạt được trước khi coi tác vụ đã hoàn thành.

Điều này được cân nhắc trong mỗi lượt và dẫn đến việc tạo ra nhiều token hơn để có được các câu trả lời với độ tin cậy cao hơn.

Ở các mức độ nỗ lực cao hơn, Claude thường bắt đầu bằng việc lập kế hoạch và mức độ nỗ lực sẽ ảnh hưởng đến chiều sâu cũng như phạm vi của kế hoạch đó. Tuy nhiên, kế hoạch không bị đóng băng tại chỗ. Khi Claude nhận được kết quả từ các hành động của mình, nó sẽ cập nhật tiến độ đã đạt được và mức độ chắc chắn của nó đối với kết quả tích lũy.

Vì vậy, khi bước 1 của một kế hoạch gỡ lỗi gồm ba giả thuyết tìm ra lỗi, thì "điều tra các giả thuyết 2 và 3" có thể không còn là hành động cần thiết nữa. Claude thường sẽ nói rõ điều này: "lần kiểm tra đầu tiên đã tìm thấy lỗi, vì vậy các lần kiểm tra còn lại là không cần thiết" và bỏ qua chúng. Bạn thấy điều này xảy ra trong Claude Code khi danh sách tác vụ được sửa đổi giữa chừng.

Claude sẽ có xu hướng kiểm tra kỹ lưỡng hơn các giả thuyết bổ sung hoặc xác minh tính chính xác ở các mức độ nỗ lực cao hơn, nhưng nhìn chung nó sẽ không cố tình làm tăng mức sử dụng một cách giả tạo cho các tác vụ đơn giản ở mức độ nỗ lực cao. Trên thực tế, đội ngũ của chúng tôi rất chú trọng đến việc "suy nghĩ quá mức" (overthinking) trong quá trình huấn luyện mô hình vì nó làm giảm hiệu quả.

Lựa chọn mức độ nỗ lực

Hướng dẫn của chúng tôi là đối với hầu hết các tác vụ, bạn nên sử dụng mức độ nỗ lực mặc định của mô hình. Mặc định là mức độ mà Claude sẽ điều chỉnh mức sử dụng token theo những gì hầu hết mọi người mong muốn chi trả cho một tác vụ.

Hãy coi nỗ lực như một công cụ điều khiển thủ công để điều chỉnh mức độ chăm chỉ và thời gian làm việc của Claude. Hãy chọn nó một cách có chủ đích khi bạn ưu tiên sự kỹ lưỡng hoặc tốc độ dựa trên lĩnh vực hoặc loại công việc bạn thực hiện. Hãy coi đây là một ưu tiên chung hơn là một quyết định cho từng tác vụ cụ thể.

Một số thông tin thực tế có thể giúp bạn sau khi ra mắt Claude Opus 4.8: trong quá trình thử nghiệm, chúng tôi nhận thấy khi bạn sử dụng cài đặt nỗ lực mặc định cho Opus 4.8, nó sẽ tạo ra kết quả tốt hơn với cùng một lượng token so với việc sử dụng cài đặt nỗ lực mặc định của Opus 4.7 cho cùng một tác vụ.

Những gì cần thay đổi khi Claude thực hiện sai

Khi Claude làm sai điều gì đó, bản năng đầu tiên của bạn không nên là điều chỉnh một nút bấm, mà là kiểm tra lại ngữ cảnh bạn đã cung cấp. Prompt của bạn có quá mơ hồ không? Claude đã được kết nối với đúng công cụ chưa? Đã được trang bị đúng kỹ năng chưa?

Nếu bạn đang tăng nỗ lực cho một tác vụ không cần thiết, giải pháp thường nằm ở phía trước (upstream), trong ngữ cảnh của bạn, tệp CLAUDE.md của bạn, hoặc cách tác vụ được xác định phạm vi.

Nhưng giả sử bạn đã cung cấp ngữ cảnh rõ ràng mà Claude vẫn làm sai, câu hỏi bạn cần tự đặt ra là: nó đã không cố gắng đủ mức, hay nó không biết đủ thông tin?

Mô hình: Vấn đề quá khó

Claude CodeAnthropicLập trình AIMẹo công nghệTối ưu hóa
Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ Claude: Blog (Web). Liên kết bài gốc ở phía trên. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.