# Hướng dẫn cài đặt Claude Code trên Windows và kết nối Crazyrouter: từ lỗi 403 đến chạy thành công
Hướng dẫn cài đặt Claude Code trên Windows và kết nối Crazyrouter: từ lỗi 403 đến chạy thành công
Lần đầu cài Claude Code (công cụ mã hóa AI) trên Windows, rất nhiều người bị kẹt ở cùng một chỗ: terminal đã hiện version, nhưng gõ claude thì nhận toàn lỗi 403.
Chính tôi cũng từng kẹt như vậy. claude --version hiển thị bình thường, nhưng mỗi lần khởi động đều báo không kết nối được api.anthropic.com. Tôi từng nghĩ do version cũ, nên cài lại npm ba lần, loay hoay giữa proxy và file cấu hình, cuối cùng mới phát hiện nguyên nhân thật sự chỉ là tôi ghi sai một tên biến trong cấu hình.
Bài viết này ghi lại toàn bộ chuỗi thao tác theo đúng trình tự: cài xong Claude Code → kết nối API của Crazyrouter → xác thực bằng một phản hồi mô hình hoàn chỉnh. Mọi lỗi gặp phải đều được giữ lại ảnh thật, và mỗi bước đều nói rõ "bước này đang kiểm tra điều gì".
Làm theo bài này, bạn sẽ có một chuỗi bằng chứng đầy đủ: lệnh chạy được, cấu hình đọc được, mô hình trả lời được, log backend khớp. Cuối bài có dữ liệu thực đo được trong lần chạy thử.
Bài viết dùng Windows 10/11 và PowerShell làm ví dụ. Mọi chỗ ghi
YOUR_CRAZYROUTER_API_KEYđều là placeholder, bạn cần thay bằng key do chính mình tạo.
Ba khái niệm cần phân biệt trước đã
Người mới dễ nhầm lẫn ba thứ thành một, rồi sửa lung tung trước một lỗi.
| Tên | Hiểu đơn giản | Bài này làm gì |
|---|---|---|
| Claude Code | Công cụ AI chạy trên máy, đọc file, viết code trong terminal | Cài chương trình, xác nhận lệnh chạy được |
| Mô hình (model) | Dịch vụ thực sự nhận câu hỏi và sinh câu trả lời | Chọn một model hiện hữu với key, phù hợp Claude Code |
| Crazyrouter API | Cổng kết nối bên thứ ba dùng trong bài | Tạo Key, điền Base URL, tra model, đối soát log |
Claude Code bản thân nó không phải là mô hình. Cài xong nó không đồng nghĩa bạn có subscription chính thức của Claude, cũng không đồng nghĩa tài khoản Crazyrouter đã có sẵn额度 (hạn mức). Hai việc này cần chuẩn bị riêng.
Dưới đây chia làm ba phần: cài nó, nối nó, xác thực nó.

Ảnh này là điểm xuất phát của toàn bộ bài: cài thành công và gọi thành công là hai lần nghiệm thu khác nhau. Version number chỉ chứng minh lần thứ nhất.
Phần 1: Cài Claude Code đến mức chạy được
Bước 1: Mở PowerShell, xác định đúng nơi nhập lệnh
Nhấn Start, tìm PowerShell, mở lên. Hoặc trong Windows Terminal, chọn tab PowerShell.
Thấy dấu nhắc kiểu thế này mới là vị trí nhập lệnh của bài:
PS C:\Users\tên_của_bạn>
Dấu nhắc này không cần copy. Chỉ copy lệnh trong khung code, từng dòng một, chờ kết quả rồi mới sang bước sau.
Nếu bạn đang bị kẹt trong giao diện chat của Claude Code, hãy thoát session về PowerShell trước. Đừng gửi lệnh cài đặt vào ô chat như nội dung hội thoại.
Cửa sổ thường là đủ để cài. Chỉ xử lý quyền admin khi trình cài đặt báo thiếu quyền. Đừng vì một lỗi không hiểu mà tắt toàn cục execution policy.
Bước 2: Ưu tiên cài bằng cách thức chính chủ
Theo tài liệu cài đặt chính thức hiện tại của Claude Code, lệnh cài native trên Windows PowerShell là:
irm https://claude.ai/install.ps1 | iex
Lệnh này tải script chính chủ và thực thi. Trước khi chạy, hãy xác nhận domain là claude.ai, không thay bằng địa chỉ không rõ nguồn gốc.
Cài native không yêu cầu cài Node.js trước. Một số hướng dẫn cũ viết "không có Node.js thì không cài được" là nói về cách npm, không áp dụng cho cài native hiện tại.
Sau khi cài, xử lý PATH theo hướng dẫn. Nếu cần mở lại terminal, hãy đóng cửa sổ hiện tại và mở cái mới, rồi chạy:
claude --version
Thấy version là lệnh trên máy đã dùng được. Số cụ thể thay đổi theo version, không cần khớp với ảnh trong bài.
Nếu báo không tìm thấy lệnh, hãy kiểm tra trình cài đặt có yêu cầu thêm thư mục sau vào PATH của user hiện tại:
%USERPROFILE%\.local\bin
Vào Start tìm "Edit environment variables for your account", vào mục Path của user variables, xác nhận thư mục này có mặt. Sửa xong thì mở lại terminal.
Nếu script tải thất bại, hoặc output lẫn HTML, <script>, captcha trang web, hãy dừng ngay tuyến đường này. Đó nghĩa là bạn nhận được không phải script cài đặt; sửa cú pháp PowerShell tiếp là vô nghĩa, hãy chuyển sang cách npm ở bước sau.

Nhìn ảnh này đừng đi tìm dòng nào sai. Thông tin then chốt là trong lỗi xuất hiện <script type="text/javascript">, var, ||, && — đây đều là thứ của JavaScript và HTML. PowerShell báo "từ khóa var không được hỗ trợ" không phải vì nó hỏng, mà vì nó đang dùng cú pháp PowerShell để parse một đoạn trang web.
Bước 3: Script chính chủ lỗi, hoặc bạn đã có sẵn Node.js: dùng npm
Ai đã cài xong ở bước trước thì bỏ qua đoạn này, không cần cài hai bộ.
Đầu tiên vào trang tải Node.js chọn bản LTS cho Windows, cài theo wizard. Tài liệu chính thức hiện tại yêu cầu cách npm cần Node.js 22 trở lên, đừng bê version thấp từ hướng dẫn cũ.
Đóng terminal cũ, mở lại PowerShell, chạy lần lượt:
node --version
npm.cmd --version
Cả hai phải hiện version. Dòng đầu không có thì sửa Node.js hoặc PATH; dòng sau không có thì sửa npm. Lệnh cơ bản chưa chạy được thì đừng vội cài Claude Code.
Ở đây dùng npm.cmd thay vì npm để gọi rõ ràng wrapper lệnh của Windows, tránh PowerShell ưu tiên chọn npm.ps1 mà vướng execution policy.
Sau đó chỉ copy một dòng này:
npm.cmd install -g @anthropic-ai/claude-code
Lưu ý có khoảng trắng giữa -g và tên gói, tên gói không có chữ npm thứ hai ở cuối. Đợi chạy xong, rồi kiểm tra:
claude.cmd --version
claude.cmd tương ứng với cài npm. Phần thân bài thống nhất viết claude; người dùng npm nếu vướng lỗi execution policy của claude.ps1 thì đổi sang claude.cmd.
Nếu bước này báo E404
Đừng nghi ngờ mạng hay mirror, hãy đọc kỹ từng ký tự tên gói trong lỗi.

