
# 自定义模型
在码道CLI中，你可以通过配置JSON文件，来对接第三方大语言模型。
#### 约束与限制
表1约束与限制 
| 限制类别    | 具体限制                                                                          |
|:---|:---|
| API格式   | 仅支持**OpenAI规范的Chat Completions格式** 和**Anthropic规范的Messages格式**。               |
| 调用工具    | 仅可由系统内置智能体、AgentTeam和自定义智能体调用，**智能问答无法调用**。                                   |
| Token消耗 | 用户调用自定义模型时，不会消耗华为云码道代码智能体套餐内的Token。**但是代码补全功能为降低推理延迟，采用专属内置模型提供服务，不支持自定义模型。** |
| 唯一性限制   | 相同模型提供商和模型ID的模型仅允许添加一次。                                                       |
   
#### 前提条件
- 已将账号添加至[企业成员](https://support.huaweicloud.com/usermanual-enterprise/codeartsagent_enterprise_0004.html)中，并[启用席位](https://support.huaweicloud.com/usermanual-enterprise/codeartsagent_enterprise_0006.html)。
- 如果你购买的是华为云码道代码智能体**老套餐专业版** /**新套餐企业版** ，请确保企业管理员已在控制台开启成员自定义模型权限，具体操作请参考[配置企业自定义模型](https://support.huaweicloud.com/usermanual-enterprise/codeartsagent_enterprise_0009.html)。
 
#### 自定义模型配置
在码道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基础地址>",
          "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": { ... }
          }
        }
      }
    }
  }
  ```
  ![](https://support.huaweicloud.com/usermanual-cli/public_sys-resources/note_3.0-zh-cn.png)
  apiKey是您的核心资产，请不要轻易外泄。当您配置apiKey后，重启TUI/CLI，系统会自动对apiKey进行加密，后续配置文件中展示的就是密文。
  提供商ID是配置文件中的顶层键名，用于标识模型来源。常见提供商ID，如[表2]所示。您也可以使用任意自定义字符串作为提供商ID（如my-server），只要对应模型支持OpenAI兼容的API格式即可。
   表2常见提供商ID 
  | 提供商ID    | 说明       |
  |:---|:---|
  | openai   | OpenAI   |
  | deepseek | DeepSeek |
  | glm      | glm      |
  | kimi     | kimi     |
     
  表3自定义模型配置文件参数说明 
  | 字段名                                                       | 类型       | 必填 | 说明                                                     |
  |:---|:---|:---|:---|
  | 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\>.provider.npm           | 字符串      | 否  | 该模型使用的SDK包名，覆盖提供商级默认。                                  |
  | provider.\<提供商ID\>.models.\<模型ID\>.provider.api           | 字符串      | 否  | 该模型的API URL，覆盖提供商级默认。                                  |
  | provider.\<提供商ID\>.models.\<模型ID\>.variants               | 键值对象     | 否  | 变体配置。                                                  |
     
- [复用已有模型配置]
  如果你已在其他工具（如华为云码道代码智能体IDE、Visual Studio Code等）中完成模型自定义，可直接将对应的配置文件拷贝到码道CLI，快速复用已有模型配置。
  1. 获取已有模型配置文件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的实际版本目录。
     
     
     
     
  
  2. 在码道CLI侧配置模型文件。 
     1. 进入%USERPROFILE%/.codeartsdoer路径，找到并打开codearts_cli.json配置文件。
     
     2. 将[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
                  }
                }
              }
            }
          }
        }
        ```
        
     
     
     
     
  
  3. 查看自定义模型是否添加成功。 
     - 在CLI环境中执行以下命令，回显的模型列表中显示添加的模型，说明模型添加成功。
       ```
       codearts models
       ```
       图1模型列表中显示添加的模型   
       ![](https://support.huaweicloud.com/usermanual-cli/zh-cn_image_0000002714166730.png "点击放大") 
     
     - 在TUI环境中输入如下斜杠命令，进入模型选择页面，显示添加的模型，说明模型添加成功。
       ```
       /models
       ```
       图2选择模型页面显示添加的模型   
       ![](https://support.huaweicloud.com/usermanual-cli/zh-cn_image_0000002744087897.png "点击放大") 
     
     
     
     
   
#### 自定义模型配置示例
以最小化配置为例，演示如何通过设置**提供商ID** 、**API密钥** 及**模** **型**来自定义模型。以Windows操作系统为例。
1. 进入%USERPROFILE%/.codeartsdoer路径，找到并打开codearts_cli.json配置文件。
2. 在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官网购买后填写。
   
   
3. 查看自定义模型是否添加成功。 
   - 在CLI环境中执行以下命令，回显的模型列表中显示添加的模型，说明自定义模型添加成功。
     ```
     codearts models
     ```
     
   
   - 在TUI环境中输入如下斜杠命令，进入模型选择页面。显示添加的模型，说明自定义模型添加成功。
     ```
     /models
     ```
     
   
   
   
   
 
#### 指定运行模型
在码道CLI中，你可以通过指定特定模型来运行你的任务。如下命令中，*provider* 为模型的供应商，*model*为模型的名称。
- TUI开发环境
  - 启动TUI时，通过启动参数指定模型。
    ```
    codearts --model provider/model
    或使用短参数
    codearts -m provider/model
    ```
    
  
  - 进入TUI后，执行"/models"命令随时切换模型。
   
- CLI开发环境
  ```
  codearts run --model provider/model "你的问题"
  ```
  
 
