This repository has been archived on 2025-11-27. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
conseguir_datos_con_agentes/ver_los_prompts_de_un_agente.py
T

136 lines
4.5 KiB
Python

# Constantes ##########################################################################
PROMPT = "Busca en Wikipedia información sobre la inflación en Argentina y dame un resumen."
# Librerias de Agno ################################################################
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.yfinance import YFinanceTools
from agno.tools.wikipedia import WikipediaTools
# Prefect imports ##################################################################
from prefect import task, flow
from prefect.logging import get_run_logger
from prefect.filesystems import LocalFileSystem
local_file_system_block = LocalFileSystem.load("localfile")
# Cargar variables de entorno ######################################################
import os
from dotenv import load_dotenv
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")
# Imports adicionales #########################################################
import traceback
from uuid import uuid4
# 01. Averiguar el prompt que se envía a OpenAI ################################################
@task(name="averiguar_el_prompt_que_seenvia_a_openai", log_prints=True)
def averiguar_el_prompt_que_seenvia_a_openai(prompt_de_usuario: str):
prefect_logger = get_run_logger()
try:
prefect_logger.debug("Creando el agente con OpenAI")
agente = Agent(
model=OpenAIChat(id="gpt-4o-mini", api_key=openai_api_key),
name="analista_financiero",
description="Agente especializado en análisis financiero y económico",
debug_mode=True,
tools=[YFinanceTools(), WikipediaTools()],
)
prefect_logger.debug("Preparando los mensajes que se enviarán al modelo...")
try:
# 🚀 Este método interno construye los mensajes igual que antes,
# pero no requiere crear un RunOutput ni AgentSession manualmente.
run_messages = agente._get_run_messages(
run_response=None,
input=prompt_de_usuario,
session=None,
session_state={},
user_id=None,
audio=None,
images=None,
videos=None,
files=None,
knowledge_filters=None,
add_history_to_context=False,
dependencies=None,
add_dependencies_to_context=False,
add_session_state_to_context=False,
metadata=None,
)
except Exception as e:
prefect_logger.error("❌ Error al generar los mensajes con _get_run_messages()")
prefect_logger.error(f"Tipo de error: {type(e).__name__}")
prefect_logger.error(f"Detalle: {str(e)}")
prefect_logger.error(traceback.format_exc())
raise
mensajes_enviados = []
try:
for msg in run_messages.messages:
mensajes_enviados.append({
"role": msg.role,
"content": msg.content
})
except Exception as e:
prefect_logger.error("❌ Error al procesar los mensajes construidos.")
prefect_logger.error(f"Tipo de error: {type(e).__name__}")
prefect_logger.error(f"Detalle: {str(e)}")
prefect_logger.error(traceback.format_exc())
raise
prefect_logger.info("✅ Mensajes construidos por el agente:")
for m in mensajes_enviados:
prefect_logger.info(f"ROLE: {m['role']}\nCONTENT:\n{m['content']}\n{'-'*40}")
resultado = agente.run(prompt_de_usuario)
prefect_logger.info("✅ Resultado de la ejecución:")
prefect_logger.info(f"{resultado}")
prefect_logger.debug("Función completada correctamente ✅")
return mensajes_enviados
except Exception as e:
prefect_logger.error("💥 Error inesperado en la tarea averiguar_el_prompt_que_seenvia_a_openai")
prefect_logger.error(f"Tipo de error: {type(e).__name__}")
prefect_logger.error(f"Mensaje: {str(e)}")
prefect_logger.error(traceback.format_exc())
raise
# Definir el flujo principal #########################################
@flow(name="Flujo financiero", result_storage=local_file_system_block, log_prints=True) # type: ignore
def flujo_principal():
resultado_analisis = averiguar_el_prompt_que_seenvia_a_openai.submit(PROMPT).result()
return resultado_analisis
# Ejecutar el flujo principal #############################
if __name__ == "__main__":
flujo_principal()