Đổi base URL Claude Code: điều gì thực sự thay đổi
Điểm chính
- Base URL là phần dễ: nó chỉ là một giá trị cấu hình, và Claude Code nói rõ nó đã nạp những nguồn cấu hình nào. Chạy
/statusvà đọc dòng Setting sources. - Phần khó là endpoint mới xử lý prompt cache thế nào. Claude Code là một agent: mỗi lượt nó gửi lại toàn bộ hội thoại đang lớn dần, và cache là thứ khiến việc đó không bị tính phí như input mới. Một endpoint không giữ đúng hành vi cache có thể tốn gấp nhiều lần so với mức giá niêm yết — mà trong terminal trông vẫn hoàn toàn bình thường.
- Mỗi model có prompt cache riêng. Đổi model giữa phiên nghĩa là yêu cầu đầu tiên sau khi đổi sẽ đọc lại toàn bộ hội thoại ở dạng chưa cache. Hãy chọn model theo hình dạng công việc ngay từ đầu, đừng đổi giữa đường.
- Trước khi trỏ Claude Code vào bất kỳ endpoint nào, hỏi ba câu: có báo cache read và cache write tách riêng không, có chuyển tiếp cache hint không, và yêu cầu lỗi hoặc bị thử lại có bị tính phí không. Số liệu trong phiên của bạn sẽ không tự trả lời ba câu này.
Phần dễ: cấu hình nằm ở đâu
Claude Code đọc cấu hình từ các tệp JSON, và cấu hình đến từ file nào quyết định nó áp dụng cho ai:
| Phạm vi | File | Áp dụng cho | Dùng khi |
|---|---|---|---|
| Người dùng | ~/.claude/settings.json | Bạn, ở mọi project trên máy này | Mặc định cá nhân, quy tắc cấp quyền của riêng bạn |
| Project | .claude/settings.json | Mọi người làm trong thư mục đó | Cấu hình chung của nhóm — commit để đồng đội nhận được |
| Local | ghi đè cục bộ trong project | Bạn, trong project đó | Thử nghiệm riêng, không muốn commit |
| Managed | chính sách của tổ chức | Mọi người, không gì cục bộ ghi đè được | Chỉ khi tổ chức quản lý Claude Code tập trung |
Cùng những khoá đó cũng đặt được theo từng phiên từ dòng lệnh hoặc từ biến môi trường, và các ghi đè này có độ ưu tiên cao hơn file. Rất tiện để thử nhanh, và cũng là nguyên nhân phổ biến của "tôi sửa rồi mà không thấy gì đổi".
Cách tự kiểm tra: chạy /status trong Claude Code. Dòng Setting sources liệt kê từng tệp cấu hình đã được nạp cho phiên hiện tại, theo thứ tự ưu tiên. Nếu bản sửa của bạn không có trong danh sách đó, nó chưa có hiệu lực — thử lại yêu cầu bao nhiêu lần cũng vô ích.
Phần quyết định chi phí: prompt cache
Đây là phần đáng hiểu trước khi chuyển bất cứ thứ gì.
Một client chat gửi một câu hỏi và nhận một câu trả lời. Claude Code là một agent: nó đọc file, gọi công cụ, nhận kết quả, rồi làm tiếp — một task có thể là hàng chục yêu cầu, và mỗi yêu cầu mang theo toàn bộ hội thoại tính đến lúc đó. Nếu phần đầu đó bị tính phí như input mới ở mọi lượt, lập trình kiểu agent sẽ đắt đến mức không dùng được.
Prompt cache ngăn điều đó. Phần prefix ổn định được lưu lại, các lượt sau trả giá cache read thay vì trả toàn bộ input mới. Claude Code hiển thị đúng thứ này: sau response đầu tiên của phiên, nó in một dòng prompt cache gồm số yêu cầu, tỷ lệ input token được phục vụ từ cache, số lần cache miss, và cache hiện có "nóng" hay không. Màn hình /usage bóc cùng phiên đó theo từng model thành input, output, cache read và cache write.
Hai hệ quả, và chúng quan trọng hơn đơn giá token:
- Chỉ số cần nhìn là tỷ lệ cache khớp, không phải giá niêm yết. Một phiên có chín phần mười input phục vụ từ cache hành xử hoàn toàn khác một phiên cache lạnh — cùng model, cùng công việc, chi phí rất khác.
- Đổi model giữa phiên là mất cache. Mỗi model giữ prompt cache riêng, nên yêu cầu đầu tiên sau khi đổi sẽ đọc lại toàn bộ hội thoại ở dạng chưa cache. Trong một phiên dài, riêng yêu cầu đó có thể là yêu cầu đắt nhất trong ngày.
Cách tự kiểm tra: chạy một task thật, rồi mở /usage và đọc dòng prompt cache. Nếu hoàn toàn không có dòng cache, endpoint đó không báo token cache — và bạn vừa có câu trả lời về nền tảng đó.
Phân việc, không chỉ phân yêu cầu
Vì cache thưởng cho sự liên tục, câu hỏi hữu ích không phải "model nào tốt nhất" mà là công việc tôi sắp giao có hình dạng gì:
| Hình dạng công việc | Cần gì | Nguyên tắc thực dụng |
|---|---|---|
| Refactor toàn repo, sửa nhiều file, task dài hơi | Context lớn và nhiều lượt gọi công cụ | Giữ nguyên một model cho cả task |
| Sửa hàng loạt, máy móc: đổi tên, boilerplate, scaffold test | Lượt rẻ, ít cần phán đoán | Dùng tier rẻ hơn — và dùng phiên riêng |
| Suy luận sâu trong một file, kiến trúc, debug khó | Model mạnh nhất có thể | Dùng tiết chế, và mở phiên mới để context sạch |
| Khảo sát, tìm kiếm: "chỗ này xử lý ở đâu?" | Phản hồi nhanh, output nhỏ | Đừng đốt model đắt nhất cho việc này |
Bản thực dụng của điều này: quyết định model ở đầu task, không phải ở giữa. Nếu buộc phải đổi giữa task, hãy đổi ở ranh giới tự nhiên — sau một commit, hoặc sau /clear — chứ đừng đổi giữa một hội thoại dài đang được cache.
Những thói quen trả lại tiền trong phiên thật
Đây là những điều nhìn thấy được trong số liệu phiên, không phải ý kiến:
- Đặt chỉ dẫn thường trực trong
CLAUDE.md. Quy ước, lệnh, chuẩn code của project thuộc về đó, không phải gõ lại vào chat mỗi lần. Prefix ổn định cũng chính là prefix cache được. - Xin bản kế hoạch trước khi xin bản sửa. Sửa một kế hoạch tốn vài trăm token; sửa một đợt refactor đã làm dở trên hai mươi file tốn cả một phiên.
- Mỗi phiên một task, và
/cleargiữa các task không liên quan. Số liệu phiên được reset khi bắt đầu phiên mới, nên việc xoá cũng cho bạn một phép đo chi phí sạch cho từng task. - Giữ một model rẻ cho việc khảo sát. Đọc, tìm, tóm tắt không cần tier đắt, mà lại đúng là loại việc làm đầy context window.
- Kiểm chứng bằng repo, không bằng sự tự tin của agent. Diff, test, type check. Claude Code báo nó đã làm gì; chỉ có mã nguồn xác nhận điều đó.
Trước khi trỏ Claude Code vào bất kỳ endpoint nào
Mọi thứ ở trên phụ thuộc vào việc endpoint có hành xử giống API mà Claude Code được viết cho hay không. Ba câu hỏi quyết định điều đó:
- Có báo cache read và cache write tách riêng không? Nếu response gộp tất cả thành một con số input, số liệu phiên của bạn trở nên vô nghĩa và bạn không phân biệt được cache nóng với cache lạnh.
- Có chuyển tiếp cache hint, hay tính lại prefix ở mọi lượt? Đây là khác biệt giữa một phiên agent bình thường và một phiên agent tốn gấp nhiều lần cho cùng output. Nó hiện ra ở dòng cache, không hiện ra ở chất lượng câu trả lời.
- Yêu cầu lỗi hoặc bị thử lại có bị tính phí không? Vòng lặp agent vốn thử lại. Nếu yêu cầu lỗi vẫn bị tính phí, một kênh chập chờn âm thầm biến thành vấn đề chi phí thay vì vấn đề khả dụng.
Một nền tảng trả lời cả ba câu bằng văn bản, và cho thấy con số trong bản ghi usage theo từng yêu cầu, là endpoint bạn kiểm chứng được. Một nền tảng không trả lời câu nào là đang để bạn tự tìm hiểu sau.
Kiểm tra lại, đừng đoán
- Gửi một yêu cầu ngắn qua Claude Code.
- Ghi lại số token mà response tự báo.
- Mở bản ghi usage của yêu cầu đó trên nền tảng, đối chiếu input, output, cache read và cache write — và số tiền bị trừ — với những gì response nói.
Khớp số nghĩa là endpoint trung thực về token. Nếu nền tảng hoàn toàn không có bản ghi usage theo từng yêu cầu, đó là phát hiện hữu ích hơn cả con số token, và đáng để biết trước khi đưa một quy trình thật lên đó.
Lỗi thường gặp và ý nghĩa
| Hiện tượng | Nguyên nhân nhiều khả năng nhất |
|---|---|
| Báo lỗi xác thực ngay lập tức | Sai khóa cho endpoint đó, hoặc key thuộc nhóm khác trên nền tảng |
| 404 ở mọi yêu cầu | Endpoint chỉ có dạng chat của OpenAI, không có Anthropic Messages API mà Claude Code yêu cầu |
| Chi phí cao hơn số token gợi ý | Cache miss — xem dòng prompt cache trước khi đổ lỗi cho đơn giá |
| Một yêu cầu đắt bất thường sau khi đổi model | Đúng như dự kiến: model mới đọc lại hội thoại một lần ở dạng chưa cache |
| Chạy được nhưng thấy "sai model" | Tên model được ánh xạ sang model khác ở kênh. So câu trả lời và bản ghi usage, đừng so nhãn |
| Thỉnh thoảng timeout | Định tuyến kênh. Xem yêu cầu lỗi có bị tính phí không trước khi quyết định mức độ nghiêm trọng |
Câu hỏi thường gặp
Nên chọn model nào trong Claude Code? Chọn theo hình dạng công việc rồi giữ nguyên suốt phiên: task nhiều file, dài hơi cần context lớn và nhiều lượt gọi công cụ; sửa máy móc cần tier rẻ; suy luận sâu trong một file cần model mạnh nhất mà bạn chấp nhận trả. Vì mỗi model có cache riêng, việc đổi model cũng có chi phí — nên quyết một lần, ngay từ đầu.
Một API key dùng cho nhiều project được không? Được. Hãy dùng nhiều key riêng cùng thuộc một tài khoản để có thể thu hồi hoặc xoay vòng theo từng project, và để usage vẫn quy được về đúng nơi. Đó thường chính là lý do người ta chuyển sang dùng cổng tổng hợp: một số dư, nhiều project, không phải xoay nhiều gói subscription.
Đổi nhà cung cấp có phải sửa code không? Không. Claude Code không bị sửa — chỉ endpoint và khóa nó đọc bị đổi. Quay lại cũng chính là sửa ngược dòng đó, và /status cho biết nguồn cấu hình nào đang thắng.
Vì sao usage cao hơn so với cảm nhận về đoạn hội thoại? Vì một phiên agent gửi lại hội thoại ở mọi lượt, và các công cụ nó gọi sinh ra output bạn không nhìn thấy trong transcript. Dòng cache là góc nhìn trung thực về việc đó: nó tách phần được gửi lại với giá rẻ khỏi phần bị tính phí như input mới.
Việc cần làm tiếp
Hai trang công khai làm sẵn phần lớn việc chuẩn bị trước khi bạn chuyển một quy trình: model plaza công khai đơn giá từng model và hệ số từng nhóm mà không cần đăng nhập, còn trang trạng thái cho thấy từng nhóm đang chạy thế nào, kể cả lúc chạy không tốt.
Phần endpoint và khóa được ghi trong tài liệu tiếng Việt, và trang hoàn tiền ghi rõ quy trình. Nếu bạn còn đang chọn giữa các nền tảng, API Claude giá rẻ có an toàn không? đi qua các bước kiểm tra ở mức nhà vận hành.