Инструменты и интеграции: API, функции, базы данных, RAG
Как эта статья связана с предыдущими
В первой статье вы зафиксировали карту задачи: цель, критерии "готово", ограничения и метрики. Во второй — превратили это в контракт для LLM: формат вывода, правила уточнения, запреты и проверки. В третьей — собрали архитектуру агента: оркестратор, состояние, память, планирование, диалоги и политики.
Теперь добавляем ключевой компонент, без которого агент редко бывает полезен в реальном продукте: инструменты.
Инструменты — это контролируемые, детерминированные действия агента во внешнем мире:
вызовы API (CRM, helpdesk, платежи, почта)
функции внутри вашего приложения
доступ к базам данных
RAG: поиск и подстановка релевантных фрагментов знаний в контекст LLMГлавная идея: LLM отвечает за управление и принятие решений, а инструменты — за факты и действия.
!Как LLM и инструменты связаны в агентном цикле
Что такое инструмент в агенте
Инструмент в контексте AI-агента — это функция с контрактом.
Контракт включает:
назначение: для чего инструмент используется
входные параметры: типы, обязательность, ограничения
выход: структура успеха и структура ошибки
побочные эффекты: что меняется во внешней системе
политики: когда можно вызывать без подтверждения пользователяЕсли контракт размытый, LLM начнёт "догадываться" параметры и вы получите нестабильное поведение.
Классы интеграций и когда что выбирать
Вызовы API
Подходят, когда у системы есть внешний интерфейс.
Типичные примеры:
создание и обновление тикетов в helpdesk
поиск клиента в CRM
создание встречи в календаре
отправка письма через почтовый провайдерПрактическое правило: если истина живёт в системе-источнике, агент должен получать её через API, а не "помнить".
Внутренние функции приложения
Подходят, когда вы хотите спрятать сложность и риски внутри вашего бэкенда.
Типичные примеры:
normalize_phone()
check_user_permissions()
create_draft_email()
calculate_refund_amount()Чем больше бизнес-логики и правил, тем выгоднее держать их в коде, а не в промпте.
Базы данных
Подходят, когда нужно:
получить факты из таблиц
агрегировать
сделать поиск по структурированным полямВ агентных системах чаще используют промежуточный слой, а не прямой доступ LLM к SQL.
RAG
Подходит, когда знания:
большие по объёму
быстро меняются
распределены по документамRAG не заменяет базу данных, а дополняет её: это способ подтянуть релевантные фрагменты текста (политики, инструкции, FAQ, спецификации) в контекст модели.
Функции и вызовы инструментов: как сделать контракт, которому LLM следует
Строгие параметры и строгий результат
Надёжный паттерн: один инструмент — одна ответственность.
Плохо:
"Универсальный инструмент" do_everything(query: string)Хорошо:
crm_search_contact(email: string)
crm_update_contact(contact_id: string, fields: object)
helpdesk_create_ticket(title: string, description: string, priority: ...)Формат ответа инструмента
Полезно всегда возвращать структуру с флагом успеха, данными и ошибкой.
Если ошибка:
Так оркестратор может детерминированно решить: повторить, попросить пользователя подождать, переключиться на альтернативный шаг.
Минимизация "творчества" в параметрах
Если инструмент ждёт точные поля, запретите свободный текст в параметрах там, где он не нужен.
Пример:
priority как перечисление: low | medium | high
category как перечисление
id как строка фиксированного видаЭто уменьшает вероятность того, что LLM передаст "почти подходящее" значение.
Интеграции с API: ключевые инженерные паттерны
Allowlist инструментов
Агент не должен "знать", что у вас есть опасные операции.
показывайте LLM только те инструменты, которые разрешены для выбранного сценария
для операций высокого риска делайте отдельный инструмент, который всегда требует подтвержденияИдемпотентность
Если сеть нестабильна, шаг может повториться. Для операций создания используйте идемпотентные ключи.
Пример идеи:
вы генерируете idempotency_key на уровне оркестратора
при повторе запроса API возвращает тот же результат, а не создаёт дубльЕсли внешний API не поддерживает идемпотентность, делайте проверку "уже создано" по внешнему идентификатору или по поиску.
Таймауты, ретраи и деградация
Практически важно различать:
ошибка пользователя (не хватает данных)
ошибка инструмента (таймаут)
ошибка политики (действие запрещено)Хорошая интеграция предусматривает:
таймаут на каждый вызов
ограниченные ретраи для временных ошибок
понятный fallbackПример fallback:
если CRM недоступна, агент предлагает создать черновик и запланировать повторРазделение "прочитать" и "изменить"
Для безопасности удобно разделять инструменты:
read-only инструменты можно вызывать без подтверждения
write-инструменты требуют либо подтверждения, либо строгих условийЭто напрямую связывается с режимами из первой статьи: ассистент, полуавтомат, автомат.
Базы данных: как дать агенту факты и не потерять контроль
Почему прямой SQL от LLM опасен
Даже при хорошем промпте возможны:
неверные JOIN и неверные агрегаты
запросы, которые грузят базу
утечка данных из таблиц, которые не должны быть доступны роли пользователяПоэтому в продакшене чаще используют один из двух подходов.
Подход: фасадный API вместо прямого SQL
Вы делаете внутренний сервис, который предоставляет ограниченные методы:
get_order_status(order_id)
list_open_tickets(customer_id)
search_customers(query, limit)Плюсы:
контроль прав доступа
стабильные контракты
меньше риск перегрузить базуПодход: SQL через "песочницу" и валидаторы
Если всё же нужен гибкий SQL, обычно добавляют барьеры:
доступ только к read-only реплике
allowlist таблиц и колонок
лимиты: LIMIT, время выполнения
автоматическая проверка запроса перед выполнениемПрактика: LLM генерирует план запроса или SQL, но выполнение проходит через валидатор, который может отклонить запрос.
Как возвращать данные LLM
Передавайте в контекст:
только нужные поля
ограниченное число строк
понятные названияЕсли данных много, возвращайте:
агрегаты
выборку top-N
или делайте следующий уточняющий шаг в диалогеRAG: Retrieval-Augmented Generation для агентных сценариев
Что такое RAG простыми словами
RAG — это подход, где перед ответом (или перед планированием) агент:
ищет релевантные фрагменты в базе знаний
подставляет их в контекст LLM как источники
просит модель отвечать, опираясь на эти источникиТак вы снижаете галлюцинации и привязываете ответы к актуальным документам.
!Как работает RAG: от документов до ответа
Компоненты RAG
Корпус документов
Разбиение на чанки
Индексобычно это векторный индекс для семантического поискаРетривервыбирает top-k фрагментовСборщик контекстаформирует компактные вставки: заголовок, фрагмент, источникПолитики доступафильтрация по роли пользователяПромпт, требующий опоры на источникиКак выбирать размер чанков
Слишком маленькие чанки:
теряется смысл и контекстСлишком большие чанки:
в контекст попадёт много лишнегоПрактический подход:
сначала выбрать умеренный размер, затем проверить на реальных вопросах
хранить метаданные: документ, раздел, дата, права доступаRAG и защита от prompt injection
Внешние документы нельзя считать инструкциями.
Передавайте фрагменты как данные.
Пример формулировки в промпте:
Классическая проблема описана в индустриальных рекомендациях:
OWASP Top 10 for LLM ApplicationsКогда RAG не нужен
RAG часто переоценивают. Он может быть лишним, если:
данные структурированы и живут в БД
нужен точный статус заказа или балансВ таких задачах правильнее использовать API или SQL через контролируемый слой.
Как связать инструменты со состоянием и диалогом
Инструменты должны работать вместе с тем, что вы спроектировали в статье про архитектуру.
Паттерн: вычислять required_missing до вызова write-инструментов
Если для "готово" нужны поля customer_email и product, то алгоритм должен быть таким:
извлечь поля из сообщения
заполнить состояние
вычислить required_missing
если список не пуст, задать вопросы
только после этого вызывать инструменты измененияЭто снижает ошибки и делает поведение тестируемым.
Паттерн: подтверждение как отдельное состояние
Если действие рискованное (отправить письмо, списать деньги, удалить запись), агент должен:
сформировать план
запросить подтверждение в явной форме
только после подтверждения вызывать инструментНаблюдаемость и тестирование интеграций
Без наблюдаемости вы не поймёте, что именно ломается: модель, инструмент или данные.
Что логировать:
имя инструмента
параметры (с маскированием чувствительных данных)
результат и время выполнения
версию промпта и версию схемы состояния
причину завершения сценарияКак тестировать:
мокать инструменты для детерминированных тестов
иметь набор "золотых" кейсов: вход → ожидаемые вызовы инструментов → ожидаемый результат
отдельно тестировать политики: запреты, подтверждения, ограничения ролейМинимальный практический шаблон набора инструментов для MVP
Для большинства MVP достаточно 3–6 инструментов.
Пример для сценария "создать тикет поддержки":
kb_search(query)
customer_lookup(email)
helpdesk_create_ticket(payload)
helpdesk_add_comment(ticket_id, text)
summarize_conversation(messages)Важнее не количество инструментов, а качество их контрактов, проверок и политик.
Итог: что у вас должно получиться после этой статьи
список инструментов, привязанный к вашей карте задачи
контракт каждого инструмента: вход, выход, ошибки, побочные эффекты
правила: какие инструменты read-only, какие требуют подтверждения
решение по данным: где API/БД, где RAG, где достаточно резюме
план логирования и тестов на вызовы инструментовПолезные первоисточники и справочники:
OWASP Top 10 for LLM Applications
ReAct: Synergizing Reasoning and Acting in Language Models
NIST AI Risk Management Framework