3 puntos por GN⁺ 2025-05-28 | 1 comentarios | Compartir por WhatsApp
  • LLM 0.26 agrega varias capacidades de ejecución de herramientas, lo que permite que distintos modelos LLM como OpenAI, Anthropic, Gemini y Ollama aprovechen herramientas implementadas como funciones de Python o plugins
  • Las herramientas pueden instalarse directamente o pasarse como funciones desde la línea de comandos o la API de Python, mejorando mucho la extensibilidad y la flexibilidad
  • Mediante plugins de herramientas, es fácil añadir al modelo funciones como cálculos matemáticos, ejecución de JavaScript, consultas SQL e integración con servicios externos
  • El patrón de llamadas a herramientas se está volviendo común entre todos los principales proveedores de LLM y modelos locales, y LLM 0.26 también lo integra de forma estandarizada
  • Entre los planes a futuro y la dirección de desarrollo se mencionan soporte para el estándar MCP, expansión del ecosistema de desarrollo de plugins y mejoras en los registros de ejecución de herramientas

LLM 0.26: soporte para ejecutar herramientas con modelos de lenguaje grandes desde la terminal

Al 27 de mayo de 2025, se lanzó la versión LLM 0.26. Este lanzamiento representa el cambio más grande desde el inicio del proyecto LLM, ya que añade soporte para herramientas (tool). Ahora, distintos modelos LLM como OpenAI, Anthropic, Gemini y Ollama pueden integrarse con la herramienta CLI y la biblioteca de Python de LLM para acceder a cualquier herramienta que pueda expresarse como una función de Python.

Funciones y cambios principales

  • Instalación y carga de herramientas desde plugins: con la opción --tool/-T se pueden registrar y usar herramientas mediante plugins instalados
  • Paso de código Python desde la línea de comandos: con la opción --functions se puede enviar directamente código de funciones Python para usar herramientas
  • Soporte de herramientas también en la API de Python: se pueden conectar fácilmente pasando tools=[nombre_función] al método .chain
  • Soporte para contextos síncronos y asíncronos: las llamadas a herramientas funcionan tanto en escenarios sync como async

Ejemplos de uso de herramientas

Preparación para usarlas

  1. Es necesario instalar o actualizar LLM a la versión más reciente

  2. Registrar una API key como la de OpenAI:

    llm keys set openai
    # ingresar la API key
    
  3. Primer ejemplo de ejecución de una herramienta:

    llm --tool llm_version "What version?" --td
    
    • llm_version es una herramienta de demostración simple incluida por defecto
    • --td es la opción de salida de depuración de herramientas, que permite ver el proceso de llamada y el contenido de la respuesta
  4. Cambiar de modelo:

    llm models default gpt-4.1-mini
    
    • También se pueden usar distintos modelos mediante opciones (-m o4-mini, etc.)
  5. Llamar a la herramienta integrada de hora:

    llm --tool llm_time "What time is it?" --td -m o4-mini
    
    • Muestra en detalle la hora y la información de zona horaria

Soporte para varios modelos y plugins

  • Funciona con la misma interfaz de herramientas en distintos entornos de modelos LLM, como Anthropic Claude 4, Google Gemini 2.5 Flash y Ollama Qwen3:4b
  • Ejemplo de comandos:
    llm install llm-anthropic -U
    llm keys set anthropic
    llm --tool llm_version "What version?" --td -m claude-4-sonnet
    

Operaciones matemáticas y ejecución de código

  • Es posible superar las limitaciones de los LLM para matemáticas usando herramientas en Python
  • El plugin llm-tools-simpleeval permite operaciones aritméticas seguras
    llm install llm-tools-simpleeval
    llm -T simpleeval
    llm -T simple_eval 'Calculate 1234 * 4346 / 32414 and square root it' --td
    
    • Si no hay soporte para sqrt(), puede sustituirse por ** 0.5, lo que aporta flexibilidad en la ejecución de código

Introducción a plugins de herramientas

  • [llm-tools-simpleeval]: cálculos aritméticos y expresiones simples
  • [llm-tools-quickjs]: herramienta de intérprete sandbox de JavaScript con QuickJS
  • [llm-tools-sqlite]: consultas SQL de solo lectura a una base de datos SQLite local
  • [llm-tools-datasette]: soporte para ejecutar consultas SQL en una instancia remota de Datasette

Ejemplo:

