使用 DeepSeek Harness 集成 GenStudio API
注意
适用版本
本文的界面和配置项以 DeepSeek Harness 桌面版 0.2.2-rc.2 为准,命令行说明适用于 0.2.2-rc.1。DeepSeek Harness 仍处于预览阶段,界面可能随版本变化。
DeepSeek Harness 是 DeepSeek 开源的 AI Agent 工作台,可以读取和修改项目文件、运行命令,并通过插件扩展能力。DeepSeek Harness 桌面版将完整的工作区界面打包为原生应用,提供 macOS 和 Windows 安装包。
本文先按最少步骤完成一次对话,再说明接入方式的选择、自定义模型 API 和其他配置。
快速开始
以下步骤使用 DeepSeek Harness 内置的 DeepSeek 提供商。
准备 API Key
创建以 sk- 为前缀的 GenStudio 通用 API Key。详见 GenStudio API 快速集成。
注意
GenStudio 通用 LLM API 服务有 API 频率限制。租户在 GenStudio 的服务等级决定了 API 调用是否计费,以及享受的 API 频率上限。详见 LLM API 计费规则。
安装 DeepSeek Harness 桌面版
从 DeepSeek Harness 官网 下载安装包:
- macOS:需要 Apple 芯片和 macOS 13 或更高版本,暂不支持 Intel 芯片。打开下载的
.dmg文件,将 DeepSeek Harness 拖入「应用程序」文件夹。 - Windows:需要 64 位 Windows 10 或更高版本。运行下载的
.exe安装程序。
首次启动
首次启动 DeepSeek Harness 时,欢迎页提供 登录 和 添加 API Key 两个入口。添加 API Key 页面用于填写 DeepSeek 官方 API 密钥,使用 GenStudio 时请跳过:
- 点击 添加 API Key。
- 点击 稍后配置,进入工作区。
配置内置的 DeepSeek 提供商
点击左下角的 更多,选择 设置,然后在左侧选择 模型。
在 DeepSeek(
deepseek-official)卡片的 API 密钥 中,填写上一步创建的 GenStudio 通用 API Key。展开 自定义设置,在 API 地址 中填写
https://cloud.infini-ai.com/maas。DeepSeek Harness 会在地址末尾拼接
/v1/messages,请不要自行追加。在 模型目录 中,将第一个模型的 ID
deepseek-flash改为deepseek-v4.1-flash-1017,第二个模型deepseek-v4-pro保持不变。点击 保存。页面提示「已保存 DeepSeek (deepseek-official)。」,DeepSeek 卡片标题旁显示绿色圆点,表示 API 密钥已配置。
发送第一条消息
在输入框右下角的模型选择器中选择 DeepSeek-V4.1-Flash。
在输入框上方选择工作区。首次启动时,DeepSeek Harness 会创建 默认工作区。
在输入框中发送以下请求,回复上方显示「已完成」即表示配置成功:
language-text用一句话介绍当前工作区的目录结构。
需要使用 DeepSeek 以外的模型,或希望使用其他 API 协议时,见添加自定义模型 API。
选择接入方式
DeepSeek Harness 支持以下两种接入方式,GenStudio 提供对应的接口。两种方式可以同时配置。
| 接入方式 | API 协议 | GenStudio API 地址 |
|---|---|---|
| 内置的 DeepSeek 提供商 | Anthropic Messages | https://cloud.infini-ai.com/maas |
| 自定义模型 API | OpenAI Chat Completions | https://cloud.infini-ai.com/maas/v1 |
| 自定义模型 API | OpenAI Responses | https://cloud.infini-ai.com/maas/v1 |
| 自定义模型 API | Anthropic Messages | https://cloud.infini-ai.com/maas |
两种方式的区别:
- 内置的 DeepSeek 提供商:只使用 Anthropic Messages 协议。模型选择器中可以切换推理等级。该提供商默认会把会话日志随请求发送到 GenStudio,详见会话日志上传。
- 自定义模型 API:每个提供商选择一种 API 协议。除 DeepSeek 模型外,也可以添加 GenStudio 提供的其他模型。模型选择器中不显示推理等级,请求中不包含会话日志。
本文的示例中,内置的 DeepSeek 提供商使用 deepseek-v4.1-flash-1017 和 deepseek-v4-pro,自定义模型 API 使用 kimi-k3、glm-5.3 和 deepseek-v4.1-flash-1017。
注意
以上模型仅为示例。GenStudio 当前可用的模型及其 ID,以 GenStudio 模型广场或 /models 接口的返回结果为准。使用 Anthropic Messages 协议时,可以在模型广场中使用「Claude 兼容」筛选条件查看支持该协议的模型。
两种接入方式的优缺点
两种方式都能完成日常编码任务。下面的差异来自 DeepSeek Harness 对两种方式的实现方式,可以按需要取舍。
| 对比项 | 内置的 DeepSeek 提供商 | 自定义模型 API |
|---|---|---|
| 可用模型 | 仅 DeepSeek 模型 | GenStudio 提供的任意模型,包括 Kimi、GLM、Qwen 等 |
| API 协议 | 仅 Anthropic Messages | OpenAI Chat Completions、OpenAI Responses、Anthropic Messages,每个提供商选一种 |
| 配置步骤 | 改两个模型 ID 中的一个 | 建提供商、选协议、选模型 |
| 模型发现 | 手动修改模型 ID | OpenAI 协议下可从 /models 获取并勾选;Anthropic Messages 协议需手动填写 |
| 模型参数 | 预置 DeepSeek 专用配置,包括思考内容在历史中的传递方式 | 每个模型的上下文窗口、输入类型和推理等级需要自行设置 |
| 推理等级 | 模型选择器中可直接切换 Off、Low、High、Max | 模型选择器中不显示,需要在模型选项中设置 |
| 图片输入 | 默认开启 | 默认仅文本,需按模型能力手动勾选 |
| 会话日志 | 默认随每次请求发送到 GenStudio,可在设置中关闭 | 不发送 |
| 提供商专用适配 | 有,例如 DeepSeek 的提示词与工具更新方式,以及跨轮次传递思考内容 | 通用实现,不含模型专用适配 |
选择建议:
- 只使用 DeepSeek 模型、希望保留模型选择器中的推理等级开关时,使用内置的 DeepSeek 提供商。
- 需要使用 DeepSeek 以外的模型、需要 OpenAI Responses 协议,或希望请求中不包含会话日志时,使用自定义模型 API。
- 两种方式可以同时配置,互不影响。
查看 API 接入信息
DeepSeek Harness 通过 GenStudio 通用 LLM API 调用模型。不同接入方式和 API 协议使用不同的 Base URL:
OpenAI (OpenAI Compatible):自定义模型 API 选择 OpenAI Chat Completions 或 OpenAI Responses 协议时使用。
Base URL:
https://cloud.infini-ai.com/maas/v1Endpoints
- Create Chat Completion:
/chat/completions - Create Response:
/responses - List Models:
/models
- Create Chat Completion:
Anthropic (Anthropic Messages Compatible):内置的 DeepSeek 提供商,以及自定义模型 API 选择 Anthropic Messages 协议时使用。
Base URL:
https://cloud.infini-ai.com/maasEndpoints
- Create Message:
/v1/messages
- Create Message:
查询模型的上下文长度
配置模型时需要填写上下文窗口。可以用以下任一方式查看模型 ID、上下文窗口和多模态能力:
模型广场:打开对应模型卡片查看,不需要调用接口。
模型列表接口:调用
/models,从对应模型条目中读取id(模型 ID)、context_length(上下文窗口 Token 数)和model_type(模型类型):language-shellcurl --request GET \ --url 'https://cloud.infini-ai.com/maas/v1/models' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer sk-xxxxxxxxxx'
本文示例模型在 /models 中返回的信息如下。配置时请以当前账号实际返回的模型条目为准。
| 模型 ID | context_length | model_type |
|---|---|---|
deepseek-v4.1-flash-1017 | 1048576 | 多模态模型 |
deepseek-v4-pro | 1024000 | 大语言模型 |
kimi-k3 | 1048576 | 多模态模型 |
glm-5.3 | 1048576 | 大语言模型 |
添加自定义模型 API
在 模型 设置页点击 添加模型提供商,然后选择 自定义模型 API。
填写以下配置:
- Provider ID:以小写字母开头的标识,例如
genstudio。Provider ID 创建后不能修改。DeepSeek Harness 会用它派生 API 密钥的凭据名,例如GENSTUDIO_API_KEY。 - 显示名称:模型选择器中该提供商的分组名称,例如
GenStudio。 - API 地址:按选择的 API 协议填写,见下表。DeepSeek Harness 会在地址末尾拼接请求路径,请不要自行追加。
- API 协议:选择 OpenAI Chat Completions、OpenAI Responses 或 Anthropic Messages。
- API 密钥:填写以
sk-开头的 GenStudio 通用 API Key。
API 协议 API 地址 OpenAI Chat Completions https://cloud.infini-ai.com/maas/v1OpenAI Responses https://cloud.infini-ai.com/maas/v1Anthropic Messages https://cloud.infini-ai.com/maas- Provider ID:以小写字母开头的标识,例如
在 模型目录 中添加模型:
- 选择 OpenAI Chat Completions 或 OpenAI Responses 协议时,点击 获取可用模型。DeepSeek Harness 会读取 GenStudio 的模型列表,并默认勾选全部模型。点击 取消全选,勾选需要的模型,例如
kimi-k3和glm-5.3,然后点击 更新列表。 - 选择 Anthropic Messages 协议时,获取可用模型 会提示
401,无法读取模型列表。请点击 添加模型,手动填写 模型 ID(例如deepseek-v4.1-flash-1017)和 显示名称。
添加后,展开 模型选项,按模型的实际能力检查以下配置:
- 上下文窗口:按查询模型的上下文长度中的
context_length填写。 - 最大输出 token 数:留空时使用默认值。
- 输入类型:新添加的模型默认只勾选 文本。模型支持图片输入时(例如
/models中model_type为多模态模型),同时勾选 图片。 - 推理等级:控制是否向模型发送推理参数。
- 选择 OpenAI Chat Completions 或 OpenAI Responses 协议时,点击 获取可用模型。DeepSeek Harness 会读取 GenStudio 的模型列表,并默认勾选全部模型。点击 取消全选,勾选需要的模型,例如
点击 创建提供商。创建成功后,模型 页显示该提供商的卡片。
一个提供商只使用一种 API 协议。需要同时使用多种协议时,请分别添加提供商,并设置不同的 Provider ID,例如 genstudio 和 genstudio-responses。
自定义模型 API 的配置写入 .dsh/profiles/desktop/cordis.patch.yml 的 llm-pi-ai 部分,API 密钥保存在 .dsh/.credentials.yaml 中。API 协议在配置中保存为 openai-completions、openai-responses 或 anthropic-messages。以下为选择 OpenAI Chat Completions 协议时的配置(节选):
- id: llm-pi-ai
config:
providers:
genstudio:
displayName: GenStudio
apiKeyEnv: GENSTUDIO_API_KEY
api: openai-completions
baseURL: https://cloud.infini-ai.com/maas/v1
models:
- id: kimi-k3
name: kimi-k3
contextWindow: 1048576
- id: glm-5.3
name: glm-5.3
contextWindow: 1048576通过 OpenAI Responses 使用 DeepSeek
以下以 deepseek-v4.1-flash-1017 演示自定义模型 API 的 Responses 配置。
按上面的步骤添加自定义模型 API。Provider ID 填写 genstudio-responses,显示名称填写 GenStudio Responses,API 协议选择 OpenAI Responses,API 地址填写 https://cloud.infini-ai.com/maas/v1。客户端会自动追加 /responses。
填写 GenStudio 通用 API Key,在模型目录中添加 deepseek-v4.1-flash-1017,将上下文窗口设为 1048576。保存后,在输入框右下角的模型选择器中选择 GenStudio Responses 下的 deepseek-v4.1-flash-1017。
桌面 profile 中对应的配置如下。apiKeyEnv 是凭据引用,实际 API Key 通过界面保存。
- id: llm-pi-ai
config:
providers:
genstudio-responses:
displayName: GenStudio Responses
apiKeyEnv: GENSTUDIO_RESPONSES_API_KEY
api: openai-responses
baseURL: https://cloud.infini-ai.com/maas/v1
models:
- id: deepseek-v4.1-flash-1017
name: deepseek-v4.1-flash-1017
contextWindow: 1048576注意
使用 GPT 系列模型
按 /models 返回的 id 和 context_length 设置模型 ID 和上下文窗口。目标模型支持 Responses 时,API 协议保持为 OpenAI Responses(openai-responses)。需要指定最大输出 Token 数或推理等级时,按目标模型支持的取值填写。
在测试工作区中创建 responses-test.txt,写入一行测试文本,再请模型读取该文件并原样返回文本。检查工具结果和最终回复是否与文件内容一致。
命令行使用单独的 headless profile。使用 dsh headless 时,在该 profile 中配置提供商,退出后可通过 --session-id 参数继续已保存的会话。
核对内置提供商的模型参数
配置内置的 DeepSeek 提供商时,可以在 模型目录 中展开每个模型的选项,按 /models 返回的信息核对以下配置:
| 模型 ID | 上下文窗口 | 输入类型 |
|---|---|---|
deepseek-v4.1-flash-1017 | 1048576 | 文本、图片 |
deepseek-v4-pro | 1024000 | 文本 |
最大输出 token 数 留空时使用默认值。
API 密钥保存在 .dsh/.credentials.yaml 中,不写入模型配置文件。其他配置写入 .dsh/profiles/desktop/cordis.patch.yml,点击设置页顶部的 打开配置文件 可以查看。以下为该文件中 DeepSeek 提供商的主要配置(节选):
- id: llm-deepseek
config:
baseURL: https://cloud.infini-ai.com/maas
models:
- id: deepseek-v4.1-flash-1017
name: DeepSeek-V4.1-Flash
contextWindow: 1048576
inputModalities:
- text
- image
- id: deepseek-v4-pro
name: DeepSeek-V4-Pro
contextWindow: 1024000
inputModalities:
- textDeepSeek Harness 的会话、设置和凭据保存在用户主目录的 .dsh 目录中,桌面版和 dsh 命令行共用该目录。模型配置按 profile 分别保存,桌面版写入 .dsh/profiles/desktop/cordis.patch.yml。
推理等级
选择内置的 DeepSeek 提供商的模型时,模型选择器中同时显示当前的推理等级,可选 Off、Low、High 和 Max,默认为 High。Off 表示不启用模型的思考过程,其余三档作为思考强度发给模型。
选择自定义模型 API 的模型时,模型选择器中不显示推理等级。需要调整时,在 模型目录 的 模型选项 中修改该模型的 推理等级。
查看 Token 用量
每条回复下方显示本轮的 Token 用量。输入框下方显示当前会话的轮数、步数、生成速度、累计 Token 数、缓存命中率,以及上下文窗口的已用比例。
DeepSeek Harness 的请求会带上系统提示和工具定义。实际用量和费用请以 GenStudio 的用量统计为准。
配置会话日志上传
设置 > 通用设置 中的 在使用官方模型 API 时上传 Session Log 默认开启。开启时,内置的 DeepSeek 提供商会在每次模型请求中附带当前会话的日志,单次最多 8 MiB,这部分数据不作为模型输入。该选项只作用于内置的 DeepSeek 提供商,通过自定义模型 API 发送的请求不附带会话日志。
会话日志包含当前会话的用户消息、Agent 回复、工具调用和工具结果,并随请求一并发送到请求的 API 地址。按本文配置内置的 DeepSeek 提供商后,这些内容会随模型请求发送到 GenStudio。如果不希望上传,可以在同一设置页关闭 在使用官方模型 API 时上传 Session Log,或者改用自定义模型 API。
修改从下一次请求开始生效。
使用工作区和访问模式
在输入框上方选择工作区,需要处理自己的项目时,点击左侧 工作区 旁的添加按钮,添加项目所在的文件夹。
输入框下方的访问模式默认为 工作区内修改,在该模式下,Agent 修改工作区中的文件和运行命令时不需要逐项确认。
排查常见问题
发送消息后提示「API 密钥无效」
回复中显示「本轮运行失败 API 密钥无效」和 AUTH 时,GenStudio 拒绝了请求中的 API 密钥:
- 确认填写的是 GenStudio 通用 API Key,以
sk-开头,且没有被禁用。 - 在 设置 > 模型 中点击对应提供商卡片的 编辑,先清空 API 密钥 输入框,再重新填写并保存,确保输入框中只有一个完整的 API Key。
「获取可用模型」提示 401
- 自定义模型 API 选择 Anthropic Messages 协议时,获取可用模型 会提示
401。请点击 添加模型,手动填写模型 ID。 - 选择 OpenAI Chat Completions 或 OpenAI Responses 协议时出现该提示,请确认 API 地址 为
https://cloud.infini-ai.com/maas/v1,并检查 API 密钥。
模型选择器显示「请选择模型」
尚未选择模型、模型所在的提供商已被删除,或会话使用的模型 ID 已在模型目录中修改或删除时,模型选择器显示「请选择模型」,此时无法发送消息。完成配置内置的 DeepSeek 提供商或添加自定义模型 API后,在模型选择器中重新选择一个模型。
请求失败或模型不可用
确认 API 地址 与 API 协议对应:内置的 DeepSeek 提供商和 Anthropic Messages 协议使用
https://cloud.infini-ai.com/maas,OpenAI Chat Completions 和 OpenAI Responses 协议使用https://cloud.infini-ai.com/maas/v1。地址末尾不要追加/v1/messages、/chat/completions等请求路径。确认模型 ID 与
/models返回的id完全一致。使用 curl 直接调用 GenStudio 的接口,确认问题是否来自 DeepSeek Harness 的配置。Anthropic Messages 协议:
language-shellcurl --request POST \ --url 'https://cloud.infini-ai.com/maas/v1/messages' \ --header 'x-api-key: sk-xxxxxxxxxx' \ --header 'anthropic-version: 2023-06-01' \ --header 'content-type: application/json' \ --data '{"model": "deepseek-v4.1-flash-1017", "max_tokens": 1024, "messages": [{"role": "user", "content": "你好"}]}'OpenAI Chat Completions 协议:
language-shellcurl --request POST \ --url 'https://cloud.infini-ai.com/maas/v1/chat/completions' \ --header 'Authorization: Bearer sk-xxxxxxxxxx' \ --header 'Content-Type: application/json' \ --data '{"model": "kimi-k3", "messages": [{"role": "user", "content": "你好"}]}'