Подключение TeamoRouter к DeepSeek Harness
DeepSeek Harness (команда dsh) поддерживает OpenAI-совместимых провайдеров моделей. Выполнив это руководство, вы сможете использовать через TeamoRouter модели deepseek-flash, deepseek-flash-free, deepseek-v4-pro, deepseek-v4-flash, deepseek-v4-flash-free, gpt-6-astra, gpt-5.6-sol и другие, сохранив веб-интерфейс, сессии и агентные возможности Harness.
Поддерживаемые модели
- DeepSeek:
deepseek-flash(DeepSeek V4.1 Flash),deepseek-flash-free(бесплатная),deepseek-v4-pro(официальный релиз 13 августа),deepseek-v4-flash(официальный релиз 31 июля),deepseek-v4-flash-free - GPT:
gpt-6-astra,gpt-5.6-sol,gpt-5.6-luna,gpt-5.6-terra,gpt-5.5
1. Подготовка
Прежде чем начать, установите Node.js 24 и подготовьте действующий API-ключ TeamoRouter.
1.1 Установите Node.js 24
DeepSeek Harness требует Node.js 24. npm входит в состав Node.js. Скачайте установщик для своей ОС и архитектуры процессора:
При использовании китайского зеркала выберите каталог v24.x.x и скачайте установщик для своей системы. После установки заново откройте терминал и проверьте версии:
node --version
npm --version
Вывод node --version должен начинаться с v24..
API-ключи TeamoRouter начинаются с sk-teamo-. Создать ключ можно в консоли TeamoRouter.
2. Настройка и запуск одной командой
Открывать и вручную править файлы конфигурации не нужно. Замените sk-teamo-replace-with-your-api-key в блоке кода на свой API-ключ TeamoRouter, затем скопируйте и выполните всю команду в терминале. Она автоматически установит, настроит и запустит DeepSeek Harness.
macOS / Linux
bash <<'TEAMOROUTER_SETUP'
set -e
npm install -g @deepseek-ai/dsh
TEAMOROUTER_API_KEY="sk-teamo-replace-with-your-api-key"
export TEAMOROUTER_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.teamorouter = {
displayName: 'TeamoRouter',
apiKeyEnv: 'TEAMOROUTER_API_KEY',
api: 'openai-completions',
baseURL: 'https://api.teamorouter.com/v1',
models: [
{ id: 'deepseek-flash', name: 'DeepSeek V4.1 Flash' },
{ id: 'deepseek-flash-free', name: 'DeepSeek V4.1 Flash Free' },
{ id: 'deepseek-v4-pro', name: 'DeepSeek V4 Pro' },
{ id: 'deepseek-v4-flash', name: 'DeepSeek V4 Flash' },
{ id: 'deepseek-v4-flash-free', name: 'DeepSeek V4 Flash Free' },
{ id: 'gpt-6-astra', name: 'GPT 6 Astra' },
{ 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' },
],
};
current['agent-default-model'] = {
provider: 'teamorouter',
model: 'deepseek-flash-free',
};
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('TEAMOROUTER_API_KEY='),
);
lines.push('TEAMOROUTER_API_KEY=' + process.env.TEAMOROUTER_API_KEY);
fs.writeFileSync(envPath, lines.join('\n') + '\n', { mode: 0o600 });
console.log('TeamoRouter configured. Default model: deepseek-flash-free');
NODE
dsh web
TEAMOROUTER_SETUP
Windows PowerShell
npm install -g @deepseek-ai/dsh
$env:TEAMOROUTER_API_KEY = 'sk-teamo-replace-with-your-api-key'
$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.teamorouter = {
displayName: 'TeamoRouter',
apiKeyEnv: 'TEAMOROUTER_API_KEY',
api: 'openai-completions',
baseURL: 'https://api.teamorouter.com/v1',
models: [
{ id: 'deepseek-flash', name: 'DeepSeek V4.1 Flash' },
{ id: 'deepseek-flash-free', name: 'DeepSeek V4.1 Flash Free' },
{ id: 'deepseek-v4-pro', name: 'DeepSeek V4 Pro' },
{ id: 'deepseek-v4-flash', name: 'DeepSeek V4 Flash' },
{ id: 'deepseek-v4-flash-free', name: 'DeepSeek V4 Flash Free' },
{ id: 'gpt-6-astra', name: 'GPT 6 Astra' },
{ 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' }
]
};
current['agent-default-model'] = {
provider: 'teamorouter',
model: 'deepseek-flash-free'
};
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('TEAMOROUTER_API_KEY=')
);
lines.push('TEAMOROUTER_API_KEY=' + process.env.TEAMOROUTER_API_KEY);
fs.writeFileSync(envPath, lines.join('\n') + '\n', { mode: 0o600 });
console.log('TeamoRouter configured. Default model: deepseek-flash-free');
'@ | node
if ($LASTEXITCODE -eq 0) {
dsh web
}
Команда устанавливает DeepSeek Harness, делает резервную копию и объединяет существующую конфигурацию, сохраняет ключ, настраивает модели TeamoRouter и запускает Harness. Ваша тема и другие настройки не удаляются.
После запуска терминал покажет локальный URL, обычно http://127.0.0.1:3080. Откройте его в браузере и создайте новую сессию. Чтобы позже снова запустить Harness, выполните из каталога проекта:
dsh web
Чтобы использовать Harness в конкретном проекте, перед dsh web перейдите в реальный каталог проекта. Не копируйте /path/to/my-project буквально — это лишь заполнитель.
3. Проверьте подключение
Отправьте минимальный запрос без графического интерфейса (headless), чтобы проверить конфигурацию, API-ключ и модель:
export TEAMOROUTER_API_KEY="sk-teamo-xxxxxx"
dsh --profile headless "Reply with OK only"
Если терминал вернул OK, DeepSeek Harness успешно вызвал модель через TeamoRouter. Выполните dsh web, чтобы открыть веб-интерфейс.
4. Добавление и смена моделей
Чтобы выбирать в Harness из нескольких моделей TeamoRouter, добавьте их в тот же список models. В примере — DeepSeek V4.1 Flash, платные и бесплатные модели DeepSeek V4 и несколько моделей GPT:
llm-pi-ai:
providers:
teamorouter:
displayName: TeamoRouter
apiKeyEnv: TEAMOROUTER_API_KEY
api: openai-completions
baseURL: https://api.teamorouter.com/v1
models:
- id: deepseek-flash
name: DeepSeek V4.1 Flash
- id: deepseek-flash-free
name: DeepSeek V4.1 Flash Free
- id: deepseek-v4-pro
name: DeepSeek V4 Pro
- id: deepseek-v4-flash
name: DeepSeek V4 Flash
- id: deepseek-v4-flash-free
name: DeepSeek V4 Flash Free
- id: gpt-6-astra
name: GPT 6 Astra
- id: gpt-5.6-sol
name: GPT 5.6 Sol
- id: gpt-5.6-luna
name: GPT 5.6 Luna
- id: gpt-5.5
name: GPT 5.5
- id: gpt-5.4
name: GPT 5.4
agent-default-model:
provider: teamorouter
model: deepseek-flash-free
Измените agent-default-model.model, чтобы задать модель по умолчанию для новых сессий. Существующие сессии могут продолжить работать со своей исходной моделью. После смены модели по умолчанию обновите страницу и создайте новую сессию либо переключите модель вручную в селекторе.
Каталог моделей TeamoRouter постоянно обновляется. Чтобы уточнить актуальные ID моделей, выполните:
curl https://api.teamorouter.com/v1/models \
-H "Authorization: Bearer sk-teamo-xxxxxx"
5. Решение проблем
API возвращает 401 или invalid_bearer_token. Убедитесь, что API-ключ полный, без лишних пробелов, не удалён и начинается с sk-teamo-. Если ошибка повторяется, создайте новый ключ в консоли TeamoRouter и попробуйте снова.