Агентские фреймворки в банке
Фреймворк помогает выполнять шаги агента и сохранять состояние. Права на операции и проверку результата банк реализует отдельно, в своём коде.
Агент выполняет шаги, вызывает инструменты, ищет сведения, принимает запросы, пишет трассы и проходит оценки. Под эти задачи есть готовые программы и протоколы: для шагов LangGraph, для инструментов MCP, для сервиса FastAPI, для трасс Langfuse. Ниже видно, что делает каждая часть, где платёж может уйти дважды и почему поставить трассы у себя ещё не значит, что данные остались в банке.
- LangChain · LangGraphшаги, состояние, паузы
- MCPописание инструментов
- FastAPI · asyncioсервис и ожидание
- Langfuse · LangSmithтрассы и оценки
Путь одного запроса: от вопроса клиента до одной операции в банке, трасса пишет каждый шаг.
Последний кадр: подтверждение получено, в банке одна операция.
- +37 п.п.tNPS у агента, который исполняет процедурыпротив агента, который только ищет ответ и зовёт человека; менялась вся системанаучная статья команды цифрового банкаАгенты с действиями в цифровом банке: пять развёртываний ↗
- ×15токенов тратят несколько агентов вместо одного чатапо данным одной исследовательской системыинженерная статья разработчика моделиМультиагентная исследовательская система: сбои, бюджет, трассировка ↗
- 373 таблицыза 3 дня получили проверки качества данныхагент через MCP и 3 стажёра, каждую проверку утверждает человектехнический блог крупного банкаАгент проверок качества данных через MCP-сервер метаданных ↗
- 16 %ИИ-вакансий крупнейшего работодателя называют LangChain или LangGraphу остальных семи крупных компаний 7 %: 18 из 261подсчёт автора по открытым вакансиям
Из чего собран агент
В этом примере ядро агента: модель и оркестрация
В этом примере ядро агента это модель и оркестрация: модель предлагает шаг, оркестрация решает, что делать дальше. Знания, действия и сервис подключают под задачу. Безопасность и контроль проходят через все части. Это схема примера, у других агентов части могут делиться иначе. Важнее, где проверяют права и как агент переживает сбой. Уберите любую часть ниже и посмотрите, что сломается и что придётся писать самим.
ядро
- Модельмодель и инструкция
- ОркестрацияLangChain · LangGraph
под задачу
- ЗнанияRAG · поиск · индекс
- Действияtool calling · MCP
- СервисFastAPI · asyncio
через все части
- КонтрольLangfuse · LangSmith
- Безопасностьправа · маскирование · лимиты
Уберите часть: что сломается
- Делает
- решает, какой шаг выполнить дальше, хранит состояние, ставит паузы
- Без неё
- нет переходов: не встать на паузу, не продолжить, не обработать ошибку
- Проще
- свой цикл на SDK модели: запрос, вызов, результат; лимиты и журнал пишет команда
- Отвечает в команде
- разработчик агента
разбор автора, не замер
Код или фреймворк
Пока шаги задаёт программа, хватает своего кода
Главный вопрос: кто выбирает следующий шаг, программа или модель. Если шаги заданы заранее, хватает прямых вызовов. Если процесс долгий и ждёт людей, LangGraph берёт на себя состояние и повторы. Без библиотеки управление шагами не исчезает: оно переходит в ваш код.
шаги задаёт программашаг выбирает модель
- Один вызов моделивопрос, ответ, ничего не меняетсяничего лишнего
- Workflow на своём кодешаги известны заранее, их малолимиты, повторы и журнал пишет команда
- LangGraphдолгий процесс, ветвления, пауза на подтверждение, восстановлениеещё один слой в эксплуатации
- LangChain-агентмодель сама выбирает инструменты в цикленужны бюджет шагов и сильные оценки
цена автономии×15токенов у нескольких агентов против одного чатаинженерная статья разработчика моделиМультиагентная исследовательская система: сбои, бюджет, трассировка ↗коэффициент одной системы, на банк не переносится
разбор автора, не замер
LangChain и LangGraph
LangGraph можно поставить без LangChain
Агенты LangChain построены поверх LangGraph. LangChain даёт готовый цикл агента: модель, инструменты, инструкцию и промежуточные обработчики. LangGraph отвечает за граф шагов: держит состояние, сохраняет его и ставит процесс на паузу, пока человек не решит. Спорить, что лучше, незачем: это два этажа одной постройки, и нижний можно взять отдельно.
stateданные текущего выполненияcheckpointсохранённый снимок состоянияthreadистория запусков одного процессаinterruptостановка до внешнего решения
Версии на 09.10.2026
| LangChain | 1.4.4 | 08.10.2026 | LangChain: релизы ↗ |
|---|---|---|---|
| LangGraph | 1.2.14 | 06.10.2026 | LangGraph: релизы ↗ |
| LangSmith, своя установка | 0.17.29 | 02.10.2026 | LangSmith: версии своей установки ↗ |
| Langfuse | 4.56.0 | 09.10.2026 | Langfuse: релизы ↗ |
| FastAPI | 0.143.0 | 08.10.2026 | FastAPI: релизы ↗ |
| Спецификация MCP | 2026-07-28 | 28.07.2026 | Спецификация MCP 2026-07-28: инструменты ↗ |
Соседи: LlamaIndex сильнее там, где главная сложность в документах; AutoGen с 2025 года только поддерживают, а новым проектам его авторы советуют другой фреймворк.
релизы проектов на 09.10.2026
Пауза и повтор
Номер операции защищает от повтора, только когда исполнитель проверяет и сохраняет его
После паузы LangGraph запускает шаг заново с самого начала. Если шаг вызывает списание до паузы, этот вызов повторится. Снимок процесса сохранён, но одну операцию в банке он не обещает. Номер операции служит ключом повтора, когда исполнитель банка проверяет его и сохраняет вместе с результатом: повторный запрос находит прежнюю операцию и не создаёт новую. Если связь оборвалась после списания, исполнитель сверяет статус по тому же номеру.
Шаг сценария
- Агент готовит перевод 5 000 ₽списание
- Пауза: агент ждёт подтверждения клиентаожидание
- Клиент подтвердил, шаг возобновлёншаг запущен заново: снова списание
- Связь оборвалась после списания, повторсписание
3 операции в банке
- Агент готовит перевод 5 000 ₽черновик № 7Q4 без списания
- Пауза: агент ждёт подтверждения клиентаожидание
- Клиент подтвердил, шаг возобновлёнсверка № 7Q4: не исполнено, списание
- Связь оборвалась после списания, повторсверка № 7Q4: уже исполнено, повтор пропущен
1 операция в банке
Код примера: шаг с паузой и номером операции
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"}- 2 разавыполняется код шага, который стоит до паузыдо остановки и ещё раз после возобновлениядокументация проектаLangGraph: пауза до решения человека и возобновление ↗
- 1.2.11версия, на которой воспроизвели повторный запуск дочерней задачизадача открыта на 09.10.2026задача в репозитории проектаПовторный запуск дочерней задачи при повторе родителя ↗
учебный пример, суммы условные
Инструменты и MCP
Вызов от модели исполнитель банка проверяет по схеме, смыслу и правам
Модель возвращает имя функции и аргументы, а приложение исполняет вызов. Вызов перевода может пройти проверку схемы и всё равно уйти не тому получателю. Поэтому исполнитель проверяет ещё смысл и права, а номер клиента берёт из сессии, а не из ответа модели. MCP описывает инструменты, но прав не выдаёт: спецификация запрещает передавать токен клиента дальше.
transfer(to="40817…1234", amount=50000, client_id="c-77")клиент подтвердил перевод 5 000 ₽, в сессии клиент c-12- Схемаполя и типы на местепройдена: форма верная, но строгий режим не проверяет смысл
- Смыслполучатель тот, сумма та, что подтвердил клиентстоп: в вызове 50 000 ₽, клиент подтвердил 5 000 ₽
- Праваклиент из сессии, право на счёт, право на записьстоп: client_id из ответа модели не совпадает с клиентом сессии
Итог не исполнено: вызов вернулся модели с причиной, деньги не двигались
Что MCP делает и чего не делает
- MCP описывает инструменты и вызов, но не модель, не оркестратор и не поиск
- токен выдаётся конкретному серверу, передавать токен клиента дальше запрещено
- «узнать реквизиты», «подготовить платёж» и «исполнить платёж» это разные полномочия
- 373 таблицыза 3 дня получили проверки качества данныхагент читает метаданные через MCP-сервер, каждую проверку утверждает человектехнический блог крупного банкаАгент проверок качества данных через MCP-сервер метаданных ↗
- 1 задачав открытом репозитории вывела закрытые данные через инструмент агентавызовы инструментов были разрешены без просмотра человекомдемонстрация исследователей безопасностиИнструкция в публичной задаче выводит закрытые данные через MCP ↗
спецификация протокола
FastAPI и asyncio
Синхронный вызов в async def держит запросы своего цикла
FastAPI сам уводит в пул потоков обычный def, но не синхронную функцию, которую вызвали внутри async def. Тогда, пока модель отвечает одному клиенту, ждут остальные запросы этого цикла. Сколько клиентов это заденет, зависит от числа процессов и потоков сервиса. asyncio не ускоряет модель, он помогает ждать многих сразу. А тайм-аут HTTP не отменяет платёж, который уже ушёл в банк.
Как вызвана модель
сервис в одном процессе: ожидание модели держит его цикл событий
- ждёт модель6 с
- короткий запрос6,1 с
- короткий запрос6,2 с
- короткий запрос6,3 с
- короткий запрос6,4 с
короткие запросы ждут до 6,4 с
Из чего складывается ответ агента
- очередь
- доступ
- поиск
- модель
- инструменты
- сохранение
- def → пулFastAPI уводит в пул обычные обработчики, но не функцию внутри async defдокументация проектаFastAPI: async def, def и пул потоков ↗
- отмена ≠ возвратотмена задачи asyncio не отзывает уже отправленный платёждокументация проектаasyncio: задачи, отмена и to_thread ↗
документация FastAPI и Python; время в лаборатории условное
Знания
Индекс нужен не каждому вопросу агента
RAG нужен, когда знаний больше, чем помещается в контекст. Факты о деньгах приходят из учётной системы, а не из индекса. Красивый ответ не спасёт плохую нарезку. В одном банке помощник стал отвечать лучше, когда искал по мелким кускам, а отдавал модели всю секцию. Найденный текст даёт агенту данные, а не права: RAG не защищает от инструкций внутри документов.
| Вопрос к агенту | Откуда ответ | RAG |
|---|---|---|
| Сколько денег на счёте? | API учётной системы с правами клиента | не нужен |
| Почему не прошёл возврат? | статус операции из API, правило возврата из поиска | только для правила |
| Какая комиссия по тарифу? | поиск по сотням регламентов, права проверены до модели | нужен |
| Что сказано в коротком своде правил? | документ целиком в контексте модели | индекс не нужен |
Один раздел регламента
- Тариф «Перевод»: комиссия
- до лимита · без комиссии
- сверх лимита · по тарифу
- кроме переводов между своими счетами
- Тариф «Перевод»: комиссия
- до лимита · без комиссии
- сверх лимита · по тарифу
- кроме переводов между своими счетами
учебный раздел; случай нарезки из блога крупного банка
- 1 500+ сообщенийи 250 чатов за полгода у помощника по внутренней документацииузкая внутренняя аудитория; точность поиска не раскрытатехнический блог крупного банкаПомощник по внутренней документации банка: нарезка и целые секции ↗
разбор автора, не замер
Трассы, оценки, аудит
Трасса, оценка и аудит отвечают на разные вопросы
Трасса показывает путь запроса. Оценка говорит, стала ли новая версия лучше на отложенных случаях. Аудит связывает: что собирались сделать, с какими правами, кто подтвердил и какую квитанцию выдал банк. Когда поставщик выпустил новое поколение модели, агент одного банка перестал запрашивать контекст клиента, и оценки это поймали.
| Вопрос | Отвечает | Чем | Чего не доказывает |
|---|---|---|---|
| Как шло выполнение? | трасса | Langfuse, LangSmith, OpenTelemetry | что ответ верный |
| Стало ли лучше? | оценка | отложенный набор, судья, сверенный с людьми | что каждый ответ верный |
| Чем докажем решение? | бизнес-аудит | намерение, права, подтверждение, квитанция | что модель рассуждала именно так |
| На каких версиях? | реконструкция | версии модели, инструкции, кода, данных | что повтор даст тот же ответ |
Смена поколения модели
- старая модель: получить контекст клиента → ответ
- новая модель: ответ без контекста клиента
- правило: вызвать инструмент контекста до ответа
- +37 п.п.tNPS и +29 п.п. самообслуживания у агента с процедурамипротив версии, которая только ищет и зовёт человека; менялись сразу процедуры, инструменты и инструкциинаучная статья команды цифрового банкаАгенты с действиями в цифровом банке: пять развёртываний ↗
- судьи + людиоценщики-модели сверены с разметкой людейсвоя библиотека оценок при смене модели и переносе документовблог британской банковской группыСвоя библиотека оценок: судьи, сверенные с людьми ↗
- состояниеоценки с инструментами, которые меняют статус картысказать «карта заблокирована» и заблокировать её это разные проверкиинженерный блог европейского цифрового банкаОперационный агент банка: процедуры и оценки с меняющимся состоянием ↗
научная статья команды цифрового банка
Размещение
Свой сервер трасс ещё не значит, что данные клиентов остаются внутри банка
LangSmith на своей установке требует телеметрию для расчётов. Только с офлайн-лицензией он ничего не отправляет наружу. У Langfuse в открытой версии телеметрию можно отключить, в Enterprise нельзя. Трассы лишь одна точка: проверять надо весь маршрут данных, от модели и поиска до судьи и резервных копий.
| Вариант | Где живёт | Телеметрия | Нулевой исходящий трафик | Журнал аудита |
|---|---|---|---|---|
| LangSmith, облако | регионы США и ЕС | у поставщика | нет | у поставщика |
| LangSmith, своя установка | Enterprise-дополнение | для расчётов обязательна | только с офлайн-лицензией | в своей установке |
| Langfuse, облако | регионы США, ЕС, Японии | у поставщика | нет | у поставщика |
| Langfuse, открытая версия | у себя | отключается настройкой | да, если выключить проверку обновлений и внешние интеграции | пишется в таблицу, просмотр только в Enterprise |
| Langfuse Enterprise | у себя | для лицензии, не отключается | работа без сети не отменяет условий лицензии | с интерфейсом просмотра |
Маршрут данных одного ответа
- модель
- эмбеддинги
- поиск
- переранжирование
- инструменты
- трассы
- судья
- резервные копии
внешний API эмбеддингов отправляет документы наружу даже при своём индексе
- 07.05.2026облако трассировки отвечало с ошибками и задержкамипомог откат кэша; запись результата должна жить в контуре исполнениястатус-страница облака трассировкиСбой облака трассировки: ошибки и задержки API ↗
документация проекта
Рынок
В изученных вакансиях с LangChain или LangGraph RAG просят в 5 раз чаще
Там, где фреймворк назван, RAG просят в 78 % вакансий против 15 % в остальных. Сам фреймворк называют неровно: 16 % вакансий у крупнейшего работодателя выборки и 7 % у остальных семи компаний, но разрыв по навыкам у обоих один. В этих вакансиях рядом с фреймворком просят то, что нужно для агента целиком: поиск, сервис, инструменты и оценки.
Где называют LangChain или LangGraph
- крупнейший работодатель выборки85 из 534
- остальные семь компаний18 из 261
Что просят рядом с фреймворком
в вакансиях с LangChain или LangGraphв остальных ИИ-вакансиях
- RAG
- FastAPI или asyncio
- tool calling
- MCP
- оценка качества
- Langfuse или LangSmith
Разрыв держится в обеих группах: RAG 76 % против 15 % у крупнейшего работодателя и 83 % против 15 % у остальных семи, где фреймворк назван всего в 18 вакансиях.
- 103 из 795ИИ-вакансий называют LangChain или LangGraph85 из них у крупнейшего работодателя выборкиподсчёт автора по открытым вакансиям
открытые ИИ-вакансии 8 крупных российских компаний, банков и технологических, срез одной недели; 534 из 795 у одного работодателя
Старт
Свободу модели банк расширяет только по замеру
Сначала запускают один процесс с заданными шагами и честной оценкой. Потом добавляют поиск и узкие инструменты с проверкой прав. Свободу модели расширяют там, где она выигрывает по качеству, цене и управляемости. Проверяют это на случаях, которых не было в настройке. Ниже 15 вопросов, которые стоит задать команде до выпуска.
шаги задаёт программашаг выбирает модель
- 1Workflow на своём кодеодин процесс, шаги заданымера пилотадоля верных ответов на отложенных случаяхдальше, когдаоценки стоят на отложенном наборе, ошибки разобраны по трассам
- 2Поиск и узкие инструментыправа до модели, чтение отдельно от записимера пилотаноль действий без подтверждения, повтор не даёт второй операциидальше, когдау каждого действия номер операции, исполнитель его проверяет и хранит, права проверяет код
- 3Автономия по замерумодель сама выбирает шагмера пилотакачество, цена и управляемость против workflow на тех же случаяхсвободу расширяют только там, где она выиграла
Вопрос команде
Когда достаточно обычного цикла на Python, а когда нужен LangGraph?
Цикла хватает, когда шагов мало и они известны заранее. LangGraph нужен, когда процесс долгий: он ветвится, ждёт подтверждения, восстанавливается после сбоя. Без него всё это остаётся, только пишет это команда.
Раздел об этом ↑разбор автора, не замер
Ресурсы
По чему собрана страница
Первоисточники всех цифр и утверждений страницы по группам. Подпись ссылки говорит, что это за работа, рядом её вид и год.
Агент и фреймворк
что такое агент, когда хватает своего кода, сколько стоит несколько агентов
- Как строить агентов: workflow и агент, начинать с простого ↗инженерный блог · 2024
- Мультиагентная исследовательская система: сбои, бюджет, трассировка ↗инженерный блог · 2025
- ReAct: рассуждение и действие по очереди ↗научная статья · 2023
- τ-bench: оценка агента по конечному состоянию базы ↗научная статья · 2024
LangChain и LangGraph
слои, состояние, пауза, повтор и версии
- LangChain: агенты построены на LangGraph ↗документация · 2026
- LangGraph: среда для долгих агентов с состоянием ↗документация · 2026
- LangGraph: состояние, снимки и потоки ↗документация · 2026
- LangGraph: пауза до решения человека и возобновление ↗документация · 2026
- LangGraph: повтор с сохранённого снимка ↗документация · 2026
- Повторный запуск дочерней задачи при повторе родителя ↗задача в репозитории · 2026
- LangChain: релизы ↗релизы проекта · 2026
- LangGraph: релизы ↗релизы проекта · 2026
- AutoGen: проект в режиме поддержки ↗релизы проекта · 2025
Инструменты и MCP
спецификация, права, атака через данные, практика банков
- Спецификация MCP 2026-07-28: инструменты ↗спецификация · 2026
- Спецификация MCP 2026-07-28: авторизация ↗спецификация · 2026
- Инструкция в публичной задаче выводит закрытые данные через MCP ↗демонстрация исследователей · 2025
- Официальный SDK MCP: порядок закрытия клиентов ↗задача в репозитории · 2026
- Агент проверок качества данных через MCP-сервер метаданных ↗инженерный блог · 2026
- Внутренний агент разработчиков в песочнице с MCP-шлюзом ↗инженерный блог · 2026
Сервис
FastAPI, asyncio и блокирующие вызовы
- FastAPI: async def, def и пул потоков ↗документация · 2026
- asyncio: задачи, отмена и to_thread ↗документация · 2026
- Блокирующий вызов внутри async def останавливает сервис ↗задача в репозитории · 2021
- FastAPI: релизы ↗релизы проекта · 2026
Знания и риски
нарезка документов и инструкции внутри данных
- Помощник по внутренней документации банка: нарезка и целые секции ↗инженерный блог · 2026
- Десять главных рисков приложений на больших моделях, 2025 ↗отраслевое руководство · 2026
- Внедрение инструкций в данные модели ↗отраслевое руководство · 2026
Трассы и оценки
оценки при смене модели, состояние в оценках, платформа банка
- Агенты с действиями в цифровом банке: пять развёртываний ↗научная статья · 2026
- Операционный агент банка: процедуры и оценки с меняющимся состоянием ↗инженерный блог · 2026
- Своя библиотека оценок: судьи, сверенные с людьми ↗инженерный блог · 2025
- Платформа ИИ для разработчиков банка: шлюз моделей, реестр инструментов, трассы ↗инженерный блог · 2025
- Langfuse: трассировка ↗документация · 2026
Размещение
своя установка, телеметрия, исходящий трафик, сбои облака
- LangSmith: своя установка ↗документация · 2026
- LangSmith: исходящий трафик своей установки ↗документация · 2026
- LangSmith: версии своей установки ↗релизы проекта · 2026
- Langfuse: телеметрия своей установки ↗документация · 2026
- Langfuse: безопасность и регионы облака ↗документация · 2026
- Langfuse: журнал аудита и защита установки ↗документация · 2026
- Сбой облака трассировки: ошибки и задержки API ↗статус-страница · 2026
- Langfuse: релизы ↗релизы проекта · 2026