Ollama Delphi API クライアント

· コンポーネント

Ollama を使えば、クラウドへの依存も API コストもなく、完全なデータプライバシーを維持しながら、大規模言語モデルを自分のハードウェアでローカル実行できます。ローカル AI 機能をアプリケーションに統合しようとする Delphi 開発者向けに、sgcWebSockets は TsgcHTTP_API_Ollama を提供します。これは Ollama API 全体をクリーンな型安全 Delphi コードでラップするネイティブコンポーネントです。

機密データをオンプレミスで保持する必要がある場合、オフライン対応の AI 機能を構築したい場合、独自のモデルライブラリを管理したい場合、またはローカルベクター検索用の埋め込みを生成したい場合など、このコンポーネントを通じて Ollama の全機能に直接アクセスできます。クラウドアカウントも定期的な API 料金も不要です。コンポーネントを配置し、Ollama インスタンスを指定するだけで構築を始められます。

完全な API カバレッジ

Ollama API のすべての主要機能がすぐに利用できます。

チャット補完
システムプロンプト付きでメッセージを送信し、同期またはストリームで応答を受信します。温度、top-p、停止シーケンスを完全制御できます。
リアルタイムストリーミング
Server-Sent Events を使用してトークンごとに応答をストリームします。ローカルで実行されるモデルでレスポンシブ UI を構築できます。
モデル管理
モデルのプル、詳細表示、タグ一覧、削除をプログラムで実行します。Delphi コードからライフサイクル全体を管理できます。
埋め込み
ベクター埋め込みをローカルで生成します。データをクラウドに送信することなく、セマンティック検索、クラスタリング、分類を強化します。
セルフホスト / 設定可能なホスト
設定可能なホスト URL で任意の Ollama インスタンスに接続します。ローカル、LAN サーバー、プライベートクラウドで実行できます。
組み込みリトライ&ロギング
設定可能な試行回数と待機間隔による一時的な障害時の自動リトライ。デバッグ用のリクエスト/レスポンス完全ロギング。

はじめに

1 分以内に Ollama を Delphi プロジェクトに統合できます。コンポーネントを配置し、ホストを設定して、最初のメッセージを送信しましょう。

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

API キー不要。 ローカルの Ollama インスタンスに接続する場合、認証は不要です。リモートまたはセキュリティ保護されたデプロイメントでは、OllamaOptions.ApiKey でオプションとして API キーを設定できます。

チャット補完とストリーミング

チャット補完 API は Ollama インスタンスにプルされた任意のモデルで動作します。オプションのシステムプロンプト付きでテキストを送信し、同期またはリアルタイムストリームで応答を受信します。

システムプロンプト

会話のコンテキスト、ペルソナ、制約を設定するシステムプロンプトを提供してモデルの動作を制御します。

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

リアルタイムストリーミング

レスポンシブな UI のために、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

温度、top-p、停止シーケンス、最大トークン数などのリクエストパラメーターを完全制御するには、型付きリクエスト/レスポンスクラスを使用します。

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;

モデル管理

Delphi コードからローカルモデルライブラリ全体を管理します。新しいモデルのプル、詳細の確認、利用可能なタグの一覧表示、不要になったモデルの削除など、すべてをプログラムで実行できます。

モデルのプル

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

モデル詳細の表示

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

モデルとタグの一覧表示

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

モデルの削除

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

埋め込み

埋め込み対応の任意のモデルを使用してベクター埋め込みをローカルで生成します。埋め込みはセマンティック検索、ドキュメントクラスタリング、分類を強化します — 外部サーバーへのデータ送信は一切不要です。

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

完全制御のために、型付き API を使用して埋め込みの生の値にアクセスします。

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;

データプライバシー。 Ollama を使用すると、データがネットワークの外に出ることはありません。データ居住とプライバシーが重要な要件である規制産業(医療、金融、行政)に最適です。

設定とオプション

包括的な設定オプションでコンポーネントの動作を微調整します。

プロパティ 説明
OllamaOptions.Host Ollama server URL (例: http://localhost:11434)
OllamaOptions.ApiKey セキュリティ保護されたデプロイメント用のオプション API キー
HttpOptions.ReadTimeout HTTP 読み取りタイムアウト(ミリ秒、デフォルト: 60000)
LogOptions.Enabled リクエスト/レスポンスのログを有効化
RetryOptions.Enabled 一時的な障害時の自動リトライ
RetryOptions.Retries 最大リトライ回数(デフォルト: 3)
RetryOptions.Wait リトライ間の待機時間(ミリ秒、デフォルト: 3000)

サポートされているモデル

Ollama は数百のオープンソースモデルをサポートしています。人気のある選択肢をいくつか紹介します。

モデル パラメーター 最適な用途
llama3 8B / 70B 汎用チャット、推論
mistral 7B 高速で効率的なテキスト生成
codellama 7B / 13B / 34B コード生成と分析
nomic-embed-text 137M テキスト埋め込み、セマンティック検索

コストゼロ、完全制御。 トークンごとの課金なしで、自分のハードウェアで AI モデルを実行できます。sgcWebSockets の組み込みリトライロジックとロギングと組み合わせることで、Delphi 向けの本番対応ローカル AI 統合が実現します。