自定义模型
在码道CLI中,你可以通过配置JSON文件,来对接第三方大语言模型。
约束与限制
| 限制类别 | 具体限制 |
|---|---|
| API格式 | 仅支持OpenAI规范的Chat Completions格式和Anthropic规范的Messages格式。 |
| 调用工具 | 仅可由系统内置智能体、AgentTeam和自定义智能体调用,智能问答无法调用。 |
| 积分消耗/Token消耗 | 用户调用自定义模型时,不会消耗华为云码道代码智能体套餐内的积分或Token。但是代码补全功能为降低推理延迟,采用专属内置模型提供服务,不支持自定义模型。 |
| 唯一性限制 | 相同模型提供商和模型ID的模型仅允许添加一次。 |
前提条件
自定义模型配置
在码道CLI中,通过配置文件对自定义模型进行管理。不支持使用命令创建、修改或删除自定义模型,所有配置均需手动编辑文件。
自定义模型配置文件及其存放路径:“~/.codeartsdoer/codearts_cli.json”,“~”表示当前用户的主目录,Windows下等同于“C:\Users\用户名\”,macOS下等同于“/Users/用户名/”,Linux下等同于“/home/用户名/”。如下操作以Windows操作系统为例。
配置文件以provider为顶层键,每个提供商ID对应一个配置块。
自定义模型配置文件完整的结构如下:
{
"provider": {
"<提供商ID>": {
"name": "<提供商显示名称>",
"npm": "<SDK包名>",
"api": "<提供商API地址>",
"env": ["<环境变量名>", ...],
"whitelist": ["<模型ID>", ...],
"blacklist": ["<模型ID>", ...],
"options": {
"apiKey": "<API密钥>",
"baseURL": "<API基础地址>",
"useFullUrl": false,
"enterpriseUrl": "<企业版URL>",
"setCacheKey": true,
"timeout": 300000,
"chunkTimeout": 60000
},
"models": {
"<模型ID>": {
"id": "<模型API标识>",
"name": "<显示名称>",
"family": "<模型家族>",
"reasoning": true,
"attachment": true,
"temperature": true,
"tool_call": true,
"limit": { "context": 128000, "input": 120000, "output": 8000 },
"cost": {
"input": 3.0,
"output": 15.0,
"cache_read": 0.5,
"cache_write": 2.0,
"context_over_200k": {
"input": 6.0,
"output": 30.0,
"cache_read": 1.0,
"cache_write": 4.0
}
},
"modalities": {
"input": ["text", "image", "pdf"],
"output": ["text"]
},
"headers": { "X-Custom-Header": "value" },
"provider": { "npm": "<SDK包名>", "api": "<API地址>" },
"variants": { ... }
}
}
}
}
}
apiKey是您的核心资产,请不要轻易外泄。当您配置apiKey后,重启TUI/CLI,系统会自动对apiKey进行加密,后续配置文件中展示的就是密文。
提供商ID是配置文件中的顶层键名,用于标识模型来源。常见提供商ID,如表2所示。您也可以使用任意自定义字符串作为提供商ID(如my-server),只要对应模型支持OpenAI兼容的API格式即可。
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| provider.<提供商ID>.name | 字符串 | 否 | 提供商的显示名称,缺省时使用提供商ID。 |
| provider.<提供商ID>.npm | 字符串 | 否 | SDK包名,缺省时默认为@ai-sdk/openai-compatible。 |
| provider.<提供商ID>.api | 字符串 | 否 | 提供商的API URL,与options.baseURL功能类似。 |
| provider.<提供商ID>.env | 字符串数组 | 否 | 环境变量名列表,码道CLI会依次读取这些环境变量作为API密钥的回退来源。 |
| provider.<提供商ID>.whitelist | 字符串数组 | 否 | 模型白名单,仅列表中的模型会被加载(对内置提供商可用来过滤不需要的模型)。 |
| provider.<提供商ID>.blacklist | 字符串数组 | 否 | 模型黑名单,列表中的模型不会被加载。 |
| provider.<提供商ID>.options.apiKey | 字符串 | 是 | API密钥。首次加载时明文密钥会自动加密为enc:v1:格式并写回配置文件。 |
| provider.<提供商ID>.options.baseURL | 字符串 | 是 | API基础地址,如https://your-server.com/v1。 |
| provider.<提供商ID>.options.useFullUrl | 布尔值 | 否 | 是否使用完整URL地址,默认为false。
|
| provider.<提供商ID>.options.enterpriseUrl | 字符串 | 否 | GitHub Enterprise URL,仅用于Copilot提供商的企业版认证。 |
| provider.<提供商ID>.options.setCacheKey | 布尔值 | 否 | 是否启用promptCacheKey,默认为false。 |
| provider.<提供商ID>.options.timeout | 数字或false | 否 | 请求超时时间,单位为毫秒,默认为300000(5分钟)。设置为false,可禁用超时。 |
| provider.<提供商ID>.options.chunkTimeout | 数字 | 否 | SSE流式响应的块间超时时间,单位为毫秒。超过该时间未收到新数据块则中断请求。 |
| provider.<提供商ID>.options.* | 任意类型 | 否 | options还支持任意额外字段(catchall),提供商的SDK实现可能读取这些自定义选项。 |
| provider.<提供商ID>.models.<模型ID>.id | 字符串 | 否 | 模型的API标识(实际发送给提供商的模型ID),缺省时使用配置键名。 |
| provider.<提供商ID>.models.<模型ID>.name | 字符串 | 否 | 码道CLI客户端显示的模型名称,缺省时使用配置键名。 |
| provider.<提供商ID>.models.<模型ID>.family | 字符串 | 否 | 模型家族名称(如gpt、claude),用于模型分组。 |
| provider.<提供商ID>.models.<模型ID>.reasoning | 布尔值 | 否 | 是否支持推理/思考能力。 |
| provider.<提供商ID>.models.<模型ID>.attachment | 布尔值 | 否 | 是否支持附件上传(图片、PDF等)。 |
| provider.<提供商ID>.models.<模型ID>.temperature | 布尔值 | 否 | 是否支持温度参数调节。 |
| provider.<提供商ID>.models.<模型ID>.tool_call | 布尔值 | 否 | 是否支持工具/函数调用,默认为true。 |
| provider.<提供商ID>.models.<模型ID>.limit.context | 数字 | 否 | 最大上下文窗口大小(Token)。 |
| provider.<提供商ID>.models.<模型ID>.limit.input | 数字 | 否 | 最大输入Token数。 |
| provider.<提供商ID>.models.<模型ID>.limit.output | 数字 | 否 | 最大输出Token数。 |
| provider.<提供商ID>.models.<模型ID>.cost.input | 数字 | 否 | 输入Token单价(每百万Token美元价格)。 |
| provider.<提供商ID>.models.<模型ID>.cost.output | 数字 | 否 | 输出Token单价。 |
| provider.<提供商ID>.models.<模型ID>.cost.cache_read | 数字 | 否 | 缓存读取单价。 |
| provider.<提供商ID>.models.<模型ID>.cost.cache_write | 数字 | 否 | 缓存写入单价。 |
| provider.<提供商ID>.models.<模型ID>.cost.context_over_200k | 对象 | 否 | 超过200K上下文时的替代定价,包含input、output、cache_read和cache_write。 |
| provider.<提供商ID>.models.<模型ID>.modalities.input | 字符串数组 | 否 | 输入支持的模态,包括text、audio、image、video、pdf。 |
| provider.<提供商ID>.models.<模型ID>.modalities.output | 字符串数组 | 否 | 输出支持的模态,包括text、audio、image、video、pdf。 |
| provider.<提供商ID>.models.<模型ID>.headers | 字符串键值对象 | 否 | 自定义HTTP请求头,随模型请求发送。 |
| provider.<提供商ID>.models.<模型ID>.provider.npm | 字符串 | 否 | 该模型使用的SDK包名,覆盖提供商级默认。 |
| provider.<提供商ID>.models.<模型ID>.provider.api | 字符串 | 否 | 该模型的API URL,覆盖提供商级默认。 |
| provider.<提供商ID>.models.<模型ID>.variants | 键值对象 | 否 | 变体配置。 |
如果你已在其他工具(如码道IDE、Visual Studio Code等)中完成模型自定义,可直接将对应的配置文件拷贝到码道CLI,快速复用已有模型配置。
- 获取已有模型配置文件codearts.json。
- 码道IDE:%USERPROFILE%\.codeartsdoer\codearts-data
- Visual Studio Code:%USERPROFILE%\.codeartsdoer\vscode-data
- JetBrains(PyCharm/IntelliJ IDEA/WebStorm/CLion):%USERPROFILE%\.codeartsdoer\IntelliJIDEA2025.3.4,将IntelliJIDEA2025.3.4替换为你本机IDE的实际版本目录。
- 在码道CLI侧配置模型文件。
- 进入%USERPROFILE%/.codeartsdoer路径,找到并打开codearts_cli.json配置文件。
- 将1中codearts.json文件中provider字段内容,拷贝到codearts_cli.json中,保存并退出。
{ "$schema": "https://opencode.ai/config.json", "lsp": false, "provider": { "MaaS": { "name": "MaaS", "npm": "@ai-sdk/openai-compatible", "options": { "apiKey": "enc:v3:aPrf8u1f5M******FdrnKFvwfQu1pcAJgg3r/3q2Vdz", "baseURL": "https://api.modelarts-maas.com/v2", "glm-5.2": { "sourceType": "provider", "providerType": "MaaS", "provider": "华为云MaaS", "modelId": "glm-5.2", "modelName": "GLM5.2", "modelType": "textConversation", "modelDesc": "智谱GLM-5.2模型,擅长中文理解与大规模知识推理,适合企业级应用", "displayEnabled": true, "isCustomModel": true, "maxTokens": 0, "truncateLength": 0, "inputLength": 0, "inputContextWindow": 184000, "outputContextWindow": 16000, "contextWindow": 200000, "createdAt": "2026-09-02T02:50:01.197Z", "updatedAt": "2026-09-02T02:50:01.197Z" } }, "models": { "glm-5.2": { "id": "glm-5.2", "limit": { "context": 200000, "output": 16000 } } } } } }
- 查看自定义模型是否添加成功。
- 在CLI环境中执行以下命令,回显的模型列表中显示添加的模型,说明模型添加成功。
codearts models
图1 模型列表中显示添加的模型
- 在TUI环境中输入如下斜杠命令,进入模型选择页面,显示添加的模型,说明模型添加成功。
/models
图2 选择模型页面显示添加的模型
- 在CLI环境中执行以下命令,回显的模型列表中显示添加的模型,说明模型添加成功。
自定义模型配置示例
以最小化配置为例,演示如何通过设置提供商ID、API密钥及模型来自定义模型。以Windows操作系统为例。
- 进入%USERPROFILE%/.codeartsdoer路径,找到并打开codearts_cli.json配置文件。
- 在codearts_cli.json配置文件中,增加provider内容,保存文件并退出。
{ "$schema": "https://opencode.ai/config.json", "provider": { "deepseek": { "options": { "apiKey": "sk-***", "baseURL": "https://api.deepseek.com/v1" }, "models": { "deepseek-chat": { "name": "DeepSeek Chat" }, "deepseek-reasoner": { "name": "DeepSeek Reasoner", "reasoning": true } } } }, "mcp": {}, "lsp": false }其中,apiKey需要您到DeepSeek官网购买后填写。
- 查看自定义模型是否添加成功。
- 在CLI环境中执行以下命令,回显的模型列表中显示添加的模型,说明自定义模型添加成功。
codearts models
- 在TUI环境中输入如下斜杠命令,进入模型选择页面。显示添加的模型,说明自定义模型添加成功。
/models
- 在CLI环境中执行以下命令,回显的模型列表中显示添加的模型,说明自定义模型添加成功。
指定运行模型
在码道CLI中,你可以通过指定特定模型来运行你的任务。如下命令中,provider为模型的供应商,model为模型的名称。
- TUI开发环境
- 启动TUI时,通过启动参数指定模型。
codearts --model provider/model 或使用短参数 codearts -m provider/model
- 进入TUI后,执行“/models”命令随时切换模型。
- 启动TUI时,通过启动参数指定模型。
- CLI开发环境
codearts run --model provider/model "你的问题"