Чат ChatGPT и программный доступ — разные продукты с разными счетами. В чате вы пишете человеку-оператору модели и получаете ответ на экране. Через API вы встраиваете модель в свою программу: сайт, бот, внутренний скрипт. Подписка Plus не включает в себя безлимитный ключ, а ключ не открывает сам по себе историю ваших чатов. Ниже — с чего начать, как не положить секрет в репозиторий и какие ошибки новички принимают за «поломку нейросети».
Чем ключ отличается от окна чата
В окне чата уже есть интерфейс, история и кнопки режимов. Вы платите тарифом, если платите, и работаете руками. В программном доступе интерфейс строите вы. Вы сами решаете, что показать пользователю, что записать в журнал и как оборвать слишком длинный запрос. Счёт за такие вызовы смотрят в кабинете разработчика, а не на странице Plus.
Путаница звучит так: «я оплатил чат, почему запрос с ключом не проходит». Потому что это другой кабинет. И наоборот: рабочий ключ не заменяет вход в чат на ноутбуке. Модели, которые вы видите в селекторе чата, и модели, доступные ключу, пересекаются не один в один. Ориентир по продукту, не по ключу: линейка в чате. Повседневное окно: чат в браузере.
Где живёт ключ и куда его нельзя класть
Ключ создают в кабинете разработчика, в разделе ключей. Название у кабинета может быть на английском. Ориентир — вы вошли в аккаунт, где есть биллинг именно для программного доступа, и видите кнопку создания ключа.
Дальше ключ живёт в переменной среды или в хранилище секретов. Не в файле, который уезжает в общий репозиторий. Не на скриншоте в чат коллегам. Не в сообщении «посмотри, почему не работает», отправленном в тот же ChatGPT. Не в коде примера, который вы публикуете. Если ключ засветился, его отзывают и выпускают новый. Удалить картинку из чата недостаточно: секрет уже надо считать утёкшим.
Для двоих людей — два ключа или нормальный проект с правами, а не один пароль в мессенджере. Ограничьте ключ тем, чем пользуетесь. Широкий ключ «на всякий случай» больнее отзывать.
Первый запрос без магии
Выберите модель, которая точно открыта вашему кабинету. Передайте ей инструкцию, как отвечать, и текст пользователя. Задайте язык и предел длины. Разберите ответ в программе: не пустой ли он, нет ли ошибки сети. Покажите пользователю уже ваш текст, а не сырой служебный конверт.
Имеет смысл сначала добиться одного короткого ответа «два плюс два» или «ответь одним словом: готово». Если не проходит даже это, не отлаживайте длинный промпт. Сломан ключ, имя модели или сеть. Если короткое проходит, а длинное нет, дело уже в лимите, таймауте или размере текста.
Русский в инструкции работает так же, как в чате: напишите, на каком языке ждать ответ. Подробнее про язык в продукте: ChatGPT на русском. В коде комментарии можно оставить русскими, секреты — нигде.
Типичные ошибки и что они значат
Код 401 или 403: ключ неверный, отозван, скопирован с лишним пробелом или у кабинета нет права на эту модель. Создавать второй параллельный запрос бессмысленно, пока не проверен секрет.
Код 429: слишком часто или слишком много за короткое время. Нужна пауза и повтор с увеличивающимся ожиданием, а не цикл из ста немедленных попыток. Такой цикл только продлевает отказ.
Пустой ответ при удачном коде: вы запросили странный формат и не разобрали поля. Напечатайте структуру ответа в журнале на своём компьютере, без ключа в том же журнале.
Таймаут: сеть или слишком длинная генерация. Поставьте предел времени в клиенте. Без него программа висит, а человек думает, что сайт умер.
Если не открывается именно веб-чат, это не лечится ключом. Разбор другой: чат не открывается.
Биллинг, который новички не замечают
У программного доступа бывает отдельный лимит трат. Пока в кабинете не включена оплата или не задан потолок, запросы могут отваливаться, хотя ключ «настоящий». Поставьте потолок, который вам не жалко потерять на ошибке цикла. Проверьте его до того, как отдадите программу пользователям.
Цена запроса зависит от модели и длины текста. Точные цифры смотрите в кабинете в день, когда считаете смету. В статью их не переписывают: они устаревают раньше, чем вы дочитаете чужой пересказ. Страница про тариф чата не является прайсом ключа: Plus описывает подписку окна, не счёт разработчика.
Что писать в инструкции модели
Роль, граница и формат. Пример смысла, не готовый продакшен: отвечай кратко, только по переданным полям, если данных нет — так и скажи, не выдумывай цену, язык русский. Не кладите в инструкцию пароли клиентов и внутренние адреса админок.
Журнал программы тоже опасен. Если вы печатаете каждый запрос целиком, в журнал уедут персональные данные пользователя вашего бота. Маскируйте или не пишите тело. Ключ в журнал не попадает никогда, даже частично.
Чат как черновик для программы, не как место для ключа
Обсуждать структуру запроса в обычном чате можно. Вставляйте вымышленные поля: «заказ 1001, сумма скрыта». Не вставляйте боевой ключ и не вставляйте выгрузку пользователей. Как устроен разговор про код без секретов: ChatGPT для кода. Общие привычки про данные: данные в чате.
Готовый фрагмент из чата прочитайте перед вставкой в проект. Частая порча — пример, где секрет написан прямо в строке, и пример, где нет обработки отказа. Первое вычистите. Второе добавьте до того, как программу увидит кто-то кроме вас.
Минимальная проверка перед показом другим
- Короткий запрос проходит, длинный обрывается предсказуемо, а не висит молча.
- Неверный ключ даёт понятную ошибку, а не бесконечные повторы.
- При отказе по частоте программа ждёт, а не долбит сервис.
- В репозитории нет секрета: поиск по проекту не находит ключ.
- В журнале нет тел писем клиентов и нет ключа.
- Потолок трат в кабинете включён.
Пример: внутренний черновик ответов, не публичный бот
Вам нужно для себя сокращать одни и те же служебные заметки. На старте хватит скрипта на своём компьютере: текст из файла, ответ в другой файл, ключ в переменной среды. Не нужен сайт, не нужен общий логин, не нужна история чата. Когда это живёт неделю и вы понимаете расход, тогда думаете, показывать ли форму коллегам.
Обратный порядок — сразу веб-форма в интернет — заканчивается чужим человеком, который жжёт ваш потолок, и ключом в исходниках фронтенда. Ключ во фронтенд, который виден браузеру, не кладут. Вызов идёт с вашей стороны, где секрет не отдаётся наружу.
Команда
Один ключ на всех в общем документе — это один инцидент на всех. Разделите проекты кабинета по задачам: эксперимент отдельно, рабочий вызов отдельно. Увольнение человека тогда не требует паники «кто ещё видел тот файл», если ключ и так был личным и его можно отозвать точечно.
Не путайте рабочее пространство чата и кабинет ключей. Приглашение в Team не выдаёт людям право создавать ключи, пока вы сами это не настроили. И наоборот.
Как устроен один маленький скрипт без лишней архитектуры
На старте достаточно трёх шагов в вашей голове, даже если синтаксис языка разный. Прочитать текст из локального файла. Отправить его вместе с короткой инструкцией. Записать ответ в другой локальный файл. Ключ скрипт берёт из среды, и в файле рядом с кодом его нет. Рядом положите пример среды с заглушкой, а не с боевым значением, и назовите пример так, чтобы его не приняли за настоящий секрет.
Добавьте развилку на отказ. Если доступа нет, скрипт пишет одну понятную строку и останавливается. Если просят подождать из-за частоты, скрипт ждёт и повторяет ограниченное число раз, потом останавливается. Бесконечный повтор — способ незаметно потратить потолок, пока вы смотрите в другую сторону.
Пока эти три шага не стабильны, не добавляйте базу, очередь и веб-форму. Каждое усложнение прячет ключ в новом месте. Сначала один компьютер, один человек, один тип текста.
Промпт, который не раздувается
Инструкция на десяток правил работает хуже, чем три. Язык ответа. Что делать, если во входном тексте нет нужного поля. Запрет придумывать числа. Остальное вы правите у себя после ответа. Длинная инструкция, скопированная из чужого «идеального промпта», тащит чужие требования: тон блога, эмодзи, лишние заголовки, которых в вашей служебной заметке быть не должно.
Проверяйте инструкцию на вымышленном тексте. Если на пустом входе модель всё равно выдала цену и срок, запрет не сработал, и в прод это нести нельзя. Поправьте инструкцию и повторите тот же пустой пример. Не празднуйте удачный ответ на удобном тексте, где все поля и так были на месте.
Версию инструкции храните рядом с кодом, без секретов. Когда ответ внезапно стал многословным, вы сравниваете инструкцию с прошлой, а не гадаете, «не сменилась ли модель сама». Имя модели тоже запишите явно. Тихий переход на другую модель меняет и расход, и привычку ответа.
Кто отвечает, если программа написала клиенту лишнее
Отвечаете вы, не модель и не кабинет ключей. Поэтому наружу программа говорит только то, что вы разрешили форматом: например, черновик, который человек ещё прочитает. Автоматическая отправка писем с первого дня — плохой учебный проект. Сначала файл с ответом, который открываете вы.
Если позже появится пользователь кроме вас, заранее решите, какие поля вам нельзя даже видеть в журнале. «Так удобнее отлаживать» — слабая причина хранить чужие адреса месяцами. Отладка на вымышленных данных ловит те же ошибки формата.
FAQ
Plus и API — это одна оплата?
Нет. Подписка на чат и счёт за программный доступ включаются в разных местах. Одно не заменяет другое.
Можно ли вставить ключ в чат, чтобы тот проверил формат?
Нет. Формат смотрят по документации кабинета, а в пример подставляют явную заглушку. Боевой ключ после такой «проверки» надо отзывать.
Почему ключ работал, а затем стал писать отказ доступа?
Его могли отозвать, кончился потолок трат, или вы запросили модель, которой в кабинете нет. Начните с короткого запроса и экрана биллинга, не с переписывания промпта.
Нужно ли уметь программировать?
Для ключа — да, хотя бы на уровне скрипта и переменных среды. Если нужен просто ответ на письмо, вам хватит обычного чата, ключ только добавит секреты и счёт.
Где брать точные цены и имена моделей?
В кабинете разработчика в день работы. Статья сознательно не закрепляет цифры и не подменяет экран продукта.
Что сделать, если ключ уже попал в репозиторий?
Отозвать его в кабинете, выпустить новый, убрать секрет из истории проекта так, как это принято у вас в команде, и проверить журналы. Одной новой правки «удалил строку» мало: старый коммит мог остаться.
