Actualizacion para mcp
This commit is contained in:
+100
-42
@@ -7,53 +7,111 @@ from src.ConexionApis.OpenAi_conexion import OpenAICliente
|
||||
from src.Llms.Modelos.Openai_model import ModeloOpenAI
|
||||
from src.Llms.Agente import AgenteAI
|
||||
from src.Llms.Memory.postgres_MemoryConv import MemoryConvPostgres
|
||||
from fastmcp.client.transports import StreamableHttpTransport
|
||||
from fastmcp.client import Client
|
||||
from src.Llms.MCPs.McpClient import MCPClient # ya tienes esta clase
|
||||
from src.Llms.MCPs.McpClient_Registry import ClientRegistry # o ajusta según tu estructura
|
||||
|
||||
import asyncio
|
||||
|
||||
|
||||
async def main():
|
||||
|
||||
# Usar Credencial openai
|
||||
|
||||
conexion_admin = PostgresConexion(db_credencial)
|
||||
repo = OpenAICredencialRepo(conexion_admin)
|
||||
credencial_openai = repo.get_by_id("OPAK20250513-61b29978b7604031014")
|
||||
cliente = OpenAICliente(credencial_openai)
|
||||
|
||||
|
||||
|
||||
conexion_admin = PostgresConexion(db_credencial)
|
||||
# crea el modelo (openai)
|
||||
|
||||
repo = OpenAICredencialRepo(conexion_admin)
|
||||
credencial_openai = repo.get_by_id("OPAK20250513-61b29978b7604031014")
|
||||
|
||||
cliente = OpenAICliente(credencial_openai)
|
||||
|
||||
modelo = ModeloOpenAI(
|
||||
cliente=cliente,
|
||||
model="gpt-4o",
|
||||
temperature=1,
|
||||
top_p=1.0
|
||||
)
|
||||
|
||||
|
||||
memoria = MemoryConvPostgres(
|
||||
credencial=db_credencial,
|
||||
nombre_tabla="memoria_conversacion_pruebas",
|
||||
k=10
|
||||
)
|
||||
|
||||
agente2 = AgenteAI(
|
||||
modelo=modelo,
|
||||
nombre="Experto en Astronomía",
|
||||
descripcion="Un experto en astronomía que responde preguntas sobre el universo.",
|
||||
system_prompt="Actúa como un experto en astronomía y astrofísica con experiencia académica y práctica en observación astronómica, física estelar, cosmología, mecánica orbital y análisis de datos astronómicos. Cuando respondas, utiliza lenguaje técnico pero accesible para alguien con conocimientos intermedios en física y matemáticas. Siempre que sea posible, incluye explicaciones detalladas, ejemplos numéricos y referencias a teorías o descubrimientos relevantes (por ejemplo, relatividad general, evolución estelar, espectroscopía, etc.). No simplifiques en exceso. Si la pregunta tiene múltiples dimensiones (como observacional y teórica), aborda todas. ¿Estás listo para empezar?",
|
||||
rol="astronomo",
|
||||
max_iterations=5,
|
||||
memoria=memoria,
|
||||
objetivos=["Responder preguntas sobre astronomía y astrofísica", "Proporcionar explicaciones detalladas y ejemplos numéricos"],
|
||||
)
|
||||
|
||||
async def probar_interaccion_stream():
|
||||
print("Respuesta en streaming:\n")
|
||||
|
||||
# Paso 1: espera la corutina para obtener el generador
|
||||
respuesta_gen = await agente2.interactuar_en_bucle(
|
||||
"¿Hacia qué va orbitando cada astro del espacio? responde jerárquicamente",
|
||||
stream=True
|
||||
modelo = ModeloOpenAI(
|
||||
cliente=cliente,
|
||||
model="gpt-4o",
|
||||
temperature=1,
|
||||
top_p=1.0
|
||||
)
|
||||
|
||||
# Paso 2: itera sobre el generador
|
||||
async for token in respuesta_gen:
|
||||
print(token, end="", flush=True)
|
||||
# Le otorga memoria
|
||||
|
||||
memoria = MemoryConvPostgres(
|
||||
credencial=db_credencial,
|
||||
nombre_tabla="memoria_conversacion_pruebas",
|
||||
k=10
|
||||
)
|
||||
|
||||
|
||||
# Cargamos las herramientas
|
||||
|
||||
herramientas = MCPClient.from_http(
|
||||
name="tools",
|
||||
url="http://127.0.0.1:4300/tools/"
|
||||
)
|
||||
|
||||
math = MCPClient.from_http(
|
||||
name="math",
|
||||
url="http://127.0.0.1:4200/math/"
|
||||
)
|
||||
|
||||
# Las añadimos al registro de herramientas
|
||||
|
||||
registry = ClientRegistry()
|
||||
|
||||
|
||||
registry.add("tools", herramientas)
|
||||
registry.add("math", math)
|
||||
|
||||
|
||||
|
||||
# --- INICIALIZACIÓN DEL AGENTE ---
|
||||
agente2 = AgenteAI(
|
||||
modelo=modelo,
|
||||
nombre="Asistente Inteligente",
|
||||
descripcion="Un asistente conversacional versátil, capaz de resolver problemas, acceder a herramientas y proporcionar respuestas útiles.",
|
||||
system_prompt=(
|
||||
"Eres un asistente inteligente que ayuda al usuario a resolver tareas, responder preguntas y usar herramientas disponibles si es necesario. "
|
||||
"Debes razonar paso a paso, y si se detecta que una herramienta MCP es útil, actúa generando el bloque MCP apropiado sin dar más explicaciones. "
|
||||
"Siempre estructura tus respuestas con claridad, y termina con <END> cuando creas haber completado la tarea."
|
||||
),
|
||||
rol="asistente",
|
||||
objetivos=[
|
||||
"Resolver tareas del usuario",
|
||||
"Usar herramientas MCP si es útil",
|
||||
"Responder de forma clara y útil"
|
||||
],
|
||||
|
||||
# max_iterations=3,
|
||||
# memoria=memoria,
|
||||
|
||||
mcp=registry # ← ✅ Integración del cliente MCP
|
||||
)
|
||||
|
||||
|
||||
# --- FUNCIÓN DE EJECUCIÓN ---
|
||||
async def probar_interaccion_stream():
|
||||
# # 🔌 Conectar a los servidores MCP registrados
|
||||
# await mcp_client.connect_all()
|
||||
|
||||
print("Respuesta en streaming:\n")
|
||||
respuesta_gen = await agente2.interactuar_en_bucle(
|
||||
"¿Cuál es mi nombre de usuario en este sistema?",
|
||||
stream=True
|
||||
)
|
||||
|
||||
async for token in respuesta_gen:
|
||||
print(token, end="", flush=True)
|
||||
|
||||
|
||||
await probar_interaccion_stream()
|
||||
|
||||
|
||||
# Ejecutar
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
|
||||
|
||||
|
||||
|
||||
asyncio.run(probar_interaccion_stream())
|
||||
|
||||
Reference in New Issue
Block a user