К содержанию
Инструменты · банк

Агентские фреймворки в банке

Фреймворк помогает выполнять шаги агента и сохранять состояние. Права на операции и проверку результата банк реализует отдельно, в своём коде.

Агент выполняет шаги, вызывает инструменты, ищет сведения, принимает запросы, пишет трассы и проходит оценки. Под эти задачи есть готовые программы и протоколы: для шагов LangGraph, для инструментов MCP, для сервиса FastAPI, для трасс Langfuse. Ниже видно, что делает каждая часть, где платёж может уйти дважды и почему поставить трассы у себя ещё не значит, что данные остались в банке.

Из чего собран агент
  • LangChain · LangGraphшаги, состояние, паузы
  • MCPописание инструментов
  • FastAPI · asyncioсервис и ожидание
  • Langfuse · LangSmithтрассы и оценки

Путь одного запроса: от вопроса клиента до одной операции в банке, трасса пишет каждый шаг.

Последний кадр: подтверждение получено, в банке одна операция.

Из чего собран агент

В этом примере ядро агента: модель и оркестрация

В этом примере ядро агента это модель и оркестрация: модель предлагает шаг, оркестрация решает, что делать дальше. Знания, действия и сервис подключают под задачу. Безопасность и контроль проходят через все части. Это схема примера, у других агентов части могут делиться иначе. Важнее, где проверяют права и как агент переживает сбой. Уберите любую часть ниже и посмотрите, что сломается и что придётся писать самим.

ядро

  • Модельмодель и инструкция
  • ОркестрацияLangChain · LangGraph

под задачу

  • ЗнанияRAG · поиск · индекс
  • Действияtool calling · MCP
  • СервисFastAPI · asyncio

через все части

  • КонтрольLangfuse · LangSmith
  • Безопасностьправа · маскирование · лимиты

Уберите часть: что сломается

Делает
решает, какой шаг выполнить дальше, хранит состояние, ставит паузы
Без неё
нет переходов: не встать на паузу, не продолжить, не обработать ошибку
Проще
свой цикл на SDK модели: запрос, вызов, результат; лимиты и журнал пишет команда
Отвечает в команде
разработчик агента

разбор автора, не замер

Когда хватит своего кода? ↓

Код или фреймворк

Пока шаги задаёт программа, хватает своего кода

Главный вопрос: кто выбирает следующий шаг, программа или модель. Если шаги заданы заранее, хватает прямых вызовов. Если процесс долгий и ждёт людей, LangGraph берёт на себя состояние и повторы. Без библиотеки управление шагами не исчезает: оно переходит в ваш код.

шаги задаёт программашаг выбирает модель

  1. Один вызов моделивопрос, ответ, ничего не меняетсяничего лишнего
  2. Workflow на своём кодешаги известны заранее, их малолимиты, повторы и журнал пишет команда
  3. LangGraphдолгий процесс, ветвления, пауза на подтверждение, восстановлениеещё один слой в эксплуатации
  4. LangChain-агентмодель сама выбирает инструменты в цикленужны бюджет шагов и сильные оценки

цена автономии×15токенов у нескольких агентов против одного чатаинженерная статья разработчика моделиМультиагентная исследовательская система: сбои, бюджет, трассировка ↗коэффициент одной системы, на банк не переносится

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

разбор автора, не замер

Чем LangChain отличается от LangGraph? ↓

LangChain и LangGraph

LangGraph можно поставить без LangChain

Агенты LangChain построены поверх LangGraph. LangChain даёт готовый цикл агента: модель, инструменты, инструкцию и промежуточные обработчики. LangGraph отвечает за граф шагов: держит состояние, сохраняет его и ставит процесс на паузу, пока человек не решит. Спорить, что лучше, незачем: это два этажа одной постройки, и нижний можно взять отдельно.

LangChainготовый агент: модель, инструменты, инструкция, обработчикикогда нужен стандартный цикл и подключение разных моделей
LangGraphграф: узлы, переходы, состояние, снимки, пауза, возобновлениекогда нужны ветвления, паузы и явная граница между решениями программы и модели
Свой код банкаправа, деньги, номер операции, статус, журналвсегда: это не отдаётся ни одной библиотеке
  • stateданные текущего выполнения
  • checkpointсохранённый снимок состояния
  • threadистория запусков одного процесса
  • interruptостановка до внешнего решения

Версии на 09.10.2026

