Quay lại hướng dẫn
Tích hợp·26 tháng 7, 2026·Cập nhật 10 tháng 10, 2026·Đọc 12 phút

Claude Code Router — định tuyến Claude Code đến bất kỳ mô hình nào hoặc bỏ qua router hoàn toàn

Hầu hết những người tìm đến claude-code-router chỉ muốn chạy Claude Code ở nơi rẻ hơn — và đó là việc đổi base URL, không phải cài đặt. Dưới đây là khi nào router thực sự đáng dùng, cách cấu hình hiện nay khi config.json không còn tác dụng, cùng danh sách trung thực về những gì gateway làm hỏng.

Được xem xét lần cuối vào .

Hầu hết người tìm kiếm Claude Code Router muốn một trong hai điều khác nhau: định tuyến Claude Code qua nhiều nhà cung cấp mô hình, hoặc chỉ chạy Claude Code ở nơi rẻ hơn giá niêm yết của Anthropic. Chỉ nhu cầu đầu tiên mới cần router. Claude Code vốn đọc ANTHROPIC_BASE_URL, vì vậy nhu cầu thứ hai chỉ cần ba biến môi trường và hoàn toàn không cần phần mềm bổ sung.

Hướng dẫn này bao quát cả hai cách, với tên biến chính xác, lỗi thông tin xác thực tạo ra 401 âm thầm và danh sách rõ ràng về những gì ngừng hoạt động phía sau bất kỳ gateway nào. Nếu gần đây bạn đã đọc một bài viết khác về CCR, trước tiên hãy chuyển đến Tùy chọn B: config.json mà các bài viết đó yêu cầu bạn chỉnh sửa không còn là cấu hình mà router đọc nữa.

Bạn thực sự cần lựa chọn nào?

Bạn muốn gìSử dụng
Chạy Claude trong Claude Code với chi phí thấp hơnThay đổi Base URL — không cần cài đặt
Một mô hình khác cho từng tác vụ (lập kế hoạch / viết mã / nền)Một trong hai — biến ANTHROPIC_DEFAULT_*, hoặc router
Kết hợp nhiều nhà cung cấp phía sau một Claude Codeclaude-code-router
Điều khiển Claude Code bằng các mô hình không phải Claudeclaude-code-router
Nhật ký theo từng yêu cầu: nhà cung cấp, mô hình, độ trễ, token, chi phíclaude-code-router
Gửi subagent đến mô hình khác với vòng lặp chínhclaude-code-router — các biến theo cấp không thể tách riêng điều đó

Router là một dịch vụ cục bộ: thêm một tiến trình cần chạy, cấu hình và duy trì — và tính đến năm 2026, là một ứng dụng máy tính có giao diện riêng thay vì một tệp để chỉnh sửa. Chi phí đó xứng đáng khi bạn thực sự cần định tuyến đa nhà cung cấp, hạch toán theo từng yêu cầu hoặc lựa chọn mô hình ở cấp subagent. Nếu chỉ cần base URL là đủ thì không.

Tùy chọn A — thay đổi base URL (không cần cài đặt)

Kunavo cung cấp Anthropic Messages API gốc tại /v1/messages, là endpoint mà Claude Code gọi. Hãy trỏ đến đó:

~/.zshrc
export ANTHROPIC_BASE_URL=https://api.kunavo.com
export ANTHROPIC_AUTH_TOKEN=sk-kn-...              # create at kunavo.com/app/keys
export ANTHROPIC_MODEL=claude-sonnet-5             # exact slug — see the table below
export ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-5-5     # the opus alias and plan mode (v2.1.280+)
export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5   # the sonnet alias; Sonnet 5.5 is not on Kunavo
export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5   # background tasks

ANTHROPIC_BASE_URL chỉ là Origin — Claude Code tự thêm /v1/messages, vì vậy không được thêm đường dẫn. Giữ lại các dòng mô hình: mô hình mặc định tích hợp của Claude Code và bí danh opus đều trỏ đến Opus mới nhất, và nếu Kunavo chưa cung cấp mô hình đó, yêu cầu đầu tiên sẽ trả về lỗi 404. Bí danh sonnet yêu cầu Sonnet 5.5, mô hình Kunavo không cung cấp, vì vậy nếu không có dòng ANTHROPIC_DEFAULT_SONNET_MODEL thì /model sonnet, giai đoạn thực thi của opusplan và mọi subagent được đặt thành model: sonnet đều trả về lỗi 404. Bí danh opus được cố định thành Opus 5.5 (claude-opus-5-5), yêu cầu Claude Code v2.1.280 hoặc mới hơn — chạy claude update nếu bản của bạn cũ hơn. Lấy khóa từ bảng điều khiển sau khi đăng ký và nạp $10; khóa chỉ được hiển thị một lần.

