面向高级用户 / 运维:Tokeny 把一批当前无 UI的隐藏调优参数(超时、限流、缓存、阈值等) 统一收敛到一个可编辑的 JSON 文件,让你无需改代码、无需重新打包即可调整运行时行为。
大多数日常设置(模型、外观、快捷键等)仍在应用内「设置」面板里;本文件只承载 那些尚未做成界面的底层参数。二者不重叠——已有界面的项以界面为准。
1. 文件位置
~/.tokeny/config.json
~ 指当前用户主目录(Windows 为 C:\Users\<你>,macOS/Linux 为 /home/<你> 或 /Users/<你>)。
- 可用环境变量
TOKENY_HOME 覆盖父目录:设 TOKENY_HOME=D:\tokeny-data, 则配置文件变为 D:\tokeny-data\config.json。常用于隔离开发版与打包版的数据。
打开方式
- 推荐:应用内「设置 → 数据管理 → 高级参数配置文件 → 打开配置文件」。 首次点击若文件不存在,会自动写入一份含全部默认值的模板再打开。
- 或手动用任意文本编辑器打开上面的路径。
2. 生效方式(重要)
- 修改后必须重启 Tokeny 才生效。 绝大多数参数在程序启动、模块加载时读取一次并缓存, 运行期热改无效。
- 删除本文件 = 恢复全部默认(下次启动会重新生成模板)。
- 不写此文件、或文件为空 → 全部走内置默认值,行为与未引入该机制时完全一致。
3. 容错护栏(写错了也不会崩)
加载器对每个字段做严格校验,任何错误都只回退默认 + 记一条 warning,绝不让程序启动失败:
| 你写的内容 |
实际结果 |
| 坏 JSON(括号/逗号错) |
整个文件忽略,全部回退默认 |
某字段类型错(如给数字写了字符串 / NaN) |
该字段回退默认,其余正常 |
| 某字段低于允许下限 |
clamp(夹取)到 min |
| 某字段高于允许上限 |
clamp 到 max |
| 未知的域名 / 字段名 |
静默忽略(方便你写注释占位) |
| 只写了部分字段 |
只覆盖你写的,同域其余字段保持默认(深合并) |
校验产生的 warning 会写入应用日志(组件名 RuntimeConfig),可在「设置 → 数据管理 → 日志」查看。
单位约定
- 时间:除特别注明外一律毫秒 (ms)。例外:
scheduler.minIntervalMinutes 是分钟, webserver.cookieMaxAgeSec 是秒。
- 大小:字节 (byte)。例:
256 * 1024 = 256 KB 请写成 262144(JSON 不支持表达式,必须写最终整数)。
- 百分比:整数(如
75 表示 75%)。
- 次数 / 条数 / 层数:整数。
4. 全部参数(按领域)
每个字段列出:默认值(含可读换算)· 允许范围 [min, max] · 作用。JSON 里请填最终整数。
agent — 智能体生命周期
| 字段 |
默认 |
范围 |
作用 |
idleTimeoutMs |
1800000(30 分钟) |
60000 ~ 14400000(1min~4h) |
Agent 实例空闲多久后自动释放内存 |
stream — 流式响应看门狗
| 字段 |
默认 |
范围 |
作用 |
inactivityTimeoutMs |
600000(10 分钟) |
60000 ~ 7200000 |
流无任何输出多久判定卡死。太短会误杀长工具执行 |
toolInactivityGraceMs |
30000(30 秒) |
5000 ~ 600000 |
工具执行期额外宽限时间 |
subtask — 子任务委派
| 字段 |
默认 |
范围 |
作用 |
idleTimeoutMs |
1800000(30 分钟) |
60000 ~ 7200000 |
子任务灾难兜底超时(仅防真死锁) |
maxConcurrentHardLimit |
8 |
1 ~ 32 |
同时运行子任务数的硬上限(信号量初值) |
securityAudit — 命令安全审核
| 字段 |
默认 |
范围 |
作用 |
llmTimeoutMs |
20000(20 秒) |
5000 ~ 120000 |
bash 命令审核 LLM 调用超时。太短会让审核提前放行/降级 |
cacheTtlMs |
300000(5 分钟) |
60000 ~ 3600000 |
审核结果 LRU 缓存有效期 |
cacheMaxSize |
100 |
20 ~ 5000 |
审核缓存最大条目数 |
bash — 终端工具
| 字段 |
默认 |
范围 |
作用 |
defaultTimeoutMs |
60000(1 分钟) |
5000 ~ 3600000 |
普通命令默认超时 |
installTimeoutMs |
300000(5 分钟) |
30000 ~ 3600000 |
安装类命令(依赖下载等)超时 |
maxOutputChars |
51200(50 KB) |
8192 ~ 2097152 |
stdout/stderr 合并输出截断上限。verbose 构建日志被截时调大 |
installOutputChars |
15360(15 KB) |
4096 ~ 524288 |
安装类命令输出上限 |
mcp — MCP 工具
| 字段 |
默认 |
范围 |
作用 |
toolCallTimeoutMs |
60000(1 分钟) |
5000 ~ 3600000 |
单次 MCP 工具调用超时 |
maxBgRetries |
3 |
0 ~ 20 |
后台 MCP 连接失败最大重试次数 |
playwrightRecoveryTimeoutMs |
300000(5 分钟) |
60000 ~ 1800000 |
Playwright MCP 自动装浏览器恢复超时 |
scheduler — 定时任务
| 字段 |
默认 |
范围 |
作用 |
taskTimeoutMs |
1800000(30 分钟) |
60000 ~ 21600000(~6h) |
单个定时任务执行超时 |
minIntervalMinutes |
5(分钟) |
1 ~ 1440 |
允许的最小调度间隔 |
executionRecordsLimit |
50 |
10 ~ 10000 |
每任务保留的执行记录条数 |
headless — 无头/CLI 模式
| 字段 |
默认 |
范围 |
作用 |
timeoutMs |
300000(5 分钟) |
60000 ~ 21600000 |
无头模式单次运行总超时 |
database — SQLite 数据库
| 字段 |
默认 |
范围 |
作用 |
busyTimeoutMs |
5000 |
1000 ~ 60000 |
数据库锁等待超时(busy_timeout) |
backupMaxCount |
5 |
1 ~ 50 |
自动备份保留份数 |
backupMinIntervalMs |
86400000(1 天) |
3600000 ~ 2592000000(1h~30d) |
两次自动备份最小间隔 |
initMaxRetries |
3 |
1 ~ 20 |
数据库初始化失败重试次数 |
initRetryDelayMs |
1000 |
100 ~ 30000 |
初始化重试间隔 |
webFetch — 网页抓取工具
| 字段 |
默认 |
范围 |
作用 |
maxContentSize |
262144(256 KB) |
16384 ~ 8388608(16KB~8MB) |
抓取内容最大字节数 |
fetchTimeoutMs |
30000 |
3000 ~ 300000 |
单次抓取超时 |
maxResponseBodySize |
2097152(2 MB) |
262144 ~ 52428800 |
HTTP 响应体最大读取量(防超大文件吃满内存) |
maxImages |
8 |
1 ~ 50 |
图片提取默认最大返回数 |
mediaGen — 图像/视频生成
| 字段 |
默认 |
范围 |
作用 |
httpTimeoutMs |
30000 |
5000 ~ 300000 |
单次 HTTP 请求超时 |
imageTotalTimeoutMs |
180000(3 分钟) |
30000 ~ 3600000 |
图像生成总超时(含轮询) |
videoTotalTimeoutMs |
1200000(20 分钟) |
60000 ~ 7200000 |
视频生成总超时 |
videoPollIntervalMs |
5000 |
1000 ~ 30000 |
视频任务状态轮询间隔 |
imagePollIntervalMs |
3000 |
1000 ~ 30000 |
图像任务状态轮询间隔 |
ossUploadMinBytes |
10485760(10 MB) |
1048576 ~ 104857600 |
媒体输入改走 OSS 上传的体积阈值 |
model — 模型调用
| 字段 |
默认 |
范围 |
作用 |
testTimeoutMs |
10000 |
2000 ~ 120000 |
「测试连接」超时 |
listTimeoutMs |
15000 |
2000 ~ 120000 |
拉取模型列表超时 |
balanceTimeoutMs |
10000 |
2000 ~ 120000 |
查询余额超时 |
defaultRequestTimeoutMs |
60000 |
10000 ~ 3600000 |
模型请求兜底超时(未显式指定时)。慢模型/中转站可调大 |
recovery — 流式错误恢复
| 字段 |
默认 |
范围 |
作用 |
maxTotalRecoveries |
13 |
1 ~ 200 |
单回合总恢复次数上限 |
maxApiRetries |
100 |
1 ~ 1000 |
API 临时错误重试次数安全网(实际由时间窗主导) |
apiRetryWindowMs |
600000(10 分钟) |
60000 ~ 3600000 |
API 重试时间窗:窗口内持续按退避重试 |
maxContinuationAttempts |
3 |
0 ~ 50 |
截断续写最大尝试次数 |
maxEmptyResponseRetries |
100 |
1 ~ 1000 |
空 turn 重试次数安全网(GLM/中转站间歇空响应) |
emptyResponseRetryWindowMs |
600000(10 分钟) |
60000 ~ 3600000 |
空响应重试时间窗(与 API 重试窗独立) |
maxContextCompressionRetries |
2 |
0 ~ 20 |
上下文溢出触发压缩后的重试上限(长会话会撞) |
maxIncompleteTurnRecoveries |
2 |
0 ~ 50 |
不完整 turn 恢复上限 |
retry — API 重试退避
| 字段 |
默认 |
范围 |
作用 |
apiRetryBaseDelayMs |
1000 |
200 ~ 5000 |
指数退避基础延迟(窗口由 recovery.apiRetryWindowMs 控制,这里控制退避形状) |
apiRetryMaxDelayMs |
16000 |
4000 ~ 120000 |
指数退避封顶延迟 |
maxServerSuggestedDelayMs |
30000 |
5000 ~ 300000 |
服务端 retry-after 建议值的夹取上限(防恶意超长值卡死) |
doomLoop — 重复循环检测
agentic 长任务对误报敏感:阈值太小会误杀正常多步操作,太大会放任空转。 | 字段 | 默认 | 范围 | 作用 | |------|------|------|------| | exactRepeatThreshold | 10 | 3 ~ 200 | 精确重复工具调用触发阈值 | | fuzzyRepeatThreshold | 20 | 5 ~ 400 | 模糊重复(同名不同参)触发阈值 | | alternatingWindow | 10 | 4 ~ 100 | 交替循环检测窗口 | | textRepeatThreshold | 3 | 2 ~ 50 | 纯文本重复输出触发阈值 | | emptyTurnThreshold | 3 | 2 ~ 50 | 连续空轮次(thinking 空转)触发阈值 | | maxTrackers | 500 | 50 ~ 10000 | 会话跟踪器 LRU 上限 |
recursion — 递归深度
| 字段 |
默认 |
范围 |
作用 |
interactiveLimit |
1000 |
50 ~ 10000 |
交互式 Agent 单回合工具调用递归上限 |
compression — 上下文压缩
| 字段 |
默认 |
范围 |
作用 |
layerOneTriggerPercent |
75 |
40 ~ 95 |
上下文占比达此值触发一级压缩 |
resetTriggerPercent |
85 |
50 ~ 99 |
达此值触发重置级压缩 |
summaryInvokeTimeoutMs |
300000(5 分钟) |
30000 ~ 1200000 |
摘要模型调用超时 |
files — 文件工具
| 字段 |
默认 |
范围 |
作用 |
readLimit |
102400(100 KB) |
8192 ~ 10485760(8KB~10MB) |
单文件读取字节上限 |
grepLimit |
5242880(5 MB) |
65536 ~ 104857600(64KB~100MB) |
grep 扫描字节上限 |
attachmentLimit |
20971520(20 MB) |
1048576 ~ 209715200(1MB~200MB) |
附件大小上限 |
maxWalkDepth |
10 |
1 ~ 64 |
目录遍历最大深度 |
maxEntries |
2000 |
100 ~ 100000 |
目录列举最大条目数 |
readMaxChars |
30000 |
2000 ~ 500000 |
读取返回最大字符数 |
memory — 记忆系统
| 字段 |
默认 |
范围 |
作用 |
countMaxGlobal |
200 |
20 ~ 100000 |
全局记忆最大条数 |
countMaxWorkspace |
100 |
10 ~ 100000 |
工作空间记忆最大条数 |
记忆单条正文字数上限(全局/工作空间)由「设置 → 个性化 → 记忆管理」统一管理, 不在此配置文件中,避免两处配置歧义。
email / ocr / stt — 外部服务
| 字段 |
默认 |
范围 |
作用 |
email.operationTimeoutMs |
30000 |
5000 ~ 300000 |
邮件收发单次操作超时 |
ocr.serverReadyTimeoutMs |
300000(5 分钟) |
30000 ~ 1800000 |
等待 OCR 服务就绪超时 |
ocr.requestTimeoutMs |
600000(10 分钟) |
30000 ~ 3600000 |
单次 OCR 请求超时(多页 PDF 较慢) |
ocr.installTimeoutMs |
1800000(30 分钟) |
300000 ~ 5400000 |
pip 安装 OCR 依赖超时(体积大、慢网易撞顶) |
ocr.warmupTimeoutMs |
1200000(20 分钟) |
180000 ~ 3600000 |
首次下载权重+预热超时 |
ocr.venvTimeoutMs |
120000(2 分钟) |
30000 ~ 600000 |
创建 Python venv 超时 |
stt.timeoutMs |
30000 |
5000 ~ 300000 |
语音转文字请求超时 |
runtime / browser / skill — 依赖安装与浏览器
| 字段 |
默认 |
范围 |
作用 |
runtime.extractTimeoutMs |
600000(10 分钟) |
60000 ~ 1800000 |
解压内置 Node/Python 运行时超时 |
runtime.installTimeoutMs |
180000(3 分钟) |
30000 ~ 1800000 |
npm/pip 安装类命令超时 |
browser.cdpReadyTimeoutMs |
30000 |
5000 ~ 120000 |
等 Chrome CDP 端点就绪超时(弱机启动慢时调大) |
browser.cdpPollIntervalMs |
300 |
100 ~ 2000 |
CDP 就绪轮询间隔 |
skill.gitCloneTimeoutMs |
60000(1 分钟) |
10000 ~ 600000 |
git clone 安装外部技能超时 |
webserver — 内嵌 Web 服务器
| 字段 |
默认 |
范围 |
作用 |
port |
3210 |
1024 ~ 65535 |
监听端口(DB 无 webServerConfig 时的回退) |
maxRequestBody |
26214400(25 MB) |
1048576 ~ 524288000(1MB~500MB) |
请求体大小上限(防内存耗尽) |
rateLimitMaxAttempts |
10 |
3 ~ 1000 |
认证失败限流:窗口内最大尝试次数 |
cookieMaxAgeSec |
604800(7 天,秒) |
3600 ~ 7776000(1h~90d) |
登录 Cookie 有效期 |
frontend — 前端界面
| 字段 |
默认 |
范围 |
作用 |
messageRenderLimit |
50 |
10 ~ 1000 |
首屏渲染消息数 |
messageLoadChunk |
50 |
10 ~ 1000 |
上滑加载每批消息数 |
sendInactivityTimeoutMs |
1800000(30 分钟) |
60000 ~ 7200000 |
发送后无响应判定超时 |
editorAutoSaveDelayMs |
1200 |
200 ~ 30000 |
编辑器自动保存防抖延迟 |
5. 示例
最小覆盖(只改想改的,其余全默认)
只把模型兜底超时调到 3 分钟、webserver 端口改成 8080:
{
"model": { "defaultRequestTimeoutMs": 180000 },
"webserver": { "port": 8080 }
}
其余所有字段、所有域都保持默认——不需要、也不建议全量抄写。
「打开配置文件」生成的模板
首次通过设置面板打开时,会写入一份含全部默认值的完整模板(顶部带 _readme 提示), 你可以在上面直接改数值。_readme 是未知字段,会被安全忽略。
6. 常见调优场景
| 我想…… |
改哪个 |
| 用很慢的模型/中转站,老是超时 |
调大 model.defaultRequestTimeoutMs、stream.inactivityTimeoutMs |
| 长时间跑的工具(编译/训练)被误判卡死 |
调大 stream.inactivityTimeoutMs、bash.defaultTimeoutMs |
| 处理大文件/大附件被截断 |
调大 files.readLimit、files.attachmentLimit、files.grepLimit |
| 内嵌 Web 端口冲突 |
改 webserver.port |
| 上传大文件到 Web 端 413 |
调大 webserver.maxRequestBody |
| 上下文太早被压缩 |
调高 compression.layerOneTriggerPercent(但别贴满,留余量) |
| 定时任务想更频繁 |
调小 scheduler.minIntervalMinutes(最低 1 分钟) |
| 多页 PDF OCR 老失败 |
调大 ocr.requestTimeoutMs、ocr.serverReadyTimeoutMs |
| 慢网装 OCR/内置运行时/技能老超时 |
调大 ocr.installTimeoutMs/ocr.warmupTimeoutMs、runtime.extractTimeoutMs/runtime.installTimeoutMs、mcp.playwrightRecoveryTimeoutMs、skill.gitCloneTimeoutMs |
| 长 agent 任务被误判"循环"中断 |
调大 doomLoop.exactRepeatThreshold/fuzzyRepeatThreshold 等 |
| 弱机启动浏览器 CDP 超时 |
调大 browser.cdpReadyTimeoutMs |
| GLM/中转站间歇空响应导致失败 |
调大 recovery.maxEmptyResponseRetries/emptyResponseRetryWindowMs |
| 构建日志输出被截断 |
调大 bash.maxOutputChars |
| 历史很长、首屏加载卡 |
调小 frontend.messageRenderLimit |
7. 排错
- 改了没生效? 90% 是没重启。改完必须完全退出并重启 Tokeny。
- 改了个值程序没反应? 可能被 clamp 或类型回退了。查日志(设置 → 数据管理 → 日志)里
RuntimeConfig 的 warning,会明确写「某字段越界,clamp 到 X」或「非数值,回退默认」。
- 整个文件好像被忽略了? 多半是 JSON 语法错(多余逗号、缺引号)。用编辑器的 JSON 校验, 或直接删掉文件让它重建模板。
8. 边界说明
- 本文件只承载无 UI 的隐藏参数,不与应用内「设置」重叠。已有界面的项(模型配置、 webServerConfig 的运行时开关等)仍以界面 / 数据库为准。
- 空响应重试窗口现已开放为独立字段
recovery.emptyResponseRetryWindowMs,与 API 重试窗 recovery.apiRetryWindowMs 分离,改一个不会静默影响另一个。