JamJet
JamJet CloudGovernance

Agentes

Named identities that produce spans. Multi-agent attribution. ALS-scoped lifecycle.

Agentes

Un agente es una identidad con nombre en JamJet Cloud. Cada span emitido por una llamada LLM envuelta lleva una etiqueta de agente para que el panel de control pueda atribuir costos, latencia y decisiones de políticas por agente. Con múltiples agentes en un mismo proceso obtienes un grafo de red que muestra qué agentes llamaron qué herramientas y cómo se relacionan.

Qué es un AgentRef

agent() devuelve un objeto AgentRef congelado — un registro ligero e inmutable con tres campos:

CampoTipoRequerido
namestring
cardUristringno — URL de tarjeta de agente A2A
descriptionstringno — se muestra en el panel de control

El objeto está congelado: no puedes modificarlo después de su creación. Pásalo libremente.

import { agent } from '@jamjet/cloud'

const researcher = agent('researcher', {
  description: 'reads web content and summarises findings',
  cardUri: 'https://api.example.com/.well-known/agent.json',
})

// researcher.name        === 'researcher'
// researcher.description === 'reads web content and summarises...'
// researcher.cardUri     === 'https://...'
import jamjet.cloud as jamjet

researcher = jamjet.agent('researcher',
  description='reads web content and summarises findings',
  card_uri='https://api.example.com/.well-known/agent.json',
)

# researcher.name        == 'researcher'
# researcher.description == 'reads web content and summarises...'
# researcher.card_uri    == 'https://...'

Definir alcance de spans con withAgent

Envuelve cualquier trabajo asíncrono en withAgent(ref, fn) y cada span producido dentro de ese alcance es etiquetado con el agente. El alcance se implementa con AsyncLocalStorage (ALS) de Node.js, por lo que se propaga automáticamente a través de puntos await — no necesitas pasar el ref a cada llamada.

import OpenAI from 'openai'
import { init, agent, withAgent, wrap } from '@jamjet/cloud'

init({ apiKey: process.env.JAMJET_API_KEY!, project: 'my-app' })

const openai = wrap(new OpenAI())
const researcher = agent('researcher', { description: 'reads + summarises' })

await withAgent(researcher, async () => {
  // este span está etiquetado agent=researcher
  const summary = await openai.chat.completions.create({
    model: 'gpt-4o',
    messages: [{ role: 'user', content: 'Summarise the JamJet docs.' }],
  })
  return summary
})
from openai import OpenAI
import jamjet.cloud as jamjet
import os

jamjet.configure(api_key=os.environ['JAMJET_API_KEY'], project='my-app')

client = jamjet.wrap(OpenAI())
researcher = jamjet.agent('researcher', description='reads + summarises')

async with jamjet.with_agent(researcher):
    # este span está etiquetado agent=researcher
    response = client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': 'Summarise the JamJet docs.'}],
    )

Las llamadas a withAgent se pueden anidar. El alcance más interno prevalece para cualquier span emitido dentro de él.

On this page