БэкендData и ИИPython

GigaChat API + Python: делаем первого русскоязычного чат-бота

Подключаем GigaChat API к Python, храним ключ в окружении, отправляем сообщения с историей и собираем простой русскоязычный чат.

Кодик

Автор

6 мин чтения

GigaChat API можно освоить на одном небольшом проекте, если сразу видеть вход, действие и результат. Официальный Python SDK берёт на себя получение access token и позволяет сосредоточиться на сообщениях и истории диалога. Ниже вы соберёте работающий пример и проверите обычный и граничный сценарии.

Первый запрос часто ломается из-за неверного scope, сертификатов или попытки передать ключ прямо в исходнике. Поэтому отделим настройку, входные данные, основное действие и проверку. В этой статье вы соберёте консольный чат с системной инструкцией, короткой историей и командой выхода. Проверка: бот отвечает по-русски, помнит предыдущую реплику и завершает диалог по слову exit.

1Соберите минимум

получить ключ и выбрать правильный scope. Не расширяйте проект до первого успешного запуска.

2Увидьте данные

модель видит роль каждой реплики. Проверяйте значение, а не отсутствие ошибки.

3Измените правило

После успеха добавьте /reset и ограничение длины истории. Так копирование станет практикой.

Как устроен учебный проект GigaChat API

GigaChat API получает входные данные, проверяет их, выполняет одно внешнее действие и сохраняет наблюдаемый результат. Держите ввод, логику и отображение раздельно: тогда каждый этап можно проверить отдельно.

ЭтапДействиеПроверяемый результат
Доступполучить ключ и выбрать правильный scopeSDK получает access token
Сообщениясоздать system и user элементы историимодель видит роль каждой реплики
Ответвызвать chat completion через SDKтекст извлекается из ответа
Историядобавить ответ assistant перед новым вопросомвторая реплика учитывает первую

Контрольные точки: доступ, сообщения, ответ и история. Следующий шаг начинается после совпадения с ожидаемым результатом.

Путь данных в проекте GigaChat API
От входных данных до видимого результата. Сначала проверяется вход, затем действие и только потом интерфейс.

Зафиксируйте первый успех Запустите минимальный запрос без цикла. Если ответ не пришёл, сначала проверьте credentials, scope и доверенные сертификаты. Сохраните команду запуска и ожидаемый вывод.

Собираем рабочий пример шаг за шагом

Материал сверялся с официальной документацией сервиса 21 октября 2026 года. Установите gigachat и задайте GIGACHAT_CREDENTIALS. Не отключайте проверку TLS ради быстрого исправления. Проверьте текущую папку через pwd или Get-Location. Вставьте пример целиком, выполните один раз, затем разбирайте по частям.

import os
from gigachat import GigaChat
from gigachat.models import Chat, Messages, MessagesRole

messages = [
    Messages(role=MessagesRole.SYSTEM, content="Отвечай кратко и по-русски."),
]

with GigaChat(
    credentials=os.environ["GIGACHAT_CREDENTIALS"],
    scope=os.getenv("GIGACHAT_SCOPE", "GIGACHAT_API_PERS"),
) as client:
    while True:
        text = input("Вы: ").strip()
        if text.lower() == "exit":
            break
        if not text:
            continue
        messages.append(Messages(role=MessagesRole.USER, content=text))
        response = client.chat(Chat(messages=messages, max_tokens=300))
        answer = response.choices[0].message.content
        print("Бот:", answer)
        messages.append(Messages(role=MessagesRole.ASSISTANT, content=answer))
Что должно произойти после запуска
  • Первый вопрос получает текстовый ответ модели без печати ключа.
  • Второй вопрос использует сохранённые сообщения и продолжает контекст.
  • Повторный запуск даёт тот же предсказуемый результат.
  • Пустой ввод получает понятное сообщение вместо падения.

Главная функция принимает явные аргументы и возвращает данные, которые можно проверить отдельно от интерфейса. Найдите в примере вход, проверку и место формирования результата.

Хрупкий и проверяемый вариант GigaChat API
Что отличает устойчивый проект от случайного запуска. Явные границы делают ошибку локальной и понятной.

Что происходит внутри и почему это работает

