Claude Code — это консольный агент от Anthropic, который умеет читать файлы проекта, править код, запускать команды и тесты, искать по репозиторию и работать с git. Главное неудобство при его использовании — стоимость: длинные сессии с большим контекстом быстро съедают бюджет подписки.
Решение есть. DeepSeek предоставляет endpoint, совместимый с Anthropic API. Достаточно поменять базовый адрес и токен, и Claude Code начнёт работать на моделях DeepSeek, не требуя ни переустановки, ни патчей. В этой заметке я опишу, как это настроить на macOS, Linux и Windows.
Зачем это нужно
Причины могут быть разные:
— Цена. Модели DeepSeek стоят заметно дешевле Claude, а для рутинных задач агента — навигации по проекту, мелких правок, запуска тестов — топовое качество нужно не всегда.
— Доступность. Если у вас нет подписки или оплата картой Anthropic по каким-то причинам недоступна, DeepSeek становится рабочим вариантом.
— Эксперименты. Интересно сравнить, как разные модели справляются с одной и той же кодовой базой в одинаковой среде.
Что понадобится
Вам нужен установленный Claude Code и API-ключ DeepSeek. Если Claude Code ещё не стоит, порядок такой:
1. Установите Node.js 18 или новее. В Windows дополнительно понадобится Git for Windows.
2. Установите сам Claude Code командой ниже.
3. Проверьте установку.
npm install -g @anthropic-ai/claude-code
claude --version
Если версия отображается, значит установка прошла успешно. API-ключ создаётся в личном кабинете DeepSeek на странице ключей.
Настройка через переменные окружения
Вся интеграция сводится к переменным окружения. Для macOS и Linux это выглядит так:
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_AUTH_TOKEN=ваш_ключ_deepseek
export ANTHROPIC_MODEL=deepseek-flash[1m]
export ANTHROPIC_DEFAULT_OPUS_MODEL=deepseek-flash[1m]
export ANTHROPIC_DEFAULT_SONNET_MODEL=deepseek-flash[1m]
export ANTHROPIC_DEFAULT_HAIKU_MODEL=deepseek-flash
export CLAUDE_CODE_SUBAGENT_MODEL=deepseek-flash
export CLAUDE_CODE_EFFORT_LEVEL=max
export CLAUDE_CODE_AUTO_COMPACT_WINDOW=786432
Для Windows в PowerShell синтаксис другой, но имена переменных те же:
$env:ANTHROPIC_BASE_URL="https://api.deepseek.com/anthropic"
$env:ANTHROPIC_AUTH_TOKEN="ваш_ключ_deepseek"
$env:ANTHROPIC_MODEL="deepseek-flash[1m]"
Разберём, что здесь к чему. Переменная `ANTHROPIC_BASE_URL` перенаправляет запросы с серверов Anthropic на DeepSeek. `ANTHROPIC_AUTH_TOKEN` подставляет ваш ключ. Остальные переменные задают, какая модель используется в той или иной роли. Есть модели с суффиксом `[1m]` — это вариант с окном контекста около миллиона токенов, что позволяет агенту за один раз удерживать значительно больше файлов проекта. Соответственно `CLAUDE_CODE_AUTO_COMPACT_WINDOW` выставляется под размер этого окна, чтобы автоматическое сжатие истории не срабатывало слишком рано.
Переменные удобно не экспортировать каждый раз вручную, а прописать в конфигурации Claude Code. Тогда настройки будут подхватываться автоматически при запуске.
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
"ANTHROPIC_AUTH_TOKEN": "ваш_ключ_deepseek",
"ANTHROPIC_MODEL": "deepseek-flash[1m]",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-flash",
"CLAUDE_CODE_SUBAGENT_MODEL": "deepseek-flash"
}
}
После этого переходите в каталог проекта и запускайте агент:
cd ваш_проект
claude
Claude Code в VS Code
Claude Code доступен не только в терминале, но и как расширение для VS Code. Устанавливается оно штатным образом: откройте панель расширений по Cmd+Shift+X, найдите «Claude Code» и нажмите Install. Расширение выпускает сам Anthropic.
Внутри расширения лежит собственная копия CLI, и читает оно тот же файл ~/.claude/settings.json, что и терминальная версия. Настройки из предыдущего раздела действуют и здесь — но с одной оговоркой, из-за которой чаще всего и возникает путаница.
Проверка входа происходит до запуска
Перед стартом расширение проверяет учётные данные из своей собственной настройки `claudeCode.environmentVariables`, а не из settings.json. Значения из settings.json доходят до запущенного процесса — то есть адрес API и выбранные модели подхватываются корректно, — но собственную проверку входа расширения они не проходят. Если вы видите экран входа при том, что в терминале всё уже работает, причина именно в этом.
Лечится это несколькими строками в настройках VS Code: продублировать переменные в `claudeCode.environmentVariables` и отключить запрос входа.
{
"claudeCode.environmentVariables": [
{ "name": "ANTHROPIC_BASE_URL", "value": "https://api.deepseek.com/anthropic" },
{ "name": "ANTHROPIC_AUTH_TOKEN", "value": "ваш_ключ_deepseek" },
{ "name": "ANTHROPIC_MODEL", "value": "deepseek-flash[1m]" }
],
"claudeCode.disableLoginPrompt": true
}
Нюанс macOS
Если запускать VS Code из Dock или Finder, он не наследует переменные окружения из ~/.zshrc. Это стандартное поведение macOS, и оно отдельно оговорено в документации Claude Code. То есть `export ANTHROPIC_BASE_URL=…` в вашем шелле для расширения просто не сработает — этой переменной в его окружении не окажется.
Отсюда два вывода. Во-первых, настройки в `claudeCode.environmentVariables` надёжнее, чем переменные шелла. Во-вторых, если вы всё же предпочитаете шелл, запускайте редактор из терминала, где переменные уже экспортированы:
code .
Что не будет работать
На стороннем провайдере часть возможностей расширения недоступна, потому что они требуют аккаунта claude.ai:
— не будет полосы использования плана, голосового ввода и вкладки Web для облачных сессий;
— команды выхода из аккаунта в меню не показываются;
— `/usage` вместо лимитов плана покажет расход и количество токенов текущей сессии;
— Remote Control не работает, если базовый адрес указывает не на Anthropic.
Это ожидаемое поведение, а не признак того, что настройка не удалась.
Отдельно добавлю, что для JetBrains есть свой плагин, но устроен он иначе: он не содержит встроенного CLI, а запускает уже установленный в интегрированном терминале. Своих настроек для переменных окружения там нет, поэтому запускать IDE стоит из терминала с уже экспортированными переменными.
Как DeepSeek понимает имена моделей Claude
Claude Code внутри обращается к моделям по именам вида claude-opus, claude-sonnet и claude-haiku. DeepSeek перехватывает эти имена и подменяет их на свои:
— всё, что начинается с claude-opus, уходит на deepseek-v4-pro;
— всё, что начинается с claude-sonnet или claude-haiku, уходит на deepseek-flash;
— неизвестное имя модели тоже приводится к deepseek-flash.
Это значит, что даже без явного указания моделей интеграция заработает — но какие именно модели и по какому тарифу будут обслуживать запрос, лучше контролировать явно. Именно поэтому в настройках выше все роли прописаны руками.
На что обратить внимание
Совместимость неполная, и об этом стоит знать заранее. Часть возможностей Anthropic API DeepSeek просто игнорирует:
— Кэширование промптов. Поле `cache_control` не поддерживается. Claude Code активно пользуется кэшем, чтобы не переплачивать за повторную отправку одного и того же контекста. Здесь этого не будет, поэтому длинные сессии обходятся дороже, чем можно ожидать по прайсу за токен. Периодически начинайте новый диалог вместо бесконечного продолжения старого.
— Бюджет размышлений. Параметр `thinking` поддерживается, но `budget_tokens` внутри него игнорируется.
— Разное. Поля `top_k`, `service_tier`, `container` и подключение MCP-серверов со стороны API также игнорируются.
— MCP. Встроенный механизм MCP-серверов на стороне DeepSeek не работает, хотя обычные инструменты агента — чтение файлов, правка, запуск команд, поиск — функционируют нормально.
Отдельно стоит упомянуть про прокси. В сообществе есть проекты вроде `ds-cc-proxy`, которые ставятся между Claude Code и DeepSeek и берут на себя выравнивание мелких несовместимостей, а также разводят основную сессию и субагентов по разным моделям. Если стандартная настройка ведёт себя нестабильно, такой промежуточный слой может помочь.
Claude Code Router
Способ, описанный выше, ставит одну модель на все задачи. Но агент занимается очень разными вещами: разбирается в структуре проекта, правит мелочи, а иногда решает и по-настоящему сложную задачу. Логично, чтобы на разные типы работы шли разные модели. Ровно это и умеет claude-code-router (CCR) — локальный шлюз, который встаёт между Claude Code и провайдерами моделей.
Что это даёт
— Маршрутизацию по правилам. Можно задать, какая модель обслуживает основную сессию, какая — фоновые задачи, какая — режим планирования. Дорогую модель имеет смысл ставить только на сложные рассуждения, а рутину отдавать дешёвой.
— Резервные варианты. Если провайдер вернул ошибку, запрос уходит на следующую модель в цепочке, а не роняет сессию.
— Наблюдаемость. В интерфейсе видны журнал запросов, задержки, расход токенов и стоимость — то, о чём при прямом подключении приходится только догадываться.
— Один адрес для нескольких агентов. Провайдеры, ключи и правила живут в одном месте, а клиенты подключаются к одному локальному адресу.
Сначала о версиях — это важно
Здесь стоит предупредить, потому что сэкономит вам время. CCR за свою историю сильно переделали, и почти все статьи, которые вы найдёте в поиске, описывают устаревший вариант.
В старых версиях конфигурация лежала в файле ~/.claude-code-router/config.json с блоками Providers и Router, а запускалось всё командой `ccr code`. Сейчас так уже не работает. Актуальная версия (3.x) хранит настройки в базе SQLite и управляется через веб-интерфейс. Старый config.json читается ровно один раз как источник для миграции, если базы ещё нет, — после этого правки в нём ни на что не влияют.
То есть если вы нашли в интернете инструкцию с редактированием config.json и командой `ccr code` и у вас ничего не заработало — вы правите файл, который уже никто не читает. Это не ваша ошибка.
Установка
Понадобится Node.js 22 или новее.
npm install -g @musistudio/claude-code-router
ccr ui
Команда `ccr ui` поднимает службу в фоне и открывает в браузере интерфейс управления. Полезно знать и остальные команды: `ccr start` запускает службу, `ccr stop` останавливает её, `ccr serve` работает на переднем плане и удобен, когда нужно видеть логи.
По умолчанию интерфейс управления живёт на порту 3458, а сам шлюз для моделей — на порту 3456.
Настройка
Всё делается в веб-интерфейсе, без ручного редактирования файлов:
1. В разделе Providers добавьте провайдера DeepSeek и укажите его ключ. Обратите внимание: здесь нужен полный адрес до точки chat/completions, а не просто домен.
2. В разделе Models опишите, что это за модель, — описание помогает маршрутизации.
3. В разделе Agent Config задайте модель по умолчанию.
4. В разделе Routing настройте правила: какая модель на какие запросы идёт.
5. На странице API Keys создайте ключ клиента CCR — именно его, а не ключ DeepSeek, будет использовать Claude Code.
После этого остаётся направить Claude Code на шлюз: в качестве базового адреса укажите адрес шлюза, показанный в интерфейсе, а в качестве токена — ключ клиента CCR.
Приятный момент: правила маршрутизации можно писать не только полями, но и скриптом на JavaScript, если логика сложнее, чем сравнение одного поля.
Стоит ли этим пользоваться
Подключение DeepSeek к Claude Code — это в первую очередь способ снизить расходы, не отказываясь от удобной агентной среды. Вы получаете тот же интерфейс, те же инструменты и тот же рабочий процесс, но на другой модели. Настройка занимает несколько минут и полностью обратима: достаточно убрать переменные окружения, чтобы вернуться к моделям Anthropic.
Ограничения тоже понятны: нет кэша промптов, неполная совместимость по части полей API, а качество модели на сложных архитектурных задачах может отличаться. Для рутинной работы в репозитории — навигации, рефакторинга, прогона тестов — этого более чем достаточно.
Пример: Oni-Extended
Живой пример такой связки — мой проект Oni-Extended, форк порта игры Oni (Bungie, 2001) под Apple Silicon. Исходники игры написаны на C и живут больше двадцати лет, тестов в них никогда не было, а размеры файлов измеряются десятками тысяч строк. Тем не менее через Claude Code с DeepSeek в проект были добавлены новые функции: быстрое сохранение и загрузка по F5/F9, блок удержанием клавиши и флаг запуска -nodamage, отключающий урон.
Это хорошая иллюстрация того, о чём говорилось выше. Все задачи относятся к рутинной работе в большом репозитории — агент исследует чужой код, находит связи между модулями и проверяет гипотезы, а не проектирует архитектуру с нуля. Стоимость таких сессий на DeepSeek оказывается заметно ниже, чем на моделях Anthropic, при том что результат проверяется собственной инфраструктурой проекта: сборкой, стендом прогона уровней и автономными тестами.
Ссылки
https://platform.deepseek.com/api_keys
https://api-docs.deepseek.com
https://docs.anthropic.com/en/docs/claude-code
https://github.com/anthropics/claude-code
https://github.com/musistudio/claude-code-router
https://ccrdesk.top/en/guides/cli/
https://github.com/zefir1990/Oni-Extended
Источники
https://api-docs.deepseek.com/guides/anthropic_api
https://api-docs.deepseek.com/quick_start/agent_integrations/claude_code
https://ccrdesk.top/en/routing/
https://code.claude.com/docs/en/vs-code
Добавить комментарий