llm install llm-tools-datasette
llm -T 'Datasette("https://datasette.io/content";)' --td "What has the most stars?"
  • Es un plugin tipo toolbox, por lo que puede configurarse con argumentos como una URL
  • Si se especifica una columna incorrecta, el modelo puede detectar el error de la herramienta y reintentar → consultar el esquema → generar la consulta correcta, demostrando la capacidad adaptativa del LLM

Definir herramientas directamente con código Python

  • Desde la línea de comandos, la opción --functions permite pasar funciones Python arbitrarias y convertirlas en herramientas al instante
  • Ejemplo:
    llm --functions '
    import httpx
    
    def search_blog(q):
        "Search Simon Willison blog"
        return httpx.get("https://simonwillison.net/search/";, params={"q": q}).content
    ' --td 'Three features of sqlite-utils' -s 'use Simon search'
    
    • Permite implementar fácilmente una herramienta simple de búsqueda web
    • Es importante usar el system prompt para guiar al modelo sobre cómo aprovechar la herramienta

Integración con la biblioteca de Python

  • LLM soporta tanto CLI como API de Python
  • El método .chain() automatiza toda la secuencia: detectar la solicitud de llamada a una herramienta → ejecutarla → reflejar el resultado
  • Ejemplo:
    import llm
    
    def count_char_in_text(char: str, text: str) -> int:
        "How many times does char appear in text?"
        return text.count(char)
    
    model = llm.get_model("gpt-4.1-mini")
    chain_response = model.chain(
        "Rs in strawberry?",
        tools=[count_char_in_text],
        after_call=print
    )
    for chunk in chain_response:
        print(chunk, end="", flush=True)
    
  • También se soportan funciones asíncronas (async def), lo que permite ejecución concurrente
  • Los plugins tipo toolbox también pueden conectarse directamente como tools=[Datasette(...)]

Evolución del paradigma de herramientas

  • El patrón de llamadas a herramientas fue presentado en trabajos como el paper ReAcT de 2022, y desde entonces ha sido adoptado por todos los principales proveedores de LLM y modelos locales
  • Aunque cada API usa nombres distintos como "Function calling" o "uso de herramientas", se ha ido consolidando una forma unificada
  • Ollama, llama.cpp y otros ya añadieron soporte para herramientas y siguen ampliando esa funcionalidad

Historia de desarrollo y operación

  • Durante mucho tiempo, LLM reconoció la necesidad de soportar integración con herramientas, pero era difícil diseñar una capa de abstracción entre modelos tan diversos
  • A medida que el patrón de herramientas se fue estandarizando entre proveedores, fue posible implementar esta integración unificada en LLM 0.26
  • Se mostró en un taller de PyCon US 2025 como caso práctico de uso real

Relación con los “agentes”

  • Aunque el término "agente" sigue siendo debatido, en el ecosistema actual de LLM se está estandarizando la forma de herramientas dentro del ciclo
  • LLM 0.26 también ofrece una implementación adecuada para desarrollar agentes
  • Ya están avanzando activamente plantillas para crear plugins, issues de mejora y documentación para plugins avanzados

Próximo soporte para Model Context Protocol (MCP)

  • MCP está ganando fuerza rápidamente como un nuevo protocolo estándar para que los LLM accedan a herramientas
  • En los últimos 8 días, también se ha incorporado rápidamente a las APIs de grandes proveedores como OpenAI, Anthropic y Mistral
  • A futuro, el plan es convertir LLM en un cliente MCP para conectarlo fácilmente con distintos servidores MCP

Comunidad y expansión

  • Se opera una comunidad en Discord para discutir plugins del proyecto LLM, desarrollo de herramientas y expansión del ecosistema
  • Se enfatiza que las posibilidades de uso de LLM basadas en herramientas dentro del ecosistema open source son prácticamente ilimitadas

De esta forma, LLM 0.26 está evolucionando hacia una plataforma universal y extensible de integración de herramientas, conectada con todos los principales modelos LLM. El hecho de que las herramientas amplíen enormemente el alcance de uso de los modelos de lenguaje la convierte en una herramienta muy significativa para desarrolladores y profesionales de TI.

1 comentarios

 
GN⁺ 2025-05-28
Comentario de Hacker News
  • Tengo un renderizador de Markdown en streaming que hice yo mismo para esta herramienta.
    Pueden ver más detalles en Streamdown.
    También hay algo que puede servir de referencia aquí.
    Además hice yo mismo una herramienta para tmux llamada llmehelp, construida sobre el llm de Simon.
    Ya se volvió una herramienta indispensable que uso todos los días.

    • Esta librería se ve realmente genial.
      Me gustaría que hubiera un hook para que los plugins pudieran controlar directamente cómo se muestra el contenido.
      Publiqué un issue sobre eso aquí.
      Incluí varias opciones de diseño, pero todavía no siento que esté 100% seguro de ninguna.
      De verdad me gustaría recibir comentarios.

    • Otra cosa que olvidé mencionar:
      esta vez es un plugin de ZSH hecho sobre llm.
      Uso zle para traducir inglés a comandos de shell de una sola vez.
      Se llama Zummoner.
      Es una herramienta que me cambió completamente la vida.
      Por ejemplo, un comando que hice hoy mismo:

        $ git find out if abcdefg is a descendent of hijklmnop 
      

      Un comando que de hecho usé en uno de estos comentarios:

        $ for i in $(seq 1 6); do 
         printf "%${i}sh${i}\n\n-----\n" | tr " " "#"; 
        done | pv -bqL 30 
      

      Originalmente era:

        $ for i in $(seq 1 6); do 
         printf "(# $i times)\n\n-----\n"
        done | pv (30 bps and quietly)
      

      Envío el búfer a OpenRouter con mi confiable combinación ctrl-x x, y vuelve en menos de un segundo con la sintaxis correcta.

    • Genial.
      Yo también he hecho renderizadores de Markdown en streaming en varios lenguajes para mostrar rápido la salida en streaming de un LLM.
      Me alegra saber que no soy el único.

    • Interesante, definitivamente lo voy a probar.
      Yo uso llm junto con bat para resaltado de sintaxis.

    • Justo quería una función así.
      Gracias.

  • Herramientas de este tipo elevan muchísimo el riesgo de ser un footgun (provocarte problemas tú mismo).
    La documentación sí tiene advertencias sobre prompt injection, pero en la práctica me parece más probable que el daño venga de errores propios.
    Por ejemplo, si le das a la herramienta acceso a una cuenta de corretaje, puedes automatizar operaciones.
    Incluso sin prompt injection, no hay forma de detener al bot si hace una operación tonta.
    Documentación de referencia

    • El riesgo de este tipo de incidentes es realmente muy grande.
      Cuando conectas herramientas a un LLM, pueden ocurrir demasiadas situaciones inesperadas en las que algo actúe por mí con llamadas autenticadas.
      Esto se ha visto recientemente en casos como GitHub MCP artículo relacionado.
      En la documentación también puse una advertencia de riesgo bien visible y, de hecho, no publiqué ningún plugin inicial que pudiera causar daños reales.
      Por eso mi sandbox de QuickJS y mi plugin de SQLite son estrictamente de solo lectura.
      Aun así, este campo en sí es un espectro muy interesante y fascinante.

    • Si alguien conecta llm a una cuenta de corretaje, en ese caso el tonto no sería el bot sino la persona.

    • Cualquier herramienta puede usarse mal.

  • A quienes usen llm, les recomiendo Gtk-llm-chat.
    Está hecho sobre una enorme cantidad de trabajo.
    Ofrece integración entre la herramienta de línea de comandos llm y el escritorio, ícono en la bandeja y una ventana de chat limpia.
    Hace poco salió la versión 3.0.0 empaquetada para los tres principales sistemas operativos de escritorio.

    • Interesante.
      Tengo curiosidad por cómo lo usan para cosas aparte del chat normal.
  • Esto llega en el mejor momento posible.
    Últimamente he estado experimentando bastante en la terminal (Warp), y aunque me gusta la idea de incorporar agentes, me incomoda el enfoque tipo Cursor de “confía en nuestros prompts/llamadas al LLM (y además te cobramos)”.
    Así que justo necesitaba un agente de terminal simple, basado en CLI, para compensar lo limitado de mis habilidades con el shell.
    Tengo clarísimo que herramientas así implican un gran riesgo de footgun.
    Pero la combinación de herramienta de terminal + llm parece una mezcla ideal por lo ligera que es, así que tengo muchas expectativas.
    Me pregunto si soporta algo como otros productos “agente”, donde cuando el llm quiere hacer una llamada de herramienta como rm -rf ./*, te pide permiso cada vez con algo tipo “presiona Y para aprobar”.
    Si eso existe, podría evitar que el LLM manipule mi terminal a su antojo y servir como una especie de protección.

    • Creo que el modo predeterminado de Codex CLI funciona así.
      Si lo ejecutas sin la bandera --full-auto, te pide aprobación cada vez.
  • Mantengo con bastante dedicación un plugin de zsh/omz para autocompletado con tab de LLM, pero la velocidad a la que salen nuevas funciones hace difícil ponerse al día.
    Por suerte, el siguiente comando implementa automáticamente como el 90%:

    llm -f README.md -f llm.plugin.zsh -f completions/_llm -f https://simonwillison.net/2025/May/27/llm-tools/ "implement tab completions for the new tool plugins feature"
    

    Mi repositorio del plugin está aquí.
    La estructura es un poco compleja porque intento cubrir la mayor cantidad posible de opciones.
    Agradecería muchísimo cualquier comentario.

    • Es increíble que esto no sea ciencia ficción sino la realidad.
      Las generaciones futuras probablemente se sorprenderán de cómo construíamos cualquier cosa.
      Se siente igual a como nosotros no logramos imaginar cómo trabajaban los programadores en ensamblador.
  • GPT-4.1 es un modelo realmente potente, desde salidas estructuradas hasta llamadas de herramientas.
    En los últimos dos años, casi todas mis tareas repetitivas del día a día las ha resuelto un LLM.
    Como combinación de precio bajo y buen rendimiento, siempre lo elijo como mi modelo predeterminado.

    • Sinceramente, GPT-4.1 mini me sorprendió muchísimo.
      Después de probar de todo vía API, resulta absurdamente barato y realmente resuelve la gran mayoría de las cosas.
      Para programar uso o4-mini; para casi todo lo demás, 4.1-mini suele ser suficiente.
      Un caso divertido que usé hoy:
      llm -f https://raw.githubusercontent.com/BenjaminAster/CSS-Minecraft/… \
        -s 'explain all the tricks used by this CSS'
      
      Le pasé a GPT-4.1 mini el código de una excelente demo de CSS Minecraft sin un solo comentario, para que lo explicara.
      La demo relacionada fuente.
      La respuesta de GPT-4.1 mini fue realmente excelente.
      Señaló correctamente incluso trucos difíciles, como que “este CSS implementa una interfaz 3D interactiva de estilo vóxel con técnicas de CSS de vanguardia y un mínimo de JavaScript”.
      Explicación completa
      3,813 tokens de entrada, 1,291 tokens de salida.
      Cálculo: aproximadamente 0.3591 centavos, o sea apenas un tercio de un centavo.
  • La herramienta de Simon es impresionante.
    La uso todos los días.
    Gracias a la combinación con pipes y al cambio sencillo entre modelos (tanto locales como remotos, incluidos los de ollama), trabajar se vuelve muy fácil.

  • Está realmente genial.
    Hasta donde sé, llama.cpp también soporta herramientas, pero todavía no he encontrado cómo integrarlo en llm.
    Me pregunto si se podrá resolver agregando algo en extra-openai-models.yaml.

    • Probablemente esto requiera cambios en llm-gguf o llm-llama-server.
      ... probándolo, resulta que la segunda opción sí funciona.
      brew install llama.cpp
      llama-server --jinja -hf unsloth/gemma-3-4b-it-GGUF:Q4_K_XL
      
      Y en otra ventana:
      llm install llm-llama-server
      llm -m llama-server-tools -T llm_time 'what time is it?' --td
      
      Lo resumí aquí.
  • Muchísimas gracias por este lanzamiento.
    Creo que esta librería es un componente clave que abre por completo el potencial de los LLM más allá de los límites y restricciones de los clientes existentes.
    Desde la salida de la versión alpha 0.26 he estado intentando crear un plugin que interactúe con servidores MCP, pero me ha resultado algo complicado.
    Por ahora logré conectarlo para traer y usar herramientas dinámicamente, pero todavía no he resuelto cómo pasar parámetros.

    • Yo también estuve experimentando un poco con MCP esta mañana.
      Intenté al máximo armar una demo sencilla de plugin, pero no fue una experiencia fácil.
      La librería oficial de Python para mcp requiere cosas como ejecución con asyncio, conexión al servidor e introspección de herramientas disponibles.
  • Una función largamente esperada.
    Pensé que estaría implementada sobre mcp u openapi, pero este enfoque actual quizá sea mucho más simple y flexible.
    También parece que no sería difícil implementarlo como plugin.