Skip to content

@Agent

Registra uma classe como agente e carrega o prompt do markdown.

ts
import { Agent } from "@thenajs/core";

@Agent({
  provider: LocalOllamaProvider,
  tools: [ReadFileTool],
  prompt: "./explorer.agent.md",
  sampling: { temperature: 0 },
})
export class ExplorerAgent {}

AgentConfig

ChaveTipoObrigatóriaDefault
providerProviders | ProviderCtor | () => Providerssim
promptstring | URLsim
tools(ToolType | ToolClass)[]não[]
samplingSamplingParamsnãoo do provider

provider

Três formas, resolvidas de modo diferente:

FormaQuando é construídocontext()?
instânciauma vez, por você
classenew ProviderCtor(), sem argumentosnão
factoryuma vez por execução, dentro do escopo delasim
ts
provider: () => new OpenAIProvider({ apiKey: chaveDe(context().data) });

prompt

  • caminho relativo — resolvido a partir do arquivo do agente, lendo um stack trace
  • caminho absoluto
  • URLnew URL("./x.agent.md", import.meta.url), sem stack trace

Lido em tempo de execução, então em build compilado o .md precisa chegar ao dist/.

sampling

Sobrescreve o sampling do provider chave a chave — as chaves não informadas mantêm o valor do provider. Veja Providers.

AgentMetadata

O que o decorator registra, legível com getAgentMetadata(ClasseDoAgente):

ts
interface AgentMetadata {
  provider: ProviderInput;
  tools: ToolInput[];
  prompt: string; // já carregado do .md
  sampling?: SamplingParams;
}

Membros da classe

Todos opcionais. O runtime chama o que existir.

MembroPara que serve
constructor(@state() …, @memory() …)injeção
beforePrompt, beforeTool, afterTool, afterResponse, onErrorhooks
run(input, ctx)assume o passo inteiro — nenhum hook dispara

run(input, ctx)

ts
export class AgenteCustomizado {
  async run(input: string, ctx: Context): Promise<string> {
    return `tratei ${input}`;
  }
}

O escape hatch total. O framework chama isso em vez de rodar um turno: sem chamada ao modelo, sem laço de tool, sem hooks.

Erros

[@Agent] Prompt markdown não encontrado: /caminho/…

O caminho relativo é resolvido a partir do arquivo do agente. Mover o .ts sem o .md quebra.

Relacionado