Архитектор AI-систем: от принципов работы LLM до создания агентов

Курс для тех, кто хочет перейти от простого использования чат-ботов к проектированию сложных AI-решений. Вы изучите технические основы LLM, освоите RAG и API, научитесь создавать автономных агентов и строить масштабируемые автоматизированные процессы.

1. Фундамент технологий: нейросети, архитектура трансформеров, токены и эмбеддинги

Фундамент технологий: нейросети, архитектура трансформеров, токены и эмбеддинги

Чтобы стать архитектором AI-систем, необходимо избавиться от восприятия искусственного интеллекта как «магии». На фундаментальном уровне любая современная языковая модель (LLM) — это сложная математическая функция, которая преобразует входные данные (числа) в выходные данные (числа), основываясь на вероятностях. Понимание того, как именно происходит это преобразование, отличает обычного пользователя от инженера, способного проектировать надежные системы.

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

Нейронная сеть — это алгоритм машинного обучения, структура которого отдаленно вдохновлена организацией нейронов в человеческом мозге. Однако, в отличие от биологического мозга, искусственная нейросеть (ANN) строго детерминирована и опирается на линейную алгебру.

Анатомия искусственного нейрона

Базовой единицей сети является персептрон (искусственный нейрон). Он работает по следующему алгоритму:

  • Входные данные (): Числовые значения, поступающие в нейрон.
  • Веса (): Коэффициенты важности для каждого входа. Если вес большой, то соответствующий вход сильно влияет на результат.
  • Смещение (): Дополнительный параметр (bias), позволяющий сдвигать функцию активации.
  • Функция активации (): Определяет, должен ли нейрон «активироваться» и передать сигнал дальше (например, ReLU или Sigmoid).
  • Математически работа одного нейрона описывается формулой:

    где — выходное значение нейрона, — функция активации, — знак суммирования (сумма всех произведений), — количество входов, — вес -го входа, — значение -го входа, — смещение (bias).

    !Структура персептрона: взвешенная сумма входов проходит через функцию активации

    Обучение vs Инференс

    Жизненный цикл модели делится на два этапа:

    * Обучение (Training): Процесс настройки весов (). Сеть получает входные данные и правильный ответ. Она делает предсказание, сравнивает его с эталоном, вычисляет ошибку (Loss) и с помощью алгоритма обратного распространения ошибки (Backpropagation) корректирует веса так, чтобы в следующий раз ошибка была меньше. Это требует огромных вычислительных мощностей. * Инференс (Inference): Использование уже обученной сети. Веса зафиксированы. Мы подаем данные на вход, они проходят через слои, и мы получаем результат. Это то, что происходит, когда вы отправляете запрос в ChatGPT.

    Эмбеддинги: перевод с человеческого на машинный

    Компьютеры не понимают слова, они понимают только числа. Чтобы подать текст в нейросеть, его нужно превратить в вектор — список чисел. Этот процесс называется векторизацией, а полученные векторы — эмбеддингами (embeddings).

    Эмбеддинг — это плотное векторное представление смысла. Главная идея заключается в том, что слова, близкие по смыслу, должны иметь близкие числовые координаты в многомерном пространстве.

    Представьте упрощенное 2D-пространство: * Координаты слова «Король»: [0.9, 0.8] * Координаты слова «Королева»: [0.9, 0.2] * Координаты слова «Яблоко»: [-0.5, 0.1]

    Математически мы можем измерить близость слов, рассчитав расстояние между этими векторами (обычно используется косинусное сходство). Более того, в пространстве эмбеддингов работают арифметические операции со смыслами:

    > КорольМужчина + ЖенщинаКоролева

    В современных моделях (например, GPT-4) размерность вектора может достигать тысяч измерений (например, 1536 или 3072 числа на один токен). Это позволяет кодировать тончайшие нюансы семантики, тональности и контекста.

    !Семантическое векторное пространство: близкие по смыслу слова находятся рядом

    Токены: атомы смысла

    LLM не читают по словам или буквам. Они читают по токенам. Токен — это фрагмент текста, который может быть словом, частью слова или даже одним символом.

    Как это работает на практике

  • Английский язык: Часто 1 токен ≈ 0.75 слова. Простые слова («apple») — это 1 токен. Сложные («antidisestablishmentarianism») разбиваются на несколько.
  • Русский язык: Из-за особенностей кодировки и морфологии, русские слова чаще разбиваются на большее количество токенов, чем английские. Слово «нейросеть» может быть разбито на 2-3 токена в зависимости от токенизатора (например, «ней», «ро», «сеть»).
  • Понимание токенизации критически важно для архитектора систем по двум причинам: * Стоимость: API провайдеры (OpenAI, Anthropic) тарифицируют услуги за миллион токенов. * Контекстное окно: Память модели ограничена лимитом токенов (например, 128k). Если история переписки превышает этот лимит, начало разговора «отрезается» и забывается.

    Архитектура Трансформер: революция внимания

    До 2017 года доминировали рекуррентные нейросети (RNN), которые читали текст последовательно, слово за словом. Они плохо «помнили» начало длинного предложения, когда доходили до его конца. Все изменилось с появлением архитектуры Transformer (статья «Attention Is All You Need», Google).

    Механизм внимания (Self-Attention)

    Ключевая инновация трансформеров — механизм Self-Attention (самовнимание). Он позволяет модели смотреть на все токены в предложении одновременно и вычислять взаимосвязи между ними, независимо от расстояния.

    Рассмотрим фразу: «Банк заблокировал счет, потому что он был подозрительным».

    Для человека очевидно, что слово «он» относится к слову «счет», а не к слову «банк». Старые модели путались. Трансформер вычисляет «вес внимания» между токеном «он» и всеми остальными словами. Связь «он» — «счет» получит максимальный вес.

    Математически механизм внимания записывается как:

    где (Query) — вектор-запрос (что мы ищем), (Key) — вектор-ключ (содержание элемента), (Value) — вектор-значение (информация, которую мы извлечем), — транспонированная матрица ключей, — размерность ключей (используется для масштабирования), — функция, превращающая числа в вероятности (сумма равна 1).

    Простыми словами: каждый токен задает вопрос () всем остальным токенам: «Насколько вы важны для моего понимания?». Те отвечают своими ключами (). Если ключ подходит к запросу, извлекается значение ().

    !Визуализация весов внимания: модель определяет, к чему относится местоимение 'it'

    LLM как генератор следующего токена

    Современные GPT-модели (Generative Pre-trained Transformer) используют архитектуру Decoder-only. Их единственная задача — предсказать вероятность следующего токена на основе всех предыдущих.

    Когда вы просите ChatGPT написать стих:

  • Ваш промпт превращается в токены.
  • Токены преобразуются в эмбеддинги.
  • Слои трансформера обрабатывают их через механизм внимания.
  • На выходе получается список вероятностей для всех возможных токенов словаря (десятков тысяч).
  • Модель выбирает один из токенов (на основе температуры и настроек сэмплирования) и добавляет его к последовательности.
  • Процесс повторяется для следующего токена.
  • Именно поэтому LLM иногда называют «стохастическими попугаями» — они не «знают» фактов, они лишь предсказывают, какое слово статистически вероятнее всего идет следом.

    Итоги

  • Нейросети — это математика, а не биология. Они работают через умножение матриц (весов) на входные данные и корректировку этих весов при обучении.
  • Эмбеддинги — это смысл в цифрах. Текст превращается в многомерные векторы, где близость векторов означает близость смыслов.
  • Токены — единица тарификации и обработки. Это не слова, а части слов. Понимание токенизации важно для оценки бюджета и управления контекстом.
  • Трансформеры победили благодаря Attention. Механизм внимания позволяет модели видеть контекст целиком и понимать сложные зависимости между далекими словами.
  • LLM — это вероятностные машины. Они предсказывают следующий токен. Галлюцинации возникают именно потому, что модель выбирает вероятное продолжение, а не обязательно истинное.
  • 2. Искусство управления: продвинутый промпт-инжиниринг и работа через API

    Искусство управления: продвинутый промпт-инжиниринг и работа через API

    В предыдущей статье мы выяснили, что LLM — это вероятностная машина, предсказывающая следующий токен. Если вы просто отправляете текст в чат-бот, вы полагаетесь на удачу. Как инженер, вы должны взять этот процесс под контроль. Управление вероятностями осуществляется через два рычага: структуру промпта и параметры API.

    Анатомия запроса: Роли сообщений

    При работе через API (OpenAI, Anthropic, Mistral) взаимодействие строится не как единый поток текста, а как массив сообщений с определенными ролями. Это фундаментальное отличие от пользовательского интерфейса ChatGPT.

    Стандартная структура запроса выглядит так:

  • System (Система): Задает контекст, поведение, ограничения и формат ответа. Это «инструкция для актера», которую он не должен нарушать.
  • User (Пользователь): Непосредственный запрос или входные данные.
  • Assistant (Ассистент): Ответы модели. В API можно «подделать» ответ ассистента, чтобы задать пример поведения (Few-Shot) или продолжить прерванную генерацию.
  • Пример системного промпта

    Плохо: > Ты помощник по программированию.

    Хорошо (инженерный подход): > Ты — Senior Python Developer. Твоя задача — писать чистый, документированный код. > Ограничения: > 1. Используй только библиотеку Pydantic v2. > 2. Не пиши пояснительный текст, возвращай только блок кода. > 3. Если задача неясна, верни JSON с полем "error".

    Системный промпт имеет приоритет над пользовательским. Это ваш главный инструмент защиты от взлома (jailbreak) и гарантия стабильности формата.

    Стратегии промпт-инжиниринга

    Промпт-инжиниринг — это не подбор «волшебных слов», а проектирование контекста, который сужает пространство вероятностей до нужного вам ответа.

    1. Few-Shot Prompting (Обучение на примерах)

    Модели (особенно GPT-4) отлично понимают инструкции (Zero-Shot), но примеры (Few-Shot) работают надежнее. Вы передаете модели пары «Входные данные -> Желаемый выход».

    !Few-Shot значительно повышает точность, задавая паттерн

    Пример для классификации тональности:

    > Текст: "Еда была холодной." -> Негатив > Текст: "Интерьер отличный, но дорого." -> Нейтрально > Текст: "Вернусь сюда снова!" -> Позитив > Текст: "Официант грубил." ->

    Модель с высокой вероятностью продолжит паттерн и вернет «Негатив».

    2. Chain-of-Thought (Цепочка рассуждений)

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

    Этот метод называется Chain-of-Thought (CoT). Самый простой способ активировать его — добавить фразу: «Let's think step by step» (Давай подумаем шаг за шагом).

    Почему это работает? Когда модель генерирует рассуждение, она создает новые токены, которые попадают в её же контекст. Эти токены служат «буфером вычислений», помогая модели прийти к верному выводу в конце.

    Параметры API: Настройка гиперпараметров

    Кроме текста, вы передаете в API параметры, влияющие на сэмплирование (выбор следующего токена).

    Temperature (Температура)

    Температура () контролирует случайность распределения вероятностей. Формула модификации вероятностей перед softmax:

    где — новая вероятность токена, — логит (исходное числовое значение, предсказанное моделью), — температура.

    * (например, 0.1): Распределение становится «острым». Модель почти всегда выбирает самый вероятный токен. Результат детерминирован, сух и точен. Идеально для кода, извлечения данных, классификации. * (и выше): Распределение сглаживается. Менее вероятные токены получают шанс быть выбранными. Результат креативен, но менее предсказуем. Подходит для генерации идей, стихов.

    Top P (Nucleus Sampling)

    Альтернатива температуре. Параметр (например, 0.9) говорит модели: «Рассматривай только те токены, чья суммарная вероятность составляет 90%». Это отсекает «хвост» из маловероятных и бредовых вариантов, сохраняя при этом разнообразие.

    > Совет: Не меняйте Temperature и Top P одновременно. Для задач логики ставьте Temperature = 0.

    Структурированный вывод (JSON Mode)

    Главная проблема интеграции LLM в софт — модель любит болтать. Программе нужен JSON, а модель пишет: «Конечно! Вот ваш JSON...».

    Для решения этой проблемы существует JSON Mode (или Structured Outputs). Вы можете принудительно заставить модель вернуть валидный JSON-объект, соответствующий определенной схеме.

    В API OpenAI это делается через параметр response_format: { type: "json_object" } и обязательное упоминание слова "JSON" в системном промпте.

    Галлюцинации: Природа и борьба

    Галлюцинация — это уверенная генерация ложных фактов. Это не баг, а особенность архитектуры: модель стремится сгенерировать правдоподобный текст, а не правдивый.

    Типы галлюцинаций:

  • Фактические: Придумывание биографий, дат, событий.
  • Логические: Ошибки в арифметике или причинно-следственных связях.
  • Как бороться: Grounding (Заземление): Предоставьте модели исходный текст и прикажите отвечать только* по нему (основа RAG). «Я не знаю»: Явно пропишите в системном промпте: «Если информации недостаточно, ответь 'Я не знаю', не придумывай факты»*. * Верификация: Используйте вторую модель (или второй проход) для проверки ответа первой.

    Итоги

  • Разделяйте контекст: Используйте System роль для инструкций и User для данных. Это повышает управляемость.
  • Управляйте вероятностью: Для точных задач (код, классификация) используйте температуру 0. Для креатива — 0.7–1.0.
  • Помогайте модели думать: Техники Few-Shot (примеры) и Chain-of-Thought (пошаговое мышление) значительно улучшают качество сложных ответов.
  • Требуйте структуру: Используйте JSON Mode для интеграции ответов модели в программный код.
  • Не верьте на слово: Галлюцинации неизбежны. Ограничивайте модель контекстом и заставляйте признаваться в незнании.