Una guía rápida para llamar a herramientas en LLM • Registro

en las manos Suponga que tiene la tarea de resolver un problema matemático como 4242 x 1977. Algunos de ustedes pueden hacer esto mentalmente, pero la mayoría de nosotros tenemos acceso a una calculadora ahora mismo porque no solo es más rápida, sino que también reduce la posibilidad de error.

Resulta que la misma lógica se aplica a los modelos de lenguajes grandes (LLM). Pídale a un chatbot que resuelva el mismo problema matemático y, en la mayoría de los casos, producirá una respuesta plausible pero incorrecta. Pero dale a ese modelo su propia calculadora y, con la programación adecuada, de repente podrá resolver ecuaciones complejas con precisión.

No se limita a la aritmética. Las herramientas adecuadas pueden brindar a los LLM la capacidad de ejecutar código arbitrario, acceder a API, enviar solicitudes complejas a modelos de dominios específicos o realizar búsquedas en la web.

Estas herramientas son sólo uno de los pilares para lograr lo que todos llaman «IA agente«Con las herramientas adecuadas, los modelos de IA pueden analizar, planificar y resolver problemas complejos sin ninguna supervisión.

Dejaremos que usted decida cuánto control darles a estos modelos, qué barras de seguridad necesitan y cuánto desea confiar en ellos. Hoy nos centraremos en la dinámica.

Entonces, en esta práctica, exploraremos algunas de las formas en que se pueden utilizar las llamadas de herramientas para aumentar las capacidades y abordar las limitaciones de los LLM.

Lo que necesitas:

  • Un sistema capaz de ejecutar LLM modestos en medidas de 4 bits. Cualquier tarjeta gráfica Nvidia moderna o GPU AMD serie 7000 debe tener al menos 6 GB de vRAM. Para Apple Silicon Macs, recomendamos un mínimo de 16 GB de memoria.
  • Comprensión básica de Python.
  • Esta guía asume que ya tienes instalado Ollama Model Runner. Si no lo has hecho, puedes encontrar nuestra guía aquí.
  • También debes seguir nuestras instrucciones para realizar el pedido. Abra la interfaz de usuario web Aquí está el panel, que proporciona una interfaz relativamente amigable para usar herramientas personalizadas.

Elegir un modelo

Antes de continuar, es importante discutir la aplicabilidad del modelo. No todos los modelos admiten llamadas a herramientas o funciones todavía.

Según tenemos entendido, el Mistral-7B ha agregado oficialmente soporte para instrumentos. Versión de instrucción 0.3 En mayo, introdujo la función Meta. llama 3.1 Mes pasado. Otros modelos notables con soporte de instrumentos disponibles en los repositorios de Ollama incluyen los modelos NeMo, Large y Mixtral de Mistral y el Command R+ de Cohere.

En esta guía veremos Mistral-NemoPero si tiene recursos limitados, podemos asegurarnos de que Lama 3.1-8B funcione y tenga capacidad para 6 GB de memoria.

READ  Una pareja de Cork disfruta de un día especial que "nunca olvidarán"

Aprovechando nuestra caja de herramientas LLM

Volviendo al ejemplo anterior, sería bueno proporcionar a nuestro LLM opcional una calculadora para ayudar con algún problema matemático ocasional.

Para crear una nueva herramienta, abra la pestaña Espacio de trabajo, vaya a Herramientas y haga clic en el botón + para crear una nueva.

Para crear una nueva herramienta, abra la pestaña Espacio de trabajo, vaya a Herramientas y haga clic en el botón + para crear una nueva. Haga clic para ampliar

Para comenzar, vaya a la pestaña «Espacio de trabajo» en la barra lateral Abrir WebUI, abra la sección «Herramientas» y cree una nueva herramienta.

El script predeterminado proporciona funciones para una calculadora, recopilación de información del usuario, hora y fecha y API meteorológica.

El script predeterminado proporciona funciones para una calculadora, recopilación de información del usuario, hora y fecha y API meteorológica. Haga clic para ampliar

De forma predeterminada, Open WebUI completará el campo con un script de ejemplo que agrega varias herramientas útiles:

  • Una función para recuperar su nombre y correo electrónico desde la WebUI abierta
  • Un reloj y un calendario
  • una calculadora
  • Una aplicación meteorológica

Puede dejar este script sin cambios, pero lo agregaremos para que sea más fácil ver cuándo funciona. self.citation = True bajo def __init__(self): De este modo:

class Tools:
    def __init__(self):
        self.citation = True
        pass

Finalmente, asigne un nombre como «BasicTools» y una breve descripción y haga clic en Guardar.

Recuerde habilitar su herramienta para que esté disponible para su modelo.

Recuerde habilitar su herramienta para que esté disponible para su modelo; haga clic para ampliar

Para usar nuestras herramientas, seleccione su modelo e inicie un nuevo chat, luego presione el ícono «+» a la izquierda del cuadro de mensaje para iniciar BasicTools. Esto sugerirá un patrón para usar estas herramientas cuando sea apropiado durante la conversación.

Si le da una calculadora a un LLM, no comenzará mágicamente a producir una respuesta.

Si le da una calculadora a un LLM, no comenzará mágicamente a producir una respuesta. Haga clic para ampliar

Ahora, si alimentamos al modelo con nuestro problema matemático, no solo responde con la respuesta correcta, sino que también muestra la herramienta que utilizó para llegar a ese número.

Dependiendo del contexto de su conversación, se pueden invocar varias herramientas para atender su solicitud.

romperlo

Entonces, ¿qué está pasando aquí? Al menos en Open WebUI, las herramientas se definen como scripts de Python. Cuando se diseña adecuadamente, se puede recurrir al modelo para resolver problemas específicos.

Para que sea más fácil de entender, tomemos este ejemplo de la demostración de Open WebUI que vimos en el último paso. Utiliza Python datetime Bibliotecas para dar sensación de tiempo al modelo.

import os
from datetime import datetime

class Tools:
    def __init__(self):
        self.citation = True # Add this if you want OpenWebUI to report when using a tool.
        pass

    def get_current_time(self) -> str:
        """
        Get the current time in a more human-readable format.
        :return: The current time.
        """

        now = datetime.now()
        current_time = now.strftime("%I:%M:%S %p")  # Using 12-hour format with AM/PM
        current_date = now.strftime(
            "%A, %B %d, %Y"
        )  # Full weekday, month name, day, and year

        return f"Current Date and Time = {current_date}, {current_time}"

Además get_current_time La función que realmente hace el trabajo de recuperar la fecha y la hora necesita conocer dos componentes.

READ  Los pasajeros de Ryanair culpan a la demora masiva del 'vuelo del infierno' al aeropuerto de Dublín

La primera Tools La clase le dice al modelo qué funciones tiene.

class Tools:
    def __init__(self):
        self.citation = True # Add this if you want OpenWebUI to report when using a tool.
        pass

Aquí el segundo elemento es en realidad la cadena de texto directamente debajo de la función principal. No solo indica qué hace la función, sino que también brinda instrucciones LLM sobre lo que debe hacer el código.

"""
Get the current time in a more human-readable format.
:return: The current time.
"""

Si tiene dificultades porque su modelo es demasiado conservador en el uso de herramientas, nos ha resultado útil ampliar sus cadenas de documentación con instrucciones sobre cómo, cuándo y de qué forma el modelo debe utilizar la herramienta.

Conecte su LL.M. a cualquier cosa

Además de funciones básicas como relojes, calendarios y calculadoras, estas herramientas pueden conectarse a cualquier cosa con una API abierta.

Más allá de recuperar datos de fuentes remotas, las llamadas API se pueden utilizar para automatizar todo tipo de cosas, incluidos hipervisores como Proxmox.

En este ejemplo, creamos una herramienta que permite a LLM conectarse a la API de nuestro clúster Proxmox utilizando el módulo Proxmoxer Python y recopilar información sobre el uso de recursos.

"""
title: Proxmox-Status-Report
version: 1.0
description: API call to get status report from proxmox.
requirements: proxmoxer
"""

from proxmoxer import ProxmoxAPI

class Tools:
    def __init__(self):
        pass

    def proxmox_resource_report(self, node: str = None) -> str:
        """
        Checks the resource utilization level of Proxmox nodes in a cluster based on a given node name.
        Examples of how this information might be requested:
        - "How are my nodes doing"
        - "Give me a status report of my homelab"
        - "Check the resource utilization on Jupiter"

        :param node: The name of a Proxmox node. Node names will be undercased. If node name is not known, provided utilization data for all nodes in cluster.
        :return: A string containing the resource utilization.
        """
        try:
            # Connect to the Proxmox API using the API token
            proxmox = ProxmoxAPI(
                "proxmox_host",
                user="username@realm",
                token_name="token_name",
                token_value="your_token_here",
                verify_ssl=False, #Comment out if using SSL
            )

            # Get the cluster resources
            cluster_resources = proxmox.cluster.resources.get()
            result = []

            for resource in cluster_resources:
                if resource["type"] == "node" and (
                    node is None or resource["node"] == node
                ):
                    node_name = resource["node"]

                    # Extract the relevant system information
                    cpu_cores = resource["maxcpu"]
                    memory_gb = round(resource["maxmem"] / 1024**3, 2)
                    disk_gb = round(resource["disk"] / 1024**3, 2)
                    disk_size = round(resource["maxdisk"] / 1024**3, 2)

                    # Get the node's resource utilization
                    node_status = proxmox.nodes(node_name).status.get()
                    cpu_usage = round(node_status["cpu"] * 100, 2)
                    memory_usage = round(
                        node_status["memory"]["used"]
                        / node_status["memory"]["total"]
                        * 100,
                        2,
                    )

                    disk_usage = round(resource["disk"] / resource["maxdisk"] * 100, 2)

                    # Collect the information in a formatted string
                    result.append(
                        f"Node: {node_name} | CPU Cores: {cpu_cores} | CPU Usage: {cpu_usage}% | "
                        f"Memory: {memory_gb} GB | Memory Usage: {memory_usage}% | "
                        f"Disk: {disk_gb} GB of {disk_size} GB | Disk Usage: {disk_usage}%"
                    )

            if not result:
                return f"No data found for node '{node}'." if node else "No data found."

            return "\n".join(result)

        except Exception as e:
            return f"An unexpected error occurred: {str(e)}"

# Example usage
if __name__ == "__main__":
    tools = Tools()
    result = tools.proxmox_resource_report("saturn")
    print(result)

Una vez guardado en Open-WebUI, podemos ejecutarlo en el chat y solicitar un informe de estado en nuestro clúster Proxmox. En este caso, todo estará sano.

Observe en este ejemplo la cadena de texto en la parte superior del script. Entre otras cosas, Open WebUI lo utiliza para obtener los paquetes de Python relevantes antes de ejecutarlos.

Mientras tanto, mirando un poco hacia abajo, vemos esa cadena de documentos. proxmox_resource_report El modelo le dice a la función qué parámetros observar cuando ejecuta su mensaje.

Puede ir más allá y definir funciones para iniciar, clonar y administrar máquinas virtuales y contenedores LXC con las protecciones adecuadas, pero esto debería darle una idea de cuán extensibles pueden ser estas funciones.

Si está buscando inspiración, es posible que desee consultar Open WebUIs pagina social. Recuerde no pegar código a ciegas en su panel de control.

Recursos adicionales

La implementación de llamadas a herramientas de Open WebUI es una de las más fáciles de implementar, pero es una de muchas.

Dependiendo de su caso de uso, uno de estos puede adaptarse mejor a sus necesidades. También esperamos que la cantidad de modelos capacitados para aprovechar estas herramientas crezca en los próximos meses.

Registro Nuestro objetivo es ofrecerle más contenido local de IA como este en el futuro, así que comparta sus preguntas candentes en la sección de comentarios y díganos qué le gustaría ver a continuación. ®


Nota del editor: El registro se ha otorgado para respaldar historias como los gráficos RTX 6000 de próxima generación de Nvidia y la GPU Arc A770 de Intel. Ninguna organización tiene ninguna aportación sobre el contenido de este artículo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio