ChatGPT-бот в консоли

Первые шаги – вызываем модель ChatGPT через API

Содержание курса

🔹 Артефакт – скрипт hello_llm.py

Cоберём минимальный скрипт, который делает запрос к модели через OpenAI клиент и печатает ответ. Этот файл будет базовым шаблоном для следующих экспериментов.

 

🔸 Требования к скрипту

  • Читает ключ и (при необходимости) базовый URL из переменных окружения, создаёт клиента OpenAI.
  • Выполняет единичный запрос к модели (Responses API) и печатает только текст ответа.
  • Опционально выводит вспомогательную информацию (например, число токенов), но без «шума» в консоли.

 

🔸 Готовый файл hello_llm.py


#!/usr/bin/env python3
import os
import sys
import argparse
from dotenv import load_dotenv
from openai import OpenAI

def main() -> int:
    # 1) Загружаем переменные окружения (.env не обязателен)
    load_dotenv()

    # 2) Считываем аргументы запуска    
    parser = argparse.ArgumentParser(description="Первый запрос к LLM")
    parser.add_argument(
        "-q", "--query",
        default="Привет, бот! Назови столицу Франции.",
        help="Текст запроса к модели (по умолчанию — простой вопрос)"
    )
    args = parser.parse_args()

    # 3) Создаём клиента OpenAI (v1.x)
    client = OpenAI(
        api_key=os.getenv("OPENAI_API_KEY"),
        # Если используете прокси, задайте свой базовый URL
        base_url=os.getenv("OPENAI_API_BASE", "https://api.openai.com/v1"),
        # при желании можно задать request_timeout=15 для всех вызовов
    )

    # 4) Делаем минимальный запрос (Responses API)
    resp = client.responses.create(
        model=os.getenv("OPENAI_MODEL", "gpt-4o"),  # подставьте свою модель при необходимости
        instructions="Ты дружелюбный ассистент. Отвечай кратко и по делу.",
        input=args.query,
        # temperature=0.0,
        # max_output_tokens=200,
        # timeout=15,  # чтобы не зависать при долгом ответе
    )

    # 5) Печатаем ответ (готовый текст)
    print(resp.output_text.strip())

    # 6) (необязательно) печатаем число токенов, если оно доступно
    usage = getattr(resp, "usage", None)
    total = getattr(usage, "total_tokens", None) if usage is not None else None
    if isinstance(total, int):
        print(f"\n(токены: {total})")

    return 0

if __name__ == "__main__":
    sys.exit(main())

 

🔸 Запуск

Убедитесь, что установлены зависимости (python -m pip install openai python-dotenv) и заданы переменные окружения:

  • OPENAI_API_KEY — ключ доступа;
  • OPENAI_API_BASE — при использовании прокси (например, https://api.your-proxy.com/v1);
  • OPENAI_MODEL — ID модели (если не задан, по умолчанию используется gpt-4o).

Примеры запуска:


python hello_llm.py
python hello_llm.py -q "Дай интересный факт о космосе."

Ожидаемый вывод:

Ответ может отличаться по формулировке; главное — корректный осмысленный текст

 

🔸 Заметки

  • Мы намеренно печатаем только суть — текст ответа. Полный объект ответа можно изучать для отладки, но в артефакте это не требуется.
  • Если ключ/URL не заданы или сеть недоступна, скрипт завершится с ошибкой — обработку исключений добавим в следующем шаге (или отдельном уроке про устойчивость).
  • При работе через прокси проверьте, что OPENAI_API_BASE указан точно (включая https:// и окончание /v1).
  • Шаблон легко расширить: добавить параметры (temperature, лимит токенов), логирование, обработку ошибок и т. п.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

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

Проверка решения остаётся отдельным действием.