Jan 0.8.7 配置参数详解
Jan 0.8.7 全量配置解析:应用设置、llama.cpp 引擎 42 项参数默认值、助手与模型参数、MCP 配置及 Jan Agent 配置,含推荐配置模板。
Jan 0.8.7 配置参数详解
目标:系统梳理 Jan 0.8.7 的全部配置入口与参数——应用级设置、llama.cpp 本地引擎的 42 项参数、助手与模型对话参数、MCP 服务器配置,以及终端代理 Jan Agent 的全局/项目两级配置。文中所有默认值均在 Ubuntu 22.04 全新安装后直接读取配置文件取得,未做任何人工改动,可直接作为基线对照。
一、环境信息
- 操作系统:Ubuntu 22.04(x86_64,jammy)
- 软件版本:Jan Desktop 0.8.7(deb 安装)、Jan Agent 0.8.7-66(agent-nightly 通道,官方脚本安装)
- 配置基线采集时间:2026-10-22(全新安装、首次启动初始化完成后读取,未修改任何参数)
- 测试机硬件(应用自动检测并记录):Intel Core i7-14700KF(12 核)、32050MB 内存、无独立显卡——因此下文引擎参数均为 CPU 形态下的默认值
- 数据目录:
~/.local/share/Jan/(桌面应用);~/.jan/(终端代理)
二、前置条件
- 已按本专栏《Ubuntu 22.04 安装 Jan 0.8.7 指南》完成 Jan Desktop 安装,并至少启动过一次应用(首次启动会生成全部默认配置文件);
- 若需阅读终端代理部分,需已通过官方脚本安装 Jan Agent(见本专栏《Jan 0.8.7 常用 CLI 命令与工具详解》一篇的安装章节);
- 熟悉 JSON 与 TOML 的基本语法即可,全部配置文件均为纯文本。
确认配置文件已生成:
find ~/.local/share/Jan -maxdepth 3 -type f | sort
实测输出(全新安装、初始化完成后):
/root/.local/share/Jan/data/assistants/jan/assistant.json
/root/.local/share/Jan/data/db/...(会话与消息数据库文件,随使用增长)
/root/.local/share/Jan/data/logs/app.log
/root/.local/share/Jan/data/mcp_config.json
/root/.local/share/Jan/data/settings.json
/root/.local/share/Jan/data/store.json
/root/.local/share/Jan/settings.json
⚠️ 注意:直接编辑配置文件前先完全退出应用(托盘图标右键 Quit)。Jan 在退出时会把界面上的设置写回文件,应用运行期间手工编辑会被覆盖。
三、配置体系总览与查看修改方式
Jan 0.8.7 的配置分两条产品线、共四个层次:
| 层次 | 位置 | 修改方式 | 作用范围 |
|---|---|---|---|
| 应用数据目录 | ~/.local/share/Jan/settings.json | 直接编辑 | 指定数据区位置 |
| 应用设置键值表 | ~/.local/share/Jan/data/settings.json | 界面 Settings 面板(推荐) | 界面主题、语言、硬件、Provider 注册表 |
| 引擎/助手/MCP 配置 | data/llamacpp/、data/assistants/、data/mcp_config.json | 界面对应面板,或直接编辑 | 推理引擎、助手人设、工具服务器 |
| 终端代理配置 | ~/.jan/config.toml(全局)、~/.jan/projects/<slug>/agent.toml(项目) | jan config set 命令或直接编辑 | Provider 凭据、代理行为 |
查看与修改的三种方式:
- 图形界面:Settings 面板(General/Hardware/Local AI Engine 等分区)与模型齿轮图标(Model Settings)。界面修改实时写回对应文件;
- 直接读文件:所有配置均为 JSON/TOML 纯文本,例如:
cat ~/.local/share/Jan/settings.json
实测输出:
{"data_folder":"/root/.local/share/Jan/data"}
- 终端代理专用命令:
jan config path(显示配置路径)、jan config list(JSON 形式列出已配置 Provider)、jan config set(写入凭据,详见第八章)。
四、应用级配置参数
4.1 数据目录指针:~/.local/share/Jan/settings.json
顶层 settings.json 只有一个键:
| 键 | 默认值 | 说明 |
|---|---|---|
data_folder | /root/.local/share/Jan/data(当前用户家目录下) | 应用数据区位置。界面路径:Settings > General > Jan Data Folder,修改要求目标目录为空且重启应用生效 |
4.2 数据区版本标记:data/store.json
{"version":"0.8.7","mcp_version":5}
version:数据区最后一次被哪个桌面版本写入,升级后由应用自动迁移;mcp_version:MCP 配置的 schema 版本(当前为 5,首次启动日志会出现Migrating MCP schema version 1..5)。
4.3 应用设置键值表:data/settings.json
该文件是所有界面设置的持久化键值表。实测全新安装后包含以下 11 个顶层键:
| 键 | 实测值(要点) | 说明 |
|---|---|---|
__settings_migrated_to_backend__ | "true" | 设置已迁移到后端存储的标记位 |
latest-jan-model | {"state":{"model":null,"lastFetchedAt":null},"version":0} | 官方推荐模型列表的最近拉取状态 |
llamacpp_fit_off_v1 | "1" | 迁移标记:引擎 fit 参数处理方式 |
llamacpp_model_yaml_backfill_v2 | "1" | 迁移标记:模型 yaml 回填 |
llamacpp_models_max_migrated_v1 | "1" | 迁移标记:并发加载数上限 |
llamacpp_parallel_default_v1 | "1" | 迁移标记:并行序列默认值 |
model-provider | JSON 状态块(version:19) | 核心:全部 Provider 注册表,见 4.4 |
paused-downloads | {"state":{"downloads":{},"resumeParams":{}},"version":0} | 暂停中的模型下载任务 |
setting-general | {"state":{"currentLanguage":"en"}} | 界面语言(Settings > General > Language) |
setting-hardware | CPU/内存/GPU 检测结果快照 | Hardware 面板数据,应用自动刷新 |
theme | {"state":{"activeTheme":"auto","isDark":false},"version":0} | 主题:auto/light/dark |
日常调整建议走界面(Settings > Appearance 改主题、General 改语言),避免手工改键值表造成 JSON 结构损坏。
4.4 Provider 注册表:model-provider 键
model-provider 是一个较大的 JSON 状态块,包含三部分:
state.providers[]:每个可用 Provider 一个条目(实测含llamacpp、openai、azure、anthropic、openrouter、mistral、groq、xai、gemini、minimax、huggingface、nvidia共 12 个),每个条目带base_url(实测例如 openai 为https://api.openai.com/v1、anthropic 为https://api.anthropic.com/v1)、settings[](该 Provider 的界面设置项及当前值)、models[](内置模型清单);state.selectedProvider:实测默认"llamacpp"(本地引擎);state.selectedModel:实测默认null(未选择模型)。
API Key 在界面中填写后保存进系统钥匙串(keyring);无桌面钥匙串环境(如纯文本会话)应用自动降级为加密文件存储,并在日志中提示 Keyring unavailable ... using encrypted file fallback。
五、llama.cpp 本地引擎参数详解
引擎参数的修改入口:Settings > Local AI Engine(llamacpp Provider 的设置页),持久化在 data/llamacpp/settings.json(数组结构,每项含 key/title/description/controllerType/controllerProps)。下表为实测默认值全集(42 项,按文件顺序):
| # | 参数键 | 默认值 | 含义与取值说明 |
|---|---|---|---|
| 1 | llamacpp_env | 空 | 引擎环境变量,KEY=VALUE 用分号分隔(如 GGML_VK_VISIBLE_DEVICES=0,1) |
| 2 | models_max | 1 | 路由器同时保持加载的模型数上限,0 = 不限 |
| 3 | timeout | 600 | 引擎连接与加载超时(秒) |
| 4 | fit | false | 自动按显存/内存调整未显式设置的参数(对应环境变量 LLAMA_ARG_FIT) |
| 5 | fit_target | "1024" | fit 的每设备目标余量(MiB),可写逗号列表 |
| 6 | fit_ctx | 4096 | fit 自动调整时上下文长度下限(token) |
| 7 | threads | -1 | 生成阶段线程数,-1 = 逻辑核数 |
| 8 | threads_batch | -1 | 批处理/prompt 处理线程数,-1 = 与 threads 相同 |
| 9 | ctx_shift | false | 允许截断上下文开头以容纳新文本 |
| 10 | n_predict | -1 | 最大生成 token 数,-1 = 不限制 |
| 11 | batch_size | 2048 | 逻辑批大小(prompt 处理上限) |
| 12 | ubatch_size | 512 | 物理批大小 |
| 13 | n_cpu_moe | 0 | 前 N 层的 MoE 权重留在内存(让大 MoE 模型装进有限显存),0 = 关闭 |
| 14 | n_cpu_ffn | 0 | 前 N 层的稠密 FFN 权重留在内存,0 = 关闭 |
| 15 | no_kv_offload | false | KV cache 保留在内存而非加速卡(省显存、降速度) |
| 16 | device | 空 | 卸载到的加速设备列表(逗号分隔,如 CUDA0),空 = 全部可用设备,none = 完全禁用卸载 |
| 17 | split_mode | layer | 多卡切分方式:none/layer/row/tensor(实验) |
| 18 | main_gpu | 0 | 主卡索引(split-mode=none)或中间结果卡(split-mode=row) |
| 19 | tensor_split | 空 | 多卡张量切分比例(如 "3,1"),空 = 均分 |
| 20 | no_op_offload | false | 宿主张量运算留在 CPU |
| 21 | flash_attn | auto | Flash Attention:auto/on/off |
| 22 | parallel | 0 | 并行解码序列数(0 = llama.cpp 默认)。Jan 自身不保留独立槽位,聊天与后台请求共享槽 0 |
| 23 | cont_batching | true | 连续批处理(并发请求动态合批) |
| 24 | no_mmap | false | 禁用内存映射加载模型(加载更慢,可能减少缺页) |
| 25 | lazy_mode | auto | 大张量按需读盘:auto(4GiB 以上自动启用)/on/off,依赖 mmap |
| 26 | mlock | false | 将模型锁进内存防止换出 |
| 27 | cache_type_k | f16 | KV cache 键类型:f32/f16/bf16/q8_0/q4_0/q4_1/iq4_nl/q5_0/q5_1 |
| 28 | cache_type_v | f16 | KV cache 值类型,取值同上 |
| 29 | rope_scaling | auto | RoPE 缩放方法:auto(跟随模型)/none/linear/yarn |
| 30 | rope_freq_base | 0 | RoPE 基频,0 = 从模型读取 |
| 31 | rope_freq_scale | 0 | RoPE 缩放因子,0 = 从模型读取,1 = 强制不缩放 |
| 32 | cache_ram | 8192 | prompt cache 内存上限(MiB),-1 不限,0 关闭 |
| 33 | persist_thread_cache | true | 对话缓存落盘,重开会话不重读全文(模型与设置不变时才能复用) |
| 34 | thread_cache_size | 8192 | 会话缓存磁盘预算(MiB),超限先删最旧 |
| 35 | cache_reuse | 0 | 前缀缓存复用的最小匹配块(token),0 = 关闭 |
| 36 | ctx_checkpoints | 32 | 每槽位保留的上下文检查点数量 |
| 37 | checkpoint_min_step | 8192 | 两个检查点之间的最小 token 间隔 |
| 38 | swa_full | false | 滑窗注意力模型(如 Gemma)使用全量 KV cache,更耗内存 |
| 39 | kv_unified | auto | 多槽位共享统一 KV 缓冲:auto/on/off |
| 40 | kv_unified_per_slot | 0 | 统一 KV 缓存下单槽位 token 上限,0 = 不限 |
| 41 | reasoning_preserve | true | 保留每轮历史推理内容进 prompt(仅对聊天模板支持的模型生效,消耗 prompt token) |
| 42 | keep | 0 | 上下文截断时保留开头 N 个 token,-1 = 全保留 |
5.1 路由预设:data/llamacpp/router.preset.ini
引擎路由器的启动预设,实测内容:
[*]
fit = off
ctx-size = 8192
slot-save-path = /root/.local/share/Jan/data/llamacpp/thread-cache
fit = off:与引擎参数fit=false对应;ctx-size = 8192:路由器默认上下文 8192 token;slot-save-path:会话 KV cache 的落盘目录(配合persist_thread_cache)。
六、助手与模型对话参数
6.1 默认助手:data/assistants/jan/assistant.json
首次启动生成唯一内置助手 jan,实测关键字段:
| 字段 | 默认值 | 说明 |
|---|---|---|
name | Jan | 助手名称 |
model | * | 接受任意模型 |
instructions | 多语言跟随 + 强制工具调用前逻辑分析的长 prompt,尾部带 {{current_date}} 变量 | 系统提示词,可整体改写 |
parameters.temperature | 0.7 | 采样温度 |
parameters.top_k | 20 | Top-K 采样 |
parameters.top_p | 0.8 | Top-P 采样 |
parameters.repeat_penalty | 1.12 | 重复惩罚 |
tools[0].type | retrieval(enabled: false) | 知识库检索工具,默认关闭 |
tools[0].settings.top_k | 2 | 检索返回片段数 |
tools[0].settings.chunk_size | 1024 | 文档切块大小(token) |
tools[0].settings.chunk_overlap | 64 | 相邻切块重叠量 |
tools[0].settings.retrieval_template | CONTEXT: {CONTEXT} / QUESTION: {QUESTION} 模板 | 检索结果注入 prompt 的格式 |
修改入口:界面左侧助手面板编辑,或直接编辑该 JSON(修改前退出应用)。
6.2 模型级参数(Model Settings)
对话界面点击模型旁的齿轮图标打开,作用于当前模型。官方文档给出的参数全集(查询日期 2026-10-22):
| 参数 | 作用 | 使用建议 |
|---|---|---|
| Context Size | 模型一次能记住的文本量(工作记忆) | 越大越耗内存;开启 Fit 时由应用按硬件自动封顶 |
| GPU Layers | 多少层放进显卡 | 有独显尽量拉满,报显存不足再逐级调低 |
| Temperature | 创造性 vs 稳定性 | 通用 0.7;事实性问答 0.1–0.3;创作 0.8–1.0 |
| Top K | 每步候选词数量 | 20–40 收敛,80–100 多样 |
| Top P | 另一种候选截断方式 | 0.9 附近常用 |
| Min P | 过滤概率过低的词 | 默认即可 |
| Repeat Last N | 向前回看多少 token 判重 | 默认即可 |
| Repeat Penalty | 重复惩罚强度 | 1.1–1.3;过高语句会不通顺 |
| Presence Penalty | 鼓励谈新话题 | 仅远程 Provider 生效,对本地 llama.cpp 模型无效 |
| Frequency Penalty | 按词频降权 | 同上,仅远程 Provider 生效 |
Reasoning Mode(仅 llama.cpp 本地模型):对支持扩展思考的模型(如 DeepSeek-R1、QwQ),输入框工具栏出现大脑图标,可设 Auto(模型自行决定)/On(总是先推理)/Off(直接回答),设置按模型持久化。
Mirostat 采样(仅本地模型):Mirostat Mode(Off/V1/V2,V2 更稳)、Mirostat Learning Rate(0.05 稳定 ~ 0.2 激进)、Mirostat Target Entropy(越高越多变)。
输出约束(仅本地模型):Grammar File(GBNF 语法文件路径,强制输出匹配语法)与 JSON Schema File(JSON Schema 文件路径,强制输出合法 JSON),可用于结构化抽取场景。
七、MCP 配置参数:data/mcp_config.json
MCP(Model Context Protocol)服务器配置持久化在 data/mcp_config.json,界面入口 Settings > MCP Servers;桌面端与终端代理共用此文件。实测全新安装后内置 6 个服务器(全部默认 active: false,即未启用):
| 服务器名 | 启动命令 | 用途 |
|---|---|---|
Jan Browser MCP | npx -y search-mcp-server@latest(BRIDGE_HOST=127.0.0.1、BRIDGE_PORT=17389,official: true) | 官方浏览器桥接 |
browsermcp | npx @browsermcp/mcp | 浏览器扩展桥接 |
fetch | uvx mcp-server-fetch | 网页抓取 |
serper | npx -y serper-search-scrape-mcp-server(需 SERPER_API_KEY) | 搜索 |
filesystem | npx -y @modelcontextprotocol/server-filesystem /path/to/other/allowed/dir | 文件访问(路径需改成实际目录) |
sequential-thinking | npx -y @modelcontextprotocol/server-sequential-thinking | 分步思考 |
mcpSettings 全局键(实测默认值):
| 键 | 默认值 | 说明 |
|---|---|---|
toolCallTimeoutSeconds | 30 | 单次工具调用超时(秒) |
baseRestartDelayMs | 1000 | 服务器崩溃重启基础退避(毫秒) |
maxRestartDelayMs | 30000 | 重启退避上限(毫秒) |
backoffMultiplier | 2.0 | 退避倍率 |
enableSmartToolRouting | true | 智能工具路由 |
useLightweightRouterModel | false | 工具路由是否使用轻量模型 |
routerModelProvider / routerModelId | 空 | 轻量路由模型的 Provider 与 ID |
maxToolOutputChars | 40000 | 工具输出注入上下文的最大字符数 |
八、Jan Agent(终端代理)配置参数
8.1 全局配置:~/.jan/config.toml
查看路径与当前内容:
jan config path
jan config list
实测输出(未配置任何凭据时):
/root/.jan/config.toml
{
"config_path": "/root/.jan/config.toml",
"providers": []
}
写入凭据(--provider 必填;演示密钥仅用于展示格式):
jan config set --provider openai --api-key sk-demo-q1w2e3r4
实测输出:
Updated provider 'openai' in /root/.jan/config.toml
写入后的文件内容:
[providers.openai]
api_key = "sk-demo-q1w2e3r4"
jan config set 支持的完整参数(官方文档,查询日期 2026-10-22):
| 参数 | 说明 |
|---|---|
--provider <ID> | Provider ID(如 openai、anthropic、groq),必填 |
--api-key <KEY> | API 密钥 |
--base-url <URL> | 端点地址(自建网关时使用) |
--model <ID> | 暴露的模型,可重复传参;会替换已有列表 |
--api-type <TYPE> | 线协议:openai 或 anthropic,默认 OpenAI 兼容 |
删除凭据用 jan config unset --provider openai。凭据删除后 jan config list 中该 Provider 的 has_api_key 变回 false。
8.2 项目配置:~/.jan/projects/<slug>/agent.toml
在项目目录内首次运行 jan(或 jan cli agent run)时自动生成项目配置,目录名为 项目名-8位哈希(实测 demo 项目生成 demo-2d64be35):
find ~/.jan -type f | sort
实测输出:
/root/.jan/cli_telemetry.json
/root/.jan/config.toml
/root/.jan/projects/demo-2d64be35/agent.toml
/root/.jan/projects/demo-2d64be35/project.json
项目解析结果(含全部生效默认值)可一键导出:
jan cli agent status --project /root/demo
实测输出(节选,关键字段):
{
"project": "/root/demo",
"data_folder": "/root/.local/share/Jan/data",
"model": null,
"max_session_tokens": 128000,
"max_session_tokens_source": "default",
"max_budget_usd": null,
"tools": {
"default": "read-only",
"allow": [],
"deny": [],
"allow_write": [],
"allow_network": null,
"allow_home_read": null,
"sandbox": null
},
"sandbox": { "enabled": false, "backend": "none" },
"hooks": [],
"plugin_tools": []
}
由此得到的默认行为基线:会话 token 上限 128000(默认来源)、工具权限默认 read-only(只读,写文件与执行命令需放行)、沙箱未启用、预算上限未设置、无 hooks。这些值都可通过编辑 agent.toml 的 [agent]、[tools]、[sandbox] 等小节调整。
8.3 模型解析顺序(重要)
未指定模型时执行 jan cli agent run 的实测报错:
Error: no model specified: run `jan login` to sign in to Tokamak, or pass --model, set [agent].model in agent.toml, set default_model in ~/.jan/config.toml, or select a model in the desktop app
即模型按以下优先级解析:命令行 --model > 项目 agent.toml 的 [agent].model > 全局 ~/.jan/config.toml 的 default_model > 桌面应用中选择的模型 > jan login 登录 Tokamak 后的默认。排障时用 jan cli agent status 看 "model" 字段是否为 null。
8.4 相关环境变量
| 变量 | 作用 |
|---|---|
JAN_CLI_NO_UPDATE_CHECK | 同时关闭更新检查与匿名使用统计上报 |
JAN_API_KEY / <PROVIDER>_API_KEY | 未传 --api-key 时的密钥兜底来源 |
JAN_BASE_URL | 未传 --base-url 时的端点兜底来源 |
九、推荐配置模板
9.1 纯 CPU 服务器(无独立显卡)
Settings > Local AI Engine 中调整:threads 保持 -1(用满逻辑核)、flash_attn 设为 off(无 GPU 时 auto 无收益)、cont_batching 保持 true、ctx_shift 设为 true(长对话不中断)、cache_type_k/cache_type_v 改 q8_0(KV cache 减半,质量损失很小)、models_max 保持 1。
9.2 大显存跑 MoE 模型
models_max 按显存设 1–2、n_cpu_moe 适当调大把专家权重留在内存、device 指定 CUDA0、split_mode 保持 layer、flash_attn 设 on、cache_ram 视并发调大。
9.3 长对话多会话场景
persist_thread_cache 保持 true、thread_cache_size 按磁盘余量调大(长会话单个可达数百 MiB)、ctx_checkpoints 保持 32、checkpoint_min_step 保持 8192。
9.4 Jan Agent 只读助手(安全优先)
项目 agent.toml 保持 tools.default = "read-only" 默认不动,[sandbox] 段按官方文档启用系统沙箱;需要写权限时只在 [tools] 的 allow_write 里列具体路径,避免全量放开。
十、常见问题
Q1:改了配置文件为什么不生效?
应用运行期间会以内存中的设置为准并在退出时写回文件,手工修改会被覆盖。正确顺序:完全退出应用 → 编辑文件 → 再启动。
Q2:data/settings.json 里出现大量 _v1/_v2 结尾的键是什么?
版本迁移标记位(如 llamacpp_fit_off_v1),应用用来记录"旧版设置已迁移到新结构",正常升级会自动写入,无需手工管理。
Q3:API Key 填在哪里,为什么配置文件里搜不到明文?
桌面端 API Key 存系统钥匙串(keyring),不写入 JSON;无钥匙串环境降级为加密文件并在日志提示 Keyring unavailable ... using encrypted file fallback。终端代理的凭据则明文存于 ~/.jan/config.toml(该文件权限应保持仅当前用户可读)。
Q4:jan cli agent run 报 no model specified?
模型解析链全空所致。按 8.3 节顺序任选一处配置:临时用 --model,或长期在 agent.toml/config.toml 设置默认模型,并先用 jan config set 配好 Provider 凭据、用 jan cli models list 确认目标模型在列。
Q5:MCP 服务器加了却不连接?
检查 mcp_config.json 中该服务器 active 是否为 true(终端代理可用 jan cli mcp enable <名称> 置位);filesystem 这类服务器还要确认 args 里的目录已改成实际存在的路径。
十一、参考链接
- 官方 Desktop 文档 - Jan Data Folder(数据目录结构):https://docs.jan.ai/desktop/data-folder (查询日期 2026-10-22)
- 官方 Desktop 文档 - App Settings(应用设置):https://docs.jan.ai/desktop/settings (查询日期 2026-10-22)
- 官方 Desktop 文档 - Model Parameters(模型参数):https://docs.jan.ai/desktop/model-parameters (查询日期 2026-10-22)
- 官方 Desktop 文档 - Local API Server:https://docs.jan.ai/desktop/api-server (查询日期 2026-10-22)
- 官方 Agent 文档 - Configuration(config.toml/agent.toml):https://docs.jan.ai/agent/project-config (查询日期 2026-10-22)
- 官方 Agent 文档 - CLI 参考:https://docs.jan.ai/agent/cli (查询日期 2026-10-22)