Перейти к содержимому
Зарегистрироваться бесплатно
Подключение Coding Agent

DeepSeek Harness: настройка API Key, Base URL и моделей

Подключите DeepSeek Harness к BetterToken: задайте API Key и Base URL в профиле headless, выберите протокол и проверьте чтение файлов.

Подключите DeepSeek Harness (dsh) к BetterToken через собственный провайдер в профиле headless. В тестах на macOS @deepseek-ai/dsh@0.2.1-rc.2 выполнил текстовые запросы и вызовы инструментов для чтения файлов во всех 3 попытках для каждой комбинации: Chat Completions с моделью GPT, Responses с моделью GPT, Anthropic Messages с моделью Claude и Anthropic Messages с моделью GPT.

Ключевые параметры

ПолеЗначение
API KeyAPI Key BetterToken из переменной окружения, имя которой задано в apiKeyEnv
Base URLhttps://bettertoken.ai/v1 — Chat Completions / Responses
Base URL для Anthropic Messageshttps://bettertoken.ai, без /v1
ModelYOUR_MODEL_ID
Файл конфигурации$DSH_HOME/profiles/headless/cordis.patch.yml (DSH_HOME по умолчанию равен ~/.dsh)

Подготовка

Установка

Запустите проверенную здесь версию без глобальной установки:

Окно терминала
npx @deepseek-ai/dsh@0.2.1-rc.2 --help

Во время тестирования npm-тег latest указывал на 0.2.1-rc.2. Это релиз-кандидат. Другие теги, в том числе next, не проверялись.

Ручная настройка

Задайте API Key в переменной окружения, заменив YOUR_API_KEY:

Окно терминала
export BETTERTOKEN_API_KEY="YOUR_API_KEY"

Создайте ~/.dsh/profiles/headless/cordis.patch.yml. Файл содержит список патчей Cordis. Замените оба значения YOUR_MODEL_ID одним и тем же точным Model ID:

Chat Completions

- id: llm-pi-ai
config:
providers:
bettertoken:
api: openai-completions
baseURL: https://bettertoken.ai/v1
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

Responses

- id: llm-pi-ai
config:
providers:
bettertoken:
api: openai-responses
baseURL: https://bettertoken.ai/v1
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

Anthropic Messages

- id: llm-pi-ai
config:
providers:
bettertoken:
api: anthropic-messages
baseURL: https://bettertoken.ai
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

apiKeyEnv содержит имя переменной окружения, а не сам API Key и не выражение ${...}. Для собственного провайдера нужны api, baseURL и хотя бы одна запись в models; в каждой записи обязателен только id модели. Если llm-pi-ai уже настроен, скопируйте провайдеры, которые хотите сохранить, в тот же config: новая запись заменяет существующую.

Для собственных провайдеров поле api принимает только openai-completions, openai-responses и anthropic-messages. В качестве Anthropic Base URL укажите корень сайта: клиент сам добавляет /v1/messages.

Чтобы проверить синтаксис без запроса к модели, выполните npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --dump-config.

Проверка подключения

Выполните в том же терминале:

Окно терминала
npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --json "Reply with only: OK"

--json выводит по одному событию JSON на строку. Убедитесь, что код завершения равен 0, поле turn_end.reason указывает на нормальное завершение, а text последнего события final равен OK. При сбое тоже может появиться пустое событие final, поэтому одного его наличия недостаточно.

Для проверки доступа к файлам создайте sample.txt в пустом каталоге. Из этого каталога выполните ту же команду с запросом Read sample.txt using a tool. Reply with only its exact contents.. Убедитесь, что вывод содержит tool_call, tool_result с текстом файла и совпадающий с ним текст final.

Смена модели

Замените оба значения YOUR_MODEL_ID другим точным Model ID. Если новая модель использует другой протокол, например Claude через Anthropic Messages, измените вместе api и baseURL. Чтобы получить список моделей шлюза, выберите Fetch available models для собственного провайдера в веб-интерфейсе DeepSeek Harness. В тестах один и тот же сервис обнаружения возвращал список моделей BetterToken для всех трёх протоколов.

Частые ошибки

СимптомЧто проверить
MISSING_CREDENTIAL, код завершения 1, запроса нет в панели управленияПроцесс не получил переменную с именем из apiKeyEnv. Экспортируйте её в терминале, из которого запускаете dsh, и проверьте написание. Эта проверка выполняется локально.
Профиль headless не использует Key, сохранённый в веб-интерфейсеПрофиль headless читает учётные данные только из окружения запуска, затем из .env в текущем каталоге, затем из .env в DSH_HOME, в этом порядке.
404, путь запроса заканчивается на /v1/v1/messagesВ конце Anthropic baseURL указан /v1. Используйте https://bettertoken.ai.
Модель не найденаСнова скопируйте Model ID из каталога моделей и укажите его в обоих местах.
Много повторных попыток после сбояБез retryPolicy адаптер по умолчанию делает 5 повторных попыток. Явно задайте maxRetries, как в примерах.
Ошибка версии Node.jsИспользуйте Node.js 24.9 или новее.

См. также

Технические детали

Для трёх значений api в тестах использовались пути /v1/chat/completions, /v1/responses и /v1/messages. dsh также автоматически запрашивает название сессии через настроенные провайдер и модель, поэтому одна задача может вызывать несколько запросов. Лимиты вывода по умолчанию добавлял клиент, например 32768 токенов для основного запроса; в конфигурации они не задавались.

Поля input и contextWindow в записи модели — это объявления для клиента. Они не запрашивают и не подтверждают лимиты шлюза. Ввод изображений не проверялся. Тесты проводились только на macOS.