Сразу проясню: я не думаю, что AI-агенты могут заменить риелторов. Моя жена риелтор, так что я могу быть предвзят.
Когда я принимаю одно из самых важных финансовых решений в своей жизни, я хочу говорить с заинтересованным человеком, а не с корпоративным приложением. С кем-то, кто понимает не только рынок, но и меня. С кем-то, кто знает, что в том районе, где устраивают классные праздники для соседей, есть еще и тот самый зеленый уголок, где каждое субботнее утро в 8:15 идет реконструкция «Звездных войн».
А знаете, что, по-моему, ИИ вполне может заменить? Веб-формы.
Я ненавижу веб-формы. Все ненавидят веб-формы. Тим Бернерс-Ли, человек, который придумал веб, ненавидит веб-формы. Вся «радость» очереди в МРЭО, только там ты хотя бы можешь встретиться взглядом с кем-то и без слов разделить страдания. А когда заполняешь форму, на тебя вообще никто не хочет смотреть.
LLM-чат — штука замечательная. Он вовлекает, с ними можно вести разговор, и он бесконечно дружелюбнее, чем стена пустых полей ввода с красными звездочками, требующими послушания. Он может действительно «выслушать» тебя и перевести сказанное в структурированную информацию, которую потом можно скормить обычным программам. Это как очень хороший ассистент, который во время непринужденной беседы делает идеальные заметки.
Но вот загвоздка — и она серьезная: LLM — это языковые модели. Не физические модели. Не юридические модели. Не «модели понимания фундаментальной природы реальности». Они могут отражать язык, которым мы описываем физику и право, но сами эти вещи они не понимают. По крайней мере, пока.
Представьте себе: у них шикарное, обаятельное лицо, из-за которого разговор ощущается естественным и почти человеческим. Но тело, которое это лицо держит? Такое себе, недоразвитое. Они потрясающе умеют звучать «правильно», но если на кону твоя репутация, им нужно не только говорить, но и быть правыми.
И вот тут появляется Business Process Model and Notation (BPMN) — и это важнее, чем может показаться на первый взгляд.
BPMN обладают двумя свойствами, которых нет у LLM:
Прозрачность:
BPMN‑диаграммы легко читать и понимать. Исполняемый BPMN с Python так же легко читать и понимать… и он делает ровно то, что в нем написано.
Детерминированность:
Вы можете задать точные данные, которые нужно собрать. («Он уже работает с риелтором?») Вы можете создавать развилки, которые ведут по определенным путям только тогда, когда это уместно. («По закону мы не можем давать рекомендации, если он уже с другим риелтором — давайте не будем зря тратить ничье время».)
Вы можете строить бизнес‑правила с помощью DMN. («На сегодня мы берем только клиентов, которые ищут дом в зоне нашего обслуживания. Могу я порекомендовать вам кого‑то другого?»)
Вы можете связывать множество правил, таблиц решений и данных. BPMN часто используют для управления сложными процессами — в банкинге, налогообложении, госуправлении.
BPMN дает стабильные метрики. (Двадцать потенциальных клиентов покупают, четырнадцать продают, и из этих четырнадцати двое на финальной стадии подписания договора…)
Единственный минус? Взаимодействие с пользователем в BPMN-процессе обычно реализуют через… веб‑формы.
Вот тут начинается самое интересное.
Большинство AI-агентов, о которых вы слышали, полагаются на LLM для управления всем процессом — он решает, когда с вами общаться, когда вызывать инструмент, когда устроить перерыв непонятно на сколько. Проблема в том, что там нет настоящих ограничений, страховочных барьеров, каркаса, который все это удерживает.
На самом деле нам нужно другое: использовать LLM там, где она полезна — как интерфейс для общения с человеком. Удобный, вовлекающий, адаптивный и отзывчивый фронтенд, который сам ничего не контролирует напрямую, а следует детерминированному рабочему процессу.
По сути, мы строим систему, больше похожую на наш собственный мозг — «команду соперников», которая снаружи выглядит как нечто целостное, хотя внутри это набор разнородных подсистем, по‑разному воспринимающих мир, но создающих иллюзию единого сознания.
Когда‑нибудь этот детерминированный бэкенд сам может стать какой‑то продвинутой ИИ‑системой. Но если мы хотим уже сейчас предсказуемо и эффективно использовать LLM, нам нужно дать ей «скелет» — заземленный поток, который направляет разговор, гарантирует, что нужные действия будут выполнены, и что мы действительно придем к цели.
Пройдемся по реальному примеру, шаг за шагом. В конце статьи мы дадим ссылку, где вы сможете увидеть этот процесс в деле и пообщаться с ним самостоятельно.
Представьте, что мы смотрим на небольшую часть процесса первичного сбора данных для риелтора. Здесь мы определяем конкретный набор вопросов, на которые нужно получить ответы. По сути, мы даем LLM форму для заполнения, а она уже задает пользователю вопросы, чтобы заполнить эту форму от его имени.
Вот в чем прелесть: мы можем проверять форму, видеть, какие ответы приходят, и забрать управление обратно у ИИ, как только получим нужную информацию для перехода к следующему шагу.
Это простой пример первого шага, но представьте, что на этом все не заканчивается. Мы переходим к другой форме, еще одной, еще одной — но только к тем формам, которые имеют смысл именно для этого человека/клиента. Мы передаем весь контекст дальше, поэтому если ответ уже есть из предыдущего разговора, мы не спрашиваем заново.
Для пользователя это просто нормальный, естественный разговор. Для нас — четко заданный процесс, который собирает ровно ту информацию, которая нужна, и мы всегда точно знаем, где каждый находится в воронке.
Разберем это пошагово. Внизу есть ссылка, где вы сможете попробовать сами. Вам понадобится ключ API Claude для вызовов, но в остальном просто нажмите кнопку "Play", чтобы запустить процесс.
Мы используем JSON для работы с формами в SpiffWorkflow. Руками писать его неудобно, поэтому мы часто просим LLM помочь его построить. Но он невероятно полезен — компьютер может прочитать эту схему справа и мгновенно собрать веб-форму слева, а как вы увидите через минуту, это очень полезная вещь для передачи ИИ.
На первом шаге мы просто создаем переменную schema, которую потом передадим в LLM.
Теперь мы отправляем эту схему LLM с инструкциями начать общение с пользователем, чтобы заполнить форму. Здесь требуется немного «промпт-инжиниринга» (простите за buzzword). В примере используется Claude — использование инструментов не стандартизовано для всех моделей, но по сути примерно одинаково.
Настройка системного промпта критически важна. Она говорит LLM, какую роль она играет:
system = """ You are a friendly and conversational and direct real estate agent You are honest and up front about being an AI. You only ask one question at a time. Your sole mission is to complete this json schema: """ + json.dumps(schema)
Затем мы передаем полную JSON-схему, которую определили ранее.
Настройка «инструментов» — это самое хитрое место. Мы говорим LLM, что у нее есть инструмент для сохранения JSON-данных. Делаем мы это, чтобы захватить эти данные и сохранить их. Мы не столько даем ей инструмент, сколько позволяем LLM общаться не только с конечным пользователем — мы даем ей способ поговорить с моделью BPMN; передать собранную информацию точно в том формате, который нам нужен.
tool_description = """ Saves responses from the user as json. Use as often as possible to save information, while you continue to ask additional questions. The tool does not provide any information when executed. """
Здесь мы просто вызываем API Claude, чтобы запустить ИИ. Можно использовать локальную LLM или другую систему — по сути, делаем обычный веб-запрос, отправляя подготовленную ранее информацию.
Когда приходит ответ, он приходит в нескольких частях. Одна — это контент для показа пользователю (разговорная часть). Другая — сообщение для инструмента, который мы определили ранее; это данные, которые были бы отправлены как часть формы.
contents = response.get("content") user_responses = {} is_complete = False for content in contents: # This is a message to show the customer if content["type"] == "text": user_message = content["text"] if content["type"] == "tool_use": # These are the form reponses user_responses = content["input"]["json"]
Сообщение, отправленное инструменту, — это просто кусок JSON, который мы можем проверить. Если приходит ответ, означающий, что разговор нужно остановить, мы можем это сделать. Также мы можем проверить, собрали ли мы уже всю нужную информацию.
if "workingWithAgent" in user_responses: workingWithAgent = user_responses["workingWithAgent"] else: workingWithAgent = False
Вот где действительно проявляется сила BPMN:
Если у нас есть все данные, переходим к следующему шагу — что бы ни требовалось дальше в процессе.
Если приходит критический ответ (например, пользователь упоминает, что у него уже есть риелтор), мы можем выдать дружеское сообщение и остановить процесс. Не тратим время людей зря.
Иначе настраиваем следующую схему (которая была бы еще одной веб-формой) и даем LLM продолжить задавать уточняющие вопросы, собирая информацию естественным путем.
Вот и все. Если хотите увидеть этот процесс в работе, посмотрите сопутствующее видео на YouTube. Если хотите попробовать сами и внести изменения — добавить свою схему, подправить промпты — это тоже можно.
Повторю еще раз: я не думаю, что эти LLM — хорошая замена людям. Как бы хорошо LLM ни становились и как бы тщательно ни был структурирован этот BPMN-процесс, ничто не заменит разговор с экспертом, который действительно вас понимает, знает текущие изменения в регуляциях, экономике, ресурсах района и разбирается во всех тех тонкостях, которые делают это место вашим домом.
Но мы можем строить лучшие инструменты для себя — инструменты, которые помогают не сбиваться с пути, напоминают, где находится процесс, и, самое главное, избавляют нас от этих чертовых веб-форм.
Я полностью готов оставить их позади, шагая в будущее.
Посмотрите процесс в действии в сопутствующем видео. Хотите попробовать сами? Вам понадобится ключ API Claude, затем переходите в наш SpiffWorks Editor, где диаграмма уже загружена и готова к запуску — добавьте ключ и экспериментируйте. Расскажите, как прошло!
BPM Developers — про бизнес-процессы: новости, гайды, полезная информация и юмор.
Источник


