Klient API Ollama dla Delphi

· Komponenty

Ollama ułatwia uruchamianie dużych modeli językowych lokalnie na własnym sprzęcie — bez zależności od chmury, bez kosztów API i z pełną prywatnością danych. Dla programistów Delphi, którzy chcą zintegrować lokalne możliwości SI ze swoimi aplikacjami, sgcWebSockets dostarcza TsgcHTTP_API_Ollama — natywny komponent, który opakowuje całe API Ollama w czysty, bezpieczny typowo kod Delphi.

Niezależnie od tego, czy musisz przechowywać wrażliwe dane lokalnie, budować funkcje SI działające offline, zarządzać własną biblioteką modeli czy generować embeddingi do lokalnego wyszukiwania wektorowego, ten komponent daje ci bezpośredni dostęp do każdej funkcji Ollamy. Bez kont w chmurze. Bez cyklicznych opłat za API. Po prostu upuść komponent, wskaż go na swoją instancję Ollama i zacznij budować.

Pełne pokrycie API

Każda kluczowa funkcja API Ollama jest obsługiwana od razu.

Chat Completions
Wysyłaj wiadomości z promptami systemowymi, odbieraj odpowiedzi synchronicznie lub strumieniowo. Pełna kontrola nad temperature, top-p i sekwencjami zatrzymania.
Strumieniowanie w czasie rzeczywistym
Strumieniuj odpowiedzi token po tokenie za pomocą Server-Sent Events. Buduj responsywne interfejsy z lokalnie uruchomionymi modelami.
Zarządzanie modelami
Pobieraj, pokazuj szczegóły, listuj tagi i usuwaj modele programowo. Pełne zarządzanie cyklem życia z poziomu kodu Delphi.
Embeddings
Generuj wektorowe embeddingi lokalnie. Zasilaj wyszukiwanie semantyczne, klasteryzację i klasyfikację bez wysyłania danych do chmury.
Self-hosted / konfigurowalny host
Łącz się z dowolną instancją Ollama poprzez konfigurowalny URL hosta. Uruchamiaj lokalnie, na serwerze LAN lub w chmurze prywatnej.
Wbudowane ponawianie i logowanie
Automatyczne ponawianie przy przejściowych błędach z konfigurowalną liczbą prób i odstępami. Pełne logowanie żądań/odpowiedzi do debugowania.

Pierwsze kroki

Zintegruj Ollama z projektem Delphi w niecałą minutę. Upuść komponent, skonfiguruj host i wyślij pierwszą wiadomość.

// 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;

Klucz API nie jest wymagany. Przy łączeniu się z lokalną instancją Ollama uwierzytelnianie nie jest potrzebne. W przypadku zdalnych lub zabezpieczonych wdrożeń możesz opcjonalnie ustawić klucz API za pomocą OllamaOptions.ApiKey.

Chat Completions i strumieniowanie

API Chat Completions współpracuje z dowolnym modelem pobranym do twojej instancji Ollama. Wysyłaj tekst z opcjonalnymi promptami systemowymi i odbieraj odpowiedzi synchronicznie lub strumieniowo w czasie rzeczywistym.

Prompty systemowe

Kontroluj zachowanie modelu, dostarczając prompt systemowy, który ustawia kontekst, osobowość lub ograniczenia rozmowy.

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."

Strumieniowanie w czasie rzeczywistym

Dla responsywnych interfejsów użytkownika strumieniuj odpowiedź modelu token po tokenie za pomocą 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;

Zaawansowane typowane API

Aby uzyskać pełną kontrolę nad parametrami żądania — temperature, top-p, sekwencje zatrzymania, maksymalna liczba tokenów — użyj typowanych klas żądania i odpowiedzi.

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;

Zarządzanie modelami

Zarządzaj całą swoją lokalną biblioteką modeli z poziomu kodu Delphi. Pobieraj nowe modele, sprawdzaj ich szczegóły, listuj dostępne tagi i usuwaj modele, których już nie potrzebujesz — wszystko programowo.

Pobierz model

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

Pokaż szczegóły modelu

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

Lista modeli i tagów

// 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;

Usuń model

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

Embeddings

Generuj wektorowe embeddingi lokalnie za pomocą dowolnego modelu obsługującego embeddingi. Embeddingi zasilają wyszukiwanie semantyczne, klasteryzację dokumentów i klasyfikację — bez wysyłania danych do zewnętrznych serwerów.

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

Aby uzyskać pełną kontrolę, użyj typowanego API, by uzyskać dostęp do surowych wartości embeddingu.

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;

Prywatność danych. Z Ollama twoje dane nigdy nie opuszczają sieci. To czyni ją idealną dla branż regulowanych (ochrona zdrowia, finanse, administracja), w których lokalizacja i prywatność danych są krytycznymi wymaganiami.

Konfiguracja i opcje

Dostrój zachowanie komponentu dzięki kompleksowym opcjom konfiguracji.

Właściwość Opis
OllamaOptions.Host URL serwera Ollama (np. http://localhost:11434)
OllamaOptions.ApiKey Opcjonalny klucz API dla zabezpieczonych wdrożeń
HttpOptions.ReadTimeout Timeout odczytu HTTP w milisekundach (domyślnie: 60000)
LogOptions.Enabled Włącz logowanie żądań/odpowiedzi
RetryOptions.Enabled Automatyczne ponawianie przy przejściowych błędach
RetryOptions.Retries Maksymalna liczba prób ponawiania (domyślnie: 3)
RetryOptions.Wait Czas oczekiwania między ponowieniami w milisekundach (domyślnie: 3000)

Obsługiwane modele

Ollama obsługuje setki modeli open-source. Oto kilka popularnych wyborów:

Model Parametry Najlepszy do
llama3 8B / 70B Czat ogólnego przeznaczenia, rozumowanie
mistral 7B Szybkie, efektywne generowanie tekstu
codellama 7B / 13B / 34B Generowanie i analiza kodu
nomic-embed-text 137M Embeddingi tekstowe, wyszukiwanie semantyczne

Zero kosztów, pełna kontrola. Uruchamiaj modele SI na własnym sprzęcie bez opłat za token. W połączeniu z wbudowaną logiką ponawiania i logowania sgcWebSockets otrzymujesz gotową do produkcji integrację lokalnej SI dla Delphi.