SDK обменивает ключ авторизации на короткоживущий access token и отправляет массив сообщений в API. Роль system задаёт рамку, user содержит вопрос, assistant сохраняет ответ. Логику держите отдельно от вывода: функция получает аргумент и возвращает значение, а интерфейс показывает его. Секреты хранятся в переменных окружения и не попадают в исходники, журналы и скриншоты.

ЧастьЗа что отвечаетЧто проверить
Credentials и scopeопределяют доступ к версии APIscope совпадает с ключом
Messagesхранят роли и контекстистория ограничена по размеру
Chat completionвозвращает выборы и usageобрабатываются ошибки и пустой ответ

История увеличивает расход токенов на каждом шаге. Для учебного чата достаточно последних нескольких реплик. В продукте считайте токены, сокращайте старые сообщения и не отправляйте персональные данные без необходимости. Не прячьте поток в одном обработчике: сохраните вход, проверьте его, вызовите операцию и только затем обновите интерфейс.

Проверьте границу Спросите имя, сообщите его, затем спросите снова. После этого очистите messages и сравните ответ. Меняйте одно условие за прогон, чтобы видеть причину.

Проверяем проект и добавляем свою функцию

Добавьте команду /reset, ограничьте историю шестью сообщениями и выводите понятный текст для ошибки авторизации. До правки запишите ожидаемое поведение одним предложением. После граничного теста повторите обычный сценарий.

Проверка своими руками
  1. Сохраните ожидаемый результат: бот отвечает по-русски, помнит предыдущую реплику и завершает диалог по слову exit.
  2. Измените правило: добавьте /reset и ограничение длины истории. Сначала предскажите итог.
  3. Передайте граничное значение и убедитесь, что приложение не падает.
  4. Верните корректные данные и объясните роли трёх основных частей.
Готово, если выполняются все пункты
  • SDK получает access token
  • модель видит роль каждой реплики
  • текст извлекается из ответа
  • вторая реплика учитывает первую

После изменения повторите основной и ошибочный сценарии, чтобы новое поведение не сломало исходный результат. Полезная правка проходит от нового ввода до видимого результата.

Четыре контрольные точки GigaChat API
Четыре проверки перед следующим шагом. Каждый следующий этап начинается после наблюдаемого результата.

Что запомнить и куда двигаться дальше

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

Как изучить тему в Кодике

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

ШагЧто разобратьМини-проверка
1. ОсноваСтроки, списки, циклы и исключения PythonОбъясните вход и выход функции.
2. ИнструментSDK, credentials, scope и роли сообщенийПовторите команду по памяти.
3. ПроектИсторию диалога и команду /resetПроверьте два сценария.
4. РефакторингОграничение токенов, тестовый клиент и веб-интерфейсРазделите ввод, логику и вывод.

Закрепите проект, переписав ключевую функцию по памяти и добавив собственный граничный случай. Базовый синтаксис закрепите через курс Python.

Ключ в исходнике

Секрет попадает в репозиторий. Используйте переменную окружения.

Неверный scope

API отклоняет ключ, если версия доступа не совпадает.

verify_ssl_certs=False

Отключение проверки сертификата снижает безопасность. Установите доверенный сертификат.

Бесконечная история

Каждый запрос становится дороже и медленнее. Ограничивайте контекст.

Сверяйтесь с первичной документацией. Команды и ограничения примера проверены по официальному источнику 1. Если версия инструмента изменилась, официальный источник важнее старого скриншота.

Что получится в итоге

Готовый результат проекта: GigaChat API + Python: делаем первого русскоязычного чат-бота
Финальный экран показывает результат, состояние запроса и понятное сообщение об ошибке без раскрытия секретов.

Короткие ответы
Зачем сохранять ответ assistant?

Без него следующая реплика не видит полный контекст диалога.

Почему access token не хранят вручную?

SDK умеет получать и обновлять его по ключу авторизации.

Что проверять первым, если GigaChat API не запускается?

Версию среды, текущую папку, команду запуска и первую строку ошибки.

Как понять, что проект GigaChat API работает?

Проверьте основной сценарий, неверный ввод, повторный запуск и один граничный случай.

Можно ли начать с готового кода?

Да. Добейтесь результата, измените одно правило и восстановите ключевую функцию без копирования.

Сделайте один осознанный шаг дальше

Выберите одно улучшение и проведите его от ввода до результата.

Если не хватает основы, перейдите курс Python, затем восстановите ключевую функцию без подсказки.