# Как RAG, Tool Calling и агенты связывают LLM с реальным миром: лекция CME295 в Стэнфорде

Источник: https://www.youtube.com/watch?v=h-7S6HNq0Vg
Канал: Stanford Online
Опубликовано: 18.11.2025

---

В рамках курса CME295 Стэнфордского университета прошла седьмая лекция, посвященная «агентным» большим языковым моделям (LLM). Преподаватели Атин и Шервин разобрали, как вывести нейросети за пределы их изолированного состояния и научить их взаимодействовать с внешним миром через механизмы RAG, вызов инструментов и автономные циклы рассуждений.

## 🧠 От рассуждений к действиям: рекап и контекст
[[JUMP:00:05]]

Предыдущая лекция была посвящена моделям рассуждения (reasoning models) и отличиям их архитектуры от классических LLM [01:02]. Атин напомнил, что ключевым инструментом обучения таких моделей является алгоритм GRPO (Group Relative Policy Optimization), который оптимизирует политику модели без необходимости обучения функции ценности (value function) [02:24]. 

В процессе обучения с подкреплением (RL) исследователи заметили феномен «предвзятости длины» (length bias): модели стремятся выдавать всё более длинные цепочки рассуждений, так как это коррелирует с более высокими наградами, даже если производительность выходит на плато [04:04]. Для решения этой проблемы были предложены методы DAPO и обновлённые версии GRPO [05:00].

Сегодня фокус сместился с того, *как* модель думает, на то, *как* она получает знания и совершает действия. Ключевые проблемы «ванильных» LLM, которые решаются в этой лекции:

*   **Ограниченность знаний:** Модели знают только то, на чём были обучены до момента отсечки данных (knowledge cutoff).
*   **Статичность:** Нейросеть не имеет доступа к актуальной информации (новости, курсы валют).
*   **Отсутствие инструментов:** Без дополнительных надстроек модель не может отправить письмо или изменить температуру в комнате.

## 🔍 RAG: Как преодолеть «дату отсечки» знаний
[[JUMP:06:34]]

Основная проблема современных моделей — устаревание данных. Например, у GPT-4o дата отсечки знаний зафиксирована сентябрём 2024 года [08:11]. Это означает, что на вопрос о событиях октября 2024 года базовая модель не ответит или ответит неверно.

По мнению Атина, дообучение модели на новых данных (fine-tuning) для обновления знаний — плохая идея по ряду причин:

1.  Это сложно реализовать без деградации других способностей модели (регрессии) [08:51].
2.  Это непрактично при наличии множества специфических сценариев использования [09:20].

Простое добавление всей новой информации в контекстное окно (prompt) также имеет ограничения. Хотя современные модели поддерживают сотни тысяч токенов, тест «иголка в стоге сена» (needle in a haystack) показывает, что производительность LLM падает, если релевантный факт спрятан в середине огромного массива текста [12:57]. Кроме того, длинные промпты стоят дорого: около $1 за миллион токенов в современных API [14:36].

Решением становится RAG (Retrieval-Augmented Generation) — генерация с дополнением выборкой. Процесс состоит из трёх шагов:

1.  **Retrieve (Извлечение):** Поиск релевантных документов в базе знаний.
2.  **Augment (Дополнение):** Добавление найденных фактов в промпт.
3.  **Generate (Генерация):** Формирование ответа моделью на основе контекста [15:30].

## 🛠 Архитектура поиска: от эмбеддингов до ранжирования
[[JUMP:19:01]]

Для создания эффективной системы RAG необходимо правильно подготовить базу знаний. Документы разбиваются на «чанки» (chunks) — фрагменты текста размером около 500 токенов с небольшим перекрытием (overlap) в 100–200 токенов, чтобы сохранить контекст [21:57]. Каждому чанку присваивается векторное представление — эмбеддинг.

Атин выделяет два этапа поиска:

*   **Candidate Retrieval (Отбор кандидатов):** Быстрый поиск по семантическому сходству (косинусное сходство) среди миллионов документов. Здесь используются би-энкодеры (Bi-encoders), где запрос и документ кодируются независимо [30:58]. 
*   **Ranking/Reranking (Ранжирование):** Более точная сортировка отобранной сотни кандидатов. Здесь применяются кросс-энкодеры (Cross-encoders), которые анализируют запрос и документ одновременно, что точнее, но требует больше вычислительных ресурсов [46:13].

Интересные подходы для улучшения поиска:

*   **BM25:** Эвристический метод поиска по ключевым словам. Атин рекомендует использовать гибридный подход: сочетание семантического поиска и BM25 [37:11].
*   **HyDE (Hypothetical Document Embeddings):** Модель сначала генерирует «фейковый» ответ на вопрос, а затем использует этот ответ для поиска реальных документов. Это помогает сгладить разницу в стиле между коротким вопросом и длинным документом [38:56].
*   **Контекстуализация чанков:** Добавление краткого резюме всего документа к каждому его фрагменту перед созданием эмбеддинга, чтобы чанк не терял смысл в отрыве от целого [41:01].

Для экономии средств в таких системах активно применяется кэширование промптов (Prompt Caching). Если префикс запроса повторяется, провайдеры (например, OpenAI или Anthropic) могут снизить цену в 10 раз за такие токены [44:10].

## 📊 Метрики качества поиска
[[JUMP:48:03]]

Чтобы понять, насколько хорошо работает поисковый движок RAG, используются классические метрики из области информационного поиска [48:18]:

