Blog / AI
AI

Utilisation de LangChain et de Bright Data pour la recherche sur le web

Découvrez comment optimiser votre application d’IA avec une recherche web intégrée utilisant LangChain et Bright Data pour des résultats actualisés et des agents plus intelligents.
13 min de lecture
Using Langchain and Bright Data for Web Search blog image

La création d’agents d’intelligence artificielle devient de plus en plus facile. Dans cet article, nous verrons comment utiliser le nouvel outil BrightDataSERP de LangChain. Si l’acronyme ne vous est pas familier, SERP signifie “Search Engine Results Page” (page de résultats des moteurs de recherche).

Ce tutoriel s’adresse aux débutants. Tout ce dont vous avez besoin, c’est d’une compréhension de base de Python. Lorsque vous aurez terminé ce guide, vous pourrez ajouter les compétences suivantes à votre boîte à outils.

  • Effectuer une recherche de base à l’aide de BrightDataSERP
  • Personnalisez vos résultats dans les SERP
  • Une sortie propre pour une utilisation conviviale de LLM
  • Créer un agent d’intelligence artificielle doté de capacités de recherche

Intro : Connaissance des limites de l’IA

Si vous connaissez suffisamment bien les MLD, vous savez déjà que leurs connaissances sont statiques. Au moment où ils sont mis à la disposition du public, ils ont terminé leur formation et leur mise au point – il n’est plus possible d’ajouter des connaissances.

Avant qu’OpenAI n’ajoute des capacités de recherche, ChatGPT avait une date limite de connaissance. Les LLM ont toujours des dates limites, basées sur leur dernière période de mise au point. Cela dit, les modèles sont capables d’utiliser l’inférence zéro. Pour en savoir plus sur le processus global de formation , cliquez ici.

Les modèles d’IA sont déployés avec une base de connaissances statique. Grâce à l’inférence zéro, les modèles peuvent donner un sens aux nouvelles données, mais ils ne conservent pas l’information de manière permanente.

Comment LangChain s’attaque aux limites

LangChain nous permet de créer des outils et de les connecter à différents LLM. Si vous pouvez écrire des fonctions Python, vous pouvez laisser les LLM appeler ces fonctions – à leur propre discrétion. Vous donnez au LLM l’accès à l’outil. Il s’occupe de tout le reste. Si vous lui posez une question à laquelle il peut répondre avec une formation préalable, il n’utilisera pas l’outil. Si vous lui posez une question qu’il ne connaît pas, il utilisera ses outils pour tenter de trouver la réponse.

LangChain propose même des outils prédéfinis pour tous les besoins suivants.

  • Recherche
  • Code
  • Productivité
  • Navigation sur Internet
  • Bases de données
  • Finances

Vous pouvez consulter la liste complète des outils intégrés de LangChain ici. Nous avons une meilleure nouvelle. Bright Data en fait partie !

Utilisation de LangChain avec Bright Data

Maintenant que nous avons vu ce qu’il fait, voyons comment utiliser LangChain avec Bright Data. Nous supposerons que vous avez une connaissance de base de Python. Nous allons voir ce qu’il faut faire pour obtenir les clés API d’OpenAI et de Bright Data. Avant de poursuivre, n’oubliez pas de consulter notre guide sur le web scraping avec LangChain et Bright Data.

Conditions préalables

Pour commencer, vous devez installer les outils Bright Data de LangChain. C’est exactement ce que fait la commande pip install ci-dessous.

pip install langchain-brightdata

Ensuite, vous avez besoin d’une clé API Bright Data et d’une instance SERP appelée serp. Vous pouvez vous inscrire pour un essai gratuit de notre API SERP ici. Assurez-vous que votre zone s’appelle serp. serp1 ne fonctionnera pas. Lorsque vous êtes prêt, cliquez sur le bouton “Ajouter” et terminez la configuration de l’outil.

Ajout de la zone SERP

Ensuite, vous pouvez obtenir votre clé API à partir du tableau de bord de votre nouvelle zone SERP.

Trouver votre clé d'API Bright Data

Pour obtenir votre clé OpenAI, ouvrez la page des clés API et cliquez sur le bouton “Créer une nouvelle clé secrète”.

Obtenir une nouvelle clé OpenAI

Un exemple de base

