📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Build a Deep Research Agent with Spring AI & Browserbase

Dan Vega16:15

Transcription

У меня есть небольшое признание, друзья. Я люблю копаться. Я люблю пробовать новое. И, черт возьми, какое же время жить. Появляется так много отличных новых инструментов, разные рабочие процессы, и поэтому, когда я вижу что-то, мне приходится, как бы, расставлять приоритеты. Но если я вижу что-то, что может помочь с рабочими процессами, я должен это протестировать. И сегодня мы это сделаем. Я смотрел видео на YouTube-канале Аарона Фрэнсиса, который, кстати, замечательный ютубер. Кажется, он и замечательный человек. Я оставлю ссылку на его канал в описании ниже. Он делает действительно отличные видео, высококачественные курсы. Так что заходите и посмотрите. Но он недавно делал видео об инструменте, о котором я не знал. Он называется Browserbase, и они представили новый поисковый API, созданный для агентов, и я должен был его проверить. Так что его видео посвящено созданию инструмента для глубокого исследования на TypeScript, и я подумал, что мы попробуем сделать это здесь на Java и Spring AI. Итак, я хочу перейти к моему экрану. Оставьте меня там, Дэн, и давайте сначала посмотрим на Browserbase и поговорим о том, что это такое, и о шагах, которые мне пришлось предпринять, прежде чем я смог создать глубокое исследование. Правильно. Итак, представляем наш новый поисковый API, созданный для агентов. Теперь я скажу, что я говорю об этом и в блоге. В прошлом я использовал что-то вроде Brave Search для получения контента и улучшения LLM. Это никуда не денется. Это своего рода другой подход, и он решит некоторые проблемы, которые не решит обычный веб-поиск. Итак, TL;DR: мы запускаем поиск Browserbase, простой API, который позволяет агентам искать в Интернете и получать соответствующие URL-адреса для начала навигации. Он работает на Exa и интегрирован в платформу Browserbase. Вашим агентам нужно искать в Интернете, как и людям. Это звучит просто, но оказывается, что это одна из первых проблем, с которой сталкиваются все агенты. Когда агент не знает точного URL-адреса, ему приходится выяснять, с чего начать. Обычно это означает запуск поиска. Итак, он углубляется в это, говорит о том, как работает поиск, на базе Exa. Он интегрирован туда. Есть API. Теперь SDK API здесь созданы на Node или TypeScript и Python. Так что Java-версии нет, но мы поговорим об этом через секунду. Итак, каждый результат возвращает URL страницы, когда он доступен, а также заголовок и описание. Результаты ранжируются по релевантности и оптимизированы для навигационных запросов. Агент может искать релевантные страницы, получать их содержимое, а затем решать, нужно ли ему запускать браузер для взаимодействия со страницей. И вот в чем отличие. Это браузер без интерфейса, если он вам нужен. Так что я могу выполнить поиск. Я могу получить контент. И если мне нужно запустить браузер без интерфейса, чтобы, возможно, взаимодействовать со страницей, возможно, мне нужно пройти аутентификацию. Возможно, мне нужно нажать кнопку или сделать что-то подобное. Тогда это возможно. Таким образом, поиск доступен на всех планах с тысячей бесплатных поисков в месяц. Так что вы можете зарегистрироваться и начать бесплатно, что очень приятно. Так что вы можете узнать больше о Browserbase. Если вы зайдете в документацию, вы увидите, как я только что сказал, в разделах API и SDK есть SDK для Node и Python. Java-версии нет. Хорошая новость: я и мой друг Клод создали один, и, кажется, он работает довольно хорошо. Итак, вы получаете контроль над браузерами через API. Есть сессии, есть проекты, есть контексты, куча всего. Так что ознакомьтесь с документацией. Вы также можете посмотреть этот пост в блоге, который я разместил. И у меня есть некоторые причины, почему бы просто не использовать обычный поисковый API. Есть куча вещей, с которыми вы можете столкнуться при выполнении поисков. Так что, если есть контент, отображаемый JavaScript, многие современные веб-приложения возвращают пустые страницы клиентам HTTP. Контент загружается после выполнения JavaScript. Поисковый индекс этого не видит. Реальный браузер может. И если вы когда-либо использовали чат-бот или обычный поисковый API, вы сталкивались с этой проблемой, верно? Мне нужно получить контент, но я не могу получить контент с этой страницы. Это позволит нам сделать это. У вас есть аутентифицированные сессии, многошаговые рабочие процессы, проверка состояния в реальном времени, куча вещей, которые это решит для нас. Итак, первое, что нам нужно сделать, это найти способ использовать этот API. Вы можете создать его сами, или, я думаю, у меня это есть внизу. У нас есть стартер Spring Boot, который я собрал для этого. Если вы не используете Spring, это нормально. Вы, вероятно, можете извлечь Java API для этого. Но это стартер Spring Boot. И давайте быстро посмотрим на него. Итак, у нас есть стартер Spring Boot, который имеет некоторую автоконфигурацию, некоторые свойства. Он позволяет вам, по сути, добавить эту зависимость стартера в ваш проект и использовать Browserbase без необходимости предварительной настройки. Так что стартер делает это. У него есть автоконфигурация. Вам нужен API-ключ для начала. Так что получите свой API-ключ. Эта автоконфигурация не сработает, если у вас не будет определен API-ключ. У нас есть некоторые свойства, такие как API-ключ, базовый URL, максимальное количество повторных попыток и т. д. >> [хмыкает] >> Так что это действительно имитирует SDK для Node и Python. Вот к чему я стремился. Итак, мы как бы создали это на основе того, как выглядит этот API. Итак, у нас есть этот HTTP-клиент Browserbase, который принимает REST-клиент. Да, если мы используем что-то неблокирующее, нам, вероятно, следует встроить поддержку WebClient, но это также поддерживает виртуальные потоки. Так что посмотрим, понадобится ли нам это на самом деле. Мы берем это, берем наш API-ключ, и затем мы идем и настраиваем некоторые вещи, верно? Вещи, ресурсы, которые нас интересуют здесь, это такие вещи, как возможность искать, возможность получать, возможность использовать сессии для запуска браузера. Все эти вещи встроены в стартер Spring Boot, и с ним довольно легко начать, верно? Мы добавляем эту зависимость. Прямо сейчас этого нет в Maven Central. Это действительно просто своего рода доказательство концепции. Так что вам придется скачать это и просто запустить `mvn install`, и тогда он будет установлен в ваш локальный пакет Maven. Вы получаете свой API-ключ Browserbase, и затем есть несколько примеров использования, но я покажу вам проект, который я построил и который его использует. Итак, это своего рода стартер Spring Boot. Теперь давайте поговорим о реальном примере, имитирующем то, что сделал Эрик в своем видео, которое было глубоким исследованием. Итак, я построил глубокое исследование с использованием агента исследования Spring AI, который принимает тему, создает структурированный отчет с резюме, ключевыми выводами, темами и открытыми вопросами. Все это работает всего на двух API Browserbase: поиск и получение. В этом случае не нужны полные сессии браузера. Вы всегда можете добавить поддержку этого, если знаете, что некоторые URL-адреса, возможно, вы можете встроить, например, "когда вы выполняете это глубокое исследование, вот некоторые URL-адреса, которые я хочу, чтобы вы использовали", и если вы знаете, что некоторые из них имеют, например, o, или они отображаются JavaScript, или вы знаете любые из этих случаев использования, тогда вы можете встроить это в это, но мы сделаем так: у нас будет конечная точка Spring AI, мы, по сути, дадим ей тему, а затем она вернет что-то, и это пройдет через приятный конвейер. Так что он обнаруживает вещи. Так что клиент Spring AI будет, по сути, просить LLM сгенерировать пять разнообразных поисковых запросов для темы. Это важно, потому что мы не хотим запускать только один поиск. Мы хотим запускать разные поиски на основе некоторых различных методов поиска. И поэтому каждый запрос выполняется через поиск Browserbase, а затем URL-адреса дедуплицируются по всем наборам результатов. Как только мы это сделаем, мы сможем получить страницы. Опять же, мы используем это параллельно благодаря виртуальным потокам. У нас также есть ограничение параллелизма, потому что если вы не платите за полный профессиональный план, я думаю, это на Browserbase, есть некоторое ограничение скорости. Так что мы не хотим просто пытаться бомбардировать его. Теперь, если вы обновитесь до полного профессионального плана, вы, вероятно, сможете снять некоторые из этих ограничений параллелизма и немного ускорить это. Но я думал об этом так же, как если вы зайдете в ChatGPT или Claude и проведете глубокое исследование. Я знаю, что это не очень быстрый процесс. Возможно, это то, что я хочу запускать каждое утро. Возможно, я хочу сказать: "Эй, что нового в Spring AI, верно?" И мы можем собрать все, что происходит в мире Spring AI, верно? И затем, наконец, он синтезирует это. Он возьмет все эти источники, скомпилирует их в окончательный структурированный отчет и затем предоставит вам в файле Markdown. Итак, давайте посмотрим на это в действии. Итак, у меня есть этот проект под названием `deep-research`. Опять же, все эти ссылки есть в этом посте в блоге, который я включу в описание ниже. Если мы зайдем в `pom.xml`, по сути, я начал новое приложение Spring Boot 4 и использовал Spring AI. Так что мы используем последний Spring AI, который является 2.0.0 Milestone 3. Это веб-приложение, использующее OpenAI. Опять же, используйте любую модель, которую вы хотите. И затем я включил стартер Spring Boot Browserbase, который я создал, и вы можете сделать то же самое. Это все зависимости, которые нам нужны. Так что с точки зрения исследования, я сказал вам, что был этот конвейер исследования, верно? И у нас есть этот конвейер исследования. Давайте начнем с контроллера. Так что контроллер — это то, куда мы будем обращаться. Мы, по сути, сделаем вызов на `localhost:8080/api/research` и передадим тему, по которой мы хотим провести глубокое исследование. Мы включаем конвейер исследования, а затем переходим к методу `execute`. Мы сделаем некоторое логирование здесь, чтобы начать, выяснить, сколько времени это займет. Мы проведем исследование, а затем перейдем к этому конвейеру. Так что конвейер обнаружения — это то, где мы настраиваем разнообразные поисковые запросы. Так что у нас есть этот поиск здесь, и он говорит: "Сгенерируйте пять разнообразных поисковых запросов для тщательного исследования этой темы", а затем мы передаем тему. В этом случае это действительно наш чат-клиент, обращающийся к, в данном случае, OpenAI, и предоставляющий нам список поисковых запросов, которые мы можем использовать. Как только у нас будут результаты, мы сможем их получить. Итак, мы будем использовать API `fetch` из Browserbase, и на основе всех этих источников мы фактически получим контент оттуда. Как только у нас будут эти данные, мы сможем их синтезировать, и мы возьмем их. У нас есть этот чат-клиент, который говорит: "Вы исследователь-аналитик, анализируйте эти источники по этой теме, извлекайте и обобщайте ключевые факты и выводы, точки, где источники согласны, точки, где источники не согласны или имеют оговорки. Вот источники. У нас также есть аналитик, завершающий брифинг-документ. Я хочу резюме из двух-трех абзацев, ключевые выводы, основные темы, открытые вопросы. Так что здесь действительно происходит магия. И затем мы записываем отчет. Мы собираемся записать его в виде файла MD. Так что я написал один подобный раньше, и он запишет его с датой и темой, и вы сможете увидеть его в действии. Итак, давайте посмотрим на это в действии, и мы увидим еще один отчет. Итак, я собираюсь запустить это. И затем нам нужно открыть терминал. И мы собираемся запустить `8080/api/research`. Вы можете видеть, что я уже запускал это. Каковы некоторые из самых важных новостей в мире языка программирования Java, верно? Так что это будет наша тема. Мы собираемся запустить это. Я покажу вам сначала логирование. Так что мы вставили некоторое логирование, чтобы сказать: "Эй, когда это произойдет", прямо сейчас он фактически общается с OpenAI, получает поисковые запросы, а затем вы увидите, как он проходит и регистрирует, что он делает. Так что он будет говорить о загрузке необходимых клиентов. Он будет говорить о получении фактической информации, а затем о синтезе отчета. О да. Так что это фактически происходит в консоли. Итак, мы видим здесь наши запросы. Так что вот наши разнообразные запросы, которые мы придумали. Крупные новостные истории, последние разработки в Java, тенденции Java в 2026 году, а затем он вышел и получил много этих источников, которые у него были. Так что вы можете увидеть некоторые из них здесь. Получил некоторые из них, потерпел неудачу на некоторых из них. Это нормально. И затем он собирается синтезировать этот отчет для нас. Так что, когда он будет готов, мы увидим, что он завершен. И затем мы увидим новый отчет здесь, в каталоге `reports`. Все. И он скомпилировал наш окончательный отчет. Готово. Отчеты сохранены здесь. И каковы некоторые из самых важных новостей в языке программирования Java. Итак, мы переходим к этому файлу Markdown. Вот резюме. Доминирующими недавними историями являются выпуск Oracle Java 26. Переходит к некоторым ключевым выводам, некоторым темам, некоторым открытым вопросам, источникам, которые у него были, и т. д. Так что это действительно захватывающе по нескольким фронтам, верно? Это не полный проект. Это не то, что вы просто можете скачать и использовать, верно? Идея заключалась в том, чтобы создать стартер Spring Boot для Browserbase. Опять же, одна из величайших вещей в наше время — это то, что я не смог бы сделать это до появления ИИ. Знаете ли вы, сколько времени мне пришлось бы потратить на создание стартера Spring Boot? Много времени. И стоит ли мне тратить на это время? Я не знаю. Но в этом случае, да, это заняло всего пару часов. Так что это было действительно захватывающе. Два, вы могли бы использовать что-то подобное в своих рабочих процессах для разных вещей. Я имею в виду, мы используем это для проекта глубокого исследования здесь, но я могу представить, что вы используете это для множества различных сценариев в ваших проектах интеграции ИИ. Так что это действительно захватывающе. Другая часть этого — да, мы показали OpenAI и Browserbase. Вы можете, по сути, сделать это бесплатно. Так что Browserbase имеет тысячу бесплатных поисков в месяц. Возможно, вы не запускаете это каждый день. Возможно, вы запускаете это каждые 5 дней или что-то в этом роде и ограничиваете свои поиски. И используйте открытую модель. Так что вы можете использовать открытую модель здесь, в Spring AI, с чем-то вроде Olama или LM Studio или Docker. Вы можете запускать локальные модели на своей машине и получить весь этот рабочий процесс бесплатно. Так что я думаю, что это было очень весело. Надеюсь, вы получите что-то из этого. Опять же, если вы хотите узнать больше об этом, я оставлю ссылку на пост в блоге, который содержит всю эту информацию. Ссылки на стартер Spring Boot и проект Deep Research находятся на GitHub, являются открытым исходным кодом и бесплатны для использования по вашему усмотрению. [хмыкает] Так что я думаю, что это было очень весело. Если вы тоже так думали и узнали что-то новое сегодня, друзья, сделайте мне большое одолжение. Поставьте мне лайк, подпишитесь на канал, и, как всегда, удачного кодирования. >> [музыка]