Construir agentes de IA es cada día más fácil. En este artículo, repasaremos el proceso de uso de la nueva herramienta BrightDataSERP de LangChain. Si no estás familiarizado con el acrónimo, SERP significa “Search Engine Results Page”.
Este tutorial es para principiantes. Todo lo que necesitas es una comprensión básica de Python. Cuando termines esta guía, podrás añadir las siguientes habilidades a tu caja de herramientas.
- Realizar una búsqueda básica con BrightDataSERP
- Personalice sus resultados en las SERP
- Salida limpia para un uso compatible con LLM
- Crear un agente de IA con capacidades de búsqueda
Intro: Conocimientos Limitaciones de la IA
Si estás suficientemente familiarizado con los LLM, ya sabes que sus conocimientos son estáticos. En el momento en que se ponen a disposición del público, ya han terminado su formación y perfeccionamiento: no se les puede añadir más conocimientos.
Antes de que OpenAI añadiera capacidades de búsqueda, ChatGPT tenía una fecha límite de conocimiento. Los LLM siguen teniendo fechas de corte, basadas en su último periodo de ajuste. Dicho esto, los modelos son capaces de utilizar la inferencia de tiro cero. Puedes obtener más información sobre el proceso general de formación aquí.
Los modelos de IA se despliegan con una base de conocimientos estática. Mediante la inferencia de disparo cero, los modelos pueden dar sentido a los nuevos datos, pero no retendrán la información de forma permanente.
Cómo aborda LangChain las limitaciones
LangChain nos permite crear herramientas y conectarlas a diferentes LLMs. Si puedes escribir funciones Python, puedes dejar que los LLMs llamen a esas funciones – a su propia discreción. Le das al LLM acceso a la herramienta. El LLM hace todo lo demás. Si le haces una pregunta que puede responder con preentrenamiento, no utilizará la herramienta. Si le haces una pregunta que no conoce, utilizará sus herramientas para intentar encontrar la respuesta.
LangChain ofrece incluso herramientas preconstruidas para todas las necesidades siguientes.
- Buscar en
- Código
- Productividad
- Navegación por Internet
- Bases de datos
- Finanzas
Puede consultar la lista completa de herramientas integradas de LangChain aquí. Tenemos aún mejores noticias. Bright Data es una de ellas.
Uso de LangChain con Bright Data
Ahora que hemos repasado lo que hace, veamos cómo utilizar LangChain con Bright Data. Asumiremos que tienes una familiaridad básica con Python. Vamos a ver lo que se necesita para obtener sus claves API de OpenAI y Bright Data. Antes de continuar, asegúrese de revisar nuestra guía de web scraping con LangChain y Bright Data.
Requisitos previos
Para empezar, necesita instalar las herramientas Bright Data de LangChain. El comando pip install
a continuación hace exactamente eso.
pip install langchain-brightdata
A continuación, necesita una clave API de Bright Data y una instancia SERP llamada serp
. Puede registrarse para una prueba gratuita de nuestra API SERP aquí. Asegúrese de que su zona se llama serp
. serp1
no funcionará. Cuando esté listo, haga clic en el botón “Añadir” y termine de configurar la herramienta.
A continuación, puede obtener su clave API desde el panel de control de su nueva zona SERP.
Para obtener tu clave OpenAI, abre su página de claves API y haz clic en el botón “Crear nueva clave secreta”.
Un ejemplo básico
Empezaremos con un ejemplo sencillo de cómo funciona la herramienta. Cambie la clave API por la suya. La clase BrightDataSERP
hace el trabajo pesado aquí. Nosotros sólo establecemos la configuración e imprimimos los resultados. Normalmente no es necesario .encode("utf-8")
, pero experimentamos algunos problemas de impresión con Windows y esto lo resolvió.
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"))
He aquí un fragmento de un ejemplo. Si ves esto (o algo similar), estás en el buen camino.
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 avanzado
En el siguiente ejemplo, utilizamos kwargs para establecer una configuración personalizada con BrightDataSERP
. Puede consultar la documentación completa sobre personalización aquí. Establecemos nuestro tipo de búsqueda como tienda
para obtener resultados de compra más 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)
Puede personalizar cualquiera de los siguientes elementos para afinar los resultados de su búsqueda.
consulta
país
idioma
tipo_búsqueda
tipo_dispositivo
recuento_resultados
Creación de un agente de IA con Bright Data y OpenAI
Ahora que ya tiene una comprensión básica de cómo utilizar BrightDataSERP
, veamos cómo lo utiliza un verdadero agente de IA. Repasaremos las piezas de código y luego mostraremos cómo funciona todo en conjunto.
Las piezas
Hay un par de cosas más que tendrás que instalar antes de empezar.
Instalar el propio LangChain.
pip install langchain
Instalar el soporte de OpenAI para LangChain.
pip install langchain-openai
Instale LangGraph para crear agentes.
pip install langgraph
Esto puede ser un poco chocante en la era de la IA, pero también instalaremos BeautifulSoup. Pronto verás por qué.
pip install beautifulsoup4
Creación de una función de búsqueda
La siguiente función recupera los resultados de nuestra búsqueda, como en el ejemplo anterior. Después de recibir esos resultados, usamos BeautifulSoup para extraer el texto de ellos. Ahora, usaremos muchos menos tokens cuando pasemos los resultados a nuestro LLM. Todo lo que ve es el texto del sitio. Mantenemos los caracteres \n
(nueva línea) para que el agente pueda entender mejor el diseño de la página.
Una vez extraído el texto, lo devolvemos.
#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")
Convertir la función en herramienta
Ahora, usaremos la clase Tool
de LangChain para envolver la función. Esto permite a nuestro agente llamarla como una herramienta. Como se ve a continuación, es bastante simple. Le damos un nombre y una descripción. También apuntamos la herramienta a una función con el 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."
),
)
Creación del agente
El siguiente código crea nuestro agente. ChatOpenAI
crea una instancia LLM. Pasamos nuestro LLM y nuestra herramienta a create_react_agent()
para crear el 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])
Una interfaz de usuario aburrida pero funcional
Todo programa necesita un tiempo de ejecución, no importa lo primitivo que sea. Aquí, sólo creamos una configuración básica de terminal para que el usuario interactúe con el agente. El usuario introduce un prompt. El prompt se pasa a los mensajes, y luego transmitimos la salida del 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()
Puesta en común
Código completo
Aquí está nuestro ejemplo 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()
Lo que ve nuestro agente
Este fragmento es lo que ve el agente. Contiene nuestro prompt y la página que obtiene para referenciar.
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
Modelo de salida
En el fragmento siguiente, nuestro modelo ha terminado de revisar los resultados. Como puede ver, tenemos un resumen limpio de los resultados de la búsqueda.
================================== 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.
Conclusión
El desarrollo de IA es cada vez más fácil. Con LangChain y Bright Data, puedes utilizar algunos de los mejores motores de búsqueda: Google, Bing y muchos más. Nuestro ejemplo aquí era bastante mínimo, un asistente de búsqueda automatizado.
Puedes llevar este proyecto al siguiente nivel e intentar añadir múltiples herramientas a LangChain. Ahora ya sabes cómo crear herramientas, recortar los resultados de las SERP y cómo alimentarlas a un agente de IA para obtener mejores resultados. Toma tus nuevas habilidades y ve a construir algo.
LangChain también ofrece integraciones con las siguientes herramientas.
En Bright Data, ofrecemos productos de todas las formas y tamaños para satisfacer sus necesidades de recopilación de datos. Solicite una prueba gratuita y comience hoy mismo.