Los agentes de LangGraph necesitan acceso a datos web en vivo para responder preguntas actuales, verificar hechos y fundamentar sus respuestas. Agregar una herramienta de búsqueda a un gráfico LangGraph le brinda al agente la capacidad de consultar Google, Reddit, YouTube y otras plataformas a pedido. Este tutorial muestra cómo definir una herramienta de búsqueda Scavio, registrarla como un nodo de herramienta LangGraph y conectarla a su gráfico de agente. El agente podrá llamar a la herramienta de búsqueda durante la ejecución y recibir resultados JSON estructurados sobre los que podrá razonar.
Requisitos previos
- Python 3.10+ instalado
- Paquetes langgraph y langchain-core instalados
- Una clave API de Scavio de scavio.dev
- Comprensión básica de los gráficos de estado de LangGraph
Guia paso a paso
Paso 1: Definir la función de la herramienta de búsqueda
Cree una función de herramienta que envuelva la API de Scavio y devuelva resultados estructurados.
import os, requests
from langchain_core.tools import tool
API_KEY = os.environ["SCAVIO_API_KEY"]
@tool
def web_search(query: str) -> str:
"""Search the web for current information."""
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": query})
results = resp.json().get("organic_results", [])[:5]
return "\n".join(f"- {r['title']}: {r.get('snippet', '')}" for r in results)Paso 2: Crear el estado del agente y graficar
Configure el gráfico de estado de LangGraph con la herramienta de búsqueda vinculada al nodo del agente.
from langgraph.graph import StateGraph, MessagesState
from langgraph.prebuilt import ToolNode
from langchain_openai import ChatOpenAI
tools = [web_search]
model = ChatOpenAI(model="gpt-4o-mini").bind_tools(tools)
def agent(state: MessagesState):
return {"messages": [model.invoke(state["messages"])]}
tool_node = ToolNode(tools)Paso 3: Cablear el gráfico
Conecte nodos de agente y herramientas con enrutamiento condicional basado en llamadas a herramientas.
from langgraph.graph import END
def should_continue(state: MessagesState):
last = state["messages"][-1]
return "tools" if last.tool_calls else END
graph = StateGraph(MessagesState)
graph.add_node("agent", agent)
graph.add_node("tools", tool_node)
graph.set_entry_point("agent")
graph.add_conditional_edges("agent", should_continue)
graph.add_edge("tools", "agent")
app = graph.compile()Paso 4: Ejecute el agente con una consulta de búsqueda
Invoque al agente con una pregunta que requiera datos web en vivo.
from langchain_core.messages import HumanMessage
result = app.invoke({
"messages": [HumanMessage(content="What are the top CRM tools for startups in 2026?")]
})
print(result["messages"][-1].content)Ejemplo en Python
import os, requests
from langchain_core.tools import tool
@tool
def web_search(query: str) -> str:
"""Search the web for current information."""
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": os.environ["SCAVIO_API_KEY"]},
json={"platform": "google", "query": query})
results = resp.json().get("organic_results", [])[:5]
return "\n".join(f"- {r['title']}: {r.get('snippet', '')}" for r in results)
print(web_search.invoke("best CRM 2026"))Ejemplo en JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
async function webSearch(query) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query})
});
const results = (await r.json()).organic_results || [];
return results.slice(0,5).map(r => r.title + ": " + (r.snippet||"")).join("\n");
}
console.log(await webSearch("best CRM 2026"));Salida esperada
A LangGraph agent that can call a web search tool during execution, receiving structured search results and using them to answer questions with current data.