realizando una serie de llamadas LLM. Estos agentes normalmente reciben una tarea de un usuario y utilizan herramientas para resolverla de manera efectiva. Las herramientas son esencialmente funciones que un agente puede invocar. Sin embargo, construir un agente es mucho más que simplemente definir un conjunto de herramientas y proporcionarlas en el contexto del agente. Debe considerar cuidadosamente cómo se definen sus herramientas y qué contexto le está proporcionando a su agente.
El objetivo de este artículo es resaltar en qué centrarse al crear herramientas para agentes de IA. Las herramientas adecuadas son esenciales para los agentes de alto rendimiento y, por lo tanto, profundizaré en el uso de herramientas de agentes. Cubriré temas como buenas definiciones y descripciones de herramientas y la forma óptima de poner las herramientas a disposición de su agente.
Por qué las herramientas son importantes para los agentes de IA
Tener herramientas disponibles es una gran parte de lo que hace que los agentes sean efectivos. Sin acceso a herramientas, el LLM no tendría las mismas opciones, como realizar búsquedas en Internet o encontrar información en una tabla de base de datos. Por lo tanto, la forma en que define y utiliza sus herramientas de agencia es esencial para el desempeño de su agente.
Hay varias consideraciones que se deben tener en cuenta al definir herramientas para sus agentes. Al trabajar con agentes, encuentro que muchas de estas consideraciones también se aplican a los humanos que usan las herramientas, por ejemplo:
Las herramientas deben estar bien definidas con nombres y descripciones adecuados. Una herramienta debe tener un propósito específico. Debe tener definiciones de tipos adecuadas, tanto para las entradas como para las salidas de la herramienta.
En general, creo que se puede avanzar mucho si se sigue el principio que se cita a continuación. Todas las herramientas que cree deben definirse de tal manera que a un humano le resulte fácil comprender la herramienta y cómo funciona.
Las herramientas deben definirse de tal manera que sean fáciles de utilizar para un ser humano.
Encuentro que este principio se aplica mucho cuando se trabaja en ML, por ejemplo, también cuando se analizan las indicaciones que envía a sus LLM. Siempre debe preguntarse si un humano puede comprender la tarea proporcionada en el mensaje. De lo contrario, es necesario aclarar el mensaje.
Definiciones de herramientas adecuadas
Las definiciones adecuadas de herramientas son una mejora sencilla que puede realizar en sus agentes de IA. Con definiciones de herramientas adecuadas, me refiero a:
Sus herramientas deben tener un nombre claro que represente la función de la herramienta. Sus herramientas deben tener una cadena de documentación bien descriptiva, que incluya una breve descripción de lo que hace la herramienta, una descripción de todos los parámetros de entrada junto con su tipo y una definición de lo que devuelve la herramienta.
Primero mostraré un mal ejemplo de una herramienta, resaltaré los problemas y luego brindaré un ejemplo de una buena definición de herramienta.
# mala definición de herramienta def búsqueda (consulta): resultados = search_database() devuelve resultados
Esta es una mala definición de herramienta debido a los siguientes problemas:
El nombre de la herramienta no es descriptivo. La búsqueda es ambigua; también podría, por ejemplo, referirse a realizar una búsqueda semántica. Falta una cadena de documentación que defina los tipos de entrada y salida, y lo que hace la herramienta. A la herramienta le faltan tipos para los parámetros de entrada y salida. El LLM que utiliza esta herramienta probablemente pueda inferir que la consulta es una cadena. Sin embargo, el modelo tendrá que dedicar tiempo a comprender el formato de salida una vez que utilice la herramienta.
En su lugar, debería definir la herramienta de la siguiente manera:
@dataclass clase KeywordSearchResult: id: str nombre de archivo: str document_content: str # buena definición de herramienta def keyword_search(consulta: str) -> lista[KeywordSearchResult]: “”” Realiza una búsqueda de palabras clave en la base de datos. Parámetros de entrada: consulta: str – las palabras clave a buscar Salida: una lista de todos los resultados de la búsqueda de palabras clave, y cada resultado contiene: – id (str) – el id del documento tal como se define en la base de datos – filename (str) – el nombre de archivo del documento – document_content (str) – el contenido de texto del documento “”” results = search_databse() devuelve resultados
En este ejemplo, creé una clase de datos separada, que representa el formato de salida de la herramienta. Esto hace que sea mucho más fácil para su agente comprender cómo funciona la herramienta y facilitará el manejo del resultado. Además, definí una cadena de documentación adecuada, que contiene una descripción simple de lo que hace la herramienta y los parámetros de entrada y salida. Hice el nombre de la herramienta más específico llamándolo keyword_search en lugar de simplemente buscar.
Realizar estas sencillas mejoras en sus herramientas generará grandes aumentos en el rendimiento de sus agentes. Sin embargo, también existen otras técnicas que puede aplicar a la hora de definir sus herramientas, lo que hace que su agente sea aún más eficaz.
Funcionalidad de la herramienta
Continuando con el tema de su herramienta, también puede mejorar el rendimiento de la agencia haciendo que las herramientas sean más específicas y proporcionando al modelo resultados limpios de las herramientas. Continuaré con el ejemplo de palabras clave para especificar a qué me refiero.
Fabricación de herramientas específicas.
Las herramientas deben ser lo más específicas posible. La creación de herramientas vagas hace que sea más difícil para el modelo saber cuándo utilizar la herramienta. Por lo tanto, encontrará con más frecuencia que el modelo utiliza incorrectamente la herramienta. Esto podría ser, por ejemplo:
Usar la herramienta en momentos incorrectos. Por ejemplo, usar keyword_search cuando debería usar semantic_search Usar el modelo con parámetros incorrectos Manejar incorrectamente la salida de la herramienta
Por lo tanto, sus herramientas siempre deben tener un propósito claro y singular.
Proporcionar resultados limpios
Otra forma de mejorar en gran medida la calidad de las herramientas de sus agentes es proporcionarles un resultado limpio. Esto significa analizar los resultados dentro de la herramienta en una cadena estructurada de una manera fácil de entender para el agente. Volveré a describir esto usando un ejemplo a continuación.
Crearé una herramienta _parse_keyword_search_output que toma los resultados de la búsqueda de palabras clave y los analiza en una cadena estructurada. En este ejemplo, también incluyo que KeywordSearchResult contiene algunos resultados innecesarios. Naturalmente, estos resultados se excluyen cuando analizamos el resultado.
@dataclass clase KeywordSearchResult: id: str nombre de archivo: str document_content: str uneccesary_field_a: str uneccesary_field_b: str def _parse_keyword_search_output(keyword_search_results: lista[KeywordSearchResult]) -> str: “””Analiza el resultado de la herramienta de búsqueda de palabras clave en una cadena estructurada que solo contiene la información necesaria””” output_string = “” tot_num_documents = len(keyword_search_results) para i, resultado en enumerate(keyword_search_results): document_id, filename, document_content = resultado[“id”]resultado[“filename”]resultado[“document_content”]
cadena_salida += f”””\n\n Documento {i+1}/{tot_num_documents}: ID: {id_documento} nombre de archivo: {nombre de archivo} contenido: {document_content} “”” return cadena_salida def búsqueda_palabra clave(consulta: cadena, url: cadena) -> lista[KeywordSearchResult]: “””””” resultados = search_databse() devolver parse_results(resultados)
Analizar los resultados de esta manera hace que sea mucho más fácil para el agente manejar los resultados de la herramienta de búsqueda de palabras clave. Recuerde asegurarse de que la cadena de documentación de la herramienta de búsqueda de palabras clave describa el formato de salida que proporcionará la herramienta de búsqueda de palabras clave de análisis.
Evite devolver todos los resultados
Cuando se utilizan herramientas como la búsqueda de palabras clave, a veces pueden arrojar cientos, si no miles, de resultados. Esto inmediatamente inflará el contexto de su agente. Para evitar esto, debe agregar opciones para ordenar las salidas de la herramienta y devolver solo una cantidad máxima de elementos, como destaco en el siguiente ejemplo:
def búsqueda_palabra clave(consulta: cadena, url: cadena, sort_ascending=True, max_return_items=10) -> lista[KeywordSearchResult]: “””””” resultados = search_databse() si sort_ascending: resultados = sort(resultados, ascendente=True) else: resultados = sort(resultados, ascendente=False) resultados = parse_results(resultados) if max_return_items < len(resultados): devuelve resultados[:max_return_items] devolver resultados
Por lo general, es suficiente que el modelo vea los 10 o 20 resultados principales, para obtener la información más útil (en las búsquedas de palabras clave, los resultados principales suelen ser los más relevantes) y para comprender el formato de la salida.
Manejo de errores informativos
El manejo informativo de errores es una medida de seguridad fundamental que debe implementarse cuando sus agentes inevitablemente encuentran problemas. Este problema puede deberse a:
El agente usa incorrectamente una herramienta, en cuyo caso debe informarle por qué usó la herramienta incorrectamente y, potencialmente, también cómo solucionarlo. Una API falla debido a un proveedor externo. En cuyo caso, puede informar al modelo que espere o informar al usuario del problema. Faltan paquetes, en cuyo caso debe informar a su agente para que instale los paquetes requeridos def keyword_search(query: str, url: str) -> list[KeywordSearchResult]: “””””” try: results = search_database() return parse_results(resultados) excepto RatelimitError como e: elevar RuntimeError( f”Error de límite de velocidad: {e}. ” f”Espere antes de volver a intentarlo. Si este error persiste, comuníquese con el soporte técnico.” ) excepto APINotAvailableError como e: elevar RuntimeError( f”API no disponible: {e}. ” f”Compruebe que la URL proporcionada es correcto y el punto final está operativo.” ) excepto la excepción como e: rise RuntimeError( f”Error inesperado: {e}. Inténtelo de nuevo.” )
Este manejo informativo de errores hace que sea mucho más fácil para su agente manejar el escenario en el que falla una herramienta. En general, debe garantizar lo siguiente en el manejo de errores:
Devuelve un mensaje de error descriptivo, que incluye tanto el seguimiento del error como una cadena que describe el error. Lo ideal sería informar al agente cómo debe actuar después de recibir este error. Por ejemplo, si el modelo encuentra el error de límite de velocidad, debe ejecutar time.sleep() si es la primera vez que encuentra este error; de lo contrario, debe informar al usuario.
Ponga las herramientas a disposición de sus agentes
Ahora que tiene herramientas funcionales y correctamente definidas, es hora de ponerlas a disposición de sus agentes. Sin embargo, aún quedan algunas consideraciones por hacer al proporcionar herramientas a su agente.
¿Cuántas herramientas caben en el contexto? ¿Cuándo poner a disposición las herramientas? ¿Cómo hacer que las herramientas estén disponibles en el contexto?
Para el primer punto, creo que es importante considerar cuántas herramientas debería corregir en su contexto. Proporcionar al agente demasiadas herramientas le dificulta saber cuándo usar qué herramientas y, por lo tanto, el modelo tendrá dificultades para utilizar las herramientas de manera efectiva. Por lo tanto, debe revisar sus herramientas y considerar si todas son necesarias para que su agente funcione bien.
Continuando con este tema, también puede considerar cuándo poner a disposición las herramientas. Por ejemplo, la herramienta de búsqueda de palabras clave puede no ser relevante cuando el agente realiza tareas de resumen simples para el usuario. Puede modificar el contexto de su agente para que algunas herramientas solo estén disponibles cuando sea relevante su uso.
Por último, también debe considerar cómo pone a disposición las herramientas. En su mensaje, debe crear una sección separada para sus herramientas, ya sea usando un encabezado de rebajas o una etiqueta XML separada. Luego debe colocar todas sus herramientas y las descripciones de cómo y cuándo utilizarlas en esta sección.
Conclusión
En este artículo, cubrí cómo trabajar con herramientas para sus agentes. He comentado cómo las herramientas son el aspecto más importante para los agentes de IA, lo que les permite ser tan efectivos como son. Además, también hablé de cómo crear definiciones de herramientas adecuadas y cómo crear herramientas especializadas. Creo que trabajar con sus herramientas, mejorar cómo se definen y cómo las utiliza su agente, es el aspecto más importante al que puede dedicar tiempo cuando trabaja con su agente de IA.
👉 Encuéntrame en las redes sociales:
🧑💻 Ponte en contacto
🐦X/Twitter
✍️ Medio
También puedes leer algunos de mis otros artículos: