Tài liệu
Junie CLI
Junie CLI nhận endpoint tùy chỉnh dưới dạng tệp JSON, không phải qua màn hình cài đặt. Chín dòng trong $JUNIE_HOME/models/kunavo.json cùng lệnh junie --model custom:kunavo giúp chạy Claude và GPT bằng một khóa duy nhất — đồng thời chuyển lưu lượng của các tác vụ phụ sang một endpoint rẻ hơn.
Junie CLI nhận endpoint tùy chỉnh dưới dạng profile JSON trong $JUNIE_HOME/models/, trong đó baseUrl là URL endpoint đầy đủ và fasterModel quyết định nơi lưu lượng phụ trợ đi qua.
{
"id": "claude-sonnet-5",
"baseUrl": "https://api.kunavo.com/v1/chat/completions",
"displayName": "Kunavo",
"providerName": "Kunavo",
"apiType": "OpenAICompletion",
"apiKey": "${KUNAVO_API_KEY}",
"fasterModel": {
"id": "claude-haiku-4-5"
}
}baseUrl là endpoint hoàn chỉnh, bao gồm cả đường dẫn. JetBrains nêu rõ: “baseUrl được dùng làm URL endpoint hoàn chỉnh — Junie không nối thêm đường dẫn nào vào đó”, đồng thời hướng dẫn bạn “đặt giá trị này thành endpoint đầy đủ cho apiType đã chọn”. Vì vậy, trường này không phải máy chủ gốc, cũng không phải gốc /v1 mà hầu hết ứng dụng cần — mà là https://api.kunavo.com/v1/chat/completions. Dừng ở https://api.kunavo.com/v1 là nguyên nhân có khả năng cao nhất gây lỗi 404 dù hồ sơ đã được cấu hình đúng các mục khác.apiKey và extraHeaders chấp nhận tham chiếu ${VAR_NAME}, và JetBrains mô tả chính xác lỗi này: “Nếu biến môi trường được tham chiếu chưa được đặt, hồ sơ sẽ không tải được và Junie báo lỗi cho biết biến còn thiếu.” Hãy export KUNAVO_API_KEY trước khi khởi động Junie — hồ sơ được đọc lúc tải chứ không phải khi gửi yêu cầu đầu tiên, vì vậy nếu shell không còn biến đã export, hồ sơ sẽ biến mất khỏi /model thay vì trả về lỗi 401.fasterModel là nơi Junie gửi các tác vụ bạn không yêu cầu. JetBrains mô tả đây là “Mô hình dùng cho các tác vụ trợ giúp nội bộ như tóm tắt ngữ cảnh hoặc phân loại tác vụ”, đồng thời cho biết nếu không khai báo tường minh primaryModel hoặc fasterModel thì chúng “kế thừa các thuộc tính cấp cao nhất”. Do đó, hồ sơ không có khối fasterModel sẽ tính phí các tác vụ duy trì nội bộ theo mức giá của mô hình chính. Dòng ghi đè bên trên là toàn bộ cách khắc phục; đó là lý do khối này nằm trong cấu hình tối thiểu chứ không phải phần phụ lục.curl bên dưới là điều bạn có thể tự xác minh trong mười giây; còn cách Junie hoạt động trên đó là việc giữa bạn và JetBrains.sk-kn-) và nạp tín dụng từ $10 — các lệnh gọi được thanh toán từ số dư đó và các lệnh gọi thất bại không bị tính phí. Sau đó, bảng điều khiển mở tại phần thiết lập Junie CLI.Từng bước
- Tạo khóa tại
/app/keysrồi sao chép — khóa chỉ hiển thị một lần. Export khóa dưới dạngKUNAVO_API_KEYtrong shell bạn sẽ dùng để khởi động Junie, hoặc ghi trực tiếp khóa vào tệp; JetBrains lưu ý rằng “Các giá trị không có tham chiếu${...}nào sẽ được dùng nguyên trạng”. - Lưu JSON bên trên dưới dạng
$JUNIE_HOME/models/kunavo.jsoncho tài khoản của bạn, hoặc.junie/models/kunavo.jsonđể chia sẻ với một kho mã. Tên tệp bỏ phần.jsonsẽ trở thành profile id — nhờ vậy bộ chọn bên dưới hiển thịcustom:kunavo. - Đặt
idthành model id bạn thực sự muốn dùng. Tài liệu mô tả đây là “Định danh mô hình theo yêu cầu của endpoint API”, vì vậy có thể nhập trực tiếp slug Kunavo trong bảng bên dưới; ID được phân giải tại endpoint chứ không phải trong Junie. - Khởi động Junie rồi chọn hồ sơ:
junie --model custom:kunavo, hoặc dùng lệnh/modeltrong phiên tương tác. “Các mô hình tùy chỉnh xuất hiện trong danh sách chọn mô hình sau các nhà cung cấp tích hợp sẵn”. - Giao cho Junie một tác vụ chỉnh sửa tệp thay vì chỉ chào hỏi. Junie là ứng dụng khách dạng agent và dựa vào việc gọi công cụ cho hầu hết mọi thao tác, nên lần chạy đầu tiên đọc và ghi một thứ gì đó sẽ cho bạn biết nhiều hơn một phản hồi đơn lẻ.
Đã kiểm tra đối chiếu với Trang Custom LLMs của JetBrains dành cho Junie vào 21 tháng 9, 2026. Cài đặt của bên thứ ba có thể thay đổi; nếu tên trường ở đây không còn khớp với những gì bạn thấy, trang đó là nguồn có thẩm quyền, không phải trang này.
Xác minh trước khi gỡ lỗi ứng dụng khách
Một yêu cầu sẽ xác định liệu lỗi nằm ở endpoint, khóa hay tệp cấu hình. Nếu lệnh này trả về JSON, cùng base URL và khóa sẽ hoạt động trong Junie CLI.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."Đặt model id nào vào trường
Mọi mô hình văn bản đều có thể truy cập bằng model id — danh sách đang hoạt động là GET /v1/models, còn danh mục kèm giá nằm trên trang mô hình. Mức giá tính bằng USD trên mỗi 1M token, đầu vào / đầu ra.
| ID mô hình | Kunavo vào / ra | Phù hợp ở đâu trong Junie CLI |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | primaryModel cho công việc thông thường — các tác vụ chỉnh sửa tệp |
claude-opus-5 | $3.50 / $17.50 | một kế hoạch mà nếu sai sẽ tốn kém, được ghim theo từng phiên |
claude-haiku-4-5 | $0.70 / $3.50 | vai trò fasterModel: tóm tắt ngữ cảnh, phân loại tác vụ |
gpt-5-6-sol | $2.00 / $12.00 | ý kiến thứ hai từ một họ mô hình khác — hồ sơ thứ hai, cùng một khóa |
Hai giá trị apiType còn lại mà Kunavo hỗ trợ
apiType chỉ định định dạng yêu cầu, không phải nhà cung cấp; Junie chấp nhận bốn giá trị: OpenAICompletion, OpenAIResponses, Google và Anthropic. Kunavo cung cấp ba tuyến, nên hai trong số ba giá trị còn lại có tuyến baseUrl tương ứng — và vì Junie không nối thêm đường dẫn nào, đổi định dạng cũng đồng nghĩa phải đổi URL trong cùng lần chỉnh sửa:
"apiType": "OpenAICompletion"vớihttps://api.kunavo.com/v1/chat/completions— hồ sơ bên trên và lựa chọn được trang này đề xuất vì đây là tuyến được sử dụng rộng rãi nhất trong ba tuyến."apiType": "Anthropic"vớihttps://api.kunavo.com/v1/messages— Kunavo hỗ trợ định dạng Messages tại đường dẫn đó."apiType": "OpenAIResponses"vớihttps://api.kunavo.com/v1/responses.
Xác định trong ba cách Junie hoạt động, cách nào phù hợp nhất với từng mô hình là câu hỏi cần thử nghiệm khi chạy, không thể trả lời chỉ bằng cách đọc tài liệu; vì vậy trang này không xếp hạng chúng ngoài lựa chọn nêu ở dòng đầu. Hãy chọn một cách, giữ URL và apiType đồng bộ; nếu hồ sơ dùng khóa trả về lỗi 401, hãy chỉ định thông tin xác thực rõ ràng thay vì đoán header của Junie: JetBrains chỉ mô tả apiKey theo hướng phủ định — “Nếu bị lược bỏ, yêu cầu sẽ được gửi mà không có header Authorization” — và không bao giờ nêu cách thức được dùng khi có khai báo. extraHeaders được mô tả là “các header HTTP bổ sung cần đưa vào mọi yêu cầu” và chấp nhận cùng kiểu tham chiếu ${VAR}, vì vậy dùng "extraHeaders": {"Authorization": "Bearer ${KUNAVO_API_KEY}"} là cách khai báo tường minh nhất.
Câu hỏi thường gặp
Làm thế nào để thêm nhà cung cấp tùy chỉnh vào Junie CLI?
Junie CLI đọc các nhà cung cấp tùy chỉnh từ hồ sơ JSON thay vì từ màn hình cài đặt. Đặt tệp vào $JUNIE_HOME/models/ cho tài khoản hoặc .junie/models/ trong dự án; tên tệp bỏ phần mở rộng .json sẽ trở thành profile id. Các khóa bắt buộc là id, baseUrl và apiType; apiKey, displayName, providerName, extraHeaders, extraBody, temperature, maxContextLength, primaryModel và fasterModel là tùy chọn. Sau đó chọn hồ sơ bằng `junie --model custom:<id>` hoặc lệnh /model — các mô hình tùy chỉnh xuất hiện trong danh sách sau các nhà cung cấp tích hợp sẵn.
baseUrl của Junie CLI cần /v1 hay toàn bộ đường dẫn?
Toàn bộ đường dẫn. JetBrains nêu rằng baseUrl được dùng làm URL endpoint hoàn chỉnh và Junie không nối thêm đường dẫn nào, đồng thời hướng dẫn đặt giá trị này thành endpoint đầy đủ cho apiType đã chọn. Với hồ sơ OpenAICompletion dùng Kunavo, đó là https://api.kunavo.com/v1/chat/completions — không phải máy chủ gốc hay gốc /v1 mà các ứng dụng như Kilo Code cần. Cả hai hồ sơ ví dụ trong tài liệu riêng của JetBrains đều có đường dẫn đầy đủ vì lý do đó.
Vì sao Junie báo hồ sơ không tải được do thiếu biến môi trường?
Vì giá trị apiKey và extraHeaders hỗ trợ tham chiếu ${VAR_NAME}, và JetBrains ghi rõ rằng nếu biến môi trường được tham chiếu chưa được đặt, hồ sơ sẽ không tải được và Junie báo lỗi nêu tên biến còn thiếu. Việc phân giải diễn ra khi hồ sơ được tải, nên dấu hiệu là hồ sơ biến mất khỏi danh sách mô hình chứ không phải yêu cầu thất bại. Hãy export biến trước khi khởi động Junie hoặc thay tham chiếu bằng giá trị cụ thể.
Junie CLI có thể dùng khóa BYOK riêng với gateway như Kunavo không?
Màn hình BYOK và hồ sơ tùy chỉnh là hai cách riêng biệt. Trang BYOK của JetBrains hướng dẫn kết nối một nhà cung cấp có tên — OpenAI, Anthropic, Google, xAI, OpenRouter hoặc GitHub Copilot — qua /account hoặc mục “Use your own API key” trên màn hình chào mừng, đồng thời nêu rằng mọi mức sử dụng đều do nhà cung cấp tính phí và không cần đăng ký JetBrains AI. Endpoint không có trong danh sách đó, bao gồm Kunavo, được thêm dưới dạng hồ sơ LLM tùy chỉnh; đó là tệp JSON trên trang này. Dùng khóa của riêng bạn là khả năng của Junie CLI: tài liệu plugin của JetBrains nêu rõ tính năng này không được hỗ trợ qua plugin Junie.
Vì sao Junie gọi một mô hình mà tôi không chọn?
Junie chia hồ sơ thành hai vai trò; fasterModel được mô tả là mô hình dùng cho các tác vụ trợ giúp nội bộ như tóm tắt ngữ cảnh hoặc phân loại tác vụ. Nếu bạn không định nghĩa khối đó, JetBrains cho biết các vai trò sẽ kế thừa thuộc tính cấp cao nhất — vì vậy lưu lượng trợ giúp chạy trên mô hình chính và bị tính phí theo mức giá của mô hình đó. Đặt fasterModel.id thành một ID rẻ hơn, như trong hồ sơ trên trang này, là cách xử lý; baseUrl, apiType và apiKey cấp cao nhất được cả hai vai trò kế thừa nên chỉ cần đổi ID.
Kunavo đã thử nghiệm Junie CLI chưa?
Chưa. Nội dung được kiểm tra vào ngày 21 tháng 9 năm 2026 là tài liệu Custom LLMs của JetBrains — tên trường, thứ tự, các giá trị apiType được chấp nhận và quy tắc endpoint đầy đủ đều được trích từ tài liệu đó. Kunavo chưa cài Junie CLI, ghim phiên bản hay gửi yêu cầu qua ứng dụng, và không đưa ra khẳng định nào ở đây về truyền phát, vòng gọi công cụ hoặc định tuyến mô hình bên trong ứng dụng. Điều duy nhất bạn có thể tự kiểm tra riêng là endpoint và khóa có hoạt động hay không; lệnh curl trên trang này giúp bạn thực hiện việc đó.