Saltar al contenido
astorlm
Idioma: Español
← Mapa

Nivel 0

Tu caja de herramientas

Antes de cualquier agente, cuatro piezas. Un modelo que solo lee y escribe texto, un system prompt que le dice quién ser, una lista de mensajes que tu código reenvía cada vez, y herramientas que puede pedir. Todo lo que viene después en este mapa se construye con ellas.
1/16 Mensajes:
Antes de cualquier agente, conoce las piezas con las que se construye. Esta es la pantalla de estado, antes de que empiece la aventura.

EventBus

Las cuatro piezas

  • El modelo model

    El personaje

    Lee texto, escribe texto. Sabe mucho por su entrenamiento, pero nada de tu app, de tu usuario ni del día de hoy.

  • El system prompt system

    Equipo

    Instrucciones que van al principio de cada pedido: quién es, sus reglas, su tono y los datos que no puede saber por sí mismo.

  • Los mensajes messages[]

    Bolsa

    La conversación hasta ahora. Tu código guarda esta lista y la envía completa en cada llamada.

  • Las herramientas tools

    Habilidades

    Tarjetas que describen funciones que el modelo puede pedir. Solo puede pedirlas: quien las ejecuta es tu código.

El modelo no recuerda nada

Esto es lo que sorprende a la gente. Un modelo no tiene memoria entre llamadas. Cada pedido empieza de cero, y lo único que sabe es lo que viene dentro de ese pedido: el system prompt, los mensajes y la lista de herramientas.

En la animación, la segunda pregunta llega sola y el Oráculo pregunta "¿qué ciudad?", aunque se lo dijeron hace un momento. Solo "recuerda" cuando tu código vuelve a enviar los mensajes anteriores. Las apps de chat parecen recordar porque reenvían la conversación completa cada vez.

De ahí salen dos cosas. El historial es tuyo: lo guardas, lo recortas y lo almacenas tú. Y cada mensaje que conservas se vuelve a enviar en cada llamada, así que una conversación larga cuesta más cada vez.

Texto, o un pedido

Con herramientas en su lista, una respuesta puede ser una de dos cosas: texto para el usuario, o un pedido para llamar a una herramienta con ciertos datos de entrada. El modelo nunca ejecuta nada. Escribe get_forecast(city, date) y se detiene; ejecutarlo es trabajo de tu código.

Fíjate en la fecha: el modelo convirtió "mañana" en 2026-09-26 porque el system prompt le dijo qué día es hoy. Los datos que no puede saber por sí mismo van ahí.

El código

Con astorlm: Un agente de astorlm tiene las mismas cuatro piezas. Guarda el historial por ti entre llamadas a run(), y cuando el modelo pide una herramienta, la ejecuta y le devuelve el resultado. Ese bucle es el nivel 2.

Desde cero: Las cuatro piezas y un único pedido, todavía sin bucle. Completa el bloque LLM con tu propio endpoint, modelo y clave.

import { OpenAIProvider, createLocalAgent, tool } from 'astorlm'
import { z } from 'zod'

// A tool: the card the model reads (name, description, schema) plus your code behind it.
const getForecast = tool({
  name: 'get_forecast',
  description: 'Daily forecast for one city: rain chance and min/max temp. date is YYYY-MM-DD.',
  schema: z.object({ city: z.string(), date: z.string() }),
  execute: async ({ city, date }) => forecastLine(city, date), // your code; the model never sees it
})

const agent = await createLocalAgent({
  // Any OpenAI-compatible endpoint: OpenAI, Ollama, LM Studio, vLLM, a proxy…
  provider: new OpenAIProvider({
    baseURL: 'http://localhost:11434/v1', // e.g. Ollama's default address
    model: 'your-model', // e.g. 'llama3.1', 'gpt-4o-mini'
    apiKey: 'YOUR_API_KEY', // local servers usually ignore it
  }),
  systemPrompt: 'You are Nimbus, a weather assistant. Today is 2026-09-25. Answer in one short line.',
  contextFiles: [], // by default astorlm also appends AGENTS.md and CLAUDE.md from the working folder
  tools: [getForecast],
})

// The agent keeps the history for you, so the second run knows about the first.
await agent.run('I’m in Buenos Aires.')
await agent.run('Will it rain tomorrow?') // asks for get_forecast(Buenos Aires, 2026-09-26), runs it, answers
console.log(agent.getMessages().length) // every message so far, resent on every call

Qué vigilar

  • Mantén el system prompt corto y específico. Viaja en cada llamada. Rol, reglas, tono y los datos que el modelo necesita; no un manual.
  • Decide qué conserva el historial. Reenviarlo todo para siempre se vuelve lento y caro, y al final no entra. Recortarlo y resumirlo es un patrón en sí mismo.
  • Un modelo sin herramientas igual responde. Pregúntale por datos en vivo y va a adivinar, con total fluidez. Si la respuesta depende de algo que no puede ver, dale una herramienta.