LangChain1.4.408.10.2026LangChain: релизы ↗
LangGraph1.2.1406.10.2026LangGraph: релизы ↗
LangSmith, своя установка0.17.2902.10.2026LangSmith: версии своей установки ↗
Langfuse4.56.009.10.2026Langfuse: релизы ↗
FastAPI0.143.008.10.2026FastAPI: релизы ↗
Спецификация MCP2026-07-2828.07.2026Спецификация MCP 2026-07-28: инструменты ↗

Соседи: LlamaIndex сильнее там, где главная сложность в документах; AutoGen с 2025 года только поддерживают, а новым проектам его авторы советуют другой фреймворк.

релизы проектов на 09.10.2026

Что будет с платежом после паузы? ↓

Пауза и повтор

Номер операции защищает от повтора, только когда исполнитель проверяет и сохраняет его

После паузы LangGraph запускает шаг заново с самого начала. Если шаг вызывает списание до паузы, этот вызов повторится. Снимок процесса сохранён, но одну операцию в банке он не обещает. Номер операции служит ключом повтора, когда исполнитель банка проверяет его и сохраняет вместе с результатом: повторный запрос находит прежнюю операцию и не создаёт новую. Если связь оборвалась после списания, исполнитель сверяет статус по тому же номеру.

Шаг сценария

Списание до паузышаг сначала списывает, потом ждёт клиента
  1. Агент готовит перевод 5 000 ₽списание
  2. Пауза: агент ждёт подтверждения клиентаожидание
  3. Клиент подтвердил, шаг возобновлёншаг запущен заново: снова списание
  4. Связь оборвалась после списания, повторсписание

3 операции в банке

Подтверждение отдельнодо паузы только черновик с номером операции, после подтверждения исполнитель сверяет статус по номеру и списывает один раз
  1. Агент готовит перевод 5 000 ₽черновик № 7Q4 без списания
  2. Пауза: агент ждёт подтверждения клиентаожидание
  3. Клиент подтвердил, шаг возобновлёнсверка № 7Q4: не исполнено, списание
  4. Связь оборвалась после списания, повторсверка № 7Q4: уже исполнено, повтор пропущен

1 операция в банке

Код примера: шаг с паузой и номером операции

Код примераPython
example/payment_node.pyкод примера
from langgraph.types import interrupt def prepare(state: Transfer) -> dict:    # A node of its own: its result is saved before the pause.    return {"op_id": new_operation_id()} def pay(state: Transfer) -> dict:    draft = {"op_id": state["op_id"], "to": state["to"], "amount": state["amount"]}    # Code above interrupt() runs again on resume: no side effects here.    if interrupt({"confirm": draft}) != "confirmed":        return {"status": "cancelled"}    # The bank, not the graph, knows whether the operation happened.    if bank.status(state["op_id"]) == "executed":        return {"status": "already_executed"}    # The client comes from the session, never from the model.    bank.transfer(**draft, client_id=session.client_id)    return {"status": "executed"}

учебный пример, суммы условные

Кто проверяет сам вызов? ↓

Инструменты и MCP

Вызов от модели исполнитель банка проверяет по схеме, смыслу и правам

Модель возвращает имя функции и аргументы, а приложение исполняет вызов. Вызов перевода может пройти проверку схемы и всё равно уйти не тому получателю. Поэтому исполнитель проверяет ещё смысл и права, а номер клиента берёт из сессии, а не из ответа модели. MCP описывает инструменты, но прав не выдаёт: спецификация запрещает передавать токен клиента дальше.

Модель предлагает вызовtransfer(to="40817…1234", amount=50000, client_id="c-77")клиент подтвердил перевод 5 000 ₽, в сессии клиент c-12
  1. Схемаполя и типы на местепройдена: форма верная, но строгий режим не проверяет смысл
  2. Смыслполучатель тот, сумма та, что подтвердил клиентстоп: в вызове 50 000 ₽, клиент подтвердил 5 000 ₽
  3. Праваклиент из сессии, право на счёт, право на записьстоп: client_id из ответа модели не совпадает с клиентом сессии

Итог не исполнено: вызов вернулся модели с причиной, деньги не двигались

Что MCP делает и чего не делает
  • MCP описывает инструменты и вызов, но не модель, не оркестратор и не поиск
  • токен выдаётся конкретному серверу, передавать токен клиента дальше запрещено
  • «узнать реквизиты», «подготовить платёж» и «исполнить платёж» это разные полномочия

спецификация протокола

Почему запросы ждут, пока думает модель? ↓

FastAPI и asyncio

Синхронный вызов в async def держит запросы своего цикла

FastAPI сам уводит в пул потоков обычный def, но не синхронную функцию, которую вызвали внутри async def. Тогда, пока модель отвечает одному клиенту, ждут остальные запросы этого цикла. Сколько клиентов это заденет, зависит от числа процессов и потоков сервиса. asyncio не ускоряет модель, он помогает ждать многих сразу. А тайм-аут HTTP не отменяет платёж, который уже ушёл в банк.

Как вызвана модель

сервис в одном процессе: ожидание модели держит его цикл событий

  1. ждёт модель6 с
  2. короткий запрос6,1 с
  3. короткий запрос6,2 с
  4. короткий запрос6,3 с
  5. короткий запрос6,4 с

короткие запросы ждут до 6,4 с

Из чего складывается ответ агента

  1. очередь
  2. доступ
  3. поиск
  4. модель
  5. инструменты
  6. сохранение
иллюстрация: доли условные, p95 и p99 меряют у себя

документация FastAPI и Python; время в лаборатории условное

Всегда ли агенту нужен RAG? ↓

Знания

Индекс нужен не каждому вопросу агента

RAG нужен, когда знаний больше, чем помещается в контекст. Факты о деньгах приходят из учётной системы, а не из индекса. Красивый ответ не спасёт плохую нарезку. В одном банке помощник стал отвечать лучше, когда искал по мелким кускам, а отдавал модели всю секцию. Найденный текст даёт агенту данные, а не права: RAG не защищает от инструкций внутри документов.

Вопрос к агентуОткуда ответRAG
Сколько денег на счёте?API учётной системы с правами клиентане нужен
Почему не прошёл возврат?статус операции из API, правило возврата из поискатолько для правила
Какая комиссия по тарифу?поиск по сотням регламентов, права проверены до моделинужен
Что сказано в коротком своде правил?документ целиком в контексте моделииндекс не нужен

Один раздел регламента

Было: модель получает кусок
  1. Тариф «Перевод»: комиссия
  2. до лимита · без комиссии
  3. сверх лимита · по тарифу
  4. кроме переводов между своими счетами
строки таблицы без названия тарифа и без исключения
Стало: модель получает раздел
  1. Тариф «Перевод»: комиссия
  2. до лимита · без комиссии
  3. сверх лимита · по тарифу
  4. кроме переводов между своими счетами
поиск находит кусок, модель читает весь раздел, из которого он взят

учебный раздел; случай нарезки из блога крупного банка

Как построить хранилище контекста для агентов →

разбор автора, не замер

Как понять, что агент прав? ↓

Трассы, оценки, аудит

Трасса, оценка и аудит отвечают на разные вопросы

Трасса показывает путь запроса. Оценка говорит, стала ли новая версия лучше на отложенных случаях. Аудит связывает: что собирались сделать, с какими правами, кто подтвердил и какую квитанцию выдал банк. Когда поставщик выпустил новое поколение модели, агент одного банка перестал запрашивать контекст клиента, и оценки это поймали.

ВопросОтвечаетЧемЧего не доказывает
Как шло выполнение?трассаLangfuse, LangSmith, OpenTelemetryчто ответ верный
Стало ли лучше?оценкаотложенный набор, судья, сверенный с людьмичто каждый ответ верный
Чем докажем решение?бизнес-аудитнамерение, права, подтверждение, квитанциячто модель рассуждала именно так
На каких версиях?реконструкцияверсии модели, инструкции, кода, данныхчто повтор даст тот же ответ

Смена поколения модели

  1. старая модель: получить контекст клиента → ответ
  2. новая модель: ответ без контекста клиента
  3. правило: вызвать инструмент контекста до ответа

научная статья команды цифрового банка

Где на самом деле живут трассы? ↓

Размещение

Свой сервер трасс ещё не значит, что данные клиентов остаются внутри банка

LangSmith на своей установке требует телеметрию для расчётов. Только с офлайн-лицензией он ничего не отправляет наружу. У Langfuse в открытой версии телеметрию можно отключить, в Enterprise нельзя. Трассы лишь одна точка: проверять надо весь маршрут данных, от модели и поиска до судьи и резервных копий.

ВариантГде живётТелеметрияНулевой исходящий трафикЖурнал аудита
LangSmith, облакорегионы США и ЕСу поставщиканету поставщика
LangSmith, своя установкаEnterprise-дополнениедля расчётов обязательнатолько с офлайн-лицензиейв своей установке
Langfuse, облакорегионы США, ЕС, Японииу поставщиканету поставщика
Langfuse, открытая версияу себяотключается настройкойда, если выключить проверку обновлений и внешние интеграциипишется в таблицу, просмотр только в Enterprise
Langfuse Enterpriseу себядля лицензии, не отключаетсяработа без сети не отменяет условий лицензиис интерфейсом просмотра

Маршрут данных одного ответа

  1. модель
  2. эмбеддинги
  3. поиск
  4. переранжирование
  5. инструменты
  6. трассы
  7. судья
  8. резервные копии

внешний API эмбеддингов отправляет документы наружу даже при своём индексе

документация проекта

Кого под это ищут в вакансиях? ↓

Рынок

В изученных вакансиях с LangChain или LangGraph RAG просят в 5 раз чаще

Там, где фреймворк назван, RAG просят в 78 % вакансий против 15 % в остальных. Сам фреймворк называют неровно: 16 % вакансий у крупнейшего работодателя выборки и 7 % у остальных семи компаний, но разрыв по навыкам у обоих один. В этих вакансиях рядом с фреймворком просят то, что нужно для агента целиком: поиск, сервис, инструменты и оценки.

Где называют LangChain или LangGraph

  • крупнейший работодатель выборки16 %85 из 534
  • остальные семь компаний7 %18 из 261

Что просят рядом с фреймворком

в вакансиях с LangChain или LangGraphв остальных ИИ-вакансиях

  • RAG78 %15 %
  • FastAPI или asyncio43 %5 %
  • tool calling30 %3 %
  • MCP23 %4 %
  • оценка качества26 %12 %
  • Langfuse или LangSmith14 %0,4 %

Разрыв держится в обеих группах: RAG 76 % против 15 % у крупнейшего работодателя и 83 % против 15 % у остальных семи, где фреймворк назван всего в 18 вакансиях.

  • 103 из 795ИИ-вакансий называют LangChain или LangGraph85 из них у крупнейшего работодателя выборкиподсчёт автора по открытым вакансиям

открытые ИИ-вакансии 8 крупных российских компаний, банков и технологических, срез одной недели; 534 из 795 у одного работодателя

С чего начать в банке? ↓

Старт

Свободу модели банк расширяет только по замеру

Сначала запускают один процесс с заданными шагами и честной оценкой. Потом добавляют поиск и узкие инструменты с проверкой прав. Свободу модели расширяют там, где она выигрывает по качеству, цене и управляемости. Проверяют это на случаях, которых не было в настройке. Ниже 15 вопросов, которые стоит задать команде до выпуска.

шаги задаёт программашаг выбирает модель

  1. 1Workflow на своём кодеодин процесс, шаги заданымера пилотадоля верных ответов на отложенных случаяхдальше, когдаоценки стоят на отложенном наборе, ошибки разобраны по трассам
  2. 2Поиск и узкие инструментыправа до модели, чтение отдельно от записимера пилотаноль действий без подтверждения, повтор не даёт второй операциидальше, когдау каждого действия номер операции, исполнитель его проверяет и хранит, права проверяет код
  3. 3Автономия по замерумодель сама выбирает шагмера пилотакачество, цена и управляемость против workflow на тех же случаяхсвободу расширяют только там, где она выиграла

Вопрос команде

Когда достаточно обычного цикла на Python, а когда нужен LangGraph?

Цикла хватает, когда шагов мало и они известны заранее. LangGraph нужен, когда процесс долгий: он ветвится, ждёт подтверждения, восстанавливается после сбоя. Без него всё это остаётся, только пишет это команда.

Раздел об этом ↑

разбор автора, не замер

Как доверить агенту работу без проверки каждого шага? →

Ресурсы

По чему собрана страница

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

Агент и фреймворк

что такое агент, когда хватает своего кода, сколько стоит несколько агентов

LangChain и LangGraph

слои, состояние, пауза, повтор и версии

Инструменты и MCP

спецификация, права, атака через данные, практика банков

Сервис

FastAPI, asyncio и блокирующие вызовы

Знания и риски

нарезка документов и инструкции внутри данных

Трассы и оценки

оценки при смене модели, состояние в оценках, платформа банка

Размещение

своя установка, телеметрия, исходящий трафик, сбои облака