1.  **NDCG (Normalized Discounted Cumulative Gain):** Оценивает качество ранжирования. Чем выше в списке находится релевантный документ, тем выше балл [49:51].
2.  **MRR (Mean Reciprocal Rank):** Учитывает только позицию самого первого релевантного документа [54:11].
3.  **Recall@K и Precision@K:** Доля найденных релевантных документов среди всех существующих и доля релевантных среди К выданных моделью соответственно [56:44].

Для глобальной оценки моделей Атин рекомендует использовать бенчмарк MTEB (Massive Text Embedding Benchmark) [57:10].

## 🔌 Tool Calling: Когда нужны структурированные данные
[[JUMP:59:27]]

Шервин переходит ко второму способу связи LLM с миром — вызову инструментов (Tool Calling). В отличие от RAG, который работает с неструктурированным текстом, инструменты нужны для работы со структурированными данными и API [1:00:21].

Процесс вызова функции выглядит так:

1.  Разработчик описывает API (название, описание, параметры) в промпте модели.
2.  Модель, видя запрос пользователя, решает вызвать функцию и подготавливает аргументы (например, в формате JSON) [1:10:09].
3.  Система исполняет код функции и возвращает результат модели.
4.  Модель формирует финальный ответ на естественном языке [1:10:35].

Шервин подчеркивает, что модель не видит реализацию кода, только его описание. Поэтому критически важно снабжать функции качественной документацией. Для обучения моделей этому навыку используется SFT (Supervised Fine-Tuning) на парах «запрос — вызов функции» [1:12:11]. Однако современные мощные модели часто понимают, как использовать инструменты, просто из качественного текстового описания (In-context learning) [1:16:15].

## 🌐 Масштабирование и стандарты: MCP и маршрутизация
[[JUMP:1:22:26]]

Когда инструментов становится слишком много (сотни или тысячи), возникают проблемы: модель путается, а контекстное окно переполняется. Шервин упоминает решение от Google DeepMind — использование «селектора инструментов» (tool selector) или роутера [1:26:40]. Это отдельный шаг, на котором LLM сначала выбирает 2–3 потенциально полезных инструмента из общего списка, и только их полные описания добавляются в финальный запрос.

Для борьбы с фрагментацией рынка (когда под каждую модель нужно писать свои описания инструментов) команда Anthropic представила MCP (Model Context Protocol) [1:29:18]. Это открытый стандарт, позволяющий разработчикам создавать «серверы инструментов», которые могут подключаться к любой совместимой модели.

В структуре MCP выделяют:

*   **Servers:** Инстанции, предоставляющие инструменты.
*   **Prompts:** Шаблоны, обучающие пользователя работе с инструментами.
*   **Resources:** Внешние базы данных или файлы [1:29:48].

## 🤖 Агенты: Автономия и циклы рассуждений
[[JUMP:1:32:05]]

Агент — это система, которая автономно преследует цель, совершая цепочку действий [1:32:20]. Главное отличие агента от простого вызова инструментов — наличие итеративного цикла рассуждений.

Шервин разбирает классический фреймворк **React (Reason + Act)**:

1.  **Observe (Наблюдение):** Интерпретация текущего состояния или ответа от инструмента.
2.  **Plan (Планирование):** Решение, какой шаг сделать следующим.
3.  **Act (Действие):** Выполнение действия (вызов инструмента) [1:34:31].

Пример с умным домом: пользователь говорит «моему медведю холодно». Агент сначала *наблюдает* (связывает холод с температурой), затем *планирует* (проверить датчик), *действует* (вызывает API термостата), видит результат (65°F), планирует поднять температуру, снова действует и, наконец, сообщает пользователю об успехе [1:38:08].

Для взаимодействия нескольких агентов между собой Google предложила протокол «Agent-to-Agent», который стандартизирует передачу задач и статусов выполнения между независимыми ИИ-системами [1:39:33].

## 🛡 Безопасность и этика агентных систем
[[JUMP:1:42:19]]

Наделение LLM правом совершать действия несет серьезные риски. Шервин выделяет проблему эксфильтрации данных (data exfiltration): например, вредоносный промпт может заставить почтового агента переслать пароли пользователя на внешний адрес [1:43:01].

Методы защиты включают:

*   Обучение моделей на данных о безопасности и «безвредности» (harmlessness).
*   Использование классификаторов безопасности на этапе инференса, которые проверяют, не является ли запрос или ответ опасным [1:44:22].
*   Бенчмарки, такие как Agent Safety Bench.

Шервин упомянул недавний отчет Anthropic о крупномасштабной кибератаке, запущенной через их модель Claude. Злоумышленники использовали агентные способности модели для разведки. Компания опубликовала подробный отчет, подчеркивая, что это постоянная борьба брони и снаряда [1:45:18].

## 💡 Практические советы для разработчиков
[[JUMP:1:47:34]]

В завершение лекции Шервин дал несколько советов по созданию агентов:

1.  **Начинайте с малого:** Сначала реализуйте один простой инструмент и проверьте его работу [1:47:46].
2.  **Используйте лучшие модели на старте:** Сначала добейтесь корректной логики на мощной модели (например, GPT-4 или Claude 3.5 Sonnet), а затем оптимизируйте стоимость и задержки [1:48:01].
3.  **Изучайте логи рассуждений:** Всегда смотрите на цепочки рассуждений (CoT) модели для отладки.

Шервин также отметил, что его любимый сценарий использования агентов сегодня — помощь в написании кода. При этом он предостерег студентов: «Генерация кода стала дешевой, но суждение о том, правильный ли это код, — всё еще сложная задача». По его мнению, вкус и фундаментальные знания программиста теперь важнее, чем умение писать синтаксические конструкции [1:49:07].