Continue — открытый AI-ассистент для программирования с расширением VS Code, плагином JetBrains и CLI, который подключается к собственному или стороннему API по OpenAI-совместимому протоколу. Ошибка на первом же запросе после настройки шлюза — обычное дело; чаще всего проблема кроется на пяти уровнях: учётные данные, адрес, ID модели, квота и сеть. Правильный порядок — сначала статус-код, затем воспроизведение минимальным запросом, и только потом изменения модели и контекста. Ниже — готовый к копированию базовый config.yaml и чек-лист диагностики.

О статусе: в 2026 году Continue была приобретена Cursor, официальный репозиторий переведён в режим только для чтения и больше активно не поддерживается. Существующие установки и форки сообщества работают, но поведение версий может остаться на уровне до покупки. Статья основана на конфигурации config.yaml, распространённой по состоянию на октябрь 2026 года; подход к диагностике применим и к старым версиям.

1. Сначала уровни: где именно возникает ошибка

Не меняйте модель при первом же сообщении об ошибке — начните с классификации по статус-коду.

Статус/симптом Обычное значение Что проверить сначала Повторять?
401 Ключ отсутствует, неверен, недействителен или нет прав Ключ, поле аутентификации, состояние аккаунта Нет
403 У ключа нет прав на модель или доступ заблокирован политикой Права на модель, настройки команды Нет
404 Неверный путь или модель не существует apiBase, ID модели Нет
400/413 Неверный формат запроса или слишком длинный контекст Контекст, параметры, max_tokens После исправления
429 Превышены частота, параллельность или квота токенов Потребление, общий ключ, стратегия повторов С задержкой
5xx Ошибка сервера или перегрузка шлюза Состояние сервиса, ID запроса С задержкой
Таймаут/сбой соединения DNS, TLS, прокси, firewall или потоковая цепочка Сеть и прокси После исправления

При диагностике фиксируйте один и тот же ключ, адрес и ID модели и меняйте только один параметр за раз; если изменить три сразу, восстановление не объяснит причину.

2. Базовая конфигурация: в config.yaml меняем только три вещи

Глобальный каталог конфигурации Continue — ~/.continue (macOS/Linux) или %USERPROFILE%\.continue (Windows). При наличии config.yaml он загружается приоритетнее старого config.json; смешивать форматы нельзя. Рабочий OpenAI-совместимый пример:

name: zsqh-gateway
version: 0.0.1
schema: v1

models:
  - name: Командная чат-модель
    provider: openai
    model: <ID модели, скопированный из списка>
    apiBase: https://api.zhongshangqihang.com/v1
    apiKey: <ваш API-ключ>
    roles:
      - chat
      - edit
      - apply
    capabilities:
      - tool_use

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

  • На верхнем уровне обязательны name, version, schema: v1; models — список, неверный отступ ломает разбор.
  • Для совместимого шлюза provider — openai; apiBase обычно указывают до /v1, не добавляя /chat/completions.
  • model должен точно совпадать с ID в списке моделей шлюза, включая регистр, дефисы и номер версии.
  • roles определяют, отвечает ли модель за чат, редактирование или применение патчей; автодополнение (autocomplete) предъявляет другие требования к возможностям интерфейса, и обычная чат-модель может не подойти.
  • Для вызова инструментов в режиме агента добавьте capabilities: [tool_use], иначе чат будет работать, а инструменты — нет. Если после сохранения ничего не изменилось, перезагрузите окно IDE и проверьте логи.

3. 401: сначала ключ, потом поле аутентификации

401 означает, что аутентификация не прошла проверку — это не связано с возможностями модели или контекстом. Проверяйте по порядку:

  1. Скопирован ли ключ целиком, нет ли пробелов, переводов строк или кавычек по краям. При копировании из чата чаще всего попадают скрытые символы.
  2. Записан ли ключ в поле apiKey и согласован ли он с заголовком аутентификации в requestOptions.headers, без дублирования и конфликтов.
  3. Не удалён ли ключ, не отключён и не истёк ли он; есть ли на аккаунте доступный баланс. Некоторые шлюзы при недостатке баланса возвращают 401 или 403 — смотрите тело ошибки.
  4. Указывает ли apiBase на среду, которой принадлежит ключ. Ключ тестовой среды на продакшн-адресе обычно тоже даёт 401.
  5. Действительно ли загрузился файл конфигурации. Если вы правите config.json, а загружается config.yaml, возникает ощущение «ничего не меняется».

Проверьте адрес и ключ минимальным запросом, исключив клиент Continue:

export API_KEY="sk-ваш-ключ"

curl -sS -o /tmp/continue_resp.json -w "%{http_code}\n" \
  "https://api.zhongshangqihang.com/v1/chat/completions" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"<ID модели>","messages":[{"role":"user","content":"ping"}],"max_tokens":16}'

cat /tmp/continue_resp.json

Код 200 означает, что ключ, адрес и модель в целом работают; при 401 попробуйте тестовый вход в консоли шлюза и не запускайте автоматические повторы.

4. 404: Base URL и ID модели делят ответственность пополам

404 не всегда означает, что модель снята с обслуживания; чаще всего это ошибка в пути:

  • В apiBase нет /v1, запрос попадает на веб-маршрут сайта и возвращает HTML или 404.
  • В apiBase указан /v1/chat/completions, клиент добавляет путь ещё раз — получается дублирование.
  • Адрес консоли принят за API-адрес, домен с опечаткой или в OpenAI-совместимое поле вставлен путь Anthropic /v1/messages.

ID модели тоже даёт 404 или model_not_found:

  • Регистр, дефисы и номер версии должны точно совпадать со списком моделей.
  • Модель может быть недоступна текущему аккаунту или тарифу, либо иметь разные ID в разных протоколах.
  • Интерфейс настроек может сохранить ID, но шлюз его не признаёт — проверяйте реальным запросом.

При диагностике сначала откройте /v1/models (если шлюз его предоставляет) и скопируйте ID из ответа, не вводите вручную.

5. 429: ограничение скорости — это не недостаток баланса

429 означает превышение частоты, параллельности или квоты токенов. Типичные сценарии:

  • Превышено число запросов или токенов в минуту, либо параллельных соединений.
  • Несколько человек используют один ключ, или агент непрерывно читает файлы и выполняет команды, отправляя много запросов за короткое время.
  • Автодополнение срабатывает слишком часто — запрос уходит после каждых нескольких нажатий.
  • Повторы без задержки усиливают поток ошибок и создают шторм; длинные контекстные запросы также занимают параллельные слоты.

Сначала смотрите заголовки и тело ошибки, а не удваивайте попытки. При наличии Retry-After ждите указанное время; без него используйте экспоненциальную задержку со случайным разбросом; для 401, 403, 404 повторы не нужны. Если один ключ обслуживает несколько сервисов, разделите его по проектам; для циклов агента задайте максимум раундов и лимит.

6. Таймауты, обрывы потока и прокси

Таймаут обычно не возвращает HTTP-статус: запрос долго не отвечает, появляются fetch failed, ECONNRESET или ответ обрывается на середине. Порядок проверки:

  1. Сначала отправьте не потоковый запрос с коротким контекстом. Если он проходит, проблема в потоковой цепочке или промежуточном прокси.
  2. Проверьте напрямую через curl -N, исключив клиент Continue; одновременно проверьте, не буферизует ли прокси SSE-ответ.
  3. Проверьте цепочку сертификатов. При TLS-инспекции корпоративного прокси укажите CA через requestOptions.caBundlePath; verifySsl: false годится только для временной отладки.
  4. Проверьте точность системного времени: большое расхождение ломает проверку сертификата.
  5. Для длинных задач задайте таймаут и максимум раундов; агент отправляет много запросов подряд, и зависшее соединение выглядит как «бесконечная загрузка». Названия полей таймаута зависят от версии.

Не используйте ping для проверки доступности API: он подтверждает только достижимость хоста, но не корректность TLS и пути.

7. Переполнение контекста и слишком большое тело запроса

Переполнение контекста обычно возвращает 400 или 413, в теле появляются context_length_exceeded, maximum context length. Continue отправляет открытые файлы, фрагменты поиска, ссылки и историю диалога вместе, поэтому фактический контекст часто длиннее, чем кажется.

Что делать:

  • Исключите артефакты сборки, логи и каталоги зависимостей через .continueignore или настройки индексации.
  • Закройте нерелевантные вкладки, длинные документы сначала суммаризируйте, длинные диалоги начинайте заново.
  • Снизьте max_tokens на запрос, сначала проверьте цепочку коротким запросом, затем постепенно удлиняйте.
  • Если ошибка возникает только в большом репозитории, сначала подозревайте, что поиск добавил слишком много фрагментов.

8. Как сохранять логи IDE для диагностики

В VS Code откройте палитру команд и выберите «Developer: Toggle Developer Tools», чтобы увидеть вывод Console; для подробных логов включите «Continue: Enable Console» и перезагрузите окно. В JetBrains смотрите ~/.continue/logs/core.log, логи IDE — в «Help > Show Log».

В логах фиксируйте минимум: время, статус, код ошибки, ID модели, хост apiBase, ID запроса, длительность и число повторов. ID запроса обычно находится в заголовках ответа и может называться request-id, x-request-id или x-oneapi-request-id — ориентируйтесь на фактический ответ шлюза. Не записывайте полный ключ, промпты и пользовательский код; в ключе оставляйте первые и последние четыре символа.

Пример рабочей строки лога:

2026-10-19T10:12:33+08:00 status=429 code=rate_limit_exceeded model=<ID модели> host=api.zhongshangqihang.com request_id=... latency_ms=1840 retry=2

9. Чек-лист диагностики

  1. Запишите исходный текст ошибки, статус, время и ID запроса.
  2. Воспроизведите командой curl из статьи и проверьте, возникает ли проблема только внутри Continue.
  3. Проверьте, что загружается — config.yaml или config.json, и корректны ли отступы YAML.
  4. Проверьте, что apiBase заканчивается на /v1, а ID модели скопирован из списка.
  5. Проверьте новый ключ, чтобы исключить его недействительность, квоту или командную политику.
  6. Сначала используйте не потоковый запрос с коротким контекстом, затем постепенно возвращайте потоковый режим и длинный контекст; при необходимости смените сеть или прокси.
  7. Если всё перечисленное прошло, передайте логи и шаги воспроизведения в поддержку шлюза или плагина.

10. Частые вопросы

Ключ работает в другом клиенте, а в Continue даёт 401?

Сначала проверьте, в то ли поле он введён, затем — действительно ли загружается config.yaml. При совместном существовании старого config.json и нового config.yaml легко править не тот файл; если команда ограничивает сторонние ключи, локальная конфигурация тоже не поможет.

404 всегда означает, что модель отключена?

Нет. Чаще всего в apiBase не хватает или лишний /v1, либо ID модели содержит опечатку. Сначала откройте список моделей и скопируйте ID.

429 — это недостаток баланса?

Не обязательно. 429 означает превышение скорости или квоты; при недостатке баланса могут возвращаться 401, 402 или 403 — ориентируйтесь на тело ошибки и страницу счёта.

Почему падает только потоковый режим или автодополнение?

Сначала подозревайте буферизацию прокси, таймаут простоя и различия возможностей интерфейса. Для потока сравните с не потоковым запросом; при сбое автодополнения проверьте, поддерживают ли модель и интерфейс autocomplete или FIM, и не назначайте чат-модель на роль autocomplete.

Continue больше не поддерживается — стоит ли её настраивать?

Существующие установки и форки сообщества работают, семантика ошибок остаётся той же, что у OpenAI-совместимых интерфейсов. Для нового проекта с долгой поддержкой стоит оценить активно развивающуюся альтернативу; если вы просто используете текущую среду, достаточно пройти по порядку из статьи.

Что дальше

Создайте тестовый ключ в ZSQH AI Gateway, прогоните команды curl из статьи для аутентификации, модели и потока, затем заполните config.yaml. Модели и цены — в тарифах на модели, они меняются вслед за поставщиками; при диагностике сначала фиксируйте переменные, потом заменяйте их по одной.

Читайте также:

Примечание о товарных знаках: Continue — товарный знак Continue Dev, Inc.; Cursor, Anysphere, OpenAI, Anthropic, Claude и другие названия принадлежат их правообладателям. Статья носит технический характер и не означает аффилированности или партнёрства с указанными компаниями. Статус продукта, тексты ошибок и поведение интерфейсов могут меняться — сверяйтесь с официальной документацией и фактическими ответами.