Создавать агентов искусственного интеллекта становится все проще с каждым днем. В этом материале мы рассмотрим процесс использования нового инструмента BrightDataSERP от LangChain. Если вы не знакомы с аббревиатурой, SERP означает “Страница результатов поисковой системы”.
Это учебное пособие предназначено для начинающих. Все, что вам нужно, – это базовое понимание языка Python. К тому времени, как вы закончите это руководство, вы сможете добавить следующие навыки в свой набор инструментов.
- Выполните базовый поиск с помощью BrightDataSERP
- Настройте выдачу SERP
- Чистый вывод для удобного использования LLM
- Создание агента ИИ с возможностями поиска
Intro: Ограничения знаний об искусственном интеллекте
Если вы достаточно хорошо знакомы с LLM, вы уже знаете, что их знания статичны. К тому моменту, когда их выпускают в свет, они уже закончили обучение и доработку – больше никаких знаний добавить нельзя.
До того, как OpenAI добавил возможности поиска, ChatGPT имел дату отсечения знаний. У LLM по-прежнему есть даты отсечения, основанные на их последнем периоде тонкой настройки. Тем не менее, модели способны использовать вывод с нулевым результатом. Подробнее об общем процессе обучения можно узнать здесь.
Модели ИИ развертываются со статичной базой знаний. С помощью умозаключений с нулевым результатом модели могут осмыслить новые данные, но они не смогут сохранить информацию надолго.
Как LangChain устраняет недостатки
LangChain позволяет нам создавать инструменты и подключать их к различным LLM. Если вы умеете писать функции на Python, вы можете позволить LLM вызывать эти функции – по своему усмотрению. Вы предоставляете LLM доступ к инструменту. Все остальное он делает сам. Если вы зададите ему вопрос, на который он может ответить с помощью предварительного обучения, он не будет использовать инструмент. Если вы зададите ему вопрос, на который он не знает ответа, он будет использовать свои инструменты, чтобы попытаться найти ответ.
LangChain предлагает даже готовые инструменты для решения всех следующих задач.
- Поиск
- Код
- Производительность
- Веб-браузеры
- Базы данных
- Финансы
Полный список интегрированных инструментов LangChain можно посмотреть здесь. У нас есть еще более приятная новость. Bright Data – один из них!
Использование LangChain с яркими данными
Теперь, когда мы разобрались с тем, что он делает, давайте рассмотрим, как на самом деле использовать LangChain в Bright Data. Мы предполагаем, что вы знакомы с Python на базовом уровне. Мы рассмотрим, что нужно сделать, чтобы получить ключи API от OpenAI и Bright Data. Прежде чем продолжить, обязательно ознакомьтесь с нашим руководством по веб-скреппингу с помощью LangChain и Bright Data.
Пререквизиты
Для начала вам нужно установить инструменты Bright Data от LangChain. Команда pip install
, приведенная ниже, делает именно это.
pip install langchain-brightdata
Далее вам понадобится API-ключ Bright Data и экземпляр SERP под названием serp
. Вы можете подписаться на бесплатную пробную версию нашего SERP API здесь. Убедитесь, что ваша зона называется serp
. serp1
не подойдет. Когда все будет готово, нажмите кнопку “Добавить” и завершите настройку инструмента.
Далее вы можете получить ключ API на панели управления вашей новой зоны SERP.
Чтобы получить ключ OpenAI, откройте страницу API-ключей и нажмите кнопку “Создать новый секретный ключ”.
Базовый пример
Мы начнем с простого примера работы инструментария. Замените приведенный ниже ключ API на свой собственный. Класс BrightDataSERP
выполняет всю тяжелую работу. Мы просто задаем конфигурацию и выводим результаты. Обычно не требуется .encode("utf-8")
, но у нас были проблемы с печатью в Windows, и это их решило.
from langchain_brightdata import BrightDataSERP
api_key = "your-bright-data-api-key"
tool = BrightDataSERP(bright_data_api_key=api_key)
results = tool.invoke("Latest AI News")
print(results.encode("utf-8"))
Вот фрагмент примера вывода. Если вы видите это (или что-то похожее), вы на правильном пути.
https://api.brightdata.com/request {'zone': 'serp', 'url': 'https://www.google.com/search?q=Latest%20AI%20News&gl=us&hl=en&num=10', 'format': 'raw'} {'Authorization': 'Bearer your-api-key', 'Content-Type': 'application/json'}
b'<!doctype html><html itemscope="" itemtype="http://schema.org/SearchResultsPage" lang="en-MX"><head><meta charset="UTF-8"><meta content="origin" name="referrer"><link href="//www.gstatic.com/images/branding/searchlogo/ico/favicon.ico" rel="icon"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Latest AI News - Google Search</title><script nonce="IBYZiM7epIs5U67-92qXVg">window._hst=Date.now();</script><script nonce="IBYZiM7epIs5U67-92qXVg">
...
Расширенное использование
В примере ниже мы используем kwargs для установки пользовательской конфигурации в BrightDataSERP
. Полную документацию по настройке можно посмотреть здесь. Мы установили тип поиска ” магазин"
, чтобы получить более релевантные результаты покупок.
from langchain_brightdata import BrightDataSERP
api_key = "your-bright-data-api-key"
#initialize the tool
serp_tool = BrightDataSERP(
bright_data_api_key=api_key,
search_engine="google",
country="us",
language="en",
results_count=10,
parse_results=True
)
#perform the search
results = serp_tool.invoke(
{
"query": "best electric vehicles",
"country": "us",
"language": "en",
"search_type": "shop",
"device_type": "mobile",
"results_count": 15,
}
)
print(results)
Для уточнения результатов поиска вы можете настроить любой из следующих параметров.
запрос
страна
язык
тип_поиска
тип устройства
счётчик_результатов
Создание агента искусственного интеллекта с помощью Bright Data и OpenAI
Теперь, когда вы получили базовое представление о том, как использовать BrightDataSERP
, давайте посмотрим, как его использует настоящий агент искусственного интеллекта. Мы пройдемся по частям кода, а затем покажем, как все это работает в целом.
Кусочки
Прежде чем мы приступим к работе, вам нужно установить еще несколько вещей.
Установите сам LangChain.
pip install langchain
Установите поддержку OpenAI для LangChain.
pip install langchain-openai
Установите LangGraph для создания агентов.
pip install langgraph
Возможно, в эпоху искусственного интеллекта это будет немного неожиданно, но мы также установим BeautifulSoup. Скоро вы поймете, почему.
pip install beautifulsoup4
Создание функции поиска
Функция ниже получает результаты поиска, как и в предыдущем примере. Получив эти результаты, мы используем BeautifulSoup для извлечения из них текста. Теперь при передаче результатов в LLM мы будем использовать гораздо меньше лексем. Все, что он видит, – это текст сайта. Мы сохраняем \n
(символы новой строки), чтобы агент мог лучше понять структуру страницы.
После извлечения текста мы возвращаем его.
#create a function to return only the text from search results
def get_cleaned_search_results(query):
#initialize the tool
serp_tool = BrightDataSERP(
bright_data_api_key=bright_data_api_key,
search_engine="google",
country="us",
language="en",
results_count=5,
parse_results=False,
)
#get the results
results = serp_tool.invoke({
"query": query,
"country": "us",
"language": "en",
"results_count": 5,
})
#parse the text the old fashioned way----save on input tokens
soup = BeautifulSoup(results, "html.parser")
#return the results but keep the newlines, this lets the model see the layout without all the extra code
return soup.get_text(separator="\n")
Превращение функции в инструмент
Теперь мы используем класс Tool
от LangChain, чтобы обернуть функцию. Это позволит нашему агенту вызывать ее как инструмент. Как вы видите ниже, все довольно просто. Мы даем ему имя и описание. Мы также указываем инструменту на функцию с помощью аргумента func
.
#turn the function into a langchain tool
cleaned_search_tool = Tool.from_function(
name="CleanedBrightDataSearch",
func=get_cleaned_search_results,
description=(
"Use this tool to retrieve up-to-date Google search results when answering "
"questions that require recent information, product details, or current events. "
"Pass in the user's natural-language query."
),
)
Создание агента
Приведенный ниже код создает нашего агента. ChatOpenAI
создает экземпляр LLM. Мы передаем наш LLM и наш инструмент в create_react_agent()
для создания фактического агента.
#start the llm
llm = ChatOpenAI(
model="gpt-4o",
openai_api_key=openai_api_key,
streaming=False,
#set the token limit arbitrarily, we used 512 because it's a small task
max_tokens=512
)
#give the llm access to the tool
agent = create_react_agent(llm, tools=[cleaned_search_tool])
Скучный, но функциональный пользовательский интерфейс
Любая программа нуждается в среде выполнения, какой бы примитивной она ни была. В данном случае мы просто создадим базовую терминальную установку для взаимодействия пользователя с агентом. Пользователь вводит запрос. Подсказка передается в сообщения, а затем мы передаем вывод агента.
#the user can ask the agent anything--like the chatgpt webapp
user_prompt = input("Ask me anything: ")
messages = [{"role": "user", "content": user_prompt}]
#stream the model output, the model should perform searches when necessary
for step in agent.stream({"messages": messages}, stream_mode="values"):
step["messages"][-1].pretty_print()
Собираем все вместе
Полный код
Вот наш полный пример кода.
from langchain_openai import ChatOpenAI
from langchain_brightdata import BrightDataSERP
from langgraph.prebuilt import create_react_agent
from langchain.tools import Tool
from bs4 import BeautifulSoup
#put your creds here
openai_api_key = "your-openai-api-key"
bright_data_api_key = "your-bright-data-api-key"
#create a function to return only the text from search results
def get_cleaned_search_results(query):
#initialize the tool
serp_tool = BrightDataSERP(
bright_data_api_key=bright_data_api_key,
search_engine="google",
country="us",
language="en",
results_count=5,
parse_results=False,
)
#get the results
results = serp_tool.invoke({
"query": query,
"country": "us",
"language": "en",
"results_count": 5,
})
#parse the text the old fashioned way----save on input tokens
soup = BeautifulSoup(results, "html.parser")
#return the results but keep the newlines, this lets the model see the layout without all the extra code
return soup.get_text(separator="\n")
#turn the function into a langchain tool
cleaned_search_tool = Tool.from_function(
name="CleanedBrightDataSearch",
func=get_cleaned_search_results,
description=(
"Use this tool to retrieve up-to-date Google search results when answering "
"questions that require recent information, product details, or current events. "
"Pass in the user's natural-language query."
),
)
#start the llm
llm = ChatOpenAI(
model="gpt-4o",
openai_api_key=openai_api_key,
temperature=0.7,
streaming=False,
max_tokens=512
)
#give the llm access to the tool
agent = create_react_agent(llm, tools=[cleaned_search_tool])
#the user can ask the agent anything--like the chatgpt webapp
user_prompt = input("Ask me anything: ")
messages = [{"role": "user", "content": user_prompt}]
#stream the model output, the model should perform searches when necessary
for step in agent.stream({"messages": messages}, stream_mode="values"):
step["messages"][-1].pretty_print()
Что видит наш агент
Приведенный здесь фрагмент – это то, что видит агент. Он содержит нашу подсказку и страницу, которую он получает для ссылки.
python bd-agent-example.py
Ask me anything: give me the latest spacex news
================================ Human Message =================================
give me the latest spacex news
================================== Ai Message ==================================
Tool Calls:
CleanedBrightDataSearch (call_IKoaponXVrNfVSRTfonU4ewo)
Call ID: call_IKoaponXVrNfVSRTfonU4ewo
Args:
__arg1: latest SpaceX news
https://api.brightdata.com/request {'zone': 'serp', 'url': 'https://www.google.com/search?q=latest%20SpaceX%20news&gl=us&hl=en&num=5', 'format': 'raw'} {'Authorization': 'Bearer d791e32cedf2d9657eaafd7a76b333f67ce5836c89d85691b4d6c07060b07b84', 'Content-Type': 'application/json'}
================================= Tool Message =================================
Name: CleanedBrightDataSearch
latest SpaceX news - Google Search
Please click
here
if you are not redirected within a few seconds.
Accessibility Links
Skip to main content
Accessibility help
Accessibility feedback
Press
/
to jump to the search box
latest SpaceX news
Sign in
Filters and Topics
AI Mode
All
News
Videos
Images
Short videos
Forums
More
About 85,800,000 results
(0.38 seconds)
Search Results
SpaceX - Updates
SpaceX
https://www.spacex.com
› updates
SpaceX
https://www.spacex.com
› updates
As early as this year,
Falcon 9 will launch Dragon's sixth commercial astronaut mission, Fram2
, which will be the first human spaceflight mission to explore ...
Videos
12:03
YouTube
·
GREAT SPACEX
SpaceX's Solution to Launch Starship Again after Test Site ...
YouTube
·
GREAT SPACEX
2 days ago
47:39
YouTube
·
GREAT SPACEX
COPV Destroyed Starship S36, What next? Honda's Hopper ...
YouTube
·
GREAT SPACEX
1 day ago
3:10
YouTube
·
CBS News
Watch: SpaceX Starship explodes, causes massive fiery burst ...
YouTube
·
CBS News
3 days ago
Feedback
View all
Top stories
USA Today
SpaceX Starship exploded again. What's next for Elon Musk's company after latest setback?
3 days ago
Soap Central
Everything to know about Elon Musk's latest SpaceX starship explosion during static fire test in Texas
3 days ago
The Guardian
SpaceX Starship breaks up over Indian Ocean in latest bumpy test
4 weeks ago
CBS News
SpaceX loses contact with its Starship on 9th test flight after last 2 went down in flames
4 weeks ago
More news
Twitter Results
SpaceX (@SpaceX) · X
X (Twitter)
https://x.com/SpaceX
Watch Falcon 9 launch Dragon and Ax-4 to the @Space_Station x.com/i/broadcasts/1YpJ…
2 hours ago
Falcon 9 delivers 27 @Starlink satellites to orbit from Florida
9 hours ago
Deployment of 27 @Starlink satellites confirmed
9 hours ago
Elon Musk promises more risky launches after sixth ...
Space
https://www.space.com
› ... › Private Spaceflight
Space
https://www.space.com
› ... › Private Spaceflight
1 day ago
—
Until
last
year, the FAA allowed
SpaceX
to try up to five Starship launches a year. This month, the figure was increased to 25. A lot can go ...
People also search for
Latest spacex news
nasa
Latest spacex news
live
SpaceX
launch today live
SpaceX
Starship
news
today
SpaceX
Starship launch date
SpaceX
launch tonight
SpaceX
launch today live countdown
SpaceX
recent landing
Page Navigation
1
2
3
4
5
6
7
8
9
10
Next
Footer Links
Google apps
Выход модели
В приведенном ниже фрагменте наша модель завершила просмотр результатов. Как видите, у нас есть чистая сводка результатов поиска.
================================== Ai Message ==================================
Here are some of the latest updates on SpaceX:
1. **Falcon 9 Launches**: SpaceX's Falcon 9 recently launched 27 Starlink satellites into orbit from Florida. The deployment of these satellites was confirmed about 9 hours ago.
2. **Starship Setbacks**: SpaceX's Starship program has faced some challenges recently. A Starship exploded during a test, which has been a setback for the company. Despite this, Elon Musk has indicated plans for more risky launches following the sixth astronaut mission.
3. **Increased Launch Capacity**: The FAA has increased the number of Starship launches SpaceX is permitted to conduct per year from 5 to 25, allowing for more frequent test launches.
These developments highlight ongoing progress and challenges within SpaceX's operations.
Заключение
Разработка искусственного интеллекта становится все проще. С помощью LangChain и Bright Data вы можете использовать одни из лучших поисковых систем – Google, Bing и другие! Наш пример был довольно минимальным – автоматический поисковый помощник.
Вы можете поднять этот проект на новый уровень и попробовать добавить в LangChain несколько инструментов. Теперь вы знаете, как создавать инструменты, обрезать результаты SERP и подавать их агенту искусственного интеллекта для улучшения результатов. Возьмите свои новые навыки и отправляйтесь что-нибудь создавать.
LangChain также предлагает интеграцию со следующими инструментами.
В Bright Data мы предлагаем продукты любой формы и размера, чтобы удовлетворить ваши потребности в сборе данных. Запишитесь на бесплатную пробную версию и начните работу уже сегодня!