自定义模型
码道CLI新增对接第三方大语言模型的能力。若您已购买华为云码道代码智能体专业版套餐,同时支持在控制台添加第三方大语言模型,具体请参见配置企业自定义模型。
约束与限制
- 接入第三方企业自定义模型仅支持OpenAI规范的Chat Completions API格式和Anthropic规范的Messages API格式。
- 在控制台新建的自定义模型所有智能体均可调用,在客户端新建的自定义模型仅系统内置智能体、AgentTeam和自定义智能体可调用,智能问答无法调用。
- 相同模型提供商和模型ID的模型仅允许添加一次。
自定义模型配置文件
在码道CLI中,通过配置文件对自定义模型进行管理。在CLI/TUI模式下,不支持使用命令创建、修改或删除自定义模型,所有配置均需手动编辑文件。
自定义模型配置文件及其存放路径:“~/.codeartsdoer/codearts_cli.json”,“~”表示当前用户的主目录,Windows下等同于“C:\Users\用户名\”,macOS下等同于“/Users/用户名/”,Linux下等同于“/home/用户名/”。
配置文件以provider为顶层键,每个提供商ID对应一个配置块。自定模型配置文件完整的结构如下:
{
"provider": {
"<提供商ID>": {
"name": "<提供商显示名称>",
"npm": "<SDK包名>",
"api": "<提供商API地址>",
"env": ["<环境变量名>", ...],
"whitelist": ["<模型ID>", ...],
"blacklist": ["<模型ID>", ...],
"options": {
"apiKey": "<API密钥>",
"baseURL": "<API基础地址>",
"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" },
"status": "active",
"provider": { "npm": "<SDK包名>", "api": "<API地址>" },
"variants": { ... }
}
}
}
}
}
apiKey是您的核心资产,请不要轻易外泄。当您配置apiKey后,重启TUI/CLI,系统会自动对apiKey进行加密,后续配置文件中展示的就是密文。
提供商ID是配置文件中的顶层键名,用于标识模型来源。常见提供商ID,如表1所示。您也可以使用任意自定义字符串作为提供商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.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>.status | 字符串 | 否 | 模型状态标记,包括active、beta、alpha、deprecated。 |
| provider.<提供商ID>.models.<模型ID>.provider.npm | 字符串 | 否 | 该模型使用的SDK包名,覆盖提供商级默认。 |
| provider.<提供商ID>.models.<模型ID>.provider.api | 字符串 | 否 | 该模型的API URL,覆盖提供商级默认。 |
| provider.<提供商ID>.models.<模型ID>.variants | 键值对象 | 否 | 变体配置。 |
自定义模型配置示例
以最小化配置为例,演示如何通过设置提供商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 "您的问题"