0

Ngoài OpenRouter, có gateway nào dùng được với Claude Code?

Xây dựng một phép thử nhỏ trước khi đổi cấu hình của cả dự án.

Khi chọn dịch vụ trung gian cho Claude Code, câu hỏi “có hỗ trợ Claude không?” vẫn chưa đủ cụ thể. Bạn cần biết model nào được phép gọi, client dùng giao thức nào, địa chỉ được ghép ra sao và kết quả nào được tính là thành công.

Crazyrouter là một lựa chọn có thể đưa vào danh sách đánh giá bên cạnh OpenRouter: dịch vụ có Anthropic Messages API và tài liệu tích hợp Claude Code. Ngày 12/10/2026, một yêu cầu tối thiểu được chạy lại trên API này và nhận đúng câu trả lời OK.

Bài viết sử dụng kết quả đó làm điểm xuất phát. Đây không phải bài đo tốc độ hai nhà cung cấp, cũng không khẳng định toàn bộ chức năng của Claude Code đã được kiểm thử. Mục tiêu là giúp bạn thiết kế quá trình kiểm tra để biết chính xác bước nào đã hoạt động.

1. Tách ba lớp thường bị gộp thành một

Lớp đầu tiên là kết nối HTTP: máy của bạn có gửi được yêu cầu tới đúng địa chỉ và nhận phản hồi hay không. Lớp thứ hai là giao thức: cấu trúc phản hồi có đúng Messages API, nội dung có đáp ứng yêu cầu không. Lớp cuối là công việc: Claude Code có đọc được repository, gọi công cụ, sửa đúng file và chạy kiểm thử không.

Một câu trả lời thành công ở lớp thứ hai không chứng minh lớp cuối đã hoạt động. Nếu bỏ qua ranh giới này, rất dễ ghi “đã hỗ trợ đầy đủ” chỉ sau một lệnh thử ngắn.

Bạn cũng nên tách tài liệu của nhà cung cấp khỏi kết quả tự chạy. Tài liệu cho biết cách tích hợp dự kiến; bản ghi request và response cho biết điều đã xảy ra trong một điều kiện cụ thể. Hai loại bằng chứng bổ sung cho nhau nhưng không thay thế nhau.

2. Xác định địa chỉ trước khi đặt API key

Theo hướng dẫn Claude Code của Crazyrouter, base URL của client là https://api.crazyrouter.com. Claude Code tự bổ sung đường dẫn Messages.

Ngược lại, khi gọi HTTP trực tiếp, bạn dùng đầy đủ https://api.crazyrouter.com/v1/messages. Đây không phải hai cách viết tùy ý của cùng một trường cấu hình.

Hướng dẫn Claude Code của Crazyrouter và lưu ý về base URL

Ảnh chụp tài liệu chính thức ngày 12/10/2026. Khung màu xanh giải thích việc client tự ghép đường dẫn.

Nếu một công cụ khác dùng API tương thích OpenAI, base URL của nó có thể kết thúc bằng /v1. Không nên mang cấu hình đó sang Claude Code chỉ vì cùng dùng một nhà cung cấp. Hãy xác định giao thức của từng client trước.

Sau địa chỉ là model ID. Tên hiển thị trên trang giới thiệu và mã model được API chấp nhận có thể khác nhau. Hãy kiểm tra cả quyền của token; việc model xuất hiện trong danh mục không tự động có nghĩa tài khoản của bạn gọi được nó.

3. Chạy một yêu cầu nhỏ, có điều kiện rõ ràng

Phép thử sử dụng claude-haiku-5-5, max_tokens: 512 và nội dung Reply with exactly: OK. Không có tool, thinking hay ngữ cảnh dài. Vì vậy, nếu xảy ra lỗi, số biến cần kiểm tra tương đối ít.

Ví dụ dưới đây dành cho Bash. Trước khi chạy, đặt CRAZYROUTER_API_KEY trong môi trường cục bộ bằng khóa của bạn, đồng thời kiểm tra số dư và quyền model. Trên Windows có thể dùng Git Bash hoặc WSL; ký tự nối dòng này không phải cú pháp PowerShell.

curl --silent --show-error --fail-with-body \
  https://api.crazyrouter.com/v1/messages \
  -H "x-api-key: $CRAZYROUTER_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-haiku-5-5","max_tokens":512,"messages":[{"role":"user","content":"Reply with exactly: OK"}]}'

Kết quả thực tế ngày 12/10/2026 là HTTP 200, một khối văn bản có giá trị OK và stop_reason: "end_turn". Trường usage báo 42 input token và 4 output token. Số token tạo cache và đọc cache đều bằng 0.

Nên kiểm tra cả HTTP status, hình dạng JSON và nội dung trả về. Chỉ thấy mã 200 chưa đủ; ngược lại, chỉ tìm chuỗi OK trong toàn bộ nội dung cũng có thể nhận nhầm một thông báo không liên quan.

Model này được chọn cho kiểm tra kết nối, không phải để kết luận nó phù hợp nhất với mọi bài toán lập trình. Nếu chuyển sang model khác, đó là một điều kiện thử mới.

Tài liệu Messages API và phương thức xác thực của Crazyrouter

Ảnh chụp trang tài liệu chính thức ngày 12/10/2026. Kết quả request thực tế được mô tả riêng trong bài.

4. Đọc response nhưng đừng biến một mẫu thành cam kết

Response còn chứa cache_creation, output_tokens_details và diagnostics. Đây là những điểm quan sát hữu ích nếu sau này bạn phân tích cache hoặc mức sử dụng. Tuy nhiên, không nên giả định mọi model đều trả đủ các trường này ở mọi request.

