Biblioteca didática de componentes Delphi para conversar com diferentes provedores de IA por uma API única. A evolução planejada inclui componentes para clientes e servidores MCP.
O projeto usa somente recursos nativos do Delphi, sem componentes de terceiros, Indy ou DLLs adicionais.
O nome Daikit combina D, de Delphi, AI, de Artificial Intelligence, e Kit, por reunir em uma única suíte os componentes necessários para integrar aplicações Delphi a diferentes serviços de inteligência artificial.
Acompanhe a série de vídeos do Daikit no YouTube:
Uma aplicação utiliza os componentes centrais do Daikit, escolhe um provedor e conversa com sua API sem precisar conhecer os contratos específicos de cada serviço.
- Componentes não visuais para OpenAI, Anthropic e Google Gemini;
- troca de provedor sem alterar o código de conversa;
- Envio e consulta de modelos assíncronos, sem bloquear a VCL;
- Histórico compartilhável ou mensagens isoladas;
- Contratos JSON tipados com serialização automática por
REST.Json; - Transporte HTTPS nativo baseado em
THTTPClient; - Cancelamento cooperativo, timeouts e limites de resposta;
- Log de contexto, requisição, resposta e erros pelo evento
AoRegistrarLog; - Credenciais em memória ou variáveis de ambiente, sem persistência no DFM;
- Interfaces e injeção de dependência;
- Testes unitários DUnitX sem acesso à rede;
- Suporte a aplicações Win32 e Win64.
TChatIA: fachada para selecionar o provedor, carregar modelos, enviar mensagens e cancelar operações.TConversaIA: mantém e compartilha o histórico, com eventos para acompanhar suas alterações.TProvedorOpenAI: configura a integração com a OpenAI.TProvedorAnthropic: configura a integração com a Anthropic.TProvedorGemini: configura a integração com o Google Gemini.
Os cinco componentes aparecem na página Daikit da Tool Palette. O registro dos componentes não acessa a rede nem lê credenciais.
- Delphi 12 Athens;
- Windows;
- Plataforma Win32 ou Win64;
- DUnitX fornecido com o Delphi para executar os testes.
-
Baixe o instalador e o respectivo arquivo
.sha256na página de releases do Daikit. -
Se a release for a v0.1.0, por exemplo, confira o SHA-256 do executável:
Get-FileHash .\Daikit.Instalador-0.1.0.exe -Algorithm SHA256
-
Feche todas as instâncias do Delphi.
-
Execute
Daikit.Instalador-[versao-release].exe. -
Confirme que o instalador localizou o Delphi 12 e clique em Instalar.
-
Abra o Delphi e confirme a página Daikit na Tool Palette.
O instalador não possui assinatura digital. O Microsoft Defender SmartScreen pode informar que o aplicativo não é reconhecido. Prossiga somente se o arquivo tiver sido baixado da release oficial e o SHA-256 corresponder ao valor publicado.
O instalador configura automaticamente:
- BPLs de design e runtime Win32 em
$(BDSCOMMONDIR)\Bpl; - BPL de runtime Win64 em
$(BDSCOMMONDIR)\Bpl\Win64; - DCPs e DCUs em
$(BDSCOMMONDIR)\Dcp\Daikit\Win32eWin64; - Os diretórios Daikit no
Search Pathde cada plataforma, sem duplicá-los; - A BPL de design em
Known Packagespara o usuário atual.
Não é necessário adicionar os fontes ao projeto ou ao Search Path. Quando Link with runtime packages estiver habilitado, as BPLs de runtime utilizadas pela aplicação também deverão ser distribuídas conforme as regras usuais do Delphi.
Feche o Delphi e execute na raiz do repositório:
.\tools\instalador\Construir.ps1O processo:
- Compila
DaikitRuntimeD12para Win32 e Win64; - Compila
DaikitDesignD12para Win32; - Reúne BPLs, DCPs e DCUs por plataforma;
- Incorpora esses arquivos ao instalador como um payload compactado;
- Compila o instalador VCL em modo Release.
O resultado fica em:
tools\instalador\bin\Win32\Daikit.Instalador.exe
O executável é autocontido; os fontes e a pasta packages não precisam acompanhá-lo na distribuição.
- Feche o Delphi.
- Execute novamente o instalador.
- Clique em Desinstalar e confirme.
O processo remove o registro do pacote, os arquivos Daikit instalados e somente as entradas Daikit adicionadas ao Search Path.
Em tempo de design, coloque no formulário ou data module:
- Um
TChatIA; - Um
TConversaIA; - Os provedores que deseja utilizar.
Aponte ChatIA.Conversa, escolha o provedor e envie a mensagem:
ChatIA.Conversa := ConversaIA;
ChatIA.Provedor := ProvedorOpenAI;
ChatIA.Enviar('Quem é você?');Para continuar a mesma conversa em outro provedor:
ChatIA.Provedor := ProvedorAnthropic;
ChatIA.Enviar('Continue a conversa.');Enviar inicia uma operação em uma thread de trabalho. A resposta é entregue em AoReceberResposta, falhas em AoOcorrerErro e o encerramento em AoConcluir. Os eventos são entregues na thread principal e podem atualizar controles VCL diretamente.
Use Cancelar para solicitar o cancelamento. Um segundo envio é recusado enquanto Estado for Executando ou Cancelando.
O padrão é ModoConversa = ManterHistorico. Use MensagemIsolada para não adicionar a troca ao histórico e LimparHistorico para iniciar uma nova conversa.
TConversaIA também oferece:
AoAdicionar: recebe a mensagem adicionada;AoLimpar: ocorre quando um histórico com conteúdo é limpo;AoAlterar: sinaliza qualquer mudança efetiva no contexto.
TChatIA.CarregarModelos consulta assincronamente o provedor selecionado. O resultado é entregue na thread principal por AoReceberModelos:
procedure TFormPrincipal.ChatIAAoReceberModelos(Sender: TObject;
const AModelos: TArray<IModeloIA>);
var
LModelo: IModeloIA;
begin
ComboModelo.Clear;
for LModelo in AModelos do
ComboModelo.Items.Add(LModelo.Id);
end;
procedure TFormPrincipal.CarregarModelos;
begin
ChatIA.Provedor := ProvedorOpenAI;
ChatIA.CarregarModelos;
end;Os componentes de provedor expõem EndpointModelos, permitindo usar gateways e proxies. ModeloPadrao é utilizado quando ChatIA.Modelo estiver vazio.
Por padrão, os provedores procuram estas variáveis de ambiente:
OPENAI_API_KEY
ANTHROPIC_API_KEY
GEMINI_API_KEY
Também é possível informar ChaveAPI em tempo de execução. Seu getter retorna uma máscara e a propriedade não é gravada no DFM.
Não coloque chaves em fontes, DFMs, argumentos de linha de comando ou arquivos versionados. Se uma chave for exposta, revogue-a no provedor correspondente.
TChatIA.AoRegistrarLog recebe todos os registros produzidos pelo componente e pelo transporte. O objeto IEventoLogIA informa:
DataHoraUTC;Tipo:Contexto,Requisicao,Resposta,RespostaErroouErro;Provedor;Mensagem;StatusHTTP.
Para declarar o handler manualmente, inclua Daikit.Aplicacao.Log na cláusula uses:
procedure TFormPrincipal.ChatIAAoRegistrarLog(Sender: TObject;
const AEvento: IEventoLogIA);
begin
MemoLog.Lines.Add(AEvento.Mensagem);
end;O Daikit não filtra nem persiste eventos. A aplicação decide o que mostrar ou armazenar. JSON, exceções e credenciais passam pela sanitização correspondente antes da exposição.
Abra Daikit.ExemploVCL.dproj. O exemplo demonstra:
- Troca entre os três provedores;
- Seleção do modelo;
- Histórico ou mensagem isolada;
- Uso das unidades retornadas pelo provedor;
- Consumo e exibição dos logs em um
TDBGrid.
Abra Daikit.Testes.dproj, selecione Win32 ou Win64 e compile.
Os executáveis são gerados em:
tests\bin\Win32\testes\Daikit.Testes.exe
tests\bin\Win64\testes\Daikit.Testes.exe
Os testes automatizados usam transportes falsos e não consomem APIs pagas. O workflow de release compila e executa a suíte nas duas plataformas antes de publicar o instalador.
O domínio trabalha apenas com contratos canônicos. Cada provedor implementa IAdaptadorIA e converte seus próprios contratos JSON. Assim, um novo provedor pode ser adicionado sem alterar o serviço de conversa nem os componentes existentes.
O transporte HTTP nativo é isolado por interface e o log usa um Decorator sobre ITransporteHTTP, mantendo observabilidade e comunicação separadas dos adaptadores.
O chat textual com OpenAI, Anthropic e Gemini está implementado.
Streaming, ferramentas, MCP, RAG, embeddings, áudio e geração de imagens permanecem como evoluções futuras.



