快速接入 Agent
DeepSeek Harness
DeepSeek Harness(命令 dsh)是 DeepSeek 于 2026 年 8 月 13 日发布的 AI 编程 agent,带 Web 界面、会话管理与工具调用能力。支持 OpenAI 兼容服务商,把配置指向 Yomi API 即可使用 deepseek-v4-pro 等模型。
前置准备
- Node.js:24(dsh 硬性要求,npm 随 Node 自带)。装完重开终端,用
node --version验证,输出应以 v24 开头。 - API 密钥:在控制台「秘钥管理」创建并复制保存,密钥仅创建时可见,
sk-开头。
安装
通过 npm 全局安装,macOS、Linux 与 Windows 命令相同:
npm install -g @deepseek-ai/dsh
一步配置并启动
无需手改配置文件:把下面命令中的 sk-你的密钥 换成真实密钥后,整段复制运行即可。脚本会自动安装 dsh、备份并合并已有的 ~/.dsh/settings.yaml(不会删除主题等个人配置)、把密钥写入 ~/.dsh/.env(权限 0600),最后自动启动 dsh web。
macOS / Linux
bash <<'YOMI_SETUP'
set -e
npm install -g @deepseek-ai/dsh
YOMI_API_KEY="sk-你的密钥"
export YOMI_API_KEY
NODE_PATH="$(npm root -g)/@deepseek-ai/dsh/node_modules" node <<'NODE'
const fs = require('fs');
const os = require('os');
const path = require('path');
const yaml = require('js-yaml');
const home = process.env.DSH_HOME || path.join(os.homedir(), '.dsh');
const settingsPath = path.join(home, 'settings.yaml');
fs.mkdirSync(home, { recursive: true });
const current = fs.existsSync(settingsPath)
? (yaml.load(fs.readFileSync(settingsPath, 'utf8')) || {})
: {};
if (fs.existsSync(settingsPath)) {
fs.copyFileSync(settingsPath, settingsPath + '.bak.' + Date.now());
}
current['llm-pi-ai'] ??= {};
current['llm-pi-ai'].providers ??= {};
current['llm-pi-ai'].providers.yomiapi = {
displayName: 'Yomi API',
apiKeyEnv: 'YOMI_API_KEY',
api: 'openai-completions',
baseURL: 'https://api.yomiapi.com/v1',
models: [
{ id: 'deepseek-v4-pro', name: 'DeepSeek V4 Pro' },
{ id: 'deepseek-v4-flash', name: 'DeepSeek V4 Flash' },
{ id: 'gpt-5.6-sol', name: 'GPT 5.6 Sol' },
{ id: 'gpt-5.6-luna', name: 'GPT 5.6 Luna' },
{ id: 'gpt-5.6-terra', name: 'GPT 5.6 Terra' },
{ id: 'gpt-5.5', name: 'GPT 5.5' },
{ id: 'gpt-5.4', name: 'GPT 5.4' },
{ id: 'kimi-k3', name: 'Kimi K3' },
{ id: 'glm-5.2', name: 'GLM 5.2' },
],
};
current['agent-default-model'] = {
provider: 'yomiapi',
model: 'deepseek-v4-pro',
};
fs.writeFileSync(
settingsPath,
yaml.dump(current, { lineWidth: -1, noRefs: true }),
{ mode: 0o600 },
);
const envPath = path.join(home, '.env');
const oldLines = fs.existsSync(envPath)
? fs.readFileSync(envPath, 'utf8').split(/\r?\n/)
: [];
const lines = oldLines.filter(
(line) => line && !line.startsWith('YOMI_API_KEY='),
);
lines.push('YOMI_API_KEY=' + process.env.YOMI_API_KEY);
fs.writeFileSync(envPath, lines.join('\n') + '\n', { mode: 0o600 });
console.log('Yomi API configured. Default model: deepseek-v4-pro');
NODE
dsh web
YOMI_SETUP
Windows PowerShell
在 PowerShell 中运行同样内容的脚本:
npm install -g @deepseek-ai/dsh
$env:YOMI_API_KEY = 'sk-你的密钥'
$env:NODE_PATH = "$(npm root -g)\@deepseek-ai\dsh\node_modules"
@'
const fs = require('fs');
const os = require('os');
const path = require('path');
const yaml = require('js-yaml');
const home = process.env.DSH_HOME || path.join(os.homedir(), '.dsh');
const settingsPath = path.join(home, 'settings.yaml');
fs.mkdirSync(home, { recursive: true });
const current = fs.existsSync(settingsPath)
? (yaml.load(fs.readFileSync(settingsPath, 'utf8')) || {})
: {};
if (fs.existsSync(settingsPath)) {
fs.copyFileSync(settingsPath, settingsPath + '.bak.' + Date.now());
}
current['llm-pi-ai'] ??= {};
current['llm-pi-ai'].providers ??= {};
current['llm-pi-ai'].providers.yomiapi = {
displayName: 'Yomi API',
apiKeyEnv: 'YOMI_API_KEY',
api: 'openai-completions',
baseURL: 'https://api.yomiapi.com/v1',
models: [
{ id: 'deepseek-v4-pro', name: 'DeepSeek V4 Pro' },
{ id: 'deepseek-v4-flash', name: 'DeepSeek V4 Flash' },
{ id: 'gpt-5.6-sol', name: 'GPT 5.6 Sol' },
{ id: 'gpt-5.6-luna', name: 'GPT 5.6 Luna' },
{ id: 'gpt-5.6-terra', name: 'GPT 5.6 Terra' },
{ id: 'gpt-5.5', name: 'GPT 5.5' },
{ id: 'gpt-5.4', name: 'GPT 5.4' },
{ id: 'kimi-k3', name: 'Kimi K3' },
{ id: 'glm-5.2', name: 'GLM 5.2' },
],
};
current['agent-default-model'] = {
provider: 'yomiapi',
model: 'deepseek-v4-pro',
};
fs.writeFileSync(
settingsPath,
yaml.dump(current, { lineWidth: -1, noRefs: true }),
{ mode: 0o600 },
);
const envPath = path.join(home, '.env');
const oldLines = fs.existsSync(envPath)
? fs.readFileSync(envPath, 'utf8').split(/\r?\n/)
: [];
const lines = oldLines.filter(
(line) => line && !line.startsWith('YOMI_API_KEY='),
);
lines.push('YOMI_API_KEY=' + process.env.YOMI_API_KEY);
fs.writeFileSync(envPath, lines.join('\n') + '\n', { mode: 0o600 });
console.log('Yomi API configured. Default model: deepseek-v4-pro');
'@ | node
if ($LASTEXITCODE -eq 0) {
dsh web
}
脚本跑完后终端会显示本地地址(通常 http://127.0.0.1:3080),浏览器打开新建会话即可。以后使用:cd 到项目目录后运行 dsh web。
验证连通
export YOMI_API_KEY="sk-你的密钥"
dsh --profile headless "Reply with OK only"
返回 OK 即 dsh 已通过 Yomi API 成功调用模型。
手动配置与模型切换
也可以手动编辑 ~/.dsh/settings.yaml。完整示例:
llm-pi-ai:
providers:
yomiapi:
displayName: Yomi API
apiKeyEnv: YOMI_API_KEY
api: openai-completions
baseURL: https://api.yomiapi.com/v1
models:
- id: deepseek-v4-pro
name: DeepSeek V4 Pro
- id: deepseek-v4-flash
name: DeepSeek V4 Flash
- id: gpt-5.6-sol
name: GPT 5.6 Sol
- id: gpt-5.6-luna
name: GPT 5.6 Luna
- id: gpt-5.6-terra
name: GPT 5.6 Terra
- id: gpt-5.5
name: GPT 5.5
- id: gpt-5.4
name: GPT 5.4
- id: kimi-k3
name: Kimi K3
- id: glm-5.2
name: GLM 5.2
agent-default-model:
provider: yomiapi
model: deepseek-v4-pro
修改 agent-default-model.model 即可切换默认模型(已有会话可能沿用原模型,改完刷新页面、新建会话生效);会话中也可从模型选择器手动切换。模型目录持续更新,以控制台「模型服务」(模型广场)或以下命令返回为准:
curl https://api.yomiapi.com/v1/models -H "Authorization: Bearer sk-你的密钥"
deepseek-v4-pro(8 月 13 日官方新旗舰);追求更快更省可换 deepseek-v4-flash;gpt-5.6 系列、Kimi K3、GLM 5.2 同配可用。故障排查
401 / invalid_bearer_token
检查密钥完整、无多余空格、sk- 开头、未在控制台删除;仍报错就重建密钥。
dsh 命令找不到
重开终端;仍不行检查 npm 全局 bin 目录是否在 PATH(npm bin -g)。
node --version 不是 v24 开头
dsh 要求 Node.js 24,换装后再试。
