LangChain / LangGraph Adapter¶
O adaptador @elroi/langchain-adapter converte qualquer squad AIOS em uma StructuredTool LangChain, compatível com LangGraph, CrewAI e qualquer agente que suporte o protocolo de ferramentas.
Instalação¶
# No seu projeto
npm install @langchain/core @langchain/anthropic zod
# Importar direto do monorepo
import { ElroiSquadTool, ElroiAgentRunnable, loadSquadFromYaml }
from "../../elroi-core/adapters/langchain/src/index.js";
Uso básico¶
import { ElroiSquadTool } from "@elroi/langchain-adapter";
import { loadSquadFromYaml } from "@elroi/langchain-adapter";
// Carregar squad do sistema de arquivos
const { config, agents } = loadSquadFromYaml("./squads/_tier-2-revenue/copywriting");
// Criar tool LangChain
const tool = new ElroiSquadTool(config, agents);
// Usar diretamente
const result = await tool._call({
input: "Crie 5 headlines para um SaaS de produtividade"
});
import { ElroiAgentRunnable } from "@elroi/langchain-adapter";
import { ChatAnthropic } from "@langchain/anthropic";
import { StringOutputParser } from "@langchain/core/output_parsers";
// Criar runnable a partir de um diretório de squad
const copywriting = ElroiAgentRunnable.fromDirectory(
"./squads/_tier-2-revenue/copywriting"
);
// Encadear com LCEL
const chain = copywriting.pipe(new StringOutputParser());
const result = await chain.invoke({
input: "Escreva um email de vendas para devs sênior"
});
import { StateGraph } from "@langchain/langgraph";
import { ElroiSquadTool, loadSquadFromYaml } from "@elroi/langchain-adapter";
// Carregar múltiplas squads como ferramentas
const squads = ["copywriting", "branding", "design"].map(name => {
const { config, agents } = loadSquadFromYaml(
`./squads/_tier-2-revenue/${name}`
);
return new ElroiSquadTool(config, agents);
});
// Criar grafo de execução
const graph = new StateGraph({...});
// squads disponíveis como tools para o agente orquestrador
Circuit Breaker¶
O adaptador implementa circuit breaker com 3 tentativas antes de abortar:
stateDiagram-v2
[*] --> Closed
Closed --> Closed : Sucesso
Closed --> HalfOpen : Falha (tentativa 1 ou 2)
HalfOpen --> Closed : Sucesso
HalfOpen --> Open : Falha (tentativa 3)
Open --> [*] : Throw Error // Configuração no squad.yaml
quality_gate:
min_axioma_score: 70 # score mínimo para aceitar o output
Se o output tiver score < 70, o circuit breaker tenta novamente (até 3x).
Quality Gate Numérico¶
Todo output passa por validação antes de ser retornado:
| Score | Ação |
|---|---|
| ≥ 70 | Aceitar e retornar |
| < 70 | Retry (até 3x) |
| Falha após 3x | Circuit breaker → throw Error |
Envelope Tipado (INTER-AGENT-CONTRACT)¶
Toda execução usa o envelope padrão AIOS:
interface ExecutionEnvelope {
schema_version: "1.0.0";
request_id: string; // UUID único por execução
timestamp: string; // ISO 8601
sender: {
agent_id: string; // quem enviou
tenant_id: string; // isolamento por tenant
};
contract: {
squad_id: string;
agent_id: string;
input: string;
model: string; // LLM selecionado pelo routing
options?: Record<string, unknown>;
};
result?: {
output: string;
quality_score: number; // 0-100
tokens_used: number;
latency_ms: number;
model_used: string;
};
circuit_breaker?: {
attempt: number; // 1, 2 ou 3
last_error?: string;
status: "open" | "closed" | "half-open";
};
}
Variáveis de ambiente¶
| Variável | Padrão | Descrição |
|---|---|---|
ELROI_GATEWAY_URL | http://localhost:3000 | URL do API Gateway |
ELROI_API_KEY | — | JWT para autenticação no gateway |
Se ELROI_API_KEY não estiver definido, o adapter retorna uma resposta simulada (modo desenvolvimento).
Compatibilidade de plataformas¶
| Plataforma | Compatibilidade | Como |
|---|---|---|
| LangChain.js | Nativa | ElroiSquadTool extends StructuredTool |
| LangGraph | Nativa | ElroiAgentRunnable extends Runnable |
| CrewAI | Via schema JSON | Exportar definição do tool |
| AutoGen | Via API Gateway | Chamar /v1/squads/{squad}/run |
| n8n | Via webhook | Rota HTTP do API Gateway |
| Flowise | Via API HTTP | Rota HTTP do API Gateway |