文档
Jan Agent
Jan Agent 不附带推理引擎,因此始终会调用你指定的端点。一条 jan config set 命令即可将 Kunavo 写入 ~/.jan/config.toml,让终端代理通过一个密钥调用 Claude 和 GPT。
运行一行 `jan config set --base-url https://api.kunavo.com/v1` 即可将 Kunavo 写入 ~/.jan/config.toml,Jan Agent 预览 CLI(不自带推理引擎)会使用该密钥运行。
# 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。 Jan 只会追加路由:contributing-a-provider 页面指出,登录时会“针对 GET {base_url}/models 验证密钥”;providers 页面则指出,会话中首次打开 /model 时,系统会查询已配置条目的 GET /models。这些文档中列出的所有基础 URL 都以 /v1 结尾,包括 jan cli models list 示例中的 Anthropic URL。因此,--api-type anthropic 也需要填写 https://api.kunavo.com/v1,这与 Claude Code 和官方 Anthropic SDK 的做法相反;后两者使用相同后缀会产生 /v1/v1/messages 和 404。错误信息中出现重复路径,就能看出你使用的是哪种规则。dev 上的安装程序会从 agent-nightly 通道获取内容——“请预期其为 nightly 质量的构建版本”。目前没有可引用的带标签版本,因此请运行 jan --version,并将该字符串与此配置一并记录:下方标志根据本页底部日期时的文档整理而成,夜间构建版本可能会更改其中某项。源码构建(scripts/install-jan-agent.sh --source)不会自动更新,这是一种固定版本的方法。jan config unset --provider kunavo 就是全部的撤销操作。<project>/.jan/agent/memory/ 下的普通文件,而非向量存储,因此代理自身的运行流程无需第二种模型。sk-kn- 开头),并充值 $10 起——调用费用从该余额中扣除,失败的调用不会收费。随后,控制台会打开 Jan Agent 设置页面。分步操作
- 在
/app/keys创建密钥并复制——它只会显示一次。 - 先确认你正在配置的程序:
jan --version。Jan Desktop 也附带通过jan调用的 CLI,但命令集不同,因此先确认jan config set --help会列出--base-url,再输入其余内容。 - 运行上面的
jan config set命令。--provider是你自行选择的 ID,而非固定列表中的名称——文档中的本地硬件示例使用--provider local——且--model可重复使用;它会替换任何现有列表,而不是追加条目。 - 使用
jan config list(密钥已隐藏)或jan config path检查文件,确认配置已写入;随后运行jan cli models list查看每个 provider 提供的内容。手动输入的模型 ID 即使端点不再列出它也会保留;而jan cli models refresh --provider kunavo会以端点返回的列表为准。 - 切换到一个项目并运行
jan,然后用/model选择模型。首次运行建议使用jan --plan:它是只读操作,因此协议不匹配会在任何内容写入磁盘之前显现。 - 给它一个需要编辑文件的任务。Jan Agent 是代理,因此首次运行应检验工具调用和流式传输——如果端点仅部分兼容,这两项最先可能出问题,而问候语测试不了其中任何一项。
已于 2026年9月21日 对照 Jan Agent 的 Providers 页面 检查。第三方设置会发生变化;如果这里的字段名称不再与你看到的内容一致,应以该页面为准,而不是本页。
调试客户端前先验证
一个请求即可确定故障来自端点、密钥还是配置文件。如果返回 JSON,则相同的基础 URL 和密钥可以在 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-..."字段中应填写哪个模型 ID
每个文本模型都可通过模型 ID 访问——实时列表见 GET /v1/models,包含价格的目录见模型页面。费率单位为每 1M token 的美元,格式为输入 / 输出。
| 模型 ID | Kunavo 输入 / 输出 | 它在 Jan Agent 中的位置 |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 默认工作模型——填在 --model 后面的首个 ID |
claude-opus-5 | $3.50 / $17.50 | 一个选错代价高昂的计划;将其与 jan --plan 搭配使用 |
claude-haiku-4-5 | $0.70 / $3.50 | 低成本调用:分流、摘要,以及全天运行的循环 |
gpt-5-6-sol | $2.00 / $12.00 | 使用相同密钥和基础 URL,获得来自另一模型系列的第二种意见 |
gpt-5-6-terra | $0.70 / $4.20 | 长上下文阅读,仍使用 openai API 类型 |
两种不同的东西都叫作 Jan API 密钥
它们位于同一个文件中,含义却截然相反,因此如果你预期的是另一种含义,jan config list 看起来就可能不对。
| 什么 | 来源 | 验证对象 |
|---|---|---|
jan login | 从 shell 或通过控制台中的 /login 登录自托管后端 Tokamak | 你自己的 Tokamak 部署。Jan Agent 会将收到的密钥写入 ~/ |
jan config set --api-key | 你已持有的某个端点凭据——此处为 Kunavo 的 sk-kn- 密钥 | 该端点按请求计费。这一行才是本页面讨论的内容 |
Jan Desktop 不会签发上述任何一种密钥:它没有账户,因此无处生成密钥。其本地 API 服务器使用由你自行编造的密钥,这又是第三种含义,适用于另一台主机。
Jan Desktop 会传递哪些内容,以及传递到哪里为止
Jan Agent 会按优先级读取四个 provider 设置来源,后面的来源会覆盖前面的设置;其中第二个来源最容易让人意外。
~/.jan/config.toml——基础配置,也是唯一会由jan config set写入的文件。- Jan Desktop 的
settings.json——仅继承。它会添加你尚未在 Agent 中配置的 provider,不会覆盖已有配置,也不会将设置写回。 - 项目
agent.toml中的[provider]块——这是明确的项目级选择,因此优先级高于前两者。该文件通常会提交到版本库,因此请勿将api_key放入其中。 - 命令行中的
--provider/--api-key或JAN_API_KEY/<PROVIDER>_API_KEY——优先级最高,也最临时。
调试之前,有两个后果值得了解。jan config list 可能显示没有 provider,而 jan cli models list 却会返回很多结果——后者包含从 Desktop 继承的 provider,而这些配置并未存储在 ~/.jan/config.toml 中。继承的 provider 也不会更新,因为此处没有可供重写的条目:如果你希望 Kunavo 的模型列表保持最新,就必须创建独立的 jan config set 条目;上面的配置块正是这样做的。
两个 provider 提供相同模型 ID 时
Kunavo 提供 claude-sonnet-5 等 ID,直接指向模型供应商的 provider 条目也可能提供相同 ID。Jan Agent 必须择一使用,文档列出的顺序是:先匹配某个 provider 的 models 列表中的精确 ID,然后匹配指定已配置 provider 的 <provider>/<model> 前缀;如果多个 provider 都提供相同 ID,则优先选择配置了凭据的 provider,而非无密钥的同名条目。因此,使用 kunavo/claude-sonnet-5 即可指定你的选择。该限定符仅供 Jan 使用——发送请求之前会将其移除,因为上游服务不接受带 provider 限定符的 ID。
在控制台中使用相同条目
如果你不想输入标志:/settings > providers 可管理相同的 ~/.jan/config.toml 条目;a 会打开添加表单,其中包含 name、base url、api key 和以空格分隔的 models 字段。此表单还有两项命令行标志不具备的功能:基础 URL 必须是 https://(localhost 端点则必须是 http://),确保密钥不会通过明文远程连接发送——Kunavo 使用 https://,因此不受此限制;编辑时,API 密钥字段会显示 (unchanged),除非你在其中输入内容,否则会保留已存储的密钥。清空该字段会删除密钥,而不是保留原值。
常见问题
如何将 Jan Agent 指向自定义 API 端点?
只需一条命令:jan config set --provider <id> --api-key <key> --base-url <url> --model <model> --api-type openai。provider id 由你自行选择,不必来自固定列表;--model 可重复指定,并会替换已有列表;--api-type 默认兼容 OpenAI,因此对于 OpenAI 格式的端点可以省略。配置会写入 ~/.jan/config.toml,你也可以在控制台的 /settings > providers 中编辑。Jan 自己的添加 Provider 指南明确说明,普通的 OpenAI 兼容端点完全不需要编写代码,只需通过此配置界面设置即可。
Jan Agent 的 base URL 末尾需要加 /v1 吗?
需要,Anthropic 协议类型也一样。Jan 只会追加路由路径:添加 Provider 指南称,登录时会通过 GET {base_url}/models 验证密钥;Providers 页面称,在会话中首次打开 /model 时,会查询已配置条目的 GET /models。由于追加的路径是 /models,而不是 /v1/models,因此保存的 base URL 必须已经是 /v1 根路径——Kunavo 的地址为 https://api.kunavo.com/v1。Jan 文档中列出的所有 base URL 都以相同方式结尾,包括其 jan cli models list 示例中的 Anthropic 条目。这与 Claude Code 和 Anthropic 官方 SDK 的做法正好相反;在这些工具中添加 /v1 会得到 /v1/v1/messages,并返回 404。
jan login 和 jan config set --api-key 有什么区别?
它们用于验证不同对象的身份。jan login 会登录自托管后端 Tokamak,并将获取的密钥保存到 ~/.jan/config.toml——这是登录你自己的部署。jan config set --api-key 则用于保存你已经持有的某个端点凭据,例如 Kunavo 这类第三方 Provider。Jan Desktop 本身不会签发这两种密钥,因为它没有可供签发密钥的账户;它的本地 API 服务器要求提供的密钥是你自行创建的字符串,这是这个说法的第三种含义。
为什么 jan config list 没有显示内容,但 jan cli models list 却显示了模型?
因为这两个命令读取的集合不同。jan config list 只报告 ~/.jan/config.toml 中存储的内容,而 jan cli models list 还会列出从 Jan Desktop 继承的 Provider,这些 Provider 不存储在该文件中。Jan 的文档对此有明确说明。实际影响是,继承而来的 Provider 永远不会刷新——因为没有条目可供改写——所以如果你希望持续更新某个 Provider 的模型列表,请先用 jan config set 添加它。
没有 Anthropic 账户也能让 Jan Agent 运行 Claude 模型吗?
可以。Jan Agent 不自带推理引擎,因此模型始终在你配置的端点运行;--api-type 指的是线路协议,而不是供应商。Claude ID 会在你设置的 base URL 处解析,这意味着你持有的是该端点的凭据。Kunavo 通过一个密钥,在其 OpenAI 兼容接口上提供 Claude 和 GPT ID。本配置依据 Jan 自己的文档整理,并未针对客户端进行实测;此外,Jan Agent 仍处于 nightly 渠道的预览阶段,因此请以你通过 jan --version 查到的构建版本为准,确认这些标志是否适用。
Jan Agent 每个请求都返回 404。问题出在哪里?
几乎总是 base URL 配置有误。缺少 /v1 会让 Jan 在源站请求 /models 和 /chat/completions,结果是 404,而不是身份验证失败;如果错误中出现重复的 /v1/v1,说明你在已经带有该后缀的 base URL 上又加了一次。先在客户端之外确认:使用普通 curl 和同一个密钥,对端点调用 GET /v1/models。若返回 JSON,说明端点和密钥都正常,问题在已配置的条目中;若返回 401,问题在密钥;若返回 404,问题在 URL。然后检查 jan config path,并直接读取存储的 base_url。