Tài liệu
Jan Agent
Jan Agent không tích hợp công cụ suy luận nên luôn gọi đến endpoint do bạn chỉ định. Một dòng lệnh jan config set ghi cấu hình Kunavo vào ~/.jan/config.toml, để agent dòng lệnh chạy Claude và GPT bằng một khóa duy nhất.
Một dòng `jan config set --base-url https://api.kunavo.com/v1` ghi Kunavo vào ~/.jan/config.toml, và CLI xem trước Jan Agent — không đi kèm engine suy luận — chạy bằng key đó.
# Jan Agent is a preview on a nightly channel — check your build first.
jan --version
jan config set \
--provider kunavo \
--api-key sk-kn-... \
--base-url https://api.kunavo.com/v1 \
--model claude-sonnet-5 \
--model claude-haiku-4-5 \
--api-type openai
jan config list # configured providers as JSON, keys redacted/v1, trên cả hai loại giao thức. Jan chỉ nối route: trang hướng dẫn đóng góp provider cho biết bước đăng nhập “xác thực khóa đối chiếu với GET {base_url}/models”, còn trang providers nói mục đã cấu hình sẽ được truy vấn để lấy GET /models khi bạn mở /model lần đầu trong một phiên. Mọi base URL trong tài liệu đó đều kết thúc bằng /v1 — kể cả URL Anthropic trong ví dụ jan cli models list. Vì vậy, --api-type anthropic cũng dùng https://api.kunavo.com/v1, ngược với Claude Code và các SDK Anthropic chính thức, nơi cùng hậu tố đó tạo ra /v1/v1/messages và lỗi 404. Nếu lỗi hiển thị đường dẫn bị lặp, đó là dấu hiệu cho biết bạn đang dùng quy ước nào.dev lấy bản dựng từ kênh agent-nightly — “hãy kỳ vọng chất lượng của bản dựng nightly”. Không có bản phát hành gắn thẻ để trích dẫn, vì vậy hãy chạy jan --version và ghi lại chuỗi đó bên cạnh cấu hình này: các cờ bên dưới được đối chiếu với tài liệu vào ngày ghi ở cuối trang, và bản nightly có thể đổi tên một cờ. Bản dựng từ mã nguồn (scripts/install-jan-agent.sh --source) không tự cập nhật; đây là một cách để cố định phiên bản.jan config unset --provider kunavo là toàn bộ thao tác hoàn tác.<project>/.jan/agent/memory/, chứ không phải kho vector, nên vòng lặp riêng của agent không cần loại mô hình thứ hai.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 Jan Agent.Từng bước
- Tạo khóa tại
/app/keysrồi sao chép khóa — khóa chỉ hiển thị một lần. - Kiểm tra bạn đang cấu hình đúng chương trình:
jan --version. Jan Desktop cũng có một CLI được gọi bằngjan, nhưng bộ lệnh khác; vì vậy hãy xác nhậnjan config set --helpliệt kê--base-urltrước khi nhập phần còn lại. - Chạy dòng lệnh
jan config setở trên.--providerlà ID do bạn chọn, không phải tên trong một danh sách cố định — ví dụ về phần cứng cục bộ trong tài liệu dùng--provider local— còn--modelcó thể lặp lại và thay thế danh sách hiện có thay vì thêm vào đó. - Xác nhận cấu hình đã được ghi bằng
jan config list(các khóa được ẩn) hoặcjan config pathđể xem chính tệp, rồi chạyjan cli models listđể xem mọi provider đang cung cấp những gì. ID mô hình nhập thủ công vẫn được giữ lại ngay cả khi endpoint ngừng liệt kê ID đó; cònjan cli models refresh --provider kunavolấy danh sách của endpoint làm nguồn chính xác. - Chuyển vào một dự án rồi chạy
jan, sau đó chọn mô hình bằng/model. Nên dùngjan --plancho lần chạy đầu tiên: chế độ chỉ đọc giúp phát hiện lỗi không khớp giao thức trước khi có nội dung nào được ghi vào đĩa. - Giao cho nó một tác vụ chỉnh sửa tệp. Jan Agent là một agent, vì vậy lần chạy đầu tiên nên kiểm tra khả năng gọi công cụ và truyền phát — đây là những phần có thể lỗi trước tiên nếu endpoint chỉ tương thích một phần; còn lời chào hỏi thì không kiểm tra được cả hai.
Đã kiểm tra đối chiếu với Trang Providers của Jan Agent 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 Jan Agent.
# 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 Jan Agent |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | mô hình làm việc mặc định — ID cần đặt đầu tiên sau --model |
claude-opus-5 | $3.50 / $17.50 | một gói sẽ tốn kém nếu chọn sai; kết hợp với jan --plan |
claude-haiku-4-5 | $0.70 / $3.50 | các lượt gọi chi phí thấp: phân loại, tóm tắt và vòng lặp chạy cả ngày |
gpt-5-6-sol | $2.00 / $12.00 | ý kiến thứ hai từ một họ model khác, dùng cùng khóa và URL cơ sở |
gpt-5-6-terra | $0.70 / $4.20 | đọc tài liệu ngữ cảnh dài, vẫn dùng api-type openai |
Có hai thứ khác nhau cùng được gọi là khóa API Jan
Chúng nằm trong cùng một tệp nhưng có ý nghĩa trái ngược nhau; vì thế jan config list có thể trông sai nếu bạn đang mong đợi loại kia.
| Nội dung | Nguồn lấy khóa | Khóa xác thực điều gì |
|---|---|---|
jan login | Đăng nhập vào Tokamak, backend tự lưu trữ, từ shell hoặc bằng /login trong bảng điều khiển | Bản triển khai Tokamak của riêng bạn. Jan Agent ghi khóa nhận được vào ~/ |
jan config set --api-key | Thông tin xác thực bạn đang có cho một endpoint — ở đây là khóa sk-kn- của Kunavo | Endpoint đó, được tính phí theo từng yêu cầu. Đây là hàng mục mà trang này đề cập |
Jan Desktop không cấp ra cả hai loại: ứng dụng không có tài khoản nên không có gì để tạo. Máy chủ API cục bộ của ứng dụng nhận khóa do bạn tự nghĩ ra, đó lại là ý nghĩa thứ ba và thuộc về một máy chủ khác.
Jan Desktop cung cấp những gì và giới hạn ở đâu
Jan Agent đọc cài đặt nhà cung cấp từ bốn nguồn, mỗi nguồn có mức ưu tiên cao hơn các nguồn đứng trước; nguồn thứ hai là điều khiến nhiều người bất ngờ.
~/.jan/config.toml— tệp cơ sở và là tệp duy nhất đượcjan config setghi.settings.jsoncủa Jan Desktop — chỉ kế thừa. Tệp này bổ sung các nhà cung cấp bạn chưa cấu hình trong Agent, không bao giờ ghi đè nhà cung cấp đã có và không bao giờ được ghi ngược lại.- Một khối
[provider]trongagent.tomlcủa dự án — lựa chọn tường minh cho từng dự án nên được ưu tiên hơn cả hai nguồn kia. Tệp đó thường được đưa vào kho mã, vì vậy hãy đểapi_keyngoài tệp. --provider/--api-keytrên dòng lệnh, hoặcJAN_API_KEY/<PROVIDER>_API_KEY— tường minh nhất và chỉ tồn tại tạm thời.
Có hai hệ quả cần biết để tránh gỡ lỗi nhầm chỗ. jan config list có thể báo không có nhà cung cấp nào trong khi jan cli models list trả về nhiều — kết quả thứ hai bao gồm các nhà cung cấp được kế thừa từ Desktop, vốn không được lưu trong ~/.jan/config.toml. Nhà cung cấp được kế thừa cũng không bao giờ được làm mới, vì ở đây không có mục nào để ghi lại: nếu muốn danh sách mô hình của Kunavo luôn được cập nhật, bạn phải tự tạo một mục jan config set, như khối phía trên.
Khi hai nhà cung cấp có cùng model id
Kunavo cung cấp các ID như claude-sonnet-5, và mục nhà cung cấp trỏ thẳng đến nhà cung cấp dịch vụ cũng vậy. Jan Agent phải chọn một mục; thứ tự được tài liệu nêu như sau: trước tiên là kết quả khớp chính xác trong danh sách models của nhà cung cấp, tiếp theo là tiền tố <provider>/<model> chỉ định nhà cung cấp đã cấu hình; nếu nhiều nhà cung cấp có cùng ID, nhà cung cấp có thông tin xác thực được ưu tiên hơn bản sao không có khóa. Vì vậy, kunavo/claude-sonnet-5 dùng để chỉ rõ bạn muốn chọn nhà cung cấp nào. Phần định danh bổ sung này chỉ dành cho Jan — nó được loại bỏ trước khi gửi yêu cầu vì các dịch vụ upstream từ chối ID có tiền tố nhà cung cấp.
Cùng mục cấu hình đó, ngay trong bảng điều khiển
Nếu bạn không muốn nhập cờ dòng lệnh: /settings > providers quản lý cùng các mục ~/.jan/config.toml, còn a mở biểu mẫu thêm mới với các trường name, base url, api key và models phân tách bằng dấu cách. Biểu mẫu có hai điểm khác với cờ dòng lệnh: URL cơ sở phải là https:// (hoặc http:// đối với endpoint localhost), để khóa không bao giờ được gửi qua kết nối từ xa dạng văn bản thuần — Kunavo là https://, nên điều này không gây trở ngại — và khi chỉnh sửa, trường khóa API hiển thị (unchanged) và giữ nguyên giá trị đã lưu trừ khi bạn nhập giá trị mới. Để trống trường đó sẽ xóa khóa, chứ không giữ nguyên.
Câu hỏi thường gặp
Làm cách nào để trỏ Jan Agent đến một endpoint API tùy chỉnh?
Chỉ với một lệnh: jan config set --provider <id> --api-key <key> --base-url <url> --model <model> --api-type openai. Bạn tự chọn provider id, không cần chọn từ danh sách cố định; có thể lặp lại --model và lệnh này sẽ thay thế toàn bộ danh sách hiện có. --api-type mặc định là tương thích với OpenAI, nên có thể bỏ qua với endpoint có định dạng OpenAI. Mục cấu hình được ghi vào ~/.jan/config.toml; bạn cũng có thể chỉnh sửa tệp này trong bảng điều khiển qua /settings > providers. Trang hướng dẫn tự đóng góp nhà cung cấp của Jan nêu rõ endpoint tương thích OpenAI thông thường không cần viết mã, chỉ cần cấu hình tại đây.
URL cơ sở của Jan Agent có cần kết thúc bằng /v1 không?
Có, và kiểu giao thức Anthropic cũng vậy. Jan chỉ nối thêm đường dẫn: trang hướng dẫn đóng góp nhà cung cấp cho biết quá trình đăng nhập xác thực khóa bằng GET {base_url}/models; trang nhà cung cấp cho biết mục đã cấu hình sẽ được truy vấn bằng GET /models khi bạn mở /model lần đầu trong một phiên. Vì đường dẫn được nối thêm là /models chứ không phải /v1/models, URL cơ sở đã lưu phải là gốc /v1 — với Kunavo là https://api.kunavo.com/v1. Mọi URL cơ sở trong tài liệu Jan đều kết thúc theo cách này, kể cả mục Anthropic trong ví dụ jan cli models list. Điều này trái ngược với Claude Code và các SDK Anthropic chính thức, nơi việc thêm /v1 sẽ tạo thành /v1/v1/messages và trả về lỗi 404.
jan login khác gì với jan config set --api-key?
Hai lệnh xác thực những thứ khác nhau. jan login đăng nhập vào Tokamak, backend tự lưu trữ, rồi lưu khóa nhận được vào ~/.jan/config.toml — đây là đăng nhập vào bản triển khai của riêng bạn. jan config set --api-key lưu thông tin xác thực bạn đã có cho một endpoint; đây là cách dùng nhà cung cấp bên thứ ba như Kunavo. Bản thân Jan Desktop không cấp ra khóa nào vì không có tài khoản để cấp khóa; khóa mà máy chủ API cục bộ yêu cầu là chuỗi do bạn tự nghĩ ra, lại là ý nghĩa thứ ba của cụm từ này.
Vì sao jan config list không hiển thị gì trong khi jan cli models list có các mô hình?
Vì hai lệnh đọc các tập hợp khác nhau. jan config list chỉ báo những gì được lưu trong ~/.jan/config.toml, còn jan cli models list cũng bao gồm các nhà cung cấp được kế thừa từ Jan Desktop, vốn không được lưu ở đó. Tài liệu Jan nêu rõ điều này. Hệ quả thực tế là nhà cung cấp được kế thừa không bao giờ được làm mới — không có mục nào để ghi lại — vì vậy, nếu muốn danh sách mô hình của nhà cung cấp luôn được cập nhật, trước tiên hãy thêm nhà cung cấp bằng jan config set.
Jan Agent có thể chạy các mô hình Claude mà không cần tài khoản Anthropic không?
Có. Jan Agent không tích hợp công cụ suy luận, nên mô hình luôn chạy tại endpoint bạn cấu hình; --api-type chỉ định giao thức truyền dữ liệu, không phải nhà cung cấp. Claude ID được phân giải tại URL cơ sở bạn thiết lập, nghĩa là thông tin xác thực bạn cần là của endpoint đó. Kunavo cung cấp các ID Claude và GPT qua giao diện tương thích OpenAI bằng một khóa duy nhất. Cấu hình này được công bố dựa trên tài liệu riêng của Jan, không phải thử nghiệm trên ứng dụng; Jan Agent cũng đang ở giai đoạn xem trước trên kênh nightly, vì vậy hãy kiểm tra phiên bản bằng jan --version để xác định các cờ này có đúng với bản bạn dùng hay không.
Jan Agent trả về lỗi 404 cho mọi yêu cầu. Có vấn đề gì?
Gần như luôn là do URL cơ sở. Thiếu /v1 khiến Jan gửi yêu cầu /models và /chat/completions đến máy chủ gốc, dẫn đến lỗi 404 thay vì lỗi xác thực; nếu đường dẫn trong lỗi có /v1 bị lặp thành /v1/v1 thì hậu tố đã được thêm vào URL cơ sở vốn đã có hậu tố đó. Trước tiên, hãy kiểm tra bên ngoài ứng dụng bằng cách gọi GET /v1/models trên endpoint qua curl thông thường với cùng khóa: nếu nhận được JSON, endpoint và khóa đều ổn, vấn đề nằm ở mục cấu hình; lỗi 401 là do khóa, lỗi 404 là do URL. Sau đó kiểm tra đường dẫn cấu hình bằng jan config path và đọc trực tiếp giá trị base_url đã lưu.