Cliente da API Ollama para Delphi

· Componentes

Ollama facilita a execução de grandes modelos de linguagem localmente no seu próprio hardware — sem dependência de nuvem, sem custos de API e com total privacidade dos dados. Para desenvolvedores Delphi que desejam integrar capacidades de IA local em suas aplicações, o sgcWebSockets oferece TsgcHTTP_API_Ollama — um componente nativo que encapsula toda a API Ollama com código Delphi limpo e tipado.

Seja para manter dados sensíveis on-premises, criar recursos de IA offline, gerenciar sua própria biblioteca de modelos ou gerar embeddings para busca vetorial local, este componente oferece acesso direto a todos os recursos do Ollama. Sem contas na nuvem. Sem taxas recorrentes de API. Basta soltar o componente, apontá-lo para sua instância Ollama e começar a construir.

Cobertura completa da API

Todos os principais recursos da API Ollama são suportados de fábrica.

Chat Completions
Envie mensagens com prompts de sistema, receba respostas de forma síncrona ou em streaming. Controle total sobre temperatura, top-p e sequências de parada.
Streaming em tempo real
Transmita respostas token por token usando Server-Sent Events. Construa interfaces responsivas com modelos executando localmente.
Gerenciamento de modelos
Baixe, exiba detalhes, liste tags e exclua modelos programaticamente. Gerenciamento completo do ciclo de vida via código Delphi.
Embeddings
Gere embeddings vetoriais localmente. Alimente busca semântica, clustering e classificação sem enviar dados para a nuvem.
Auto-hospedado / Host configurável
Conecte-se a qualquer instância Ollama via URL de host configurável. Execute localmente, em um servidor LAN ou em nuvem privada.
Retry e logging integrados
Retry automático em falhas transitórias com tentativas e intervalos configuráveis. Log completo de requisições/respostas para depuração.

Primeiros passos

Integre o Ollama ao seu projeto Delphi em menos de um minuto. Solte o componente, configure o host e envie sua primeira mensagem.

// Create the component and configure the host
var
  Ollama: TsgcHTTP_API_Ollama;
  vResponse: string;
begin
  Ollama := TsgcHTTP_API_Ollama.Create(nil);
  Try
    Ollama.OllamaOptions.Host := 'http://localhost:11434';
    // Send a simple message to a local model
    vResponse := Ollama._CreateMessage(
      'llama3', 'Hello, Ollama!');
    ShowMessage(vResponse);
  Finally
    Ollama.Free;
  End;
end;

Sem chave de API. Ao conectar-se a uma instância Ollama local, nenhuma autenticação é necessária. Para implantações remotas ou seguras, você pode opcionalmente definir uma chave de API via OllamaOptions.ApiKey.

Chat Completions e Streaming

A API Chat Completions funciona com qualquer modelo que você tenha baixado para sua instância Ollama. Envie texto com prompts de sistema opcionais e receba respostas de forma síncrona ou em streaming em tempo real.

Prompts de sistema

Controle o comportamento do modelo fornecendo um prompt de sistema que define o contexto, a personalidade ou as restrições da conversa.

vResponse := Ollama._CreateMessageWithSystem(
  'llama3',
  'You are a helpful assistant that responds in Spanish.',
  'What is the capital of France?');
// Returns: "La capital de Francia es París."

Streaming em tempo real

Para interfaces de usuário responsivas, transmita a resposta do modelo token por token usando Server-Sent Events.

// Enable streaming via SSE
Ollama.OnHTTPAPISSE := OnSSEEvent;
Ollama._CreateMessageStream('llama3',
  'Write a short poem about Delphi programming.');
procedure TForm1.OnSSEEvent(Sender: TObject;
  const aEvent, aData: string; var Cancel: Boolean);
begin
  // aData: JSON payload with generated content
  Memo1.Lines.Add(aData);
end;

API tipada avançada

Para controle total sobre os parâmetros da requisição — temperatura, top-p, sequências de parada, máximo de tokens — use as classes tipadas de requisição e resposta.

var
  oRequest: TsgcOllamaClass_Request_ChatCompletion;
  oMessage: TsgcOllamaClass_Request_Message;
  oResponse: TsgcOllamaClass_Response_ChatCompletion;
begin
  oRequest := TsgcOllamaClass_Request_ChatCompletion.Create;
  Try
    oRequest.Model := 'llama3';
    oRequest.MaxTokens := 2048;
    oRequest.Temperature := 0.7;
    oMessage := TsgcOllamaClass_Request_Message.Create;
    oMessage.Role := 'user';
    oMessage.Content := 'Explain quantum computing in simple terms.';
    oRequest.Messages.Add(oMessage);
    oResponse := Ollama.CreateMessage(oRequest);
    Try
      if Length(oResponse.Choices) > 0 then
        ShowMessage(oResponse.Choices[0].MessageContent);
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

Gerenciamento de modelos

Gerencie toda a sua biblioteca de modelos local via código Delphi. Baixe novos modelos, inspecione seus detalhes, liste tags disponíveis e exclua modelos que não são mais necessários — tudo de forma programática.

Baixar um modelo

// Download a model from the Ollama registry
Ollama._PullModel('llama3');

Exibir detalhes do modelo

// Get detailed information about a model
vDetails := Ollama._ShowModel('llama3');
ShowMessage(vDetails);

Listar modelos e tags

// List all models via OpenAI-compatible endpoint
vModels := Ollama._GetModels;
// List model tags with detailed metadata (name, size, digest)
vTags := Ollama._GetTags;
// Typed API: access tag properties directly
var
  oTags: TsgcOllamaClass_Response_Tags;
  i: Integer;
begin
  oTags := Ollama.GetTags;
  Try
    for i := 0 to Length(oTags.Models) - 1 do
      Memo1.Lines.Add(Format('%s (%d bytes)',
        [oTags.Models[i].Name, oTags.Models[i].Size]));
  Finally
    oTags.Free;
  End;
end;

Excluir um modelo

// Remove a model from the local system
Ollama._DeleteModel('old-model:latest');

Embeddings

Gere embeddings vetoriais localmente usando qualquer modelo com suporte a embeddings. Os embeddings alimentam busca semântica, clustering de documentos e classificação — tudo sem enviar dados para servidores externos.

// Generate embeddings locally
var
  vEmbedding: string;
begin
  vEmbedding := Ollama._CreateEmbeddings(
    'nomic-embed-text',
    'Delphi is a powerful programming language.');
  ShowMessage(vEmbedding);
end;

Para controle total, use a API tipada para acessar os valores de embedding brutos.

var
  oResponse: TsgcOllamaClass_Response_Embeddings;
  i: Integer;
begin
  oResponse := Ollama.CreateEmbeddings(
    'nomic-embed-text',
    'Delphi is a powerful programming language.');
  Try
    for i := 0 to oResponse.EmbeddingCount - 1 do
      Memo1.Lines.Add(FloatToStr(oResponse.GetEmbeddingValue(i)));
  Finally
    oResponse.Free;
  End;
end;

Privacidade dos dados. Com o Ollama, seus dados nunca saem da sua rede. Isso o torna ideal para setores regulados (saúde, finanças, governo) onde residência e privacidade dos dados são requisitos críticos.

Configuração e opções

Ajuste o comportamento do componente com opções de configuração abrangentes.

Propriedade Descrição
OllamaOptions.Host URL do servidor Ollama (ex.: http://localhost:11434)
OllamaOptions.ApiKey Chave de API opcional para implantações seguras
HttpOptions.ReadTimeout Timeout de leitura HTTP em milissegundos (padrão: 60000)
LogOptions.Enabled Habilitar log de requisições/respostas
RetryOptions.Enabled Retry automático em falhas transitórias
RetryOptions.Retries Número máximo de tentativas de retry (padrão: 3)
RetryOptions.Wait Tempo de espera entre retries em milissegundos (padrão: 3000)

Modelos suportados

O Ollama suporta centenas de modelos de código aberto. Veja algumas escolhas populares:

Modelo Parâmetros Ideal para
llama3 8B / 70B Chat de propósito geral, raciocínio
mistral 7B Geração de texto rápida e eficiente
codellama 7B / 13B / 34B Geração e análise de código
nomic-embed-text 137M Embeddings de texto, busca semântica

Custo zero, controle total. Execute modelos de IA no seu próprio hardware sem cobranças por token. Combinado com a lógica de retry e logging integrados do sgcWebSockets, você obtém integração de IA local pronta para produção em Delphi.