В рамках курса CME295 Стэнфордского университета прошла седьмая лекция, посвященная «агентным» большим языковым моделям (LLM). Преподаватели Атин и Шервин разобрали, как вывести нейросети за пределы их изолированного состояния и научить их взаимодействовать с внешним миром через механизмы RAG, вызов инструментов и автономные циклы рассуждений.
🧠 От рассуждений к действиям: рекап и контекст 0:05
Предыдущая лекция была посвящена моделям рассуждения (reasoning models) и отличиям их архитектуры от классических LLM . Атин напомнил, что ключевым инструментом обучения таких моделей является алгоритм GRPO (Group Relative Policy Optimization), который оптимизирует политику модели без необходимости обучения функции ценности (value function) .
В процессе обучения с подкреплением (RL) исследователи заметили феномен «предвзятости длины» (length bias): модели стремятся выдавать всё более длинные цепочки рассуждений, так как это коррелирует с более высокими наградами, даже если производительность выходит на плато . Для решения этой проблемы были предложены методы DAPO и обновлённые версии GRPO .
Сегодня фокус сместился с того, как модель думает, на то, как она получает знания и совершает действия. Ключевые проблемы «ванильных» LLM, которые решаются в этой лекции:
- Ограниченность знаний: Модели знают только то, на чём были обучены до момента отсечки данных (knowledge cutoff).
- Статичность: Нейросеть не имеет доступа к актуальной информации (новости, курсы валют).
- Отсутствие инструментов: Без дополнительных надстроек модель не может отправить письмо или изменить температуру в комнате.
🔍 RAG: Как преодолеть «дату отсечки» знаний 6:34
Основная проблема современных моделей — устаревание данных. Например, у GPT-4o дата отсечки знаний зафиксирована сентябрём 2024 года . Это означает, что на вопрос о событиях октября 2024 года базовая модель не ответит или ответит неверно.
По мнению Атина, дообучение модели на новых данных (fine-tuning) для обновления знаний — плохая идея по ряду причин:
- Это сложно реализовать без деградации других способностей модели (регрессии) .
- Это непрактично при наличии множества специфических сценариев использования .
Простое добавление всей новой информации в контекстное окно (prompt) также имеет ограничения. Хотя современные модели поддерживают сотни тысяч токенов, тест «иголка в стоге сена» (needle in a haystack) показывает, что производительность LLM падает, если релевантный факт спрятан в середине огромного массива текста . Кроме того, длинные промпты стоят дорого: около $1 за миллион токенов в современных API .
Решением становится RAG (Retrieval-Augmented Generation) — генерация с дополнением выборкой. Процесс состоит из трёх шагов:
- Retrieve (Извлечение): Поиск релевантных документов в базе знаний.
- Augment (Дополнение): Добавление найденных фактов в промпт.
- Generate (Генерация): Формирование ответа моделью на основе контекста .
🛠 Архитектура поиска: от эмбеддингов до ранжирования 19:01
Для создания эффективной системы RAG необходимо правильно подготовить базу знаний. Документы разбиваются на «чанки» (chunks) — фрагменты текста размером около 500 токенов с небольшим перекрытием (overlap) в 100–200 токенов, чтобы сохранить контекст . Каждому чанку присваивается векторное представление — эмбеддинг.
Атин выделяет два этапа поиска:
- Candidate Retrieval (Отбор кандидатов): Быстрый поиск по семантическому сходству (косинусное сходство) среди миллионов документов. Здесь используются би-энкодеры (Bi-encoders), где запрос и документ кодируются независимо .
- Ranking/Reranking (Ранжирование): Более точная сортировка отобранной сотни кандидатов. Здесь применяются кросс-энкодеры (Cross-encoders), которые анализируют запрос и документ одновременно, что точнее, но требует больше вычислительных ресурсов .
Интересные подходы для улучшения поиска:
- BM25: Эвристический метод поиска по ключевым словам. Атин рекомендует использовать гибридный подход: сочетание семантического поиска и BM25 .
- HyDE (Hypothetical Document Embeddings): Модель сначала генерирует «фейковый» ответ на вопрос, а затем использует этот ответ для поиска реальных документов. Это помогает сгладить разницу в стиле между коротким вопросом и длинным документом .
- Контекстуализация чанков: Добавление краткого резюме всего документа к каждому его фрагменту перед созданием эмбеддинга, чтобы чанк не терял смысл в отрыве от целого .
Для экономии средств в таких системах активно применяется кэширование промптов (Prompt Caching). Если префикс запроса повторяется, провайдеры (например, OpenAI или Anthropic) могут снизить цену в 10 раз за такие токены .
📊 Метрики качества поиска 48:03
Чтобы понять, насколько хорошо работает поисковый движок RAG, используются классические метрики из области информационного поиска :
- NDCG (Normalized Discounted Cumulative Gain): Оценивает качество ранжирования. Чем выше в списке находится релевантный документ, тем выше балл .
- MRR (Mean Reciprocal Rank): Учитывает только позицию самого первого релевантного документа .
- Recall@K и Precision@K: Доля найденных релевантных документов среди всех существующих и доля релевантных среди К выданных моделью соответственно .
Для глобальной оценки моделей Атин рекомендует использовать бенчмарк MTEB (Massive Text Embedding Benchmark) .
🔌 Tool Calling: Когда нужны структурированные данные 59:27
Шервин переходит ко второму способу связи LLM с миром — вызову инструментов (Tool Calling). В отличие от RAG, который работает с неструктурированным текстом, инструменты нужны для работы со структурированными данными и API .
Процесс вызова функции выглядит так:
- Разработчик описывает API (название, описание, параметры) в промпте модели.
- Модель, видя запрос пользователя, решает вызвать функцию и подготавливает аргументы (например, в формате JSON) .
- Система исполняет код функции и возвращает результат модели.
- Модель формирует финальный ответ на естественном языке .
Шервин подчеркивает, что модель не видит реализацию кода, только его описание. Поэтому критически важно снабжать функции качественной документацией. Для обучения моделей этому навыку используется SFT (Supervised Fine-Tuning) на парах «запрос — вызов функции» . Однако современные мощные модели часто понимают, как использовать инструменты, просто из качественного текстового описания (In-context learning) .
🌐 Масштабирование и стандарты: MCP и маршрутизация 1:22:26
Когда инструментов становится слишком много (сотни или тысячи), возникают проблемы: модель путается, а контекстное окно переполняется. Шервин упоминает решение от Google DeepMind — использование «селектора инструментов» (tool selector) или роутера . Это отдельный шаг, на котором LLM сначала выбирает 2–3 потенциально полезных инструмента из общего списка, и только их полные описания добавляются в финальный запрос.
Для борьбы с фрагментацией рынка (когда под каждую модель нужно писать свои описания инструментов) команда Anthropic представила MCP (Model Context Protocol) . Это открытый стандарт, позволяющий разработчикам создавать «серверы инструментов», которые могут подключаться к любой совместимой модели.
В структуре MCP выделяют:
- Servers: Инстанции, предоставляющие инструменты.
- Prompts: Шаблоны, обучающие пользователя работе с инструментами.
- Resources: Внешние базы данных или файлы .
🤖 Агенты: Автономия и циклы рассуждений 1:32:05
Агент — это система, которая автономно преследует цель, совершая цепочку действий . Главное отличие агента от простого вызова инструментов — наличие итеративного цикла рассуждений.
Шервин разбирает классический фреймворк React (Reason + Act):
- Observe (Наблюдение): Интерпретация текущего состояния или ответа от инструмента.
- Plan (Планирование): Решение, какой шаг сделать следующим.
- Act (Действие): Выполнение действия (вызов инструмента) .
Пример с умным домом: пользователь говорит «моему медведю холодно». Агент сначала наблюдает (связывает холод с температурой), затем планирует (проверить датчик), действует (вызывает API термостата), видит результат (65°F), планирует поднять температуру, снова действует и, наконец, сообщает пользователю об успехе .
Для взаимодействия нескольких агентов между собой Google предложила протокол «Agent-to-Agent», который стандартизирует передачу задач и статусов выполнения между независимыми ИИ-системами .
🛡 Безопасность и этика агентных систем 1:42:19
Наделение LLM правом совершать действия несет серьезные риски. Шервин выделяет проблему эксфильтрации данных (data exfiltration): например, вредоносный промпт может заставить почтового агента переслать пароли пользователя на внешний адрес .
Методы защиты включают:
- Обучение моделей на данных о безопасности и «безвредности» (harmlessness).
- Использование классификаторов безопасности на этапе инференса, которые проверяют, не является ли запрос или ответ опасным .
- Бенчмарки, такие как Agent Safety Bench.
Шервин упомянул недавний отчет Anthropic о крупномасштабной кибератаке, запущенной через их модель Claude. Злоумышленники использовали агентные способности модели для разведки. Компания опубликовала подробный отчет, подчеркивая, что это постоянная борьба брони и снаряда .
💡 Практические советы для разработчиков 1:47:34
В завершение лекции Шервин дал несколько советов по созданию агентов:
- Начинайте с малого: Сначала реализуйте один простой инструмент и проверьте его работу .
- Используйте лучшие модели на старте: Сначала добейтесь корректной логики на мощной модели (например, GPT-4 или Claude 3.5 Sonnet), а затем оптимизируйте стоимость и задержки .
- Изучайте логи рассуждений: Всегда смотрите на цепочки рассуждений (CoT) модели для отладки.
Шервин также отметил, что его любимый сценарий использования агентов сегодня — помощь в написании кода. При этом он предостерег студентов: «Генерация кода стала дешевой, но суждение о том, правильный ли это код, — всё еще сложная задача». По его мнению, вкус и фундаментальные знания программиста теперь важнее, чем умение писать синтаксические конструкции .