Tên gói trong ảnh là @anthropic-ai/claude-codenpm, thừa chữ npm ở cuối. Nhìn lại lệnh tôi chạy, thực tế là:
npm install -g @anthropic-ai/claude-codenpm install -g @anthropic-ai/claude-code
Khi copy, hai lệnh dính thành một, tên gói và đầu dòng lệnh sau dính vào nhau. Việc này không liên quan gì đến mạng hay registry. Xóa input, chạy lại một mình lệnh cài gói là được.
Tên gói đúng luôn là @anthropic-ai/claude-code.
Bước 4: Có cần cài Git không?
Theo tài liệu chính thức tôi đọc được, bản Windows hiện tại vẫn thực thi được lệnh Shell qua PowerShell ngay cả khi chưa có Git for Windows; có Git for Windows thì có thể dùng Git Bash.
Vậy đừng viết "phải cài Git mới khởi động được". Chỉ khi bạn cần clone repo, quản lý version, hoặc version của bạn yêu cầu rõ Git Bash, hãy cài Git for Windows, xong mở lại terminal dùng git --version kiểm tra.
Bước 5: Dấu hiệu thành công duy nhất của bước cài
Chỉ có một: lệnh version trả về bình thường.
Đừng gọi đó là "mô hình chạy được". Trong ảnh 403 ở trên, version hiện rõ ràng, nhưng khởi động vẫn bị từ chối. Nhớ ranh giới này thì sau không tự lừa mình.
Phần 2: Kết nối Crazyrouter API
Phần này đừng bỏ qua. Chỉ cài Claude Code mà không cấu hình dịch vụ mô hình khả dụng, bạn vẫn không hỏi được câu nào.
Bước 1: Đăng ký và đăng nhập Crazyrouter
Mở trang đăng ký của Crazyrouter. Nếu đã có tài khoản thì đăng nhập luôn.
Điền tên user, email, mật khẩu và captcha theo hướng dẫn trang, đọc xong thỏa thuận thì hoàn tất đăng ký. Trường và cách xác thực có thể thay đổi, lấy theo trang bạn thực tế thấy.
Sau khi đăng nhập, hãy xem trước trạng thái tài khoản và trang ví/hạn mức. Đăng ký thành công không đồng nghĩa đủ điều kiện gọi; có cần nạp tiền, giá hiện tại và phương thức thanh toán lấy theo trang tài khoản của bạn.
Bước 2: Tạo một API Key riêng cho Claude Code
Vào console, tìm mục tạo "API Key":
- Đặt tên dễ nhận biết, ví dụ
claude-code-windows. - Kiểm tra hạn hiệu lực, đừng vừa cấu hình xong đã hết hạn.
- Nếu có giới hạn hạn mức hoặc mô hình, xác nhận đủ chạy xong bài test đầu, và bao gồm model bạn dùng.
- Sau khi lưu, copy Key và cất trên máy mình.
Mật khẩu đăng nhập, mã xác thực email, API Key là ba thứ khác nhau. Claude Code cần là API Key tạo ở đây.
Bước 3: Phân biệt cổng web và cổng API, đừng điền sai
Bài này dùng thống nhất cổng Đông Á đang cấu hình trên máy:
https://cn.crazyrouter.com
| Dùng cho | Địa chỉ bài này | Điền ở đâu |
|---|---|---|
| Đăng ký, đăng nhập, quản lý tài khoản | https://crazyrouter.com |
Trình duyệt |
| Base URL (địa chỉ gốc API) của Claude Code | https://cn.crazyrouter.com |
ANTHROPIC_BASE_URL |
| Tra danh sách model | https://cn.crazyrouter.com/v1/models |
Kiểm tra riêng |
| API Anthropic Messages | https://cn.crazyrouter.com/v1/messages |
Client gọi khi hỏi model |
Cổng quốc tế mặc định trong tài liệu Crazyrouter là https://api.crazyrouter.com. Nếu bạn chọn cổng quốc tế, hãy đổi luôn cả root address trong mọi cấu hình và lệnh kiểm tra sau, đừng đoạn này Đông Á, đoạn kia quốc tế.
Điều then chốt: điền cho Claude Code là root address, không phải nguyên chuỗi /v1/messages. Điểm này ngược với client tương thích OpenAI (loại đó thường bắt buộc có /v1), copy bừa sang thường ra 404 hoặc đường dẫn xuất hiện /v1/v1/messages.
Các địa chỉ máy gọi này không được thêm tham số UTM. Link web như đăng ký, giá cả có thể mang tham số thống kê, nhưng đừng dán cả link tham số vào cấu hình API.
Bước 4: Mở file cấu hình của Claude Code
Bài này dùng settings.json cấp user, để khởi động từ bất kỳ thư mục dự án nào cũng có hiệu lực. Đường dẫn:
%USERPROFILE%\.claude\settings.json
Trước tiên tạo thư mục trong PowerShell:
New-Item -ItemType Directory -Path "$env:USERPROFILE\.claude" -Force | Out-Null
Nếu đã có file cấu hình, hãy backup trước:
$settingsPath = Join-Path $env:USERPROFILE '.claude\settings.json'
if (Test-Path -LiteralPath $settingsPath) {
$backupPath = "$settingsPath.backup-$(Get-Date -Format 'yyyyMMdd-HHmmss')"
Copy-Item -LiteralPath $settingsPath -Destination $backupPath
}
Sau đó mở bằng Notepad:
notepad.exe "$env:USERPROFILE\.claude\settings.json"
Báo file không tồn tại thì tạo mới. Khi lưu, xác nhận tên file là settings.json, không phải settings.json.txt — bật "Hiển thị phần mở rộng file" trong File Explorer để kiểm tra đuôi.
Bước 5: Viết JSON vào Notepad, đừng viết vào PowerShell
File trống mới tạo thì điền đoạn này:
{
"env": {
"ANTHROPIC_BASE_URL": "https://cn.crazyrouter.com",
"ANTHROPIC_AUTH_TOKEN": "YOUR_CRAZYROUTER_API_KEY"
}
}
Thay YOUR_CRAZYROUTER_API_KEY bằng Key của mình, Ctrl+S lưu.
Ba điểm dễ vấp:
- Tên trường, URL, Key đều nằm trong dấu ngoặc kép tiếng Anh, không dùng dấu ngoặc kép tiếng Việt.
- Không thêm
//comment, sau mục cuối không để dấu phẩy. - Nếu file sẵn có cấu hình khác, chỉ merge các trường cần, đừng ghi đè toàn bộ. Đã có
envthì bổ sung trong cùng mộtenv, đừng viết haienv.
Tại sao dùng ANTHROPIC_AUTH_TOKEN thay vì ANTHROPIC_API_KEY
Đây là câu đáng nhớ nhất bài: khi nối endpoint tương thích Anthropic bên thứ ba, dùng ANTHROPIC_AUTH_TOKEN, đừng dùng ANTHROPIC_API_KEY.
Hai biến này gửi không phải cùng một request header:
| Biến | Header thực tế gửi đi | Mục đích thiết kế |
|---|---|---|
ANTHROPIC_API_KEY |
x-api-key: <key> |
Xác thực API chính chủ Anthropic |
ANTHROPIC_AUTH_TOKEN |
Authorization: Bearer <token> |
Gateway tùy biến / tương thích |
x-api-key là header riêng do Anthropic định nghĩa, gắn với ngữ nghĩa "tôi đi kênh chính chủ"; endpoint tương thích nhận header chuẩn Authorization: Bearer.
Vậy điền ANTHROPIC_API_KEY tức là bảo client "tôi có key chính chủ", nó sẽ tiếp tục đi kênh chính chủ, ANTHROPIC_BASE_URL không kéo được nó — đó là lý do đã cấu hình地址 (địa chỉ) vẫn 403.
Đừng "cho chắc" mà nhét cả hai credentials, sẽ khiến mỗi lần khởi động đều bật hỏi chọn một. Ai đã cấu hình tài khoản chính chủ, proxy khác thì đối chiếu cấu hình hiện tại rồi mới sửa.
Bước 6: Kiểm tra cấu hình có parse được không
Sau khi lưu, về PowerShell:
$settingsPath = Join-Path $env:USERPROFILE '.claude\settings.json'
$ccSettings = Get-Content -Raw -LiteralPath $settingsPath | ConvertFrom-Json
[pscustomobject]@{
BaseURL = $ccSettings.env.ANTHROPIC_BASE_URL
HasAuthToken = -not [string]::IsNullOrWhiteSpace(
[string]$ccSettings.env.ANTHROPIC_AUTH_TOKEN
)
}
Kỳ vọng thấy Base URL đúng, và HasAuthToken là True.
Bước này chỉ xác thực "cấu hình parse được, trường không rỗng", không xác thực Key có hợp lệ. Nếu chưa thay placeholder, nó vẫn hiện True.
Đừng vì chụp ảnh mà in toàn bộ $ccSettings ra màn hình, sẽ làm lộ Key thật. Khi nhờ người khác sửa lỗi, chỉ gửi tên trường, địa chỉ và thông báo lỗi đã che.
Bước 7: Dùng chính Key của bạn tra danh sách model một lần
Tiếp tục trong cùng cửa sổ:
$crBase = ([string]$ccSettings.env.ANTHROPIC_BASE_URL).TrimEnd('/')
$crHeaders = @{
Authorization = "Bearer $($ccSettings.env.ANTHROPIC_AUTH_TOKEN)"
}
$crModels = Invoke-RestMethod `
-Uri "$crBase/v1/models" `
-Headers $crHeaders `
-Method Get `
-TimeoutSec 30
$crModels.data | Select-Object id
Nó đọc trực tiếp cấu hình vừa lưu, không cần viết Key vào lệnh sẽ lưu trong history.
Sau khi trả về danh sách ID model, hãy vào trang model và giá của Crazyrouter xác nhận: model bạn chọn có áp dụng cho giao thức Anthropic Messages mà Claude Code dùng hay không, và hiện đang tính phí ra sao.
Model hiện trong danh sách không đồng nghĩa mọi giao thức đều gọi được, cũng không đồng nghĩa kênh hiện tại chắc chắn sinh được. Đây là lý do sau vẫn cần hỏi thật một câu.
Đừng lấy tên marketing hoặc tên model trong ảnh cũ làm ID, copy chính xác ID do interface trả về.
Bước 8: Ghi model ID và khởi động lại
Xác định ID rồi, bổ sung cấu hình thành:
{
"env": {
"ANTHROPIC_BASE_URL": "https://cn.crazyrouter.com",
"ANTHROPIC_AUTH_TOKEN": "YOUR_CRAZYROUTER_API_KEY"
},
"model": "YOUR_MODEL_ID"
}
Key và model ID đều thay bằng giá trị hợp lệ của mình. YOUR_MODEL_ID không phải tên model có thể gọi.
Sau khi lưu, thoát session cũ, khởi động lại từ terminal. Nếu đã sửa biến môi trường user Windows thì cũng mở lại terminal, đừng tiếp tục dùng giá trị trong process cũ.
Ai đang dùng CC Switch hay công cụ quản lý cấu hình khác, hãy xác nhận đang đi tuyến kết nối nào. Đừng vừa để tool tự ghi đè cấu hình, vừa sửa thủ công cùng file, cuối cùng không biết bản nào có hiệu lực.
Phần 3: Câu hỏi đầu tiên, thế nào mới gọi là thật sự nối được
Bước 1: Tạo thư mục luyện tập sạch
Đừng lập tức mở ngay dự án thật. Trong PowerShell:
$demoDir = Join-Path $env:USERPROFILE 'claude-code-first-run'
New-Item -ItemType Directory -Path $demoDir -Force | Out-Null
Set-Location -LiteralPath $demoDir
Xác nhận thư mục này không có dữ liệu cần bảo vệ, cũng không có cấu hình dự án thêm, rồi khởi động:
claude
Người cài npm vướng chính sách script thì dùng:
claude.cmd
Lần đầu chạy có thể xuất hiện chọn theme, tin cậy thư mục, xác thực — giao diện thay đổi theo version. Chỉ xác nhận tin cậy khi thư mục đích thực sự là thư mục luyện tập của bạn — Claude Code sẽ đọc, ghi và thực thi file trong thư mục này.
Nếu bật ra quy trình đăng nhập chính chủ, hãy quay lại kiểm tra cấu hình bên thứ ba, đừng điền Key của Crazyrouter vào ô mật khẩu tài khoản chính chủ.
Bước 2: Để model chỉ trả lời một câu
Vào ô nhập, gõ câu này:
请只回复OK,不要读取文件,不要运行命令。
Lưu ý: câu này vào ô chat của Claude Code, không phải PowerShell.
Kỳ vọng nhận một OK hoàn chỉnh.
Nếu thích kiểm tra tối thiểu ngay trên terminal, có thể dùng chế độ non-interactive:
claude -p "请只回复OK,不要读取文件,不要运行命令。"
Người dùng npm tương ứng claude.cmd -p .... Chạy thông qua một request tối thiểu trước, rồi mới lên task phức tạp, không thì lập tức để tool đọc dự án, gọi tool ngoài, biến số sửa lỗi sẽ nhiều đến mức bạn phân biệt không nổi.
Bước 3: Về console đối chiếu log sử dụng
Thấy câu trả lời rồi, mở log sử dụng của console Crazyrouter, lọc theo thời gian, tên Key, model, đối chiếu lần gọi này:
- Thời gian có khớp với câu hỏi vừa rồi không.
- Model có phải cái bạn chọn không (có ánh xạ alias thì kết hợp giải thích nền tảng xem).
- Có bản ghi request nhận diện được, trạng thái và lượng dùng không.
- Client có thực sự trả lời hoàn chỉnh, không chỉ có animation tải.
Log có thể trễ hoặc lọc sai, tra không thấy thì refresh trước, đối chiếu điều kiện lọc trước, đừng vội kết luận; ngược lại, chỉ thấy một bản ghi backend cũng không khẳng định trả lời thành công.
Lệnh chạy được + cấu hình đọc được + nhận trả lời hoàn chỉnh + log backend khớp, mới là một chuỗi kết nối có bằng chứng.
Bước 4: Thử thêm một task nhỏ thật sự
Có thể tiếp tục nói với nó:
请在当前练习目录中创建一个README.md,用中文写三条学习Claude Code的计划。不要读取其他目录,不要安装依赖。需要写文件时先让我确认。
Nó có thể đề xuất sửa file. Đọc kỹ đường dẫn và nội dung, xác nhận là hành động dự kiến rồi mới cấp quyền. Xong mở README.md tự kiểm tra, đừng chỉ tin model nói "đã xong".
Bài này không viết --dangerously-skip-permissions thành lệnh khởi động mặc định cho người mới. Hãy học xem nó chuẩn bị đọc gì, viết gì, rồi mới bàn nới lỏng quyền.
Phần 4: Gặp lỗi, xử lý theo vị trí xuất hiện
Trước hết đối chiếu bảng này tìm trường hợp trùng với bạn, đừng đồng thời đổi endpoint, đổi Key, sửa proxy, cài lại phần mềm — như vậy dù phục hồi, bạn cũng không biết bước nào phát huy tác dụng.
| Hiện tượng | Kiểm tra lớp nào trước | Hành động đầu |
|---|---|---|
Không tìm thấy claude |
Cài đặt hoặc PATH | Mở lại terminal, kiểm tra đường cài và nguồn lệnh |
npm E404 |
Tên gói, nguồn hoặc quyền | Đọc kỹ tên gói và địa chỉ request trong lỗi |
Dán JSON ra ParserError |
Vị trí thao tác hoặc cú pháp | Lưu JSON vào file cấu hình, đừng thực thi trong PowerShell |
Lỗi nhắc api.anthropic.com |
Đích request hoặc xác thực | Phân biệt là request model, kiểm tra đăng nhập hay request khác |
| 401 / 403 | Xác thực, quyền, chính sách dịch vụ | Xem response body, host đích, trạng thái Key và log nền tảng |
ConnectionRefused |
Giai đoạn kết nối | Tra host và port bị từ chối, nhất là proxy local |
| Model không tồn tại / không có kênh | Model và routing | Đối chiếu ID chính xác, giao thức, quyền Key và trạng thái dịch vụ |
| Vào giao diện chính nhưng không trả lời | Chưa xong nghiệm thu model | Thực hiện câu hỏi tối thiểu, ghi lỗi đầy đủ, đừng viết "chạy được" |
403: Xem request thực sự đánh vào đâu
Lỗi lúc đó là:
Failed to connect to api.anthropic.com: Status 403
Chia làm ba lớp đọc:
Status 403— request đã gửi đi, cũng nhận phản hồi, là server từ chối rõ ràng. Nếu mạng không thông, bạn sẽ thấy timeout hoặc DNS fail, không cho mã HTTP.- Tên host là
api.anthropic.com— đây là thông tin đắt giá nhất cả dòng. Bạn đã cấu hình Crazyrouter, request lại còn đánh domain chính chủ, chứng tỏ client hoàn toàn không nhận cấu hình bạn điền. - Kết hợp kết luận "version bình thường" ở trước, vấn đề không ở cài đặt, mà ở request đi đâu, dùng credentials gì.
Vậy thứ tự đúng là: xác nhận request đánh vào đâu trước, rồi mới bàn tại sao bị từ chối. Lộn ngược, bạn sẽ như tôi, điều chỉnh tham số trong kịch bản không hề xảy ra.
Nếu bạn định đi Crazyrouter nhưng request vẫn chỉ host khác, hãy kiểm tra theo thứ tự:
- File cấu hình user có thực sự nằm trong thư mục Windows account hiện tại không.
settings.jsoncó parse được, Base URL có gõ sai không.CLAUDE_CONFIG_DIRcó thay đổi thư mục cấu hình không.- Có còn trong session cũ, chưa restart không.
- Dưới dự án hiện tại có
.claude/settings.jsonhoặc.claude/settings.local.jsonưu tiên cao hơn ghi đè không. - Tham số khởi động, biến môi trường, trạng thái đăng nhập chính chủ hoặc CC Switch có ảnh hưởng route xác thực thực tế không.
Đồng thời phân biệt request model và request phụ như đăng nhập, cập nhật. Trong lỗi xuất hiện domain chính chủ không nhất định nghĩa mọi request model đều bỏ qua Base URL bạn điền.
Nếu 403 đến từ Crazyrouter, hãy tra response body lần đó, hạn Key, hạn mức, giới hạn model và log sử dụng. Giữ request ID trong lỗi, hữu dụng hơn nhiều so với chỉ gửi một ảnh "403". Đừng gửi Key thật ra ngoài.
ConnectionRefused: Tra kết nối, đừng vội đổi Key
Nếu lỗi chỉ vào một port của 127.0.0.1 hoặc localhost, thường là chương trình đang kết nối proxy local, nhưng port đó không có service lắng nghe.
Ví dụ port trong lỗi bạn là 7890 (chỉ là ví dụ, hãy dùng port thật trong lỗi của bạn), mới kiểm tra:
Test-NetConnection 127.0.0.1 -Port 7890
TcpTestSucceeded=False nghĩa là TCP này không thiết lập được, nó còn chưa chạm tới dịch vụ remote, tất nhiên không thể dùng để chứng minh Key có vấn đề.
Nếu xác nhận kết nối hiện tại không cần proxy, có thể trong một cửa sổ PowerShell tạm xóa biến proxy mà process kế thừa rồi test:
Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:ALL_PROXY -ErrorAction SilentlyContinue
Lệnh này chỉ xóa ba biến trong process hiện tại, không sửa biến môi trường Windows vĩnh viễn, cũng không tự xóa proxy riêng trong settings.json. Môi trường phụ thuộc proxy lên mạng đừng bê nguyên xi.
Có thể tiện thể xem port 443 của cổng:
Test-NetConnection cn.crazyrouter.com -Port 443
Lệnh này chỉ phán đoán tính thông suốt TCP, không xác thực TLS, Key, quyền model hay kết quả sinh. Port thông rồi bạn vẫn phải quay lại làm câu hỏi tối thiểu.
Model hiện hữu nhưng request vẫn fail
Trước hết xác nhận bạn dùng ID chính xác, và phù hợp giao thức hiện tại. Sau đó xem response body và log nền tảng, phân biệt là quyền model, số dư, giới hạn tốc độ, kênh không dùng được hay lỗi tham số.
Đừng vì /v1/models từng xuất hiện một cái tên mà viết "model này đã thực測 (thực đo) hỗ trợ Claude Code". Danh sách model, response interface Messages, vận hành thực tế Claude Code là ba tầng bằng chứng khác nhau.
Phần 5: Bản ghi thực đo lần này
Toàn bộ bước trên chạy xong trên máy, dưới đây là dữ liệu thực lấy ngày 28 tháng 9 năm 2026.
| Hạng mục kiểm tra | Kết quả lần này |
|---|---|
| Hệ điều hành | Windows 10 |
| Terminal | Windows PowerShell |
| Node.js | v22.22.2 |
| npm | 10.9.7 |
| Claude Code | 2.1.281 |
| Base URL | https://cn.crazyrouter.com |
| Đọc cấu hình | settings.json parse được, ANTHROPIC_AUTH_TOKEN đã sẵn sàng, không trộn ANTHROPIC_API_KEY |
GET /v1/models |
HTTP 200, trả về 161 ID model, model chọn có trong danh sách |
POST /v1/messages |
HTTP 200, nội dung trả về OK, stop_reason là end_turn |
| Response ID trả về | msg_011CfVJqbN2DVuqoYqgLcdNE |
| Lượng token | Input 18, output 4 |
| Thời gian khứ hồi (gọi trực tiếp interface) | 11569 ms |
| Gọi từ client Claude Code | exit code 0, is_error=false, subtype=success, trả về OK |
| Thời gian client | 5103 ms |
| Session ID | a7a76f08-fa36-4a36-8787-3f2b24dad626 |
Lần test này dùng cách ly: thư mục cấu hình tạm, credentials chỉ truyền qua process environment, không echo ra màn hình. Vậy nó xác thực "cấu hình này hiện tại thông", không phải "cấu hình thường ngày của bạn chắc chắn không vấn đề".
Request body dùng cho kiểm tra interface tối thiểu:
{
"model": "claude-fable-5-1",
"max_tokens": 32,
"messages": [
{
"role": "user",
"content": "Reply with exactly OK."
}
]
}
Interface dự định gọi là POST https://cn.crazyrouter.com/v1/messages. Đoạn JSON này là HTTP request body, đừng lưu thành settings.json, cũng đừng dán thẳng vào PowerShell thực thi.
Về giới hạn kết luận, tôi muốn nói rõ thêm:
- Lần này lấy được một câu trả lời model hoàn chỉnh, nó chứng minh request tối thiểu lần đó thành công.
- Một lần thành công không đồng nghĩa ổn định lâu dài, cũng không đồng nghĩa mọi model đều dùng được, task dự án lớn chắc chắn hoàn thành.
- Model ID và giá sẽ thay đổi theo kênh và cấu hình nền tảng, lấy theo
/v1/modelsvà console của bạn lúc tra cứu. - Bài này ghi lại model ID tra được lần đó, không đại diện danh tính model thật sau nền tảng.
Câu hỏi thường gặp
1. Cài Claude Code có nhất thiết phải cài Node.js trước không?
Chưa chắc. Cài native chính chủ hiện tại không yêu cầu cài Node.js trước; chỉ tuyến dự phòng npm của bài này mới cần, và phải thỏa mãn yêu cầu version của gói npm hiện tại (Node.js 22+).
2. Tại sao trong PowerShell phải viết npm.cmd và claude.cmd?
Cài npm trên Windows kèm theo wrapper lệnh. Viết rõ .cmd tránh PowerShell ưu tiên chọn .ps1 mà vướng giới hạn execution policy. Cài native chưa chắc có claude.cmd, dùng claude là được.
3. claude --version có version rồi là thông chưa?
Chưa. Nó chỉ chứng minh CLI trên máy chạy được. Thật sự thông cần có câu trả lời hoàn chỉnh của model, tốt nhất về console đối chiếu log. Ảnh 403 đầu bài, version vẫn bình thường.
4. Mật khẩu tài khoản Crazyrouter dùng làm API Key được không?
Không được. Mật khẩu để đăng nhập web, API Key phải tạo riêng trong console. Hạn hiệu lực, hạn mức và giới hạn model cũng phải kiểm tra riêng.
5. Base URL của Claude Code có cần thêm /v1 không?
Cấu hình bài này điền root address https://cn.crazyrouter.com, không điền /v1 hay /v1/messages vào. Claude Code tự ghép, điểm này ngược với client tương thích OpenAI, đừng bê nguyên xi.
6. Tại sao dùng ANTHROPIC_AUTH_TOKEN, không phải ANTHROPIC_API_KEY?
Hai biến gửi header khác nhau (Authorization: Bearer so với x-api-key). Điền ANTHROPIC_API_KEY sẽ đi logic xác thực chính chủ, ANTHROPIC_BASE_URL kéo không được nó, kết quả là cấu hình nhìn đúng, request vẫn đánh domain chính chủ, tiếp tục 403.
7. Tại sao JSON không thể dán thẳng vào PowerShell?
PowerShell thực thi lệnh, JSON là nội dung file. Dán vào sẽ ra ParserError, chỉ vào dấu hai chấm báo UnexpectedToken — không phải cấu hình sai, mà là vị trí sai.
8. 403 và ConnectionRefused khác gì?
403 là request đã đến server và bị từ chối; ConnectionRefused là giai đoạn kết nối đã thất bại, thường tra phần mềm proxy và lắng nghe port trước, đừng coi là lỗi Key.
9. Sau khi lưu cấu hình có cần restart máy không?
Thông thường thoát và khởi động lại Claude Code là đủ; khi sửa PATH hoặc biến môi trường user Windows thì mở lại terminal. Không cần thiết đưa restart máy thành bước đầu.
10. Nhận một OK là ổn định lâu dài chưa?
Chưa. Một câu trả lời hoàn chỉnh chỉ chứng minh request tối thiểu lần đó thành công, không đại diện ổn định lâu dài, toàn bộ model khả dụng. Giá cũng vậy, lấy theo log gọi của chính bạn.
Lời kết
Lần đầu cài Claude Code, hãy bẻ mục tiêu thành vài lần nghiệm thu rõ ràng:
Version bình thường → tài khoản và Key Crazyrouter sẵn sàng → JSON parse được → chọn được model phù hợp → nhận câu trả lời hoàn chỉnh → log backend khớp.
Bước trước chưa qua thì dừng ở bước đó xử lý:
- Version đã bình thường, đừng vì 403 mà cài lại npm nhiều lần;
- Kết nối bị từ chối, xem host và port trong lỗi trước;
- Request vẫn đánh domain chính chủ, quay lại tra biến xác thực và độ ưu tiên cấu hình;
- Chưa có câu trả lời model, đừng gọi "vào giao diện chính" là chạy được.
Chạy xong câu hỏi tối thiểu, rồi bắt đầu từ một file nhỏ, một task nhỏ. Biết mỗi bước đang xác thực điều gì còn hữu dụng hơn việc copy một chuỗi lệnh dài không hiểu, lần sau gặp vấn đề bạn tự định vị được.
Tài liệu tham khảo
- Claude Code Official Setup: tuyến cài đặt, môi trường Windows và yêu cầu version npm
- Claude Code Settings: vị trí cấu hình user, định dạng JSON và quan hệ ghi đè
- Tài liệu Crazyrouter: tài liệu kết nối hiện tại và cách dùng
/v1/models - Đăng ký Crazyrouter: tạo tài khoản và API Key riêng
- Node.js Download: môi trường cần cho tuyến cài npm
- Git for Windows: tuyến cài khi cần Git và Git Bash
Tuyên bố miễn trách nhiệm: Bài viết này là chia sẻ kinh nghiệm cá nhân, không phải tài liệu chính thức. Các dịch vụ bên thứ ba, tên mô hình, giá cả và mô hình khả dụng có thể thay đổi bất cứ lúc nào — vui lòng xác minh trên trang chính thức và bảng điều khiển của bạn. Endpoint API và đường dẫn cấu hình nên tuân theo tài liệu chính thức tại thời điểm bạn tra cứu. Bài viết không chứa nội dung liên kết, hoa hồng hay tài trợ.
All rights reserved