Blog / AI
AI

Uso de LangChain e Bright Data para pesquisa na Web

Descubra como turbinar seu aplicativo de IA com pesquisa integrada na Web usando LangChain e Bright Data para obter resultados atualizados e agentes mais inteligentes.
13 min de leitura
Using Langchain and Bright Data for Web Search blog image

A criação de agentes de IA está ficando mais fácil a cada dia. Neste artigo, examinaremos o processo de uso da nova ferramenta BrightDataSERP da LangChain. Se você não estiver familiarizado com o acrônimo, SERP significa “Search Engine Results Page” (página de resultados do mecanismo de pesquisa).

Este tutorial é amigável para iniciantes. Tudo o que você precisa é de um conhecimento básico de Python. Ao terminar este guia, você poderá adicionar as seguintes habilidades à sua caixa de ferramentas.

  • Realizar uma pesquisa básica usando o BrightDataSERP
  • Personalize seu resultado de SERP
  • Saída limpa para uso amigável do LLM
  • Criar um agente de IA com recursos de pesquisa

Introdução: Limitações de conhecimento da IA

Se você está suficientemente familiarizado com os LLMs, já sabe que o conhecimento deles é estático. No momento em que são liberados para o público, eles já terminaram o treinamento e o ajuste fino – não é possível acrescentar mais conhecimento.

Antes de a OpenAI adicionar recursos de pesquisa, o ChatGPT tinha uma data de corte de conhecimento. Os LLMs ainda têm datas de corte, com base em seu último período de ajuste fino. Dito isso, os modelos são capazes de usar inferência de chance zero. Você pode saber mais sobre o processo geral de treinamento aqui.

Os modelos de IA são implementados com uma base de conhecimento estática. Por meio da inferência de disparo zero, os modelos podem dar sentido a novos dados, mas não reterão as informações permanentemente.

Como a LangChain lida com as limitações

O LangChain nos permite criar ferramentas e conectá-las a diferentes LLMs. Se você puder escrever funções Python, poderá permitir que os LLMs chamem essas funções, a seu próprio critério. Você dá ao LLM acesso à ferramenta. Ele faz todo o resto. Se você fizer uma pergunta que ele possa responder com o pré-treinamento, ele não usará a ferramenta. Se você fizer uma pergunta que ele não saiba, ele usará suas ferramentas para tentar encontrar a resposta.

A LangChain ainda oferece ferramentas pré-construídas para todas as necessidades a seguir.

  • Pesquisa
  • Código
  • Produtividade
  • Navegação na Web
  • Bancos de dados
  • Finanças

Você pode ver a lista completa de ferramentas integradas do LangChain aqui. Temos notícias ainda melhores. A Bright Data é uma delas!

Usando LangChain com dados brilhantes

Agora que já vimos o que ele faz, vamos dar uma olhada em como usar o LangChain com o Bright Data. Vamos supor que você tenha uma familiaridade básica com Python. Vamos explicar o que é necessário para obter suas chaves de API da OpenAI e da Bright Data. Antes de continuar, não deixe de ler nosso guia sobre raspagem da Web com LangChain e Bright Data.

Pré-requisitos

Para começar, você precisa instalar as ferramentas Bright Data da LangChain. O comando pip install abaixo faz exatamente isso.

pip install langchain-brightdata

Em seguida, você precisa de uma chave de API da Bright Data e de uma instância de SERP chamada serp. Você pode se inscrever para uma avaliação gratuita de nossa API SERP aqui. Certifique-se de que sua zona tenha o nome serp. serp1 não funcionará. Quando estiver pronto, clique no botão “Add” (Adicionar) e termine de configurar a ferramenta.

Adição da zona SERP

Em seguida, você pode obter sua chave de API no painel de controle de sua nova zona SERP.

Como encontrar sua chave de API da Bright Data

Para obter sua chave OpenAI, abra a página de chaves de API e clique no botão “Create new secret key” (Criar nova chave secreta).

Obtenção de uma nova chave OpenAI

Um exemplo básico

Começaremos com um exemplo simples de como as ferramentas funcionam. Troque a chave de API abaixo por sua própria chave. A classe BrightDataSERP faz o trabalho pesado aqui. Apenas definimos a configuração e imprimimos os resultados. Normalmente, você não precisa de .encode("utf-8"), mas tivemos alguns problemas de impressão com o Windows e isso resolveu o problema.

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"))

Aqui está um trecho de um exemplo de saída. Se você vir isso (ou algo semelhante), está no caminho certo.

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">
...

Uso avançado

No exemplo abaixo, usamos kwargs para definir uma configuração personalizada com o BrightDataSERP. Você pode ver a documentação completa sobre personalização aqui. Definimos nosso tipo de pesquisa como shop para obtermos resultados de compras mais relevantes.

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)

Você pode personalizar qualquer um dos itens a seguir para refinar os resultados da pesquisa.

  • consulta
  • país
  • idioma
  • tipo de pesquisa
  • tipo de dispositivo
  • results_count

Criação de um agente de IA com dados brilhantes e OpenAI

Agora que você já tem uma compreensão básica de como usar o BrightDataSERP, vamos ver como um agente de IA real o usa. Examinaremos as partes do código e mostraremos como tudo funciona como um todo.

As peças

Há mais alguns itens que você precisará instalar antes de começarmos.

Instalar o próprio LangChain.

pip install langchain

Instalar o suporte da OpenAI para LangChain.

pip install langchain-openai

Instale o LangGraph para criar agentes.

pip install langgraph

Isso pode ser um pouco chocante na era da IA, mas também instalaremos o BeautifulSoup. Você verá o motivo em breve.

pip install beautifulsoup4

Criação de uma função de pesquisa

A função abaixo recupera os resultados da pesquisa, de forma muito parecida com o exemplo anterior. Depois de receber esses resultados, usamos o BeautifulSoup para extrair o texto deles. Agora, usaremos muito menos tokens ao passar os resultados para o LLM. Tudo o que ele vê é o texto do site. Mantemos os caracteres \n (nova linha) para que o agente possa entender melhor o layout da página.

Depois de extrairmos o texto, nós o retornamos.

#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")

Transformando a função em uma ferramenta

Agora, usaremos a classe Tool da LangChain para envolver a função. Isso permite que nosso agente a chame como uma ferramenta. Como você pode ver abaixo, é bem simples. Damos a ela um nome e uma descrição. Também apontamos a ferramenta para uma função com o argumento 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."
    ),
)

Criação do agente

O código abaixo cria nosso agente. O ChatOpenAI cria uma instância do LLM. Passamos nosso LLM e nossa ferramenta para create_react_agent() para criar o agente real.

#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])

Uma interface de usuário chata, mas funcional

Todo programa precisa de um tempo de execução, por mais primitivo que seja. Aqui, apenas criamos uma configuração básica de terminal para o usuário interagir com o agente. O usuário insere um prompt. O prompt é passado para as mensagens e, em seguida, transmitimos a saída do agente.

#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()

Colocando tudo junto

O código completo

Aqui está nosso exemplo de código completo.

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()

O que nosso agente vê

O snippet aqui é o que o agente vê. Ele contém nosso prompt e a página que ele busca para fazer referência.

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

Saída do modelo

No snippet abaixo, nosso modelo terminou de analisar os resultados. Como você pode ver, temos um resumo limpo dos resultados da pesquisa.

================================== 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.

Conclusão

O desenvolvimento de IA fica cada vez mais fácil. Com o LangChain e o Bright Data, você pode usar alguns dos melhores mecanismos de pesquisa existentes – Google, Bing e outros! Nosso exemplo aqui foi bem simples, um assistente de pesquisa automatizado.

Você pode levar esse projeto para o próximo nível e tentar adicionar várias ferramentas ao LangChain. Agora você sabe como criar ferramentas, cortar resultados de SERP e como alimentá-los a um agente de IA para obter resultados aprimorados. Pegue suas novas habilidades e vá criar algo.

A LangChain também oferece integrações com as seguintes ferramentas.

Aqui na Bright Data, oferecemos produtos de todos os formatos e tamanhos para atender às suas necessidades de coleta de dados. Inscreva-se para uma avaliação gratuita e comece hoje mesmo!