Nous commencerons par un exemple simple du fonctionnement de l’outil. Remplacez la clé API ci-dessous par la vôtre. La classe BrightDataSERP fait le gros du travail ici. Nous nous contentons de définir la configuration et d’imprimer les résultats. Normalement, vous n’avez pas besoin de .encode("utf-8"), mais nous avons rencontré des problèmes d’impression avec Windows et cela les a résolus.

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

Voici un exemple de sortie. Si vous voyez ceci (ou quelque chose de similaire), vous êtes sur la bonne voie.

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

Utilisation avancée

Dans l’exemple ci-dessous, nous utilisons les kwargs pour définir une configuration personnalisée avec BrightDataSERP. Vous pouvez consulter la documentation complète sur la personnalisation ici. Nous définissons notre type de recherche sur shop afin d’obtenir des résultats plus pertinents.

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)

Vous pouvez personnaliser l’un des éléments suivants pour affiner les résultats de votre recherche.

  • interrogation
  • pays
  • langue
  • type_de_recherche
  • type de dispositif
  • nombre_de_résultats

Créer un agent d’IA avec Bright Data et OpenAI

Maintenant que vous savez comment utiliser BrightDataSERP, voyons comment un agent d’IA l’utilise. Nous passerons en revue les éléments du code, puis nous montrerons comment tout cela fonctionne dans l’ensemble.

Les pièces

Il y a encore deux ou trois choses à installer avant de commencer.

Installer LangChain lui-même.

pip install langchain

Installer le support OpenAI pour LangChain.

pip install langchain-openai

Installer LangGraph pour créer des agents.

pip install langgraph

Cela peut paraître surprenant à l’ère de l’IA, mais nous allons également installer BeautifulSoup. Vous comprendrez bientôt pourquoi.

pip install beautifulsoup4

Création d’une fonction de recherche

La fonction ci-dessous récupère les résultats de notre recherche, comme dans l’exemple précédent. Après avoir reçu ces résultats, nous utilisons BeautifulSoup pour en extraire le texte. Maintenant, nous utiliserons beaucoup moins de tokens lorsque nous transmettrons les résultats à notre LLM. Tout ce qu’il voit est le texte du site. Nous conservons les caractères \n (nouvelle ligne) afin que l’agent puisse mieux comprendre la mise en page.

Une fois le texte extrait, nous le renvoyons.

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

Transformer la fonction en outil

Nous allons maintenant utiliser la classe Tool de LangChain pour envelopper la fonction. Cela permet à notre agent de l’appeler en tant qu’outil. Comme vous le voyez ci-dessous, c’est assez simple. Nous lui donnons un nom et une description. Nous pointons également l’outil vers une fonction avec l’argument 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."
    ),
)

Création de l’agent

Le code ci-dessous crée notre agent. ChatOpenAI crée une instance LLM. Nous passons notre LLM et notre outil dans create_react_agent() pour créer l’agent réel.

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

Une interface utilisateur ennuyeuse mais fonctionnelle

Tout programme a besoin d’un runtime, aussi primitif soit-il. Ici, nous nous contentons de créer un terminal de base permettant à l’utilisateur d’interagir avec l’agent. L’utilisateur saisit une invite. L’invite est transmise dans les messages, puis nous diffusons la sortie de l’agent.

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

La mise en place de l’ensemble

Le code complet

Voici notre exemple de code complet.

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

Ce que voit notre agent

L’extrait ci-dessous est ce que l’agent voit. Il contient notre invite et la page qu’il recherche pour le référencement.

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

Modèle de sortie

Dans l’extrait ci-dessous, notre modèle a fini d’examiner les résultats. Comme vous pouvez le constater, nous disposons d’un résumé clair des résultats de la recherche.

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

Conclusion

Le développement de l’IA devient de plus en plus facile. Avec LangChain et Bright Data, vous pouvez utiliser certains des meilleurs moteurs de recherche qui existent – Google, Bing et bien d’autres encore ! Notre exemple ici était assez minimal, un assistant de recherche automatisé.

Vous pouvez pousser ce projet plus loin et essayer d’ajouter plusieurs outils à LangChain. Vous savez maintenant comment créer des outils, découper les résultats des SERP et les transmettre à un agent d’intelligence artificielle pour améliorer les résultats. Prenez vos nouvelles compétences et construisez quelque chose.

LangChain propose également des intégrations avec les outils suivants.

Chez Bright Data, nous proposons des produits de toutes formes et de toutes tailles pour répondre à vos besoins en matière de collecte de données. Inscrivez-vous pour un essai gratuit et commencez dès aujourd’hui !