Spaces:
Sleeping
Sleeping
Update src/agent/linkedin_agent.py
Browse files- src/agent/linkedin_agent.py +60 -0
src/agent/linkedin_agent.py
CHANGED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# agent/linkedin_agent.py
|
| 2 |
+
|
| 3 |
+
import os
|
| 4 |
+
from openai import OpenAI
|
| 5 |
+
from agents import Agent
|
| 6 |
+
from agents.models import OpenAIChatCompletionsModel
|
| 7 |
+
from tools.web_search_tool import get_web_search_tool
|
| 8 |
+
|
| 9 |
+
# Asegúrate de tener la variable de entorno OPENAI_API_KEY definida en tu sistema
|
| 10 |
+
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
| 11 |
+
if not OPENAI_API_KEY:
|
| 12 |
+
raise ValueError("Debes exportar la clave OPENAI_API_KEY antes de ejecutar el agente.")
|
| 13 |
+
|
| 14 |
+
# Cliente de OpenAI para pasar al modelo
|
| 15 |
+
client = OpenAI(api_key=OPENAI_API_KEY)
|
| 16 |
+
|
| 17 |
+
def create_agent():
|
| 18 |
+
"""
|
| 19 |
+
Crea y retorna un Agent configurado para:
|
| 20 |
+
- Usar el modelo '04-mini-high' (OpenAIChatCompletionsModel).
|
| 21 |
+
- Tener como tool el WebSearchTool nativo de OpenAI Agents SDK.
|
| 22 |
+
- Instrucciones en español para buscar perfiles de LinkedIn según oferta de empleo.
|
| 23 |
+
"""
|
| 24 |
+
|
| 25 |
+
# 1) Primero, instanciamos el modelo basado en 04-mini-high:
|
| 26 |
+
model = OpenAIChatCompletionsModel(
|
| 27 |
+
model="04-mini-high",
|
| 28 |
+
openai_client=client
|
| 29 |
+
)
|
| 30 |
+
|
| 31 |
+
# 2) Obtenemos el WebSearchTool nativo:
|
| 32 |
+
web_search = get_web_search_tool()
|
| 33 |
+
|
| 34 |
+
# 3) Construimos el agente con instrucciones muy explícitas:
|
| 35 |
+
instrucciones = """
|
| 36 |
+
Eres un agente que recibe dos entradas:
|
| 37 |
+
1) Una descripción de oferta de empleo en español.
|
| 38 |
+
2) Un número entero N (cantidad de perfiles a extraer).
|
| 39 |
+
|
| 40 |
+
Tu tarea:
|
| 41 |
+
a) Extraer los términos clave de la oferta.
|
| 42 |
+
b) Invocar la herramienta `web_search` para buscar en Google sitios de LinkedIn
|
| 43 |
+
(usando algo como 'site:linkedin.com/in <términos clave>').
|
| 44 |
+
c) Devolver hasta N perfiles en un formato de lista donde cada elemento tenga:
|
| 45 |
+
- Nombre del candidato (si está en el título o snippet de búsqueda).
|
| 46 |
+
- Enlace completo al perfil de LinkedIn (URL).
|
| 47 |
+
d) Presenta los resultados en un texto claro, cada perfil en una línea separada.
|
| 48 |
+
|
| 49 |
+
Ejemplo de salida (para N=2):
|
| 50 |
+
1. Juan Pérez - https://www.linkedin.com/in/juan-perez-12345 (Ingeniero de Software)
|
| 51 |
+
2. María Gómez - https://www.linkedin.com/in/maria-gomez-67890 (Desarrolladora Backend)
|
| 52 |
+
"""
|
| 53 |
+
|
| 54 |
+
agent = Agent(
|
| 55 |
+
name="linkedin_agent",
|
| 56 |
+
instructions=instrucciones,
|
| 57 |
+
model=model,
|
| 58 |
+
tools=[web_search]
|
| 59 |
+
)
|
| 60 |
+
return agent
|