📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Build No-Code AI Applications with Dify Drag-and-Drop Workflows

Developers Digest12:58

Transcription

В этом видео я покажу вам, как можно использовать Defy для создания приложений LLM. Я расскажу о новой функции «workflow», а также о том, как вы можете использовать эти workflow в своих приложениях. В этом примере я покажу вам, как можно настроить систему, которая принимает текст на входе и выводит готовый веб-сайт на выходе.

Вот пример веб-сайта, который я сгенерировал, используя workflow в Defy. Я пройдусь по созданному мной workflow, а затем покажу вам, как вы можете настроить свой собственный workflow и создать своё собственное, индивидуальное AI-приложение. Если у вас уже есть существующее приложение, я покажу вам простой способ добавить новые функции, создав эти workflow в Defy.

Для начала работы с workflow вы можете создать бесплатную учётную запись на def.com. Также есть репозиторий GitHub, где вы можете развернуть это на своей собственной инфраструктуре, если вас это заинтересует. Defy — действительно впечатляющая платформа. Это проект с открытым исходным кодом. Вы можете следовать инструкциям в их репозитории GitHub, если вас это заинтересует, или, альтернативно, можете начать бесплатно, перейдя по ссылке, которую я оставлю в описании видео.

Прежде чем показать вам пример в видео, я хочу дать вам краткий обзор самой Defy. Вы можете перейти по ссылке, которую я прикреплю в видео, или я оставлю её в описании. Я бы посоветовал вам, если вы новичок на платформе, попробовать некоторые из этих примеров. У них есть действительно хорошие примеры того, как начать работу с различными компонентами. Чтобы показать вам немного о платформе, если вы хотите создать новый чат-бот или workflow, всё, что вам нужно сделать, это создать его с нуля. В настоящее время вы можете бесплатно иметь до 10 разных приложений на их платформе.

Ещё одна приятная особенность Defy — это возможность загружать свои источники знаний. Вы можете загружать их из файлов, но вы также можете синхронизировать их с веб-сайтами. С помощью чего-то вроде Fir Crawl вы можете просто подключить свой API Fir Crawl. Например, если вы хотите создать чат-бот на своём веб-сайте, вы можете получить API-ключ от Fir Crawl, рекурсивно просканировать свой веб-сайт. К концу видео вы увидите, как можно интегрировать что-то подобное в workflow. Также есть множество различных инструментов, встроенных в систему. У вас есть множество поисковых провайдеров, YouTube, генераторы диаграмм. Вы можете получить доступ ко множеству разных вещей: интеграции со Slack, интеграции с Fir Crawl, Tavali, запросы погоды, которые вы можете включить. Все эти вещи могут быть очень полезны при создании этих workflow.

Комбинируя эти LLM с этими workflow и этими базами знаний, вы можете начать создавать когнитивные агентные архитектуры, которые позволяют вам создавать действительно интересные приложения. Это лишь некоторые из инструментов, к которым вы можете получить доступ. Есть разные поисковые провайдеры, вы можете получить доступ к Yahoo Finance, вы даже можете интегрировать GitHub или Slack, YouTube — множество всего здесь. И когда вы зарегистрируетесь, я рекомендую вам сразу настроить своих поставщиков моделей. Например, если вы собираетесь использовать OpenAI, вы можете вставить свой API-ключ сюда. Вы можете вставить свой ключ Gemini, Grok и так далее. Здесь есть множество разных вариантов. Вы даже можете использовать локальные модели, если хотите. Вы можете использовать Llama, вы можете использовать Mistral, вы можете использовать практически любого из крупных поставщиков LLM. И, например, если вы собираетесь использовать что-то вроде Fir Crawl, вы можете просто вставить свой API-ключ сюда, чтобы не делать это каждый раз, когда вы хотите использовать этот инструмент.

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

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

Теперь, в этом примере, поскольку это связано с финансами, мы будем делать следующее: я попрошу один из первых узлов ответить только тикером названия компании. Например, если я скажу «Сгенерировать отчёт о Microsoft», я ожидаю, что этот вызов вывода LLM вернёт только название тикера. Я указал своё системное сообщение здесь, чтобы возвращать только название тикера в ответе на сообщение. Затем мы будем использовать эту конечную точку аналитики, а также конечную точку тикера от Yahoo Finance, которые являются встроенными инструментами в Defy, которые вы можете использовать. А затем мы будем передавать тикер как для конечной точки аналитики, так и для конечной точки тикера. А затем на следующем шаге мы передадим все полученные данные. А затем, после того как мы получим всю эту финансовую информацию, мы запросим подробный финансовый отчёт минимум в 20 параграфах. Причина, по которой я указываю минимум 20 параграфов, заключается в том, что когда я изначально настроил это, иногда он отвечал довольно короткими ответами. Я просто хотел, чтобы он был как можно более подробным. В данном случае мы снова будем использовать Grok для генерации нашего ответа здесь. Здесь мы передаём наше системное сообщение, но ещё одна приятная вещь заключается в том, что если вы хотите использовать любые переменные в любой точке workflow с предыдущего шага, вы можете нажать эту кнопку «переменная», а затем выбрать переменную, которую вы хотите использовать с предыдущих шагов. У вас есть глобальный контекст со всех разных узлов и их вывода, который вы можете включить в последующие сообщения. В данном случае я передаю контекст всего, что мы получаем из аналитики и тикера, и в данном случае это будут эти большие полезные данные JSON, с помощью которых он будет генерировать всю эту подробную финансовую информацию, как вы видели в таблице.