Biến thông tin xác thực nào — và tại sao điều đó quan trọng

Claude Code gửi hai biến thông tin xác thực trong các tiêu đề HTTP khác nhau, và khóa nằm trong tiêu đề mà máy chủ không đọc sẽ thất bại với 401:

BiếnTiêu đề được gửiTrên Kunavo
ANTHROPIC_AUTH_TOKENAuthorization: BearerĐược khuyến nghị — hoạt động ở mọi nơi
ANTHROPIC_API_KEYx-api-keyHoạt động cho chat và khám phá mô hình sau khi được phê duyệt một lần

Ưu tiên ANTHROPIC_AUTH_TOKEN vì một lý do cụ thể: ANTHROPIC_API_KEY cần được phê duyệt một lần trong phiên tương tác, và khóa đã bị từ chối một lần sẽ bị bỏ qua về sau mà không có lời nhắc — một lỗi khó hiểu khi biến đã được đặt rõ ràng nhưng rõ ràng không được sử dụng. Trên Kunavo, tính năng khám phá mô hình không quyết định điều này. Tính năng khám phá mô hình gateway của Claude Code chỉ gửi token bearer khi đã đặt ANTHROPIC_AUTH_TOKEN, và nếu không thì dùng x-api-key; endpoint /v1/models của Kunavo đọc khóa từ cả hai tiêu đề.

Lưu cấu hình cố định

Việc export từ shell chỉ áp dụng cho terminal đó và mọi thứ được khởi chạy từ terminal đó — trình soạn thảo mở từ dock sẽ không thấy chúng, các agent chạy nền cũng vậy. Hãy đặt các giá trị trong tệp cài đặt để áp dụng cho mọi thứ:

~/.claude/settings.json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.kunavo.com",
    "ANTHROPIC_AUTH_TOKEN": "sk-kn-...",
    "ANTHROPIC_MODEL": "claude-sonnet-5",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5-5",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5"
  }
}

Dùng ~/.claude/settings.json cho tất cả dự án. Không bao giờ đặt khóa trong .claude/settings.json của dự án — tệp đó sẽ được commit.

Xác minh trước khi tin tưởng

Trước tiên hãy kiểm thử trực tiếp endpoint, để khi thất bại bạn biết vấn đề nằm ở cấu hình chứ không phải Claude Code:

verify.sh
curl -X POST "$ANTHROPIC_BASE_URL/v1/messages" \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":1,"messages":[{"role":"user","content":"."}]}'

# A response starting with {"id":"msg_ means the URL and key both work.
# 401 -> the key is in the wrong header; see "Which credential variable" below.

Sau đó khởi động claude từ cùng shell và chạy /status. Một dòng Anthropic base URL hiển thị api.kunavo.com và một dòng Auth token nêu tên biến của bạn xác nhận cả hai phần đang hoạt động.

Đặt mô hình tùy chỉnh — chọn slug một cách rõ ràng

Kunavo phân giải slug mô hình bằng đối sánh chính xác và không tạo bí danh cho tên có hậu tố ngày, vì vậy claude-sonnet-4-5-20250929 trả về 404 trong khi claude-sonnet-5 thành công. Luôn đặt ANTHROPIC_MODEL thay vì dựa vào mặc định tích hợp:

Vai tròSlugĐầu vào / đầu ra trên mỗi 1M
Lập trình hằng ngày (mặc định)claude-sonnet-5$1,40 / $7,00
Thế hệ trướcclaude-sonnet-4-6$2,10 / $10,50
Tái cấu trúc khó nhất, chế độ lập kế hoạchclaude-opus-5-5$2,80 / $14,00
Tác vụ nền, yêu cầu nhanhclaude-haiku-4-5$0,70 / $3,50

Các biến bí danh cho phép định tuyến theo từng tác vụ mà không cần bộ định tuyến: ANTHROPIC_DEFAULT_OPUS_MODEL dùng cho bí danh opus và chế độ lập kế hoạch, ANTHROPIC_DEFAULT_SONNET_MODEL dùng cho sonnet và giai đoạn thực thi của opusplan, còn ANTHROPIC_DEFAULT_HAIKU_MODEL dùng cho haiku cùng các tác vụ chạy nền của Claude Code như tạo phần tóm tắt và tiêu đề. Khi dùng Kunavo, hai thiết lập sau là bắt buộc, vì nếu không cố định, chúng sẽ yêu cầu những model ID mà Kunavo không cung cấp (Sonnet 5.5 và Haiku 5.5 từ v2.1.293): đặt biến Haiku thành claude-haiku-4-5 để các tác vụ chạy nền đó cũng không dùng mô hình chính. (ANTHROPIC_SMALL_FAST_MODEL là cách viết cũ của cùng một thiết lập.)

