O Empresarial
Orquestrador de IA
A plataforma de código aberto para implantar sistemas de IA multi-agente governados: auto-hospedada, orientada por configuração e pronta para conformidade. Agora em v6.
curl -fsSL https://raw.githubusercontent.com/labsai/EDDI/main/install.sh | bashInvoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/labsai/EDDI/main/install.ps1" -OutFile "install.ps1"
Unblock-File .\install.ps1
.\install.ps1
O Problema
A orquestração de IA empresarial está fragmentada e dolorosa. As equipes ficam presas em um ciclo de vida quebrado:
A Armadilha do Protótipo
Equipes prototipam com Flowise, n8n ou scripts, depois reescrevem tudo do zero para produção. Protótipos visuais são completamente descartados.
Fadiga de Boilerplate
Usar bibliotecas de IA significa construir controladores REST, camadas de autenticação e gerenciamento de estado do zero. Cada ajuste de prompt requer reimplantação.
Atrito com BPMN
Forçar agentes de IA não determinísticos em workflows determinísticos do Camunda/Temporal cria incompatibilidades severas e arquiteturas frágeis.
A Solução
O EDDI é uma plataforma de orquestração de IA implantável, não uma biblioteca. Gestão visual, config-as-code e segurança empresarial, prontos para uso:
Configuration-as-Code
Lógica de agentes, pipelines e definições de ferramentas são configurações JSON, não código compilado. Engenheiros de prompt iteram instantaneamente via a UI React ou API REST, sem necessidade de reimplantação.
89 Ferramentas MCP
O EDDI expõe suas capacidades via o Model Context Protocol, permitindo a interação com o Claude Desktop. Agentes também podem consumir ferramentas MCP externas.
Segurança em Primeiro Lugar
Sem eval(), sem escapes. Integração com vault, validação de URL e trilhas de auditoria criptográficas são fundações arquiteturais.
Observabilidade
Cada etapa do pipeline é registrada com uma trilha de auditoria imutável, tokens, custo, tempo, chamadas de ferramentas. Livro-razão completo de telemetria CQRS.
Concorrência Empresarial
Construído sobre um runtime empresarial com milhões de threads leves para cargas de trabalho LLM com I/O intensivo. Sem bloqueio de event loop, sem gargalos de thread única.
Orquestração Multi-Agente
Descoberta de agentes baseada em intenção, conversas gerenciadas e colaboração em grupo: os agentes deliberam em sete estilos, votam, editam em conjunto produtos de trabalho compartilhados e dão às pessoas um lugar à mesa.
Configuração e interface, lado a lado
O que um agente faz são documentos JSON que pode ler, comparar e versionar. O Manager edita esses mesmos documentos.
{
"behaviorGroups": [
{
"name": "",
"behaviorRules": [
{
"name": "Ask for City",
"actions": [
"ask_for_city"
],
"conditions": [
{
"type": "inputmatcher",
"configs": {
"expressions": "trigger(current_weather)"
},
"conditions": []
}
]
}
]
}
]
}
Uma Behavior Rule é JSON simples: quando a entrada analisada corresponde a trigger(current_weather), emite a ação ask_for_city. Os tasks e o output escutam essa ação. O Manager mostra um agente e o workflow que executa as suas regras.
{
"tasks": [
{
"actions": [
"send_message"
],
"id": "simpleChat",
"type": "openai",
"description": "Simple chat interaction",
"parameters": {
"apiKey": "${vault:openai-key}",
"modelName": "gpt-4o",
"systemMessage": "You are a helpful assistant",
"addToOutput": "true"
}
}
]
}
Um task de LLM também é JSON: o tipo de fornecedor, uma referência ao vault em vez de uma chave de API em texto simples, o modelo e a mensagem de sistema. O Manager edita o mesmo documento.
{
"behaviorGroups": [
{
"name": "",
"behaviorRules": [
{
"name": "Refund needs approval",
"actions": [
"PAUSE_CONVERSATION"
],
"conditions": [
{
"type": "inputmatcher",
"configs": {
"expressions": "trigger(refund_request)"
},
"conditions": []
}
]
}
]
}
]
}AWAITING_HUMANConversa em pausa pela regra
Refund needs approval
Cada decisão é escrita no ledger de auditoria como uma entrada hitl.approval.
Para esperar por uma pessoa, uma regra emite PAUSE_CONVERSATION. A conversa aguarda no estado AWAITING_HUMAN até o proprietário, um eddi-admin ou um eddi-approver decidir, no Manager ou no Slack. As chamadas a ferramentas e as fases de grupo podem ser controladas da mesma forma.
"O motor é rigoroso para que a IA possa ser criativa."Project Philosophy
Como flui um turno de conversa
Selecione uma etapa para ver o que ela faz, a sua configuração e o que escreve.
Input
O que acontece aqui
Uma mensagem chega do chat, do Slack, da API ou de um cliente MCP. O texto original passa a ser a primeira entrada de um novo passo na Conversation memory. Nenhum task correu ainda, por isso esta etapa mostra o passo de memória e não uma entrada de auditoria.
Valores de exemplo ilustrativos
{
"key": "input",
"value": "What is the weather?"
}Parser
O que acontece aqui
O parser normaliza o texto e procura-o nos dicionários do agente, transformando palavras e frases em expressões semânticas como trigger(current_weather). É uma consulta, não uma chamada a um modelo: o mesmo texto dá sempre as mesmas expressões.
Cada task do pipeline escreve uma entrada: assinada com HMAC, apenas de acréscimo e com verificação de sequência.
Valores de exemplo ilustrativos
{
"words": [
{
"word": "weather",
"expressions": "trigger(current_weather)",
"frequency": 0
}
],
"phrases": [
{
"phrase": "what is the weather",
"expressions": "trigger(current_weather)"
}
]
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": 0,
"taskId": "ai.labs.parser",
"taskType": "expressions",
"taskIndex": 0,
"durationMs": 3,
"input": {
"input": "What is the weather?"
},
"output": {
"expressions": [
"trigger(current_weather)"
]
},
"actions": [],
"cost": 0,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 0
}Behavior Rules
O que acontece aqui
As Behavior Rules são condições SE-ENTÃO sobre as expressões e a Conversation memory. Cada regra que corresponde emite ações. O encaminhamento é configuração e não código, por isso a mesma entrada segue sempre o mesmo caminho.
Cada task do pipeline escreve uma entrada: assinada com HMAC, apenas de acréscimo e com verificação de sequência.
Valores de exemplo ilustrativos
{
"behaviorGroups": [
{
"name": "",
"behaviorRules": [
{
"name": "Ask for City",
"actions": [
"ask_for_city"
],
"conditions": [
{
"type": "inputmatcher",
"configs": {
"expressions": "trigger(current_weather)"
},
"conditions": []
}
]
}
]
}
]
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": 0,
"taskId": "ai.labs.behavior",
"taskType": "behavior_rules",
"taskIndex": 1,
"durationMs": 1,
"input": {
"expressions": [
"trigger(current_weather)"
]
},
"output": {
"behavior_rules:success": [
"Ask for City"
]
},
"actions": [
"ask_for_city"
],
"cost": 0,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 1
}Tasks
O que acontece aqui
Os tasks escutam ações: uma chamada a um LLM, uma chamada HTTP, uma ferramenta MCP ou uma consulta a uma base de conhecimento. Cada task escreve uma entrada de auditoria assinada com o que leu, o que produziu e os detalhes do modelo e das ferramentas.
Cada task do pipeline escreve uma entrada: assinada com HMAC, apenas de acréscimo e com verificação de sequência.
Valores de exemplo ilustrativos
{
"tasks": [
{
"actions": [
"send_message"
],
"id": "simpleChat",
"type": "anthropic",
"description": "Answers weather questions",
"parameters": {
"apiKey": "${vault:anthropic-key}",
"modelName": "claude-sonnet-5-5",
"systemMessage": "You are a helpful assistant",
"addToOutput": "true"
}
}
]
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": 0,
"taskId": "ai.labs.llm",
"taskType": "langchain",
"taskIndex": 2,
"durationMs": 1840,
"input": {
"input": "What is the weather in Vienna?",
"actions": [
"send_message"
]
},
"output": {
"text": "Vienna: 14 °C, light rain."
},
"llmDetail": {
"modelName": "claude-sonnet-5-5",
"inputTokens": 412,
"outputTokens": 18
},
"toolCalls": {
"name": "get_weather",
"args": {
"city": "Vienna"
},
"result": "14 °C, light rain"
},
"actions": [
"send_message"
],
"cost": 0.0016,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 2
}Output
O que acontece aqui
Os modelos de Output transformam as ações emitidas na resposta: texto e quick replies. A resposta é guardada na memória e devolvida ao canal de onde veio a mensagem.
Valores de exemplo ilustrativos
{
"outputSet": [
{
"action": "ask_for_city",
"timesOccurred": 0,
"outputs": [
{
"valueAlternatives": [
{
"type": "text",
"text": "Which city would you like to know the weather of?"
}
]
}
],
"quickReplies": []
}
]
}{
"key": "output",
"value": [
"Which city would you like to know the weather of?"
]
}Tool boundary
O que acontece aqui
Toda a chamada a uma ferramenta, seja qual for a origem, atravessa a mesma fronteira. As chamadas que correspondem a um padrão de toolApprovals ficam em pausa até uma pessoa decidir, e a decisão é escrita no ledger como uma entrada hitl.approval. As credenciais vêm do vault como referências ${vault:keyName}.
Cada task do pipeline escreve uma entrada: assinada com HMAC, apenas de acréscimo e com verificação de sequência.
Valores de exemplo ilustrativos
{
"hitlConfig": {
"toolApprovals": {
"requireApproval": [
"mcp:*",
"delete_*",
"transfer_funds"
],
"exempt": [
"mcp:read_*"
],
"approvalTimeout": "PT30M",
"timeoutPolicy": "AUTO_REJECT",
"pauseReason": "Approval required for {toolNames}"
}
}
}{
"id": "0b5e9a0c-6f3d-4b1e-9d57-2c1f8a7e4d10",
"conversationId": "6650f1c2a7b94e0012ab34cd",
"agentId": "support-agent",
"agentVersion": 1,
"userId": "user-4711",
"environment": "production",
"stepIndex": -1,
"taskId": "hitl.approval",
"taskType": "hitl",
"taskIndex": -1,
"durationMs": 0,
"input": {},
"output": {
"verdict": "APPROVED",
"decidedBy": "slack:U04EXAMPLE",
"automated": false,
"pauseType": "TOOL_CALL",
"toolDecisions": [
{
"callId": "call_01",
"toolName": "transfer_funds",
"verdict": "APPROVED",
"amended": false,
"argsDigest": "sha256:9c1d…e407"
}
]
},
"actions": [],
"cost": 0,
"timestamp": "2026-10-14T09:12:41.208Z",
"hmac": "v4:a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468a3f1c09e5b7d2468",
"agentSignature": "MEUCIQDk3x…9fQ==",
"sequence": 3
}Conversation memory
O que acontece aqui
A Conversation memory guarda cada passo (input, expressions, actions, output) e propriedades com âmbito de passo, conversa ou utilizador (longTerm). O estado da conversa (READY, IN_PROGRESS, ENDED, AWAITING_HUMAN ou ERROR) é guardado com ela.
Valores de exemplo ilustrativos
{
"conversationState": "READY",
"conversationSteps": [
{
"data": [
{
"key": "input",
"value": "What is the weather?"
},
{
"key": "expressions",
"value": [
"trigger(current_weather)"
]
},
{
"key": "actions",
"value": [
"ask_for_city"
]
},
{
"key": "output",
"value": [
"Which city would you like to know the weather of?"
]
}
]
}
],
"conversationProperties": {
"chosenCity": "Vienna"
}
}Parceira de Confiança da UNIDO para IA Industrial
LABS.AI foi selecionada pela Organização das Nações Unidas para o Desenvolvimento Industrial (UNIDO) como Parceira de Confiança para IA Industrial para o Sul Global.
Saiba mais sobre a parceria →Confiável e Certificado
Construído com Tecnologia Comprovada
Próximos Passos
Perguntas Frequentes
O que é o EDDI?
O EDDI é uma plataforma de orquestração de IA empresarial de código aberto. Permite que equipes construam, configurem e implantem agentes de IA usando configuração JSON em vez de código compilado. O EDDI fornece uma plataforma completa com uma interface de gestão React pronta para produção (o EDDI Manager), APIs REST integradas, gerenciamento de estado de conversa, segurança (OIDC/Keycloak), trilhas de auditoria imutáveis e 89 ferramentas MCP, tudo implantável via Docker ou Kubernetes.
Como o EDDI é diferente de bibliotecas e frameworks de IA?
Bibliotecas de IA como LangChain, Spring AI e LangChain4j fornecem blocos de construção, mas você ainda precisa construir controladores REST, autenticação, gerenciamento de estado de conversa, registro de auditoria e interfaces de gestão por conta própria. O EDDI é uma plataforma middleware implantável, não uma biblioteca. Fornece tudo isso pronto para uso, implantável via Docker.
O EDDI está pronto para uso empresarial em produção?
Sim. O EDDI é construído sobre um runtime empresarial com threads virtuais leves para concorrência massiva em operações de I/O. Suporta MongoDB e PostgreSQL, inclui autenticação OIDC/Keycloak integrada e espaços de trabalho por usuário com compartilhamento de recursos, fornece trilhas de auditoria criptográficas imutáveis para conformidade (incluindo a Lei de IA da UE) e escala horizontalmente via NATS JetStream.
O que é o Model Context Protocol (MCP)?
O Model Context Protocol (MCP) é um padrão aberto que permite que assistentes de IA como Claude Desktop, plugins de IDE e clientes personalizados interajam com ferramentas externas programaticamente. O EDDI expõe 89 ferramentas MCP abrangendo gestão de conversas, administração de agentes, discussões em grupo, aprovações humanas, automação de configuração, gestão de agendamentos e diagnósticos.
O EDDI pode substituir Flowise ou n8n para cargas de trabalho de produção?
O EDDI serve um propósito similar de construção visual, mas com arquitetura de nível empresarial. Ao contrário do Flowise e n8n, o EDDI não usa eval() nem blocos de código, executa milhões de threads virtuais leves para concorrência de nível empresarial, suporta autenticação OIDC/Keycloak e armazena dados em MongoDB ou PostgreSQL. É projetado para indústrias regulamentadas.
O EDDI é relacionado ao "Eddie AI" ou outros produtos chamados "Eddy"?
Não. O EDDI (pela LABS.AI) é uma plataforma de orquestração de agentes de IA empresarial auto-hospedada, construída em Java/Quarkus. Não tem relação com ferramentas de edição de vídeo, softwares de RH, criadores de chatbots ou outros produtos com nomes semelhantes.
Como o EDDI se compara a plataformas de IA na nuvem, como AWS Bedrock ou Azure AI Studio?
Plataformas de IA na nuvem oferecem infraestrutura gerenciada, mas criam dependência de fornecedor. O EDDI roda onde quer que o Docker rode: on-premises, em qualquer nuvem ou em ambientes isolados. Suporta 19 provedores LLM e qualquer endpoint compatível com OpenAI, oferecendo portabilidade total de modelos e soberania de dados. Veja nossa comparação detalhada.
O EDDI funciona com o Open WebUI e outros clientes compatíveis com OpenAI?
Sim. O EDDI inclui uma API /v1 compatível com OpenAI que apresenta os agentes implantados como modelos, para que Open WebUI, o SDK openai, LangChain e LiteLLM possam conversar com eles diretamente. A API oferece suporte a streaming e a relatórios de uso de tokens, mantém cada chat em sua própria conversa, e os pontos de aprovação do agente continuam valendo. Ela vem desativada por padrão e tem sua própria autenticação por chave de API.
Vários usuários e equipes podem compartilhar a mesma implantação do EDDI?
Sim. Os espaços de trabalho por usuário dão a cada agente e configuração um proprietário, um espaço pessoal ou de equipe mapeado para grupos do Keycloak e compartilhamento explícito nos níveis de uso, visualização, edição ou propriedade. Você compartilha com pessoas pelo nome, a partir de um diretório de usuários que já fizeram login, elas são notificadas, e quem seguir um link para algo que não pode abrir pode pedir acesso ao proprietário. As Connections permitem que os agentes chamem sistemas externos com uma chave válida para toda a organização, uma conta de serviço ou a conta OAuth de cada usuário, de modo que um agente pode ficar restrito ao que a pessoa que o utiliza tem permissão para fazer. Os espaços de trabalho são opcionais, e os recursos existentes são migrados automaticamente, para que nada desapareça quando você os ativar.
Quais LLMs posso usar com o EDDI?
O EDDI se conecta a 19 provedores LLM: OpenAI, Anthropic, Google Gemini, Mistral, Azure OpenAI, Amazon Bedrock, Oracle GenAI, Google Vertex AI, Ollama, Hugging Face e Jlama, além de suporte de primeira classe para xAI Grok, DeepSeek, Moonshot Kimi, Alibaba Qwen, Z.ai GLM, MiniMax, OpenRouter e Groq. Qualquer outro endpoint compatível com OpenAI funciona por meio de uma URL base. O catálogo de modelos explica em que cada modelo se destaca e mostra a configuração exata para executá-lo no EDDI.