После того, как мы сгенерируем все эти абзацы и захотим создать наш HTML, мы будем использовать Gemini 1.5 Pro, который, как я обнаружил, хотя и не так быстр, как модели Grok, очень хорошо генерирует HTML. У меня здесь немного более подробное системное сообщение, и затем мы передаём ответ с предыдущего шага LLM. Это берёт весь текстовый ответ с предыдущего шага и динамически создаёт этот веб-сайт на лету. Таким образом, окончательный вывод HTML будет сгенерирован на этом шаге. С этого момента мы будем использовать немного JavaScript, и в этом случае мы просто будем в этом HTML, мы сможем хранить в базе данных Redis. В данном случае я буду использовать Upstash на одном из последующих шагов, которые вы увидите здесь. По существу, это будет делать следующее: если есть какие-либо строки и какие-либо специальные символы и всё такое, это позволит нам отправить чистый POST-запрос, который в конечном итоге будет декодироваться на стороне клиента, как только мы фактически прочитаем и сгенерируем эту информацию из базы данных Redis для создания нашего веб-сайта. Поэтому отсюда у нас будет очень простая функция для генерации случайного ключа. Случайный ключ будет использоваться для ключа в хранилище «ключ-значение» для базы данных Redis. Это позволит для каждого уникального запроса представлять собой способ извлечения этой информации из Redis для окончательной генерации и декодирования этого HTML. Затем отсюда мы будем использовать HTTP-запрос, и всё, что здесь делается, это то, что мы передадим наш авторизационный ключ, и затем мы отправим POST-запрос в нашу базу данных Upstash Redis. В данном случае мы будем хранить, как я уже упоминал, сгенерированный случайный ключ, который мы сгенерировали, а также закодированный HTML в нашем уровне базы данных. А затем мы будем выводить ссылку на наше веб-приложение, и всё, что представляет собой наше веб-приложение, — это бесплатная конечная точка Vercel, на которую мы будем это разворачивать. А затем мы будем делать следующее: как только мы передадим этот случайный ключ, он выполнит поиск в нашей базе данных Redis, и если существует ключ, мы обратимся к этому ключу. Если существует значение, связанное с ключом, мы декодируем HTML, который мы ранее сохранили, и затем мы просто вернём этот файл как HTML пользователю. Именно так будут генерироваться эти страницы. Таким образом, весь HTML в данном случае хранится в нашей базе данных Redis.

Теперь, ещё одна приятная вещь, после того как вы настроили эти workflow, вы можете получить к ним доступ через API. Вы можете сгенерировать API-ключ для каждого из созданных вами workflow. И затем вы можете использовать этот API, который передаёт все различные ответы. Я покажу вам предыдущий пример того, как я использую это в проекте Answer Engine, который у меня есть. У меня есть эти новые функции упоминания, которые у меня есть, и допустим, у меня есть агент, и я хочу развернуть веб-сайт. И я скажу: «Я хочу создать веб-сайт о финансах Apple». Это делает на бэкэнде запрос к их API, а различные статусы будут передаваться в моём интерфейсе. Как только это будет сделано, это будет отображаться в моём приложении совершенно динамически. Он извлекает всю эту информацию для меня, в конечном итоге он сгенерирует этот веб-сайт. У меня есть функция «Просмотреть веб-сайт», где я могу увидеть, что было сгенерировано. Ещё одна приятная вещь в этом заключается в том, что вы также можете это протестировать, отладить и предварительно просмотреть всё это в своём приложении. Если я скажу: «Сгенерируйте мне веб-сайт о финансах Apple», вы увидите, как он проходит через разные узлы, он будет визуально показывать вам разные шаги, которые он проходит. Вы можете видеть, что он проходит через классификатор вопросов, он захватывает всё это, он захватывает все эти финансовые данные, он начинает проходить через разные LLM. Преимущество возможности видеть это заключается в том, что вы можете начать видеть разные выходы вашего приложения. В данном случае, если есть проблемы в разных узлах, которые вы настраиваете, вы можете легко увидеть процесс workflow и входные и выходные данные для всех различных шагов. Это также даёт вам очень хорошее визуальное представление того, что может быть медленным или быстрым. В данном случае он прошёл через весь workflow, который я настроил, и снова здесь мы видим, что у нас есть этот динамически сгенерированный веб-сайт.

Я быстро пройдусь по тому, как настроить это в вашем собственном приложении. После того как вы объявили свой workflow, вы можете передать API-ключ, и API-ключ будет специфичен для этого workflow. В данном случае мы будем передавать наш входной параметр с предыдущего шага. Наш запрос в данном случае — это значение, которое мы объявили, с которого начался наш начальный узел. А затем мы будем делать этот POST-запрос в эту конечную точку. И хорошая вещь в этой конечной точке заключается в том, что вы также можете указать, что вы хотите, чтобы ответ был потоковым. Вы можете установить режим ответа на «потоковый», а затем вы можете начать прослушивать все различные полезные данные, которые отправляются и передаются обратно в ваше приложение. В данном случае я просто буду отправлять своё событие JSON для состояния загрузки, а как только это будет сделано, я отправлю этот ответный ключ, который я объявил, с веб-сайтом, который я буду отображать в своём приложении. Но вы можете настроить это так, чтобы вы действительно могли регистрировать все различные шаги в своём приложении, и действительно есть эта приятная гибкость, где у вас есть полный контроль над различными узлами, которые вы можете настроить. Например, если вы хотите настроить тот же workflow, который я настроил в этом примере, я свяжу несколько репозиториев GitHub о том, как я это настроил. Я покажу вам этот простой маршрут Next.js, который будет принимать и генерировать веб-сайт из базы данных Redis, а также я свяжу проект Answer Engine, если вы хотите посмотреть на него и увидеть этот конкретный workflow Defy, о том, как я интегрировал его в это конкретное приложение.

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