Agente inteligente de investigación en la web construido con LangGraph, usando modelos de OpenAI y la herramienta de búsqueda de Tavily. El agente decide cuándo llamar al buscador y puede encadenar varias búsquedas para ofrecer una respuesta final sintetizada.
- Recibe una pregunta del usuario.
- Llama a un modelo de chat de OpenAI con capacidades de tool-calling.
- Cuando el modelo lo considera necesario, invoca la herramienta
TavilySearchpara consultar la web. - Puede realizar varias llamadas a herramientas y volver al modelo para razonar sobre los resultados.
- Devuelve una respuesta final al usuario.
- LangGraph: orquestación por grafo de estados para agentes.
- LangChain OpenAI: integración con modelos de chat de OpenAI.
- LangChain Tavily: integración con el buscador Tavily.
- Python 3.12+ y
python-dotenvpara variables de entorno.
- Python 3.12 o superior.
- Claves de API válidas:
OPENAI_API_KEYpara OpenAI.TAVILY_API_KEYpara Tavily.
Nota: En el código, el modelo por defecto es
gpt-4o. Asegúrate de tener acceso al modelo configurado.
Puedes instalar las dependencias con pip o con uv (si lo usas, el repo incluye uv.lock).
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -U pip
pip install -e .uv syncPuedes crear un archivo .env en la raíz del proyecto con tus claves:
OPENAI_API_KEY=tu_clave_de_openai
TAVILY_API_KEY=tu_clave_de_tavilyAl importar el paquete (wiseguy/__init__.py), se cargan automáticamente las variables del .env.
Como alternativa puedes definir estas claves en variables de entorno del sistema:
En Linux/macOS:
export OPENAI_API_KEY=tu_clave_de_openai
export TAVILY_API_KEY=tu_clave_de_tavilyEn Windows (PowerShell):
$env:OPENAI_API_KEY="tu_clave_de_openai"
$env:TAVILY_API_KEY="tu_clave_de_tavily"El paquete expone un comando de consola wiseguy y también puede ejecutarse como módulo.
Con pip o uv activado (entorno con dependencias instaladas):
# Pasando una consulta directamente
wiseguy
# O ejecutando el paquete como módulo
python -m wiseguyDurante la ejecución, verás cuándo el agente decide "Ejecutar acción" (llamar a Tavily) y los mensajes de herramienta intermedios. El último mensaje mostrado es la respuesta final del asistente.
src/
└── wiseguy/
├── __init__.py # Carga variables de entorno (.env)
├── __main__.py # Punto de entrada del CLI / módulo
└── agent.py # Lógica del agente y grafo de LangGraph
- Grafo con 3 nodos:
llm(invoca el modelo),action(ejecuta herramientas) einit(estado inicial). - Arista condicional: si el modelo devuelve tool-calls, se pasa a
action; si no, termina, y devuelve el resultado al usuario. - Tras ejecutar las tools, vuelve a
llmpara razonar con los resultados.
---
config:
flowchart:
curve: linear
---
graph TD;
__start__([<p>__start__</p>]):::first
init(init)
llm(llm)
action(action)
__end__([<p>__end__</p>]):::last
__start__ --> init;
action --> llm;
init --> llm;
llm -. False .-> __end__;
llm -. True .-> action;
classDef default fill:#f2f0ff,line-height:1.2
classDef first fill-opacity:0
classDef last fill:#bfb6fc
El modelo se define en src/wiseguy/__main__.py:
model = ChatOpenAI(model="gpt-4o")Cámbialo por uno disponible en tu cuenta de OpenAI si es necesario.
pip install -e .
wiseguySi usas uv:
uv run wiseguy- Mantén los cambios acotados y coherentes con el estilo actual.
- Si añades nuevas herramientas, enlázalas en
__main__.pyy, si procede, enAgent. - Si introduces opciones de configuración (por ejemplo, modelo desde env), documenta la variable en este README.
Si encuentras problemas o quieres proponer mejoras, abre un issue en el repositorio.