Repository navigation
SimpleORM 3.03.01 — Agents, Skills & Rules
SimpleORM 3.03.01 — Agents, Skills & Rules
O SimpleORM agora conta com um pipeline de middleware completo no DAO. Alem de toda a inteligencia artificial da versao anterior, esta versao traz Rules (regras declarativas), Skills (plugins reutilizaveis) e Agents (orquestradores reativos e proativos) — tudo opcional e retrocompativel.
🎯 Rules (Regras Declarativas) — NOVO!
Regras de negocio como atributos na entidade. Avaliadas automaticamente durante CRUD — sem configuracao no DAO.
| Atributo | O que faz |
|---|---|
[Rule('VALOR > 0', raBeforeInsert, 'msg')] |
Regra deterministica com parser de expressoes |
[AIRule('Verificar se endereco e valido', raBeforeInsert)] |
Regra inteligente avaliada pelo LLM |
[Tabela('PEDIDOS')]
[Rule('VALOR > 0', raBeforeInsert, 'Valor deve ser positivo')]
[Rule('STATUS <> ''CANCELADO''', raBeforeUpdate, 'Pedido cancelado nao pode ser alterado')]
[AIRule('Verificar se a combinacao de produtos faz sentido comercial', raBeforeInsert)]
TPedido = class
published
[Campo('VALOR')]
property VALOR: Currency;
[Campo('STATUS')]
property STATUS: String;
end;
// Rules sao avaliadas AUTOMATICAMENTE no Insert/Update/Delete
DAOPedido.Insert(Pedido); // Se VALOR <= 0, lanca ESimpleRuleViolation- 6 momentos de execucao: raBeforeInsert, raAfterInsert, raBeforeUpdate, raAfterUpdate, raBeforeDelete, raAfterDelete
- Parser de expressoes suporta:
>,<,>=,<=,=,<>com propriedades, numeros e strings - AIRule envia contexto da entidade ao LLM para validacao inteligente
⚡ Skills (Plugins Reutilizaveis) — NOVO!
Unidades de comportamento que se plugam ao DAO via fluent API. Executam antes ou depois de operacoes CRUD.
Skills Built-in
| Skill | O que faz |
|---|---|
TSkillLog |
Loga operacoes com detalhes da entidade |
TSkillNotify |
Dispara callback/evento apos operacao |
TSkillAudit |
Grava registro de auditoria em tabela do banco |
DAOPedido := TSimpleDAO<TPedido>.New(Conn)
.Skill(TSkillLog.New('app', srAfterInsert))
.Skill(TSkillAudit.New('AUDIT_LOG', srAfterInsert))
.Skill(TSkillNotify.New(
procedure(aObj: TObject)
begin
EnviarEmail('Novo pedido inserido!');
end, srAfterInsert));
DAOPedido.Insert(Pedido); // Skills executam automaticamente!Criar Skill Customizado
TSkillEnviarEmail = class(TInterfacedObject, iSimpleSkill)
function Execute(aEntity: TObject; aContext: iSimpleSkillContext): iSimpleSkill;
function Name: String;
function RunAt: TSkillRunAt;
end;🤖 Agents (Orquestradores) — NOVO!
Agentes que combinam Rules, Skills e operacoes CRUD. Dois modos de operacao:
Modo Reativo — Reage a eventos do DAO
LAgent := TSimpleAgent.New;
LAgent.When(TPedido, aoAfterInsert)
.Condition(function(aEntity: TObject): Boolean
begin
Result := TPedido(aEntity).VALOR > 5000;
end)
.Execute(TSkillEnviarEmail.New('gerente@empresa.com'))
.Execute(TSkillLog.New('alto-valor'));
DAOPedido := TSimpleDAO<TPedido>.New(Conn).Agent(LAgent);
DAOPedido.Insert(Pedido); // Agent reage se VALOR > 5000Modo Proativo — Linguagem natural via LLM
LAgent := TSimpleAgent.New(Conn, AIClient);
LAgent.RegisterEntity<TPedido>.RegisterEntity<TCliente>;
// SafeMode: planejar antes de executar
LPlan := LAgent.Plan('Listar pedidos pendentes de hoje');
Writeln(LPlan.Description); // "Consultar pedidos com status PENDENTE"
Writeln(LPlan.Risk); // LOW, MEDIUM ou HIGH
LPlan.Execute;🔄 Pipeline do DAO
Toda operacao CRUD agora passa por um pipeline completo:
1. Rules (Before) — [Rule] e [AIRule] com raBeforeInsert/Update/Delete
2. AI Attributes — [AIGenerated], [AISummarize], etc.
3. Skills (Before) — Skills com srBeforeInsert/Update/Delete
4. SQL Execution — INSERT/UPDATE/DELETE real no banco
5. Skills (After) — Skills com srAfterInsert/Update/Delete
6. Agent (React) — Reactions para aoAfterInsert/Update/Delete
Tudo opcional: sem Rules, Skills ou Agents, o DAO funciona exatamente como antes.
🤖 MCP Server (Model Context Protocol)
Servidor MCP embutido que permite AI assistants como Claude, Cursor e GitHub Copilot interagirem diretamente com o banco de dados da sua aplicacao.
- Registro declarativo de entidades com permissoes granulares (
mcpRead,mcpInsert,mcpUpdate,mcpDelete,mcpCount,mcpDDL) - Ate 8 tools gerados automaticamente por entidade (describe, query, get, insert, update, delete, count, ddl)
- Transporte Stdio para integracao local com Claude Desktop e editores
- Transporte HTTP via Horse com autenticacao Bearer Token
- Tool
raw_querypara consultas SQL livres com validacao de seguranca (SELECT-only) - Protocolo JSON-RPC 2.0 completo com initialize, tools/list, tools/call e ping
// 3 linhas para expor sua aplicacao para AI
Server := TSimpleMCPServer.Create('MinhaApp', Query);
Server.RegisterEntity<TPedido>([mcpRead, mcpInsert, mcpCount]);
RunStdioLoop(Server);🧠 AI Entity Enrichment
Enriqueca entidades automaticamente com IA usando atributos declarativos. O processamento acontece automaticamente durante Insert e Update.
5 Atributos AI
| Atributo | O que faz |
|---|---|
[AIGenerated('prompt com {Campo}')] |
Gera conteudo via LLM com interpolacao de campos |
[AISummarize('Campo', maxLen)] |
Resume o conteudo de outra propriedade |
[AITranslate('Campo', 'English')] |
Traduz automaticamente para outro idioma |
[AIClassify('Campo', 'Cat1,Cat2,Cat3')] |
Classifica em categorias pre-definidas |
[AIValidate('regra')] |
Valida conteudo via LLM, lanca excecao se invalido |
[Tabela('PRODUTOS')]
TProduto = class
published
[Campo('DESCRICAO')]
property DESCRICAO: String;
[Campo('RESUMO'), AISummarize('DESCRICAO', 100)]
property RESUMO: String; // Resumido automaticamente!
[Campo('CATEGORIA'), AIClassify('DESCRICAO', 'Eletronico,Vestuario,Alimento')]
property CATEGORIA: String; // Classificado automaticamente!
[Campo('DESCRICAO_EN'), AITranslate('DESCRICAO', 'English')]
property DESCRICAO_EN: String; // Traduzido automaticamente!
end;
DAOProduto := TSimpleDAO<TProduto>.New(Conn)
.AIClient(TSimpleAIClient.New('claude', 'api-key'));
DAOProduto.Insert(Produto); // AI processa ANTES do INSERT!💬 AI Query — Linguagem Natural para SQL
Faca perguntas ao banco de dados em linguagem natural. O SimpleORM traduz para SQL, executa e retorna os resultados.
| Metodo | O que faz |
|---|---|
NaturalLanguageQuery(pergunta) |
Traduz para SQL, executa, retorna TDataSet |
AskQuestion(pergunta) |
Executa e retorna resposta em linguagem natural |
ExplainQuery(sql) |
Explica uma query SQL em linguagem natural |
SuggestQuery(objetivo) |
Sugere SQL baseado em um objetivo |
AIQuery := TSimpleAIQuery.New(Query, AIClient);
AIQuery.RegisterEntity<TCliente>.RegisterEntity<TPedido>;
LDataSet := AIQuery.NaturalLanguageQuery('Top 5 clientes por valor de compras');
LResposta := AIQuery.AskQuestion('Qual o ticket medio de vendas?');🔌 Client AI Generico
TSimpleAIClient funciona com Claude (Anthropic) e OpenAI — basta trocar o provider:
LAI := TSimpleAIClient.New('claude', 'sk-ant-...'); // Claude
LAI := TSimpleAIClient.New('openai', 'sk-...'); // OpenAI📊 Numeros desta Release
| Metrica | Valor |
|---|---|
| Novas units | 11 (SimpleRules, SimpleSkill, SimpleAgent, SimpleAIClient, SimpleAIAttributes, SimpleAIProcessor, SimpleAIQuery, SimpleMCPServer, SimpleMCPTypes, SimpleMCPTransport.Stdio, SimpleMCPTransport.Http) |
| Novos testes | 77 DUnit tests (11 Rules + 8 Skills + 9 Agent + 9 MCP + 16 AI Processor + 24 AI Query) |
| Novos samples | 5 projetos (AgentsSkillsRules, MCPServer/Stdio, MCPServer/Http, AIEnrichment, AIQuery) |
| Providers suportados | Claude (Anthropic) e OpenAI |
| Transportes MCP | Stdio e HTTP (Horse) |
📖 Documentacao
Compatibilidade: Todas as features sao opcionais. Projetos existentes continuam funcionando sem nenhuma alteracao. O pipeline so e ativado quando Rules, Skills ou Agents sao configurados.
Instalacao: boss install academiadocodigo/SimpleORM