Подключение 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 и скачайте установщик для своей системы. После установки заново откройте терминал и проверьте версии:

bash
node --version
npm --version

Вывод node --version должен начинаться с v24..

API-ключи TeamoRouter начинаются с sk-teamo-. Создать ключ можно в консоли TeamoRouter.

Создать API-ключ TeamoRouter

2. Настройка и запуск одной командой

Открывать и вручную править файлы конфигурации не нужно. Замените sk-teamo-replace-with-your-api-key в блоке кода на свой API-ключ TeamoRouter, затем скопируйте и выполните всю команду в терминале. Она автоматически установит, настроит и запустит DeepSeek Harness.

macOS / Linux

bash
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

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, выполните из каталога проекта:

bash
dsh web

Чтобы использовать Harness в конкретном проекте, перед dsh web перейдите в реальный каталог проекта. Не копируйте /path/to/my-project буквально — это лишь заполнитель.

3. Проверьте подключение

Отправьте минимальный запрос без графического интерфейса (headless), чтобы проверить конфигурацию, API-ключ и модель:

bash
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:

yaml
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 моделей, выполните:

bash
curl https://api.teamorouter.com/v1/models \
  -H "Authorization: Bearer sk-teamo-xxxxxx"

5. Решение проблем

API возвращает 401 или invalid_bearer_token. Убедитесь, что API-ключ полный, без лишних пробелов, не удалён и начинается с sk-teamo-. Если ошибка повторяется, создайте новый ключ в консоли TeamoRouter и попробуйте снова.

Готовы? Три шага, чтобы начатьВойдите в консоль · пополните баланс · создайте API Key
DiscordПомощь сообщества
Подключение TeamoRouter к DeepSeek Harness · Документация