informatica:inteligencia_artificial:agentes
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
informatica:inteligencia_artificial:agentes [2025/10/14 21:44] – [ollama] jose | informatica:inteligencia_artificial:agentes [2025/10/14 22:26] (current) – jose | ||
---|---|---|---|
Line 24: | Line 24: | ||
ollama run llama3.1:8b | ollama run llama3.1:8b | ||
+ | Instalamos las tools: | ||
+ | pip install langchain langchain-ollama langchain_community | ||
+ | |||
+ | 1. Código para usar el agente: | ||
+ | |||
+ | Configuración Inicial y Modelo | ||
+ | Asegúrate de que Ollama esté ejecutándose (ollama serve) y luego define el modelo que usarás. | ||
+ | < | ||
+ | from langchain_community.chat_models import ChatOllama | ||
+ | from langchain_core.prompts import ChatPromptTemplate | ||
+ | from langchain_core.output_parsers import StrOutputParser | ||
+ | |||
+ | # 1. Definir el modelo que usará el agente | ||
+ | MODELO_OLLAMA = " | ||
+ | |||
+ | # 2. Inicializar el LLM | ||
+ | # Esto crea una conexión con tu modelo local de Ollama | ||
+ | llm = ChatOllama(model=MODELO_OLLAMA) | ||
+ | </ | ||
+ | |||
+ | 2. Definición de la Herramienta (Tool) | ||
+ | |||
+ | En este paso, defines qué acciones puede tomar tu agente. Para que el modelo pueda ejecutar comandos en la terminal (como pediste antes), adaptaremos la función en el formato de LangChain. | ||
+ | < | ||
+ | from langchain_core.tools import tool | ||
+ | import subprocess | ||
+ | |||
+ | # Usamos el decorador @tool de LangChain para convertir la función Python | ||
+ | # en una herramienta que el LLM puede entender. | ||
+ | |||
+ | @tool | ||
+ | def ejecutar_comando_terminal(comando: | ||
+ | """ | ||
+ | Ejecuta un comando en la terminal (shell) del sistema operativo. | ||
+ | Usa esta herramienta para probar código o scripts como Playwright. | ||
+ | """ | ||
+ | try: | ||
+ | resultado = subprocess.run( | ||
+ | comando, | ||
+ | shell=True, | ||
+ | capture_output=True, | ||
+ | text=True, | ||
+ | timeout=30 | ||
+ | ) | ||
+ | | ||
+ | if resultado.returncode == 0: | ||
+ | return f" | ||
+ | else: | ||
+ | # Devuelve el error al LLM para que pueda intentar depurarlo | ||
+ | return f" | ||
+ | |||
+ | except Exception as e: | ||
+ | return f" | ||
+ | |||
+ | # Lista de herramientas disponibles para el agente | ||
+ | tools = [ejecutar_comando_terminal] | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | 3. Unir y Ejecutar el Agente (El Bucle de Tools Calling) | ||
+ | |||
+ | Aquí es donde se produce la magia. LangChain usa el método .bind_tools() para informar al modelo de Ollama sobre las funciones que tiene disponibles. LangChain se encarga automáticamente del bucle de " | ||
+ | |||
+ | < | ||
+ | # 1. Unir el LLM con las herramientas | ||
+ | # LangChain usa las descripciones de las funciones (docstrings) para crear el JSON Schema | ||
+ | # que Ollama necesita. | ||
+ | llm_with_tools = llm.bind_tools(tools) | ||
+ | |||
+ | # 2. Definir la pregunta para el agente | ||
+ | user_question = " | ||
+ | |||
+ | # 3. Primer paso: El modelo decide si usa la herramienta | ||
+ | print(" | ||
+ | response = llm_with_tools.invoke(user_question) | ||
+ | |||
+ | # 4. Comprobar si hay llamadas a herramientas | ||
+ | if response.tool_calls: | ||
+ | print(f" | ||
+ | | ||
+ | # 5. Ejecutar la herramienta (Manualmente para este ejemplo, pero LangChain tiene wrappers de Agente que lo automatizan) | ||
+ | | ||
+ | # Extraer los argumentos que el LLM generó | ||
+ | tool_call = response.tool_calls[0] | ||
+ | func_name = tool_call[' | ||
+ | func_args = tool_call[' | ||
+ | | ||
+ | # Ejecutar la función real usando los argumentos | ||
+ | tool_output = ejecutar_comando_terminal(**func_args) | ||
+ | | ||
+ | print(f" | ||
+ | print(f" | ||
+ | |||
+ | # 6. Segundo paso: Enviar el resultado de vuelta al modelo | ||
+ | print(" | ||
+ | | ||
+ | # Para la respuesta final, es necesario enviar el historial completo, incluyendo | ||
+ | # la respuesta del LLM y el resultado de la herramienta. | ||
+ | | ||
+ | messages = [ | ||
+ | (" | ||
+ | response, # Respuesta del LLM que contenía la Tool Call | ||
+ | (" | ||
+ | ] | ||
+ | | ||
+ | # Llamar al modelo por segunda vez con el resultado | ||
+ | final_response = llm.invoke(messages) | ||
+ | | ||
+ | print(" | ||
+ | print(final_response.content) | ||
+ | |||
+ | else: | ||
+ | # Si no hay Tool Call, el modelo responde directamente | ||
+ | print(f" | ||
+ | </ | ||
+ | |||
+ | Todo el script junto | ||
+ | < | ||
+ | import subprocess | ||
+ | from langchain_community.chat_models import ChatOllama | ||
+ | from langchain_core.tools import tool | ||
+ | |||
+ | # --- PARTE 1: Configuración Inicial y Modelo --- | ||
+ | |||
+ | # Asegúrate de que Ollama esté ejecutándose (ollama serve) | ||
+ | MODELO_OLLAMA = " | ||
+ | llm = ChatOllama(model=MODELO_OLLAMA) | ||
+ | |||
+ | # ---------------------------------------------------------------------- | ||
+ | # --- PARTE 2: Definición de la Herramienta (Tool) --- | ||
+ | |||
+ | @tool | ||
+ | def ejecutar_comando_terminal(comando: | ||
+ | """ | ||
+ | Ejecuta un comando en la terminal (shell) del sistema operativo. | ||
+ | Usa esta herramienta para probar código o scripts como Playwright. | ||
+ | """ | ||
+ | print(f" | ||
+ | try: | ||
+ | # Usa subprocess para ejecutar el comando | ||
+ | resultado = subprocess.run( | ||
+ | comando, | ||
+ | shell=True, | ||
+ | capture_output=True, | ||
+ | text=True, | ||
+ | timeout=30 # Límite de tiempo de 30 segundos | ||
+ | ) | ||
+ | | ||
+ | if resultado.returncode == 0: | ||
+ | return f" | ||
+ | else: | ||
+ | # Devuelve el error para que el LLM lo analice | ||
+ | return f" | ||
+ | |||
+ | except Exception as e: | ||
+ | return f" | ||
+ | |||
+ | # Lista de herramientas disponibles para el agente | ||
+ | tools = [ejecutar_comando_terminal] | ||
+ | |||
+ | # ---------------------------------------------------------------------- | ||
+ | # --- PARTE 3: Unir y Ejecutar la Lógica del Agente --- | ||
+ | |||
+ | # 1. Unir el LLM con las herramientas | ||
+ | # Esto crea una " | ||
+ | llm_with_tools = llm.bind_tools(tools) | ||
+ | |||
+ | # 2. Definir la pregunta para el agente | ||
+ | # **NOTA IMPORTANTE: | ||
+ | # o un entorno Playwright configurado que responda a este comando. | ||
+ | user_question = ( | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ) | ||
+ | |||
+ | print(f" | ||
+ | |||
+ | # 3. Primer Paso: El modelo decide si usa la herramienta | ||
+ | response = llm_with_tools.invoke(user_question) | ||
+ | |||
+ | if response.tool_calls: | ||
+ | | ||
+ | # 4. El Agente ejecuta la Herramienta | ||
+ | tool_call = response.tool_calls[0] | ||
+ | func_args = tool_call[' | ||
+ | tool_output = ejecutar_comando_terminal(**func_args) | ||
+ | | ||
+ | # 5. Segundo Paso: Enviar el resultado de vuelta al modelo para la respuesta final | ||
+ | | ||
+ | # Prepara el historial completo, incluyendo el resultado de la herramienta | ||
+ | messages = [ | ||
+ | (" | ||
+ | response, # La respuesta del LLM con la Tool Call | ||
+ | (" | ||
+ | ] | ||
+ | | ||
+ | # Llama al modelo por segunda vez para que genere la respuesta final | ||
+ | final_response = llm.invoke(messages) | ||
+ | | ||
+ | print(" | ||
+ | print(" | ||
+ | print(final_response.content) | ||
+ | print("#####################################################" | ||
+ | |||
+ | else: | ||
+ | # Si no hay Tool Call, el modelo responde directamente (no debería pasar en este caso) | ||
+ | print(f" | ||
+ | | ||
+ | </ |
informatica/inteligencia_artificial/agentes.1760478245.txt.gz · Last modified: by jose