Artículo Jose-Tomas Salvador · 1 h atrás 5m read

Introducción a AI Hub, Parte 1: Agentes en ObjectScript

Para quienes no estuvieron en READY la semana pasada, puede que os hayáis perdido el emocionante anuncio de que el Programa de Acceso Anticipado (EAP de Early Access Program en inglés) de AI Hub ya está oficialmente abierto. Se anunció durante una increíble demostración de @Benjamin De Boe y @Jeff Fried, os recomiendo ver esta demo cuando se publique la grabación.

He tenido la oportunidad de probar AI Hub con antelación y he pensado que podría compartir una introducción con la comunidad.

Antes de entrar en los detalles, aquí tenéis un enlace a la documentación y aquí un enlace al portal del EAP para descargar AI Hub. Actualmente está disponible como kits de instalación independientes o como imágenes de contenedor.

Ten en cuenta que esto es una versión preliminar y es probable que haya cambios significativos antes del lanzamiento oficial. No está diseñado para uso en producción y es posible que os encontréis con algunos problemas; si ocurre, cread un issue en la página de GitHub.

Agentes

La característica más emocionante, al menos para mí, ha sido el nuevo SDK de agentes en ObjectScript. Ahora podéis crear agentes y herramientas directamente en ObjectScript, utilizando un SDK intuitivo.

Crear un agente es sencillo: podéis darle un prompt del sistema con el componente XData INSTRUCTIONS, y luego simplemente configurar el proveedor, el modelo y las herramientas:

Class Sample.Agent Extends %AI.Agent
{
    /// LLM Model
    Parameter MODEL = "gpt-5-nano";

    /// Toolsets that the agent can use
    Parameter TOOLSETS = "Sample.ToolSet";
    
    /// System Prompt
    XData INSTRUCTIONS [ MimeType = text/markdown ]
    {
    # Sample Assistant

    You are a helpful assistant with access to a set of tools to interact with a database of people.
    }

    Method %OnInit() As %Status
    {
        // Set provider with API key from environment variable
        Set key = $System.Util.GetEnviron("OPENAI_API_KEY")  // or whatever
        Set ..Provider = ##class(%AI.Provider).Create("openai", {"api_key": (key)})
        
        Return $$$OK
    }
}

Herramientas

Las herramientas son aún más fáciles de crear: es tan sencillo como extender %AI.Tools; a partir de ahí, todos los métodos, métodos de clase y consultas pasan a convertirse en herramientas que los agentes pueden usar. Así que podemos hacer algo como lo siguiente:

Class Sample.Tools Extends %AI.Tool [dependsOn=Sample.Person]
{

/// Tool to add a person to the database
Method AddPerson(name As %String, age As %Integer) As %Status{
   Set person = ##class(Sample.Person).%New()
   Set person.Name = name
   Set person.Age = age
   Set sc =  person.%Save()
   Quit sc
}

/// Tool query database for people younger than a specified age
Query GetPeopleYoungerThan(age As %Integer) As %SQLQuery(ROWSPEC = "Name:%String,Age:%Integer") [ SqlProc ]
{
   SELECT Name, Age From Sample.Person Where Age < :age
}

}

Las herramientas también pueden organizarse en conjuntos de herramientas (toolsets). Estos son, como su nombre indica, conjuntos de herramientas que permiten combinar múltiples herramientas de diferentes clases, filtrar herramientas mediante coincidencia por expresiones regulares, añadir políticas y utilizar servidores MCP definidos fuera de IRIS.

En el siguiente ejemplo combinamos las herramientas que definimos anteriormente, Sample.Tools, con una política que registra las llamadas a herramientas en el terminal (%AI.Policy.ConsoleAudit) y un servidor MCP de Python personalizado.

Class Sample.ToolSet Extends %AI.ToolSet [DependsOn=Sample.Tools]
{
    XData Definition
    {
        <ToolSet>
            <Description>Sample Toolset</Description>
            
            <Policies>
           <!--Policy to Log tool calls to Console-->
                <Audit Class="%AI.Policy.ConsoleAudit"/>
            </Policies>
            
            <!--ObjectScript Tools-->
            <Include Class="Sample.Tools"></Include>
            
            <!--Python MCP Server created with FastMCP-->
            <MCP Name="PythonServer"> 
                <Stdio Executable="/usr/irissys/bin/irispython" 
                Args="/home/irisowner/dev/src/Python/multiplication_mcp.py" />
            </MCP>
            
        </ToolSet>
    }    
}

Otras funcionalidades de ObjectScript

Hay muchas más funcionalidades interesantes para crear agentes muy potentes, incluyendo soporte para habilidades de agentes (%AI.Agent.Skill), delegación de tareas a subagentes (%AI.Agent.SubAgent) y herramientas para crear bases de conocimiento con RAG (%AI.RAG). También podéis crear políticas personalizadas de auditoría o autenticación, para registrar las llamadas a herramientas o decidir si deben estar permitidas.

Una característica muy interesante es que las herramientas y los conjuntos de herramientas pueden ser stateful, lo que significa que conservan el estado entre llamadas a herramientas. De este modo, una herramienta puede invocarse varias veces, manteniendo las acciones de la llamada anterior.

Por ejemplo, un archivo podría abrirse una vez y su contenido “recordarse” la siguiente vez que se llame a la herramienta. Para utilizar esto, definid las herramientas con métodos (en lugar de métodos de clase) y guardad los atributos como propiedades. En la documentación hay un buen ejemplo de esto.

Llevo trabajando con AI Hub desde hace más de un mes y todavía me abruma la cantidad de funcionalidades, especialmente en el nivel más avanzado, que aún me queda por explorar.

Plantilla

Si queréis empezar a experimentar con AI Hub, he publicado una plantilla de desarrollo en Open Exchange que incluye instrucciones para descargar y construir el contenedor de AI Hub, y que además incorpora algunas clases de ejemplo ya cargadas (quizá las reconozcáis de este artículo). Incluso incluye algunas habilidades de agente, por si queréis que vuestro agente de IA preferido conozca el contenido de la documentación antes que vosotros.

Incluso crea un servidor MCP y contiene instrucciones sobre cómo conectarse a él.

La próxima vez

En mi próximo artículo, os mostraré cómo podéis empaquetar vuestras herramientas de agente en un servidor MCP para conectaros directamente a vuestros datos desde cualquier cliente MCP.