Tài liệu

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 config set — ghi vào ~/.jan/config.toml
# 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
Base URL giữ nguyên /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.
Jan Agent đang ở giai đoạn xem trước và chính tài liệu cũng nêu rõ điều đó. Hướng dẫn bắt đầu nhanh cảnh báo rằng trình cài đặt tại 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.
Cấu hình này được đối chiếu với tài liệu chính thức của Jan. Kunavo chưa chạy Jan Agent với endpoint của mình — chưa chạy phiên, lượt truyền phát hay vòng khứ hồi gọi công cụ; điều này cũng đúng với mọi client thuộc nhóm này. Trang hướng dẫn thiết lập đã công bố không phải là bài kiểm thử tương thích. Hãy giữ sẵn tuyến đang hoạt động trong lúc thử tuyến này, và nhớ rằng jan config unset --provider kunavo là toàn bộ thao tác hoàn tác.
Kunavo không cung cấp mô hình nhúng, chuyển văn bản thành giọng nói hoặc chuyển giọng nói thành văn bản, vì vậy mục provider Kunavo chỉ phản hồi chat. Jan Agent không cần thêm gì: bộ nhớ của nó là các tệp thông thường trong <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.
Chưa có khóa? Tạo tài khoản Kunavo, tạo khóa (bắt đầu bằng 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

  1. Tạo khóa tại /app/keys rồi sao chép khóa — khóa chỉ hiển thị một lần.
  2. 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ằng jan, nhưng bộ lệnh khác; vì vậy hãy xác nhận jan config set --help liệt kê --base-url trước khi nhập phần còn lại.
  3. Chạy dòng lệnh jan config set ở trên. --provider là 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 --model có thể lặp lại và thay thế danh sách hiện có thay vì thêm vào đó.
  4. Xác nhận cấu hình đã được ghi bằng jan config list (các khóa được ẩn) hoặc jan config path để xem chính tệp, rồi chạy jan 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òn jan cli models refresh --provider kunavo lấy danh sách của endpoint làm nguồn chính xác.
  5. 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ùng jan --plan cho 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.
  6. 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.

Đây là phiên bản ngắn. Hướng dẫn đầy đủ — lựa chọn mô hình, chi phí của một phiên thực tế và các trường hợp lỗi — nằm trong hướng dẫn về mô hình Jan và chi phí API, cũng bao gồm Jan Desktop.

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ìnhKunavo vào / raPhù hợp ở đâu trong Jan Agent
claude-sonnet-5$1.40 / $7.00mô hình làm việc mặc định — ID cần đặt đầu tiên sau --model
claude-opus-5$3.50 / $17.50mộ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.50cá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
Thanh toán theo token từ số dư trả trước, không có phí hàng tháng — xem trang Thanh toán. Với ngữ cảnh lặp lại — chiếm phần lớn dữ liệu mà trình chỉnh sửa hoặc ứng dụng trò chuyện gửi đi — bộ nhớ đệm prompt ảnh hưởng đến hóa đơn nhiều hơn lựa chọn mô hình.

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 dungNguồn lấy khóaKhó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ểnBản triển khai Tokamak của riêng bạn. Jan Agent ghi khóa nhận được vào ~/.jan/config.toml thay bạn
jan config set --api-keyThông tin xác thực bạn đang có cho một endpoint — ở đây là khóa sk-kn- của KunavoEndpoint đó, đượ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ờ.

  1. ~/.jan/config.toml — tệp cơ sở và là tệp duy nhất được jan config set ghi.
  2. settings.json củ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.
  3. Một khối [provider] trong agent.toml củ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_key ngoài tệp.
  4. --provider / --api-key trên dòng lệnh, hoặc JAN_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.