15.1.1.2. Обработка критических ошибок 200
15.1.1.3. Централизованная обработка ошибок в посреднике 200
15.1.2. ToolRetryMiddleware: повторный вызов инструмента в случае ошибки 201
15.2. Обработка ошибок в посредниках 203
15.3. Обработка ошибок в агентах 203
15.4. ModelFallbackMiddleware: переключение на запасную языковую модель 204
Глава 16. Разработка RAG-агентов, часть 1 205
16.1. Первый RAG-агент, использующий программно сформированные документы 205
16.1.1. Первый RAG-агент: документы, содержащие рецепты пицц 206
16.1.2. Первый RAG-агент: сплиттер, эмбеддинг и векторное хранилище 207
16.1.3. Первый RAG-агент: ретривер 208
16.1.4. Первый RAG-агент: вводная и всякие мелочи 210
16.2. Второй RAG-агент, загружающий документ из PDF-файла 211
16.3. Документы LangChain 212
16.3.1. Программное формирование документов 212
16.3.2. Загрузка документов из сторонних файлов. Загрузчики 213
16.3.2.1. Методы загрузчиков, предназначенные для создания документов 213
16.3.2.2. PyPDFLoader: один PDF-файл 214
16.3.2.3. PyPDFDirectoryLoader: все PDF-файлы в указанной папке 214
16.3.2.4. WebBaseLoader: отдельные веб-страницы 215
16.3.2.5. RecursiveUrlLoader: заданная веб-страница и все веб-страницы, на которые она ссылается 216
16.4. Сплиттеры 218
16.4.1. RecursiveCharacterTextSplitter: разбиение с сохранением структуры текста 218
16.4.2. CharacterTextSplitter: быстрое разбиение текста 219
16.4.3. Сплиттеры веб-страниц 220
16.4.3.1. HTMLHeaderTextSplitter: быстрое разбиение по заголовкам 220
16.4.3.2. HTMLSectionSplitter: разбиение по заголовкам на чанки ограниченного размера 221
16.4.3.3. HTMLSemanticPreservingSplitter: разбиение с сохранением структуры содержимого веб-страниц 222
16.5. Что еще нужно знать о разработке RAG-агентов, описанных в этой части темы? 223
Глава 17. Разработка RAG-агентов, часть 2 225
17.1. Эмбеддинги 225
17.1.1. «Сбер» GigaChat Embeddings 225
17.1.2. Google Gemini Embeddings 226
17.1.3. YandexGPT Embeddings 226
17.1.4. Эмбеддинги, доступные на HuggingFace 226
17.1.5. Эмбеддинги, работающие под управлением Ollama 227
17.2. Векторные хранилища 228
17.3.1. Создание векторного хранилища 228
17.3.1.1. InMemoryVectorStore: оперативная память 229
17.3.1.2. Chroma: оперативная память или локальный диск 230
17.3.1.3. PGVector: база данных PostgreSQL 231
17.3.2. Работа с векторным хранилищем 232
17.3. Ретриверы 234
17.4. Инструменты для поиска в векторном хранилище 234
17.5. Что еще нужно знать о разработке RAG-агентов, описанных в этой части темы? 235
Глава 18. Мультиагентные ИИ-программы 236
18.1. Принципы разработки мультиагентных ИИ-программ 236
18.2. Пример: ИИ-программа для работы с файлами и базой данных 237
Глава 19. Глубинные агенты LangChain 241
19.1. ИИ-программа исследователя рынка, основанная на глубинном агенте 242
19.2. Возможности глубинных агентов 244
19.3. Создание глубинных агентов 245
19.4. Описание подчиненных агентов 246
19.4.1. Описание подчиненных агентов в виде словарей 246
19.4.2. Описание подчиненных агентов в виде объектов 247
19.5. Файловые системы глубинных агентов 248
19.5.1. StateBackend: виртуальная, в хранилище состояния 249
19.5.2. StoreBackend: виртуальная, в общем хранилище 250
19.5.3. FilesystemBackend: физическая, в папке с заданным путем 250
19.5.4. CompositeBackend: гибридная 251
19.6. Хранение информации в файлах 252
19.6.1. Заметки для глубинного агента 252
19.6.2. Навыки глубинного агента 254
19.6.3. Сохранение произвольных данных 256
19.7. Прерывания в глубинных агентах 257
Глава 20. Протокол MCP. Доступ к удаленным инструментам 258
20.1. Базовые средства для разработки инструмент-серверов и инструмент-клиентов. MCP-серверы и MCP-клиенты 258
20.1.1. Написание инструмент-серверов 258
20.1.1.1. Создание MCP-сервера 259
20.1.1.2. Создание инструментов 260
20.1.1.3. Активизация MCP-сервера 261
20.1.1.4. Запуск инструмент-сервера 262
20.1.2. Написание инструмент-клиентов 263
20.1.2.1. Создание MCP-клиента 263
20.1.2.2. Получение списка инструментов, предоставляемых
инструмент-серверами 265
20.1.2.3. Особенности работы с агентом в случае использования
удаленных инструментов 265
20.2. Расширенные средства для разработки инструмент-серверов
и инструмент-клиентов 266
20.2.1. Ресурсы 266
20.2.1.1. Создание ресурсов в программе инструмент-сервера 266
20.2.1.2. Загрузка ресурсов в программе инструмент-клиента 267
20.2.2. Перехватчики вызовов 269
20.2.2.1. Объявление перехватчиков вызовов 269
20.2.2.2. Класс MCPToolCallRequest: обращение к удаленному
инструменту 270
20.2.2.3. Результаты, возвращаемые перехватчиками вызовов 272
20.2.2.4. Указание перехватчиков вызовов при создании MCP-клиента 273
20.2.2.5. Последовательность выполнения перехватчиков вызовов 273
20.2.3. Доступ к HTTP-заголовкам в теле инструментов 273
20.2.4. Контекст MCP-сервера и функции обратного вызова MCP-клиента 274
20.2.4.1. Пересылка текстовых сообщений 274
20.2.4.2. Индикация хода процесса 276
20.2.4.3. Запрос у пользователя подтверждения на выполнение операции 278
Глава 21. Мультимодальные сообщения 282
21.1. Работа с мультимодальными сообщениями средствами LangChain 282
21.1.1. Отправка в мультимодальных вопросах содержимого файлов 284
21.2. Мультимодальные сообщения и языковые модели GigaChat 285
21.2.1. Создание мультимодальных вопросов 285
21.2.2. Обработка мультимодальных ответов 287
ЧАСТЬ IV. ОФОРМЛЕНИЕ ИИ-АГЕНТОВ 291
Глава 22. Оформление ИИ-агентов в виде Telegram-ботов 293
22.1. Получение бот-жетона 293
22.2. Простой Telegram-бот: ИИ-приемщик заказов 295
22.2.1. Простой Telegram-приемщик заказов: обработка сообщений 295
22.2.2. Простой Telegram-приемщик заказов: собственно бот 296
22.2.3. Простой Telegram-приемщик заказов: остальной код 299
22.3. Создание Telegram-приложения 300
22.4. Запуск Telegram-приложения 301
22.5. Обработка обновлений разных видов 301
22.5.1. Обработка поступающих команд 301
22.5.1.1. Объявление обработчиков команд 302
22.5.1.2. Update: класс сведений о последнем обновлении 302
22.5.1.3. Message: класс сообщения 303
22.5.1.4. Класс контекста обработчика 304
22.5.1.5. User: класс пользователя Telegram 305
22.5.1.6. Оформление обработчиков команд 306
22.5.1.7. Указание обработчиков у Telegram-приложения 307
22.5.2. Обработка поступающих сообщений 307
22.6. Дополнительные средства для разработки Telegram-ботов 308
22.6.1. Использование экранной клавиатуры 308
22.6.1.1. Создание и вывод экранной клавиатуры 308
22.6.1.2. Реагирование на нажатия кнопок экранной клавиатуры 309
22.6.2. Отправка пользователю изображений 311
22.6.3. Отправка пользователю видео 314
22.7. Что еще нужно знать о разработке Telegram-ботов? 315
Глава 23. Оформление ИИ-агентов в виде веб-приложений 316
23.1. Веб-ИИ-агент, версия 0.1 316
23.1.1. Веб-ИИ-агент, версия 0.1: обработка сообщений 317
23.1.2. Веб-ИИ-агент, версия 0.1: веб-интерфейс 317
23.1.3. Веб-ИИ-агент, версия 0.1: запуск и тестирование 319
23.1.4. Веб-ИИ-агент, версия 0.1: фронтенд 323
23.2. Создание приложения FastAPI 327
23.3. Объявление контроллеров 328
23.3.1. Генерирование и выдача серверных ответов 328
23.3.2. Получение данных от пользователя 329
23.3.2.1. Данные в формате JSON 329
23.3.2.2. Данные в формате Form Data 330
23.3.2.3. GET-параметры 330
23.3.2.4. URL-параметры 331
23.3.2.5. Данные из cookie 331
23.3.3. Создание cookie 332
23.4. Создание маршрутов 332
23.5. Веб-ИИ-агент, версия 1.0 333
23.6. Поддержка протокола Websockets 335
23.6.1. Объявление Websockets-контроллеров 335
23.6.2. WebSocket: класс соединения Websockets 336
23.6.3. Обработка разрыва соединения клиентом 337
23.6.4. Создание Websockets-маршрутов 338
23.7. Веб-ИИ-агент: версия 2.0 338
23.7.1. Веб-ИИ-агент, версия 2.0: бэкенд 338
23.7.1.1. Веб-ИИ-агент, версия 2.0: обработка сообщений 338
23.7.1.2. Веб-ИИ-агент, версия 2.0: веб-приложение 339
23.7.2. Веб-ИИ-агент, версия 2.0: фронтенд 341
23.8. Веб-ИИ-агент, версия 2.1: очистка истории сообщений после разрыва соединения 343
23.9. Что еще нужно знать о разработке веб-ИИ-приложений? 344
Глава 24. Оформление ИИ-агентов в виде графических приложений 346
24.1. Графический ИИ-агент, версия 1.0 346
24.1.1. Графический ИИ-агент, версия 1.0: разработка 346
24.1.2. Графический ИИ-агент, версия 1.0: запуск 349
24.2. Оконные элементы 350
24.2.1. Базовые классы оконных элементов 350
24.2.2. Элементы управления 353
24.2.2.1. Надпись 353
24.2.2.2. Поле ввода 354
24.2.2.3. Флажок 355
24.2.2.4. Группа переключателей 355
24.2.2.5. Раскрывающийся список 356
24.2.2.6. Кнопка 359
24.2.3. Дополнительные оконные элементы 359
24.2.3.1. Графический элемент 359
24.2.3.2. Текст в формате Markdown 360
24.2.4. Контейнеры 361
24.2.4.1. Базовый класс контейнеров 361
24.2.4.2. Колонка 362
24.2.4.3. Строка 363
24.2.4.4. Прокручивающийся перечень 364
24.2.4.5. Сетка 364
24.3. Графический ИИ-агент, версия 1.1 365
24.4. Обработка событий 367
24.5. Вывод оконных элементов в окне 368
24.6. Дополнительные программные инструменты 368
24.6.1. Работа с клиентской областью окна 368
24.6.2. Управление окном 369
24.6.3. Вывод стандартных файловых диалоговых окон 371
24.7. Что еще нужно знать о разработке графических приложений? 373
Заключение 374
Приложение. Описание файлового архива 376
Предметный указатель 377