Khi viết bộ phân tích response, hãy xử lý trường tùy chọn một cách an toàn và lưu dữ liệu gốc đã loại bỏ thông tin nhạy cảm. Điều này giúp phân biệt một trường không xuất hiện với một trường có giá trị bằng 0.

Hai trạng thái đó không giống nhau. Ví dụ, số token cache bằng 0 cho biết mẫu này không ghi nhận cache theo cách đo của response; việc không có trường cache lại đặt ra câu hỏi về định dạng hoặc khả năng quan sát của endpoint.

Cũng không nên gắn nhãn tất cả trường bổ sung là “chuẩn Anthropic nguyên bản”. Gateway có thể trả metadata riêng. Muốn biết một trường được đảm bảo tới mức nào, cần đối chiếu hợp đồng API và nhiều tình huống phù hợp.

5. Kiểm tra lại nhận định về OpenRouter

OpenRouter có tài liệu tích hợp Claude Code bằng giao thức Anthropic. Vì thế, kết luận rằng nó chỉ có định dạng OpenAI và không thể phục vụ Claude Code là không chính xác.

Tài liệu còn lưu ý tính tương thích được đảm bảo với Anthropic first-party provider và khuyến nghị đặt provider này ở mức ưu tiên cao. Khi thử nghiệm, lựa chọn provider cần được ghi cùng model và endpoint.

Tài liệu cache của OpenRouter mô tả cache read, cache write, TTL năm phút và một giờ cho Anthropic, cùng cơ chế provider sticky routing. Không thể nhìn một ví dụ Chat Completions rồi suy ra mọi endpoint của dịch vụ đều làm mất thông tin Anthropic.

Bài viết không thực hiện request trả phí trên OpenRouter. Những khả năng ở phần này đến từ tài liệu chính thức, không phải kết quả đối đầu hai bên trong cùng môi trường.

Vì sao cache lâu hơn chưa chắc rẻ hơn?

Theo tài liệu OpenRouter vừa dẫn, với Anthropic, ghi cache năm phút có giá bằng 1,25 lần đầu vào thông thường, ghi một giờ bằng 2 lần, còn đọc bằng 0,1 lần. Giả sử chi phí một tiền tố là C và lần sử dụng tiếp theo chắc chắn trúng cache trong thời hạn: dùng hai lần sẽ tốn 1,35C với lựa chọn năm phút, nhưng 2,1C với lựa chọn một giờ. Không cache thì hai lần là 2C.

Như vậy, lựa chọn một giờ trong ví dụ này còn đắt hơn 5% cho riêng tiền tố. Nếu dùng ba lần, các mức tương ứng là 1,45C, 2,2C và 3C. Đây là phép tính theo điều kiện tài liệu, không phải hóa đơn đo được. Nó chưa gồm câu hỏi mới, đầu ra hoặc lần gọi lại công cụ, và không được áp trực tiếp cho giá Crazyrouter. Khi thử một phiên lập trình, cần quan sát cả số lần tái sử dụng lẫn khoảng cách giữa chúng để chọn TTL phù hợp.

6. Thiết kế bước thử trong repository

Khi API tối thiểu đã chạy được, hãy chọn một repository nhỏ, có thể khôi phục. Cho Claude Code đọc cấu trúc thư mục, giải thích một hàm, đề xuất sửa đổi nhỏ, rồi mới thực hiện thay đổi và chạy bộ kiểm thử có sẵn.

Mỗi bước cần một bằng chứng tương ứng: danh sách file thực tế, nội dung file, diff sau chỉnh sửa và đầu ra của lệnh kiểm thử. Câu nói “đã xong” từ model không thay thế được các bằng chứng đó.

Tại Crazyrouter, có thể bắt đầu theo hướng dẫn với token dành riêng cho công việc này. Việc tách token giúp quản lý quyền và theo dõi chi phí; không có nghĩa tổng năng lực xử lý sẽ tăng theo số token.

Nếu request nhỏ thành công nhưng client thất bại, hãy kiểm tra biến môi trường của tiến trình, địa chỉ gốc, thông tin xác thực cũ và tên model. Không cần tiếp tục chạy lại cùng một request API khi chưa có thay đổi nào liên quan.

7. Khi lỗi xảy ra, chọn hành động phù hợp

Tài liệu lỗi Crazyrouter nêu các nhóm lỗi về xác thực, tham số, quyền, số dư và tần suất. Với 403, cần đọc mã lỗi trong JSON để xác định đó là quyền model hay hạn mức. Với 429, giảm tần suất và làm theo hướng dẫn dịch vụ thay vì gửi lại liên tục.

OpenRouter phân biệt credit limit, budget limit và rate limit trong trang Limits. Tài liệu cũng nói rõ tạo thêm API key không nâng rate limit. Đây là lý do không nên dùng một chính sách retry chung cho mọi loại lỗi và mọi nhà cung cấp.

Trước khi áp dụng cho nhóm phát triển, hãy hỏi rõ giới hạn tài khoản, chính sách dữ liệu và cách xử lý sự cố. Không tìm thấy một thông số trong tài liệu không chứng minh dịch vụ không có tính năng đó; nhưng cũng không đủ để đánh dấu đã đáp ứng yêu cầu.

Crazyrouter đã vượt qua phép thử Messages nhỏ được mô tả ở đây. Quyết định thay thế OpenRouter cần thêm kết quả ở lớp công việc: cùng repository, cùng yêu cầu, kiểm tra đầu ra và chi phí thực tế. Một quy trình xác nhận từng bước sẽ cho bạn kết luận rõ ràng hơn một bảng “hỗ trợ/không hỗ trợ”.

Ngày kiểm tra nguồn và API: 12/10/2026. Không đưa ra xếp hạng tốc độ, giá rẻ nhất hay bảo đảm ổn định dài hạn.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí