====== Agentes ====== Los agentes son una parte experimental de langchain y que debe ser tomada como tal. \\ Los agentes se crean con un framework de langchain. Al definir un agente, éste utiliza un LLM para realizar las funciones que se le pidan, con la salvedad de que pueden usar herramientas predefinidas que les permiten ser "buenos" en algo y realizar acciones. Hay una gran herramientas disponibles: 'llm-math' para realizar operaciones matemáticas, 'wikipedia', para realizar búsquedas en esta plataforma, etc. \\ Si se usan diferentes herramientas //tools//, el propio modelo elegirá cuál debe usar en cada situación. \\ Podemos ver todo esto en el siguiente ejemplo: # Prueba agentes de langchain # Dependencias from langchain_ollama import ChatOllama from langchain.agents import load_tools, initialize_agent from langchain.agents import AgentType # Definimos modelo a utilizar llm = ChatOllama( model = "llama3.2", temperature = 0.0, verbose = True ) # cargamos las herramientas a disposición del agente. Deben haber sido previamente instaladas tools = load_tools(["llm-math", "wikipedia"], llm=llm) # Creamos agente agent = initialize_agent( tools, # Herramientas a disposición del agente definidas anteriormente llm, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, # Tipo de agente handle_parsing_errors=True, # Manejar errores de análisis, en lugar de fallar y detener verbose=True ) # El agente evaluará las herramientas que debe usar, de las que dispone, en función del contexto de la pregunta #respuesta = agent(f"¿Cuál es el 25% de 300?") respuesta = agent(f"¿Quién ganó la final de la copa del mundo de fútbol del año 2022?") print(respuesta) Puede ser interesante usar el modo depuración de langchain para comprobar los prompts internos para entender su funcionamiento. Vamos a verlo en el siguiente ejemplo, en el cual se va a usar la herramienta PythonREPLTool. \\ Esta herramienta da la posibilidad de que el LLM programe sus propias funciones en python y las ejecute, como si dispusiese de un terminal interno, aunque sólo puede usar los comandos nativos sin bibliotecas de terceros: # Prueba agentes de langchain # Dependencias from langchain_ollama import ChatOllama from langchain_experimental.agents.agent_toolkits import create_python_agent from langchain_experimental.tools import PythonREPLTool # Definimos modelo a utilizar llm = ChatOllama( model = "llama3.2", temperature = 0.0, verbose = True ) # Creamos agente agente = create_python_agent( llm, tool = PythonREPLTool(), # Esta herramienta permite ejecutar código Python como si tuviera internamente un terminal handle_parsing_errors = True, # Manejar errores de análisis, en lugar de fallar y detener la ejecución verbose = True ) lista_clientes = [["Harrison", "Chase"], ["Lang", "Chain"], ["Dolly", "Too"], ["Elle", "Elem"], ["Geoff","Fusion"], ["Trance","Former"], ["Jen","Ayai"] ] import langchain langchain.debug = True # Permite ver los prompts completos internos de langchain agente.run( f"""Ordena estos clientes por su apellido y después por su nombre e imprime la salida: {lista_clientes}""" ) langchain.debug = False También es posible crear nuestras propias herramientas para el uso de los agentes de un modo bastante sencillo, usando un decorador de python '@' al definir la función. Lo vemos en el siguiente ejemplo: # Prueba agentes de langchain # Dependencias from langchain_ollama import ChatOllama from langchain.agents import load_tools, initialize_agent from langchain.agents import AgentType from langchain.agents import tool from datetime import datetime # Definimos modelo a utilizar llm = ChatOllama( model = "llama3.2", temperature = 0.0, verbose = True ) # cargamos las herramientas a disposición del agente. Deben haber sido previamente instaladas tools = load_tools(["llm-math", "wikipedia"], llm=llm) # Definimos herramienta para obtener la fecha actual. @tool es un decorador que permite definir una herramienta (librería importada) @tool def time(text: str) -> str: """Devuelve la fecha actual. Usa esto para cualquier pregunta que exija devolver la fecha actual. \ La entrada devería ser siempre una cadena vacía, y esta función siempre retornará la fecha actual.""" return str(datetime.now()) # Creamos agente agente = initialize_agent( # He usado "initialize_Agent" en lugar de "create_python_agent", porque Ollama no tiene campo "description" y provocaba error tools + [time], # Herramientas a disposición del agente definidas anteriormente llm, agent = AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, # Tipo de agente handle_parsing_errors = True, # Manejar errores de análisis, en lugar de fallar y detener la ejecución verbose = True ) try: resultado = agente("¿Cuál es la fecha actual?") print(resultado) except: print("Excepción en acceso externo a herramienta")