
适用版本:Qoder 1.22.x(macOS / Windows / Linux 通用,路径差异见文末对照表)。适用范围:Qwen Token Plan 个人版。
一、遇到的痛点
在 Qoder 中通过 Token Plan 添加模型时,经常会遇到两个问题:一是无法设置上下文长度,模型设置里找不到 1M、400K、200K 的选项,或者选项呈灰色不可选;二是能力开关缺失,例如添加 qwen3.8-max 时,官方文档标明支持“推理模型、视觉理解、文本生成”,但 Qoder 却提示暂不支持多模态,导致无法在对话中上传图片。
相比之下,Qoder 自带的内置模型(如 GLM-5.2、DeepSeek-V4-Pro)则拥有完整的上下文选项和思考模式开关。造成这种差异的原因是,自定义模型的高级配置没有在界面中暴露,这些参数实际保存在配置文件中,支持手动修改。
二、原理:自定义模型到底存在哪
Qoder 基于 VS Code 架构,会将扩展状态保存在一个 SQLite 数据库中:
表名: ItemTable 字段: key (TEXT 唯一键) | value (BLOB/文本)
自定义模型列表对应的 key 是:
aicoding.customModels
它的 value 是一个 JSON 数组,数组中的每个元素代表一个自定义模型。实际抓取到的数据结构(已脱敏)大致如下:
{
"id": "model_1785305497074_hlpt4mt",
"provider": "bailian",
"providerDisplayName": "阿里云百炼 - 中国",
"model": "glm5.2-tp",
"displayName": "GLM-5.2",
"description": "",
"visible": true,
"hasApiKey": true,
"is_vl": false,
"is_reasoning": true,
"max_input_tokens": 1000000,
"contextConfig": {
"1m": { "label": "1M", "tokenCount": 1000000 },
"200k": { "label": "200K", "tokenCount": 200000, "isDefault": true },
"400k": { "label": "400K", "tokenCount": 400000 }
},
"thinkingConfig": {
"disabled": { "label": "Off" },
"enabled": { "label": "On", "isDefault": true }
},
"byokTypeKey": "tp",
"createTime": 1785305497075
}
三、结论先行
Qoder 的自定义模型配置并非存放在 settings.json 中,而是保存在 SQLite 数据库内。通过修改该数据库,可以编辑已有模型的上下文长度、多模态和推理能力,也能补全清单中缺失的模型。整个操作分为三步:备份数据、退出 Qoder、运行脚本、重启验证。
免责声明:本文涉及对本地配置文件的深度定制,属于非官方支持的操作。操作前务必做好备份,以便出现问题时随时回滚,具体细节请参照官方文档与软件版本。
四、字段字典(看懂它,你就懂怎么改)
字段 | 类型 | 含义 --- | --- | --- id | string | 唯一标识,由 UI 添加时自动生成(格式为 model_时间戳_随机串) provider | string | 供应商标识,必须是 Qoder 已支持的供应商:bailian(阿里云百炼)、deepseek、minimax 等 providerDisplayName | string | 供应商显示名称,如“阿里云百炼 - 中国” model | string | 调用 API 时使用的模型 ID;在 Token Plan 场景下可能带有 -tp 后缀 displayName | string | 模型下拉列表中显示的名称,支持自定义修改 description | string | 模型描述信息,可为空 visible | bool | 是否在模型列表中显示 hasApiKey | bool | 是否已绑定 API Key(来源于登录账号) is_vl | bool | 是否支持视觉与多模态。设为 false 会提示“暂不支持多模态”,且无法上传图片 is_reasoning | bool | 是否为推理模型。设为 true 才能开启“思考”开关 max_input_tokens | int | 最大上下文 token 数。设为 0 表示未声明,界面不显示上下文选项 contextConfig | object | 上下文长度选项配置。key 包含 1m / 400k / 200k,通过 isDefault 标记默认选中项 thinkingConfig | object | 思考开关配置(包含 disabled / enabled) byokTypeKey | string | 计费类型:tp = Token Plan,pg = 按量付费,cp = 其他 createTime | number | 创建时间(以毫秒为单位的时间戳)
需要重点关注三个字段:当 is_vl 为 false 时,多模态功能会被禁用(Qwen3.8-Max 提示“暂不支持多模态”即由此引起);当 max_input_tokens 为 0 且缺少 contextConfig 时,上下文选项将不予显示。这两个字段在 UI 表单中没有编辑入口,只能通过修改配置来调整。
五、Token Plan 模型到配置映射表(核心)
以下基于 Qwen Token Plan 个人版官方支持清单,提供了每个模型的推荐配置。
品牌 | 模型 ID | 官方能力 | is_vl(视觉) | is_reasoning(推理) | 上下文选项 --- | --- | --- | --- | --- | --- 千问 | qwen3.8-max | 推理、视觉理解、文本生成 | true | true | 1M / 400K / 200K(默认) 千问 | qwen3.7-max | 推理、文本生成 | false | true | 1M / 400K / 200K(默认) 千问 | qwen3.7-plus | 推理、视觉理解、文本生成 | true | true | 1M / 400K / 200K(默认) 千问 | qwen3.6-flash | 推理、视觉理解、文本生成 | true | true | 1M / 400K / 200K(默认) 千问 | qwen-audio-3.0-tts-plus | 语音合成 | 不进聊天列表 | 不进聊天列表 | 不进聊天列表 千问 | qwen-audio-3.0-realtime-plus | 实时语音对话 | 不进聊天列表 | 不进聊天列表 | 不进聊天列表 智谱 AI | glm-5.2 | 推理、文本生成 | false | true | 1M / 400K / 200K(默认) DeepSeek | deepseek-v4-pro | 推理、文本生成 | false | true | 1M / 400K / 200K(默认) DeepSeek | deepseek-v4-flash-0731 | 推理、文本生成(暂不支持 Responses API) | false | true | 1M / 400K / 200K(默认) 万相 | wan2.7-image / wan2.7-image-pro | 图片生成 | 不进聊天列表 | 不进聊天列表 | 不进聊天列表 HappyHorse | happyhorse-1.1-i2v / t2v / r2v | 视频生成 | 不进聊天列表 | 不进聊天列表 | 不进聊天列表
说明:上下文选项统一设置为 1M / 400K / 200K,默认 200K,这与 Qoder 内置千问模型的配置保持一致(实测 GLM-5.2 等已可用模型也是采用这套配置);语音合成、图片生成、视频生成模型不进入聊天模型列表,它们由 Qoder 对应的独立功能调用,强行添加进 customModels 只会生成一个无法使用的聊天条目,因此本文不作处理;如果所用模型实际上下文达不到该量级,将 contextConfig 里对应的 tokenCount 调小即可,选项标签无需改动。
六、操作步骤(保姆级)
第 0 步:备份(强烈建议)
先在 Qoder 中配好 Qwen Token Plan 的模型。提供商选择“阿里百炼 - 中国”,类型选择“Token plan”,不要选择系统给出的默认项,而是点击“输入其他模型”,填入上表中的模型 ID(如 qwen3.8-max),并填入个人的 API 密钥,点击“添加”。如需添加多个模型,重复此操作即可。
接着,复制整个 globalStorage 目录,或者仅复制 state.vscdb 文件进行备份:
cp "~/Library/Application Support/Qoder/User/globalStorage/state.vscdb" ~/Desktop/state.vscdb.bak
第 1 步:完全退出 Qoder
这一步极其关键。数据库会在 Qoder 启动时读入内存,并在退出时写回。如果在进行文件修改时 Qoder 仍在运行,那么在退出时旧数据会覆盖修改,导致操作失效。macOS 用户可按 Cmd+Q,或右键点击 Dock 图标退出;可通过指令 pgrep -fl Qoder 确认进程是否消失,无输出即代表成功退出。
第 2 步:运行一键脚本(推荐)
将以下脚本保存为 qoder_model_config.py,并在终端中执行:
python3 qoder_model_config.py
脚本会自动执行以下操作:根据操作系统定位 state.vscdb;生成带有时间戳的备份;按照第五节的映射表修正已有模型的能力与上下文设置;自动补全清单中缺失的聊天模型(如 qwen3.7-max、qwen3.7-plus);打印每个模型修改前后的对比信息。
脚本内容(完整,可直接复制):
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Qoder 自定义模型配置增强脚本:按 Token Plan 清单修正上下文长度与模型能力。"""
import datetime, json, os, platform, random, shutil, sqlite3, sys
KEY = "aicoding.customModels"
def default_db_path():
home = os.path.expanduser("~")
if platform.system() == "Darwin":
return os.path.join(home, "Library", "Application Support", "Qoder", "User", "globalStorage", "state.vscdb")
if platform.system() == "Windows":
return os.path.join(os.environ.get("APPDATA", ""), "Qoder", "User", "globalStorage", "state.vscdb")
return os.path.join(home, ".config", "Qoder", "User", "globalStorage", "state.vscdb")
DB_PATH = os.environ.get("QODER_DB", default_db_path())
# 统一上下文配置(与 Qoder 内置千问一致:1M / 400K / 200K,默认 200K)
CTX = {
"1m": {"label": "1M", "tokenCount": 1000000},
"400k": {"label": "400K", "tokenCount": 400000},
"200k": {"label": "200K", "tokenCount": 200000, "isDefault": True},
}
THINK = {
"disabled": {"label": "Off"},
"enabled": {"label": "On", "isDefault": True},
}
# Token Plan 个人版官方清单(仅聊天模型)
PLAN = {
"qwen3.8-max": {"is_vl": True, "is_reasoning": True},
"qwen3.7-max": {"is_vl": False, "is_reasoning": True},
"qwen3.7-plus": {"is_vl": True, "is_reasoning": True},
"qwen3.6-flash": {"is_vl": True, "is_reasoning": True},
"glm-5.2": {"is_vl": False, "is_reasoning": True},
"deepseek-v4-pro": {"is_vl": False, "is_reasoning": True},
"deepseek-v4-flash-0731": {"is_vl": False, "is_reasoning": True},
}
DISPLAY = {
"qwen3.8-max": "Qwen3.8-Max",
"qwen3.7-max": "Qwen3.7-Max",
"qwen3.7-plus": "Qwen3.7-Plus",
"qwen3.6-flash": "Qwen-3.6-Flash",
"glm-5.2": "GLM-5.2",
"deepseek-v4-pro": "DeepSeek-V4-Pro",
"deepseek-v4-flash-0731": "DeepSeek-V4-Flash-0731",
}
def base_id(model_id, byok_type):
"""去掉 BYOK 后缀(-tp/-pg/-cp),还原为清单中的基础模型 ID。"""
if byok_type and model_id.endswith("-" + byok_type):
return model_id[:-(len(byok_type) + 1)]
return model_id
def norm(s):
"""归一化模型 ID(忽略连字符/点/下划线/大小写),避免 glm5.2 与 glm-5.2 写法差异误判。"""
return s.replace("-", "").replace(".", "").replace("_", "").lower()
PLAN_BY_NORM = {norm(k): k for k in PLAN}
def apply_plan(entry, cfg, display_name=None):
entry["is_vl"] = cfg["is_vl"]
entry["is_reasoning"] = cfg["is_reasoning"]
entry["max_input_tokens"] = 1000000
entry["contextConfig"] = CTX
if cfg["is_reasoning"]:
entry["thinkingConfig"] = THINK
if display_name:
entry["displayName"] = display_name
return entry
def main():
if not os.path.exists(DB_PATH):
sys.exit(f"[错误] 未找到配置文件:{DB_PATH}\n请先启动过一次 Qoder,或用环境变量 QODER_DB 指定路径。")
bak = DB_PATH + ".bak." + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
shutil.copy2(DB_PATH, bak)
print(f"[备份] 已创建:{bak}")
db = sqlite3.connect(DB_PATH)
row = db.execute("SELECT value FROM ItemTable WHERE key=?", (KEY,)).fetchone()
if row is None:
print("[提示] 未找到 aicoding.customModels,将基于清单创建。")
models = []
else:
raw = row[0]
if isinstance(raw, bytes):
raw = raw.decode("utf-8", errors="replace")
models = json.loads(raw)
before = {m.get("model"): (m.get("is_vl"), m.get("is_reasoning"), m.get("max_input_tokens")) for m in models}
seen_norms = set()
result = []
for m in models:
bid = base_id(m.get("model", ""), m.get("byokTypeKey"))
nb = norm(bid)
seen_norms.add(nb)
if nb in PLAN_BY_NORM:
plan_key = PLAN_BY_NORM[nb]
m = apply_plan(m, PLAN[plan_key], DISPLAY.get(plan_key))
elif m.get("model") == "qwen3.8-max-preview":
m = apply_plan(m, PLAN["qwen3.8-max"]) # preview 与正式版能力对齐,可自行调整
result.append(m)
now_ms = int(datetime.datetime.now().timestamp() * 1000)
for plan_key, cfg in PLAN.items():
if norm(plan_key) in seen_norms:
continue
# 与内置模型同名的,沿用带后缀命名惯例,避免冲突
suffix = "-tp" if plan_key in ("qwen3.7-max", "qwen3.7-plus") else ""
result.append(apply_plan({
"id": f"model_{now_ms}_{random.randint(100000, 999999)}",
"provider": "bailian",
"providerDisplayName": "阿里云百炼 - 中国",
"model": plan_key + suffix,
"displayName": DISPLAY[plan_key],
"description": "",
"visible": True,
"hasApiKey": True,
"byokTypeKey": "tp",
"createTime": now_ms,
}, cfg, DISPLAY[plan_key]))
db.execute("UPDATE ItemTable SET value=? WHERE key=?", (json.dumps(result, ensure_ascii=False), KEY))
db.commit()
print("\n[完成] 配置已写入,前后对比:")
print(f"{'模型ID':<26}{'旧(vl/推理/ctx)':<26}{'新(vl/推理/ctx)':<26}")
for m in result:
old = before.get(m.get("model"), ("-", "-", "-"))
new = (m.get("is_vl"), m.get("is_reasoning"), m.get("max_input_tokens"))
print(f"{str(m.get('model')):<26}{str(old):<26}{str(new):<26}")
db.close()
print("\n下一步:重新启动 Qoder,在模型选择器中确认效果。")
if __name__ == "__main__":
main()
第 2 步备选:手动改(没有 Python 时)
可使用任意 SQLite 工具(如 DB Browser for SQLite)打开 state.vscdb:打开 ItemTable 表,定位到 aicoding.customModels 行,将其 value 按 JSON 格式解析;为目标模型补全 contextConfig,并修正 is_vl、is_reasoning、max_input_tokens 字段(格式详见第四节);最后保存关闭。
第 3 步:重启并验证
重新打开 Qoder 并进入模型选择器:展开模型下拉菜单,即可看到每个模型对应的上下文选项(1M / 400K / 200K);选中 qwen3.8-max 并新建对话,可以直接拖拽或粘贴图片,不再出现“暂不支持多模态”的提示;各类推理模型(千问、GLM、DeepSeek 系列)均可正常切换“思考”开关。
七、常见问题 FAQ
Q1:修改后没有生效? 99% 的概率是 Qoder 进程未完全退出。退出后请通过 pgrep -fl Qoder 确认无输出再进行修改;修改后先检查数据库中的值是否已更新,然后再重新启动软件。 Q2:为什么部分模型 ID 带有 -tp 后缀? -tp 代表 Token Plan 计费模式(pg 代表按量付费)。当自定义模型与 Qoder 内置模型重名时,会添加后缀予以区分(Qoder 在调用时会进行内部路由映射)。已添加的 qwen3.8-max 不带后缀也能正常工作,说明系统兼容多种命名方式;若新添加的模型调用报错,可尝试去掉或添加 -tp 后缀。 Q3:万相、HappyHorse、语音模型为何没有添加? 它们属于非聊天模型。图片与视频生成由 Qoder 独立功能面板调用,语音模型由语音功能调用,这些均不经过 customModels 列表。强行添加只会生成无效的聊天条目。 Q4:Qoder 更新后配置会丢失吗? 部分版本升级可能会重写 state.vscdb 文件。若发现配置丢失,重新执行一次脚本即可(该脚本支持幂等,可反复执行)。 Q5:如何删除模型或修改显示名? 直接修改或删除对应的 JSON 条目即可:displayName 支持自定义修改,删除整个对象即表示从列表中移除。 Q6:操作是否存在安全风险? 脚本仅修改 aicoding.customModels 一个 key,不触碰其他数据,且自带备份功能。如遇异常情况,将备份文件重名覆盖原文件即可恢复。
八、各平台配置文件路径对照
平台 | state.vscdb 路径 --- | --- macOS | ~/Library/Application Support/Qoder/User/globalStorage/state.vscdb Windows | %APPDATA%\Qoder\User\globalStorage\state.vscdb Linux | ~/.config/Qoder/User/globalStorage/state.vscdb
提示:如果安装的是“Qoder CN”等其他版本,请将路径中的 Qoder 替换为相应的目录名(如 QoderCN),也可以通过环境变量 QODER_DB 为脚本指定路径:QODER_DB="/path/to/state.vscdb" python3 qoder_model_config.py
九、结语
Qoder 的自定义模型面板仅开放了基础功能,真正的高级配置(如上下文长度、多模态支持、推理开关)都隐藏在 SQLite 状态库中。只要理清 is_vl、is_reasoning、max_input_tokens、contextConfig 这四个字段的作用,就能完整激活 Token Plan 清单上每个模型的官方能力,解锁 Qwen3.8-Max 的多模态特性以及千问系列模型的 1M 长上下文。
修改前记得备份,修改时确保完全退出 Qoder,修改后重启进行验证。把这套配置跑通,Qoder 里的 Qwen 全家桶就能完整发挥多模态和长上下文了。如果你想把这类 AI 工具和数字化能力真正用进自己的业务,可以咨询云巴巴。云巴巴是国内领先的企业数智服务平台,覆盖 AI 大模型、智能体、协同办公、营销获客、安全合规等多个领域的企业级产品与方案,能按你的行业、规模和预算比对选型、匹配资源、协助落地。欢迎咨询云巴巴,获取更多产品方案与专属服务。


本文由云巴巴数智化服务平台基于AI办公工具WorkBuddy的核心功能,从企业降本增效的实战场景出发,深度剖析了任务管理、专家模型、自动化、技能扩展、多平台接入及案例复用六大高阶技巧。文章旨在帮助中小企业决策者和IT负责人突破AI工具的浅层使用瓶颈,将AI能力真正转化为业务生产力,并提供了清晰的选型视角和落地方法论。

当账号数超过实体手机数,设备管理成为跨境团队的效率瓶颈。本文剖析实体手机与模拟器的天花板,解读 DuoPlus云手机如何以云端 ARM 实例重构集中管理、远程访问与自动化工作流,并指出最先受益的团队类型与行业趋势。

本文从流失信号识别到挽留动作落地,拆解会员流失预警体系的搭建逻辑,看品牌如何用数据在会员离开前完成干预,提升留存与复购。

本文从概率模型到后台配置,讲清直播拆盒中奖概率该怎么设,帮运营在合规与体验之间找到平衡点,让拆盒玩法既有趣又可控。

WorkBuddy 5.3.11 资料库升级为 AI 原生知识空间:HTML、Markdown 协同编辑、一键发布网页、CSV 存数据,让产物变活。