Tùy chọn: hiển thị mọi mô hình trong bộ chọn

Đặt CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 (Claude Code v2.1.129+) và Claude Code sẽ truy vấn GET /v1/models khi khởi động, thêm những gì tìm thấy vào bộ chọn /model có nhãn Từ gateway. Kunavo cung cấp endpoint đó, vì vậy mọi mô hình Claude được bật đều xuất hiện và /model trở thành menu trực tiếp thay vì danh sách bạn phải tự duy trì. Cả hai biến thông tin xác thực đều dùng được cho tính năng này — xem phần trên.

Tùy chọn B — claude-code-router, theo đúng cách nó hiện hoạt động

Hãy bắt đầu từ đây, vì gần như mọi nội dung viết về CCR đều mô tả một phiên bản không còn tồn tại. Router từng là một tệp JSON và lệnh ccr code. Hiện nay nó là một control plane cục bộ với ứng dụng máy tính, giao diện quản lý, nhật ký yêu cầu và gateway mô hình — và config.json mà mọi hướng dẫn đều hiển thị không còn cấu hình cho nó nữa.

CCR lưu cấu hình thời gian chạy trong ~/.claude-code-router/config.sqlite (%APPDATA%\claude-code-router\config.sqlite trên Windows). Một config.json cũ được đọc một lần, làm nguồn di chuyển, khi chưa tồn tại cấu hình SQLite. Sau lần chạy đầu tiên, chỉnh sửa tệp đó không ảnh hưởng đến cấu hình đang chạy — không có lỗi và cũng không có cảnh báo. Khối Providers mà bạn đã cẩn thận dán vào đơn giản không phải là cấu hình.

Điều đó bao gồm cả trang này trước ngày 2026-09-06: đoạn JSON từng nằm ở đây là sai, và đó là kiểu sai khiến bạn mất cả buổi chiều vì không có gì cho biết nó đã bị bỏ qua. Hiện cấu hình được thực hiện trong giao diện (hoặc để sao lưu, dùng Settings → Export data — không sao chép các tệp SQLite đang hoạt động khi CCR đang chạy).

Cài đặt và khởi chạy

CCR được cung cấp theo hai cách: ứng dụng máy tính từ GitHub Releases (khay hệ thống, tự động cập nhật, tích hợp máy tính) và npm CLI cho các triển khai không giao diện hoặc được giám sát. Cả hai dùng chung một thư mục cấu hình.

cài đặt và khởi chạy
# CCR ships as a desktop app (GitHub Releases) or an npm CLI. Both read the
# same ~/.claude-code-router directory. The CLI needs Node.js 22+.
npm install -g @musistudio/claude-code-router
ccr ui        # management UI on :3458, model gateway on :3456

# Configure the provider and an Agent Config profile in that UI, then launch
# Claude Code through the profile by name:
ccr "Claude Code - Kunavo"        # npm CLI
ccr-app "Claude Code - Kunavo"    # the desktop app's own launcher

# There is no 'ccr code' in the current command reference. The service commands
# are start / ui / stop / serve / web; everything else is a profile name.

Thêm Kunavo gồm một mục nhà cung cấp — Providers → Add provider, preset Other / custom API endpoint, endpoint https://api.kunavo.com, khóa sk-kn- của bạn — và một profile Agent Config → Add profile → Claude Code. Phiên bản hướng dẫn theo từng trường, bao gồm Check Connection và khám phá mô hình, có trên trang tích hợp Claude Code Router. Phần còn lại của mục này đề cập những điều trang đó không bao quát: thông tin xác thực, chi phí và các chế độ lỗi.

Ba thông tin xác thực và lỗi 401 liên quan đến thông tin nào

Đây là nguyên nhân phổ biến nhất khiến một thiết lập đang hoạt động trông như bị hỏng. CCR có ba bí mật riêng biệt và chúng xác thực ba chặng khác nhau:

Thông tin xác thựcXác thựcĐi đến đâu
Khóa Kunavo của bạn (sk-kn-…)CCR → KunavoProviders → trường khóa API của nhà cung cấp
Khóa client CCRBất kỳ client nào → gateway CCRĐược tạo trên trang API Keys; nếu không có khóa này, gateway sẽ từ chối các yêu cầu mô hình
Token quản lý (ccr_web_token)Bạn → giao diện CCR và RPCTrong URL mà ccr ui in ra — hãy coi nó như mật khẩu

Cặp cổng cũng thường gây nhầm lẫn: cổng quản lý mặc định là 127.0.0.1:3458 còn gateway mô hình là 127.0.0.1:3456. Base URL trỏ đến 3458 sẽ đến giao diện, không phải gateway. (Docker cố ý gộp cả hai phía sau một endpoint Nginx, nên hướng dẫn Docker trông khác.) Giao diện truy cập được không đồng nghĩa gateway hoạt động: hãy kiểm tra /health trên địa chỉ gateway và xác nhận Server hiển thị Running.

Bản đồ theo từng cấp mới là điểm mấu chốt

Claude Code không yêu cầu một mô hình, mà yêu cầu một cấp — vòng lặp chính cần Sonnet hoặc Opus, còn công việc nền (subagent, tìm kiếm, tóm tắt, tiêu đề cuộc trò chuyện) cần mô hình nhỏ và nhanh. Một profile Claude Code trong Agent Config hiển thị chúng dưới dạng các trường riêng: Model mặc định cùng các ghi đè tùy chọn Fable, Opus, Sonnet và Haiku, mỗi trường nhận một giá trị Provider/model. Để trống một cấp thì Claude Code sẽ chọn cấp đó.

CấpÁnh xạ đếnĐầu vào / đầu ra trên mỗi 1MThực sự chạy gì ở đó
OpusKunavo/claude-opus-5-5/ $14,00Chế độ lập kế hoạch, tái cấu trúc khó
Sonnet (mặc định)Kunavo/claude-sonnet-5$1,40 / $7,00Vòng lặp agent chính — phần lớn token của bạn
Sonnet, thế hệ trướcKunavo/claude-sonnet-4-6$2,10 / $10,50Cùng vòng lặp, đắt hơn Sonnet 5 50%
HaikuKunavo/claude-haiku-4-5$0,70 / $3,50Subagent, phân loại tệp, tiêu đề, bản tóm tắt

Hãy đọc bảng đó trước khi sao chép sơ đồ phân hạng của người khác, vì sự phân tách rõ ràng là đòn bẩy đầu tiên: claude-sonnet-5 rẻ hơn 50% so với claude-opus-5-5 trên Kunavo ($1,40 / $7,00 so với $2,80 / ). Đòn bẩy thứ hai là hạng Haiku: ở mức $0,70 / $3,50, mô hình này rẻ hơn 2 lần so với Sonnet 5, đồng thời xử lý khối lượng bạn không nhìn thấy — mọi subagent, mọi lượt phân loại tệp và mọi tiêu đề được tạo. claude-sonnet-4-6 không còn là Sonnet giá rẻ: ở mức $2,10 / $10,50, nó đắt hơn Sonnet 5 50%, đó là lý do các đoạn mã ở trên đặt ANTHROPIC_MODEL=claude-sonnet-5.

Định tuyến subagent — điều mà bản đồ cấp không thể làm

Các ghi đè cấp ghim mọi subagent vào một mô hình. CCR có thể tinh chỉnh hơn: khi một yêu cầu Claude Code khớp với route tích hợp, nó chèn danh sách các mô hình khả dụng vào phần mô tả công cụ Agent / Task, và Claude Code thêm tiền tố vào prompt của mỗi agent được tạo bằng một thẻ nêu tên mô hình mà agent muốn dùng:

<CCR-SUBAGENT-MODEL>provider/model</CCR-SUBAGENT-MODEL>

CCR loại bỏ thẻ và định tuyến yêu cầu đó tương ứng, vì vậy subagent tìm kiếm có thể chạy trên Haiku trong khi subagent đánh giá chạy trên Opus, được chọn theo từng tác vụ thay vì bị ghim. Công tắc này rất dễ bỏ sót: cơ chế bị tắt cho đến khi ít nhất một mô hình có Mô tả trên trang Models. Nếu không có mô tả, CCR không chèn gì và mọi subagent âm thầm quay về mặc định của profile. Hãy viết mô tả theo mức phù hợp với tác vụ — “tìm kiếm mã, phân loại tệp, subagent song song giá rẻ” cho Haiku, “phân tích kiến trúc, đánh giá rủi ro cao” cho Opus. Khi hoạt động, nhật ký yêu cầu hiển thị builtin:claude-code-subagent làm lý do định tuyến.

Lựa chọn giao thức và chi phí phải trả về bộ nhớ đệm

CCR thăm dò endpoint và chọn giao thức truyền. Cung cấp origin thuần https://api.kunavo.com thì nó dùng Anthropic Messages; cung cấp https://api.kunavo.com/v1 thì nó dùng định dạng tương thích OpenAI. Cả hai bề mặt đều hoạt động với cùng một khóa và bạn có thể ghi đè tính năng tự phát hiện trong Advanced settings.

Ưu tiên dạng Anthropic Messages. Dạng này giữ cache_control trong quá trình truyền, để tính năng lưu bộ nhớ đệm prompt đến được mô hình và input được lưu trong bộ nhớ đệm chỉ tính bằng 10% mức giá input (cách hoạt động) — trên một vòng lặp agent gửi lại tiền tố ổn định ở mỗi bước, đây là khoản tiết kiệm đơn lẻ lớn nhất hiện có. Cần nói rõ rằng router trên đường đi vẫn chỉnh sửa các yêu cầu: CCR loại bỏ thông báo hệ thống tiêu đề thanh toán mà Claude Code chèn vào và thêm danh sách mô hình vào phần mô tả công cụ khi bật định tuyến subagent. Cả hai nằm trước các điểm ngắt bộ nhớ đệm của bạn, vì vậy mỗi thay đổi đối với nội dung đó gây ra một lần bỏ lỡ bộ nhớ đệm trong khi tiền tố mới được làm nóng. Sau đó nội dung ổn định — nhưng đây là lý do thực tế khiến Tùy chọn A lưu bộ nhớ đệm tốt hơn đôi chút so với Tùy chọn B, bên cạnh việc dễ vận hành hơn.

Tuy vậy, ở dạng tương thích OpenAI, tính năng lưu bộ nhớ đệm prompt vẫn đến được mô hình. Với prompt dài, Kunavo tự đặt các điểm ngắt bộ nhớ đệm trên tuyến đó: trên prompt hệ thống, trên các định nghĩa công cụ và trên tin nhắn cuối cùng khi cuộc trò chuyện đã có lượt trả lời của trợ lý. cache_control đi kèm một tin nhắn hoặc một định nghĩa công cụ được giữ nguyên.

Dự phòng: thử lại so với chuyển đổi dự phòng

Mục Default on failure trên trang Routing đáng được thiết lập trước khi bạn cần đến. Retry gửi lại đến cùng mô hình khi gặp 408, 409, 429 và 5xx, tuân theo Retry-After và nếu không có thì lùi theo cấp số nhân từ 1s đến tối đa 30s. Fallback targets duyệt danh sách mô hình dự phòng theo thứ tự và kích hoạt khi gặp bất kỳ 4xx hoặc 5xx nào, với giả định rằng mô hình không tồn tại hoặc nhà cung cấp từ chối có thể chỉ ảnh hưởng đến mục tiêu hiện tại. Các quy tắc riêng có thể ghi đè cài đặt toàn cục. Khi chạy dự phòng, phản hồi chứa x-ccr-fallback-attempts và x-ccr-fallback-model để bạn có thể xác định sau đó.

Xác minh nó thực sự nằm trong đường đi

Khởi chạy Claude Code từ profile, gửi một tin nhắn, sau đó mở Request logs trong CCR. Hàng đó hiển thị request model (những gì Claude Code yêu cầu), resolved provider và resolved model (yêu cầu đã đi đâu) — bộ ba này là bằng chứng. Trong CLI, /model liệt kê các mô hình CCR cung cấp. Nếu Claude Code trả lời nhưng không xuất hiện hàng nhật ký, bạn đã tự khởi động Claude Code thay vì thông qua CCR, và phạm vi của profile là Only opened from CCR.

Một phiên lập trình tốn bao nhiêu

Claude Code gửi lại system prompt, cuộc trò chuyện và ngữ cảnh tệp mới ở mỗi bước, vì vậy mức giá theo token nhanh chóng cộng dồn. Theo mức giá Kunavo trên claude-sonnet-5:

Đơn vịToken (vào / ra)KunavoBảng giá Anthropic
Một bước agent25.000 / 1.200$0,043$0,062
Một tác vụ 20 bước~500k / ~24k~$0,87~$1,24
Một ngày sử dụng nhiều (5 tác vụ)—~$4,34~$6,20

Con số đó thấp hơn khoảng 30% trên mô hình chính, trước khi tính lưu bộ nhớ đệm prompt. Mức giá đầy đủ có trong hướng dẫn định giá Claude API, còn trình tính chi phí sử dụng số lượng token của chính bạn.

Điều vẫn hoạt động — và điều không hoạt động

Việc trỏ Claude Code đến bất kỳ gateway nào sẽ thay đổi một vài thứ. Danh sách ngắn và đáng biết trước khi bạn cam kết:

Tính năngPhía sau gateway
Lập trình, công cụ, subagent, MCP, hookKhông bị ảnh hưởng
bộ nhớ đệm promptHoạt động — route Messages API gốc
Gói đăng ký claude.ai của bạnKhông được sử dụng; thay vào đó tính phí theo token vào khóa
Remote ControlKhông khả dụng — cần danh tính claude.ai
Nhập liệu bằng giọng nóiKhông khả dụng — cùng lý do
Số lượng token /contextƯớc tính cục bộ (xem bên dưới)

Ở dòng cuối cùng đó: đếm token là endpoint duy nhất mà đặc tả gateway của chính Anthropic đánh dấu là tùy chọn, và Claude Code sẽ ước tính mức sử dụng ngữ cảnh cục bộ khi endpoint này không có. Hiện Kunavo không cung cấp /v1/messages/count_tokens, vì vậy con số /context của bạn là ước tính chứ không phải số đếm chính xác. Ngoài con số đó, không có gì suy giảm — tính năng tự động nén và chính phiên làm việc vẫn không bị ảnh hưởng.

Khắc phục sự cố

Đường dẫn base URL

Triệu chứngNguyên nhân và cách khắc phục
401 trong mọi yêu cầuKhóa nằm trong tiêu đề mà máy chủ không đọc. Chuyển đổi giữa ANTHROPIC_AUTH_TOKEN và ANTHROPIC_API_KEY rồi thử lại curl ở trên.
Claude Code yêu cầu bạn đăng nhập nhưng curl hoạt độngBase URL có thể truy cập không phải là thông tin xác thực. Hãy đặt ANTHROPIC_AUTH_TOKEN ở nơi được đọc trước khi thiết lập lần chạy đầu tiên: export trong shell hoặc ~/.claude/settings.json.
ANTHROPIC_API_KEY đã được thiết lập nhưng bị bỏ qua, không có lời nhắcYêu cầu phê duyệt một lần đã bị từ chối trước đó. Bật tùy chọn này trong /config → Sử dụng khóa API tùy chỉnh, hoặc chuyển sang ANTHROPIC_AUTH_TOKEN.
404 chỉ định tên modelKhớp chính xác theo slug — bỏ mọi hậu tố ngày tháng và sử dụng slug từ bảng trên.
400 chỉ định thinking hoặc adaptiveClaude Code yêu cầu suy luận thích ứng trên các model 4.6+. Trên Opus 4.6 và Sonnet 4.6, CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1 khắc phục vấn đề này.
/fast cho biết chế độ nhanh đã bị tắtKiểm tra tính khả dụng gọi trực tiếp api.anthropic.com và không tuân theo base URL của bạn. Hãy đặt CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1.
Các model không xuất hiện trong bộ chọnBật CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1, hoặc chỉ định tên của chúng thông qua các biến ANTHROPIC_DEFAULT_*_MODEL.

…và khi router nằm trên đường dẫn

Triệu chứngNguyên nhân và cách khắc phục
Các chỉnh sửa đối với config.json không làm thay đổi gìKhông thể. Cấu hình thời gian chạy là config.sqlite; tệp JSON chỉ là nguồn di chuyển một lần. Hãy thực hiện thay đổi trong giao diện người dùng.
Không tìm thấy ccr codeKhông có trong bộ lệnh hiện tại. Khởi chạy profile theo tên: ccr "My Profile", hoặc ccr-app "My Profile" từ ứng dụng máy tính.
Không tìm thấy ccr sau khi cài đặtThư mục bin toàn cục của npm không có trong PATH, hoặc Node thấp hơn 22. Kiểm tra npm prefix -g và node --version.
Giao diện tải được nhưng các yêu cầu model thất bạiManagement và gateway là các dịch vụ khác nhau trên các cổng khác nhau. Xác nhận Server hiển thị Running, và trỏ client đến :3456, không phải :3458.
Gateway trả về 401 dù provider hoạt động bình thườngKhông có khóa client CCR. Tạo một khóa trên trang API Keys — đây là thông tin xác thực riêng biệt với khóa sk-kn- của bạn.
Claude Code chạy, nhưng không có gì xuất hiện trong nhật ký RequestBạn đã khởi chạy Claude Code trực tiếp trong khi phạm vi profile là Only opened from CCR. Hãy khởi chạy từ CCR, hoặc chuyển phạm vi sang System default.
Mọi subagent đều sử dụng model mặc địnhĐịnh tuyến subagent phụ thuộc vào trường Description trên trang Models. Khi không có mô tả, CCR không chèn hướng dẫn định tuyến nào và thẻ không bao giờ được ghi.
/model không liệt kê model CCR nàoChưa cấu hình provider và model, hoặc profile đã bị tắt. Trước tiên, hãy chạy Check Connection trên provider.

Các cách khắc phục theo từng lỗi cho chính API nằm trong các trang khắc phục sự cố khóa API không hợp lệ và giới hạn tốc độ.

Câu hỏi thường gặp

Tôi có cần claude-code-router để sử dụng Claude Code với một API khác không?

Không. Claude Code vốn đọc ANTHROPIC_BASE_URL, vì vậy việc trỏ ứng dụng đến bất kỳ endpoint nào cung cấp Anthropic Messages API không cần phần mềm bổ sung — chỉ cần ba biến môi trường là xong. CCR đáng dùng khi bạn muốn định tuyến qua nhiều nhà cung cấp, ghi nhật ký theo từng yêu cầu về nhà cung cấp, mô hình, độ trễ, token và chi phí, hoặc dùng mô hình khác cho từng subagent thay vì một mô hình cho tất cả. Nếu mục tiêu của bạn chỉ là chạy Claude trên một endpoint rẻ hơn, việc thay đổi base URL là cấu hình nhỏ gọn và đáng tin cậy hơn: không có dịch vụ bổ sung, đồng thời tính năng lưu bộ nhớ đệm prompt được chuyển tiếp trực tiếp.

Tại sao chỉnh sửa config.json của claude-code-router không có tác dụng?

Vì đó không còn là cấu hình mà CCR đọc nữa. Các bản dựng hiện tại lưu cấu hình thời gian chạy tại ~/.claude-code-router/config.sqlite (%APPDATA%\claude-code-router\config.sqlite trên Windows) và chỉ đọc config.json cũ đúng một lần, làm nguồn di chuyển, khi chưa tồn tại cấu hình SQLite. Sau lần chạy đầu tiên, tệp JSON bị bỏ qua — âm thầm, không có lỗi — vì vậy mảng Providers hoặc khối Router được chỉnh sửa thủ công hoàn toàn không có hiệu lực. Thay vào đó, hãy thay đổi trong giao diện CCR trên máy tính và dùng Settings → Export data nếu bạn muốn sao lưu ở cấp tệp. Hầu hết hướng dẫn CCR của bên thứ ba vẫn mô tả tệp JSON.

Bây giờ tôi khởi động Claude Code thông qua claude-code-router như thế nào?

Theo tên profile, không dùng ccr code. Tạo profile trong Agent Config → Add profile → Claude Code, chọn một mô hình, lưu rồi khởi chạy: ccr "Claude Code - Work" với npm CLI, hoặc ccr-app "Claude Code - Work" với ứng dụng trên máy tính; ứng dụng này cũng cung cấp cho mỗi thẻ profile một nút terminal cho CLI và một nút phát cho ứng dụng Claude. Bộ lệnh CLI hiện tại gồm start, ui, stop, serve và web, cùng với tên hoặc id của profile; không có tiểu lệnh code. Thêm các cờ riêng của agent sau dấu gạch ngang kép, ví dụ: ccr "Claude Code - Work" cli -- --model sonnet.

Claude Code có thể sử dụng mô hình tùy chỉnh không?

Về mặt kỹ thuật là có: ANTHROPIC_MODEL chấp nhận mọi slug mà endpoint phía sau ANTHROPIC_BASE_URL cung cấp, và claude-code-router bổ sung tính năng định tuyến theo từng tác vụ giữa các nhà cung cấp. Tuy nhiên, giới hạn cần nói rõ là tài liệu gateway của chính Anthropic nêu rằng họ không hỗ trợ định tuyến Claude Code đến các mô hình không phải Claude thông qua bất kỳ gateway nào, vì vậy việc dùng công cụ và hành vi tác tử trên mô hình không phải Claude vẫn chưa được kiểm thử, thay vì là cấu hình được hỗ trợ. Trên Kunavo, cách được hỗ trợ là dùng slug Claude trên một endpoint rẻ hơn; các mô hình khác trong danh mục có thể truy cập thông qua API tương thích OpenAI, chứ không phải thông qua Claude Code. Quy tắc slug chính xác và bảng mô hình nằm trong đặt mô hình tùy chỉnh ở trên, còn danh mục đầy đủ có trên trang mô hình.

Claude Code cần base URL và các biến môi trường nào?

Đặt ANTHROPIC_BASE_URL thành https://api.kunavo.com (Claude Code tự thêm /v1/messages), ANTHROPIC_AUTH_TOKEN thành khóa sk-kn- của bạn, và ANTHROPIC_MODEL thành một slug mô hình chính xác, chẳng hạn claude-sonnet-5. Cũng cố định các bí danh: ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-5-5 cho /model opus và chế độ lập kế hoạch (Opus 5.5 cần Claude Code v2.1.280 trở lên — chạy claude update); ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5 vì nếu không, bí danh sonnet sẽ yêu cầu Sonnet 5.5, mô hình Kunavo không cung cấp; và ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5 vì nếu không, bí danh haiku cũng sẽ yêu cầu một model ID mà Kunavo không cung cấp (Haiku 5.5 từ v2.1.293). Dòng này cũng tính phí các tác vụ chạy nền theo mức giá thấp nhất.

Tôi nên dùng ANTHROPIC_AUTH_TOKEN hay ANTHROPIC_API_KEY?

Hãy dùng ANTHROPIC_AUTH_TOKEN. Khóa này được gửi trong tiêu đề Authorization: Bearer và có hiệu lực ngay lập tức, trong khi ANTHROPIC_API_KEY được gửi dưới dạng x-api-key và cần phê duyệt tương tác một lần — khóa đã bị từ chối một lần sẽ bị âm thầm bỏ qua về sau. Trên Kunavo, đó là khác biệt duy nhất trong quá trình phê duyệt: cả endpoint /v1/messages và endpoint /v1/models phía sau tính năng khám phá mô hình gateway của Claude Code đều đọc khóa từ một trong hai tiêu đề.

Tại sao Claude Code báo mô hình không khả dụng?

Kunavo so khớp chính xác các slug mô hình và không tạo bí danh cho tên có hậu tố ngày, vì vậy yêu cầu claude-sonnet-4-5-20250929 trả về lỗi 404 trong khi claude-sonnet-5 hoạt động. Đặt ANTHROPIC_MODEL thành một slug chính xác từ danh mục thay vì dựa vào mô hình mặc định tích hợp của Claude Code. Một nguyên nhân phổ biến khác là bí danh sonnet: khi chưa được cố định, bí danh này yêu cầu Sonnet 5.5, mô hình Kunavo không cung cấp, vì vậy /model sonnet, giai đoạn thực thi của opusplan và mọi subagent được đặt thành model: sonnet sẽ trả về lỗi 404 cho đến khi đặt ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5.

Điều gì ngừng hoạt động khi Claude Code chạy qua gateway?

Ba điều, theo thiết kế. Remote Control và nhập liệu bằng giọng nói đều cần danh tính claude.ai và không khả dụng khi đã đặt thông tin xác thực gateway. Kiểm tra tính khả dụng của /fast gọi trực tiếp api.anthropic.com thay vì đi theo base URL của bạn, vì vậy có thể báo chế độ nhanh không khả dụng trong khi các yêu cầu thông thường vẫn hoạt động; CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1 sẽ khôi phục chế độ này. Lập trình, công cụ, subagent, MCP và lưu bộ nhớ đệm prompt không bị ảnh hưởng.

Tôi có thể dùng gói đăng ký Claude Pro hoặc Max thay thế không?

Không. Gói đăng ký chat không bao gồm quyền truy cập API, và việc đặt thông tin xác thực gateway sẽ cố ý tạm dừng đăng nhập claude.ai — các giới hạn của gói đăng ký không còn áp dụng, còn mức sử dụng được tính theo token vào khóa. Xem Claude Code có miễn phí không để biết phân tích đầy đủ.

Điều này có hoạt động với tiện ích mở rộng VS Code không?

Có, nhưng tiện ích mở rộng kiểm tra thông tin xác thực trước khi khởi chạy, vì vậy hãy đặt chúng trong cài đặt claudeCode.environmentVariables của chính VS Code thay vì chỉ đặt trong ~/.claude/settings.json.

Còn Cursor, Kilo Code hoặc Cline thì sao?

Các công cụ đó dùng trường nhà cung cấp tương thích OpenAI thay cho biến môi trường — base URL https://api.kunavo.com/v1, cùng một khóa. Thiết lập và định tuyến mô hình theo từng công cụ được trình bày trong các hướng dẫn Cline, Roo Code và Kilo Code.