Gemini API Delphi クライアント

· コンポーネント

Google Gemini は、テキスト生成、画像理解、構造化出力、関数呼び出しなど幅広いユースケースで卓越した性能を発揮する、現在利用可能な最も強力なマルチモーダル AI モデルファミリーの一つです。Gemini をアプリケーションに統合しようとする Delphi 開発者向けに、sgcWebSockets は TsgcHTTP_API_Gemini を提供します。これは Google Gemini API 全体をラップする包括的なネイティブコンポーネントです。

会話型アシスタントの構築、構造化データの生成、画像処理、セマンティック検索用の埋め込み生成、ツール拡張ワークフローのオーケストレーションなど、あらゆるユースケースでクリーンな型安全 Delphi コードを通じて Gemini の全機能に直接アクセスできます。REST の定型コードも JSON の手動処理も不要です。コンポーネントを配置し、API キーを設定するだけで構築を始められます。

完全な API カバレッジ

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

コンテンツ生成
オプションのシステム指示付きでプロンプトからテキストを生成します。温度、top-p、top-k、停止シーケンスで出力を微調整できます。
リアルタイムストリーミング
Server-Sent Events を使用してトークンごとに応答をストリームします。回答が生成されるにつれて表示するレスポンシブ UI を構築できます。
ビジョン
base64 エンコードデータをテキストプロンプトと共に送信して画像を分析します。Gemini が視覚コンテンツを説明・解釈・推論します。
構造化 JSON 出力
Gemini にスキーマに準拠した有効な JSON を返すよう強制します。レスポンスの MIME タイプとスキーマを設定して解析可能な結果を保証します。
関数呼び出し
JSON Schema でカスタム関数を定義します。Gemini が呼び出すタイミングを決定し、エージェント的なマルチステップワークフローを実現します。
埋め込み
テキストのベクター埋め込みを生成します。セマンティック検索、クラスタリング、分類、推薦システムを強化します。
トークンカウント
リクエスト送信前にトークンをカウントします。コストを正確に見積もり、コンテキストウィンドウ予算を管理します。
モデル管理
利用可能な Gemini モデルを一覧表示するか、入出力トークン制限を含む特定モデルの詳細を取得します。
組み込みリトライ&ロギング
設定可能な試行回数と待機間隔による一時的な障害時の自動リトライ。デバッグ用のリクエスト/レスポンス完全ロギング。

はじめに

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

// Create the component and configure the API key
var
  Gemini: TsgcHTTP_API_Gemini;
  vResponse: string;
begin
  Gemini := TsgcHTTP_API_Gemini.Create(nil);
  Try
    Gemini.GeminiOptions.ApiKey := 'YOUR_API_KEY';
    // Send a simple message to Gemini
    vResponse := Gemini._CreateContent(
      'gemini-2.5-flash', 'Hello, Gemini!');
    ShowMessage(vResponse);
  Finally
    Gemini.Free;
  End;
end;

2 つの API スタイル。 すべての機能で、コンビニエンスメソッド(文字列ベース、最小限のコード)と型付きリクエスト/レスポンスクラス(完全制御、型安全性)の両方を提供します。ユースケースに最適なアプローチを選択してください。

コンテンツ生成とストリーミング

GenerateContent API はすべての Gemini インタラクションの基盤です。オプションのシステム指示付きでテキストを送信し、同期またはリアルタイムストリームで応答を受信します。

システム指示

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

vResponse := Gemini._CreateContentWithSystem(
  'gemini-2.5-flash',
  '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 を使用して Gemini の応答をトークンごとにストリームします。OnHTTPAPISSE イベントハンドラーを割り当て、_CreateContentStream を呼び出します。

// Enable streaming via SSE
Gemini.OnHTTPAPISSE := OnSSEEvent;
Gemini._CreateContentStream('gemini-2.5-flash',
  'Tell me a story about a brave explorer.');
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、top-k、停止シーケンス、最大出力トークン数などのリクエストパラメーターを完全制御するには、型付きリクエスト/レスポンスクラスを使用します。

var
  oRequest: TsgcGeminiClass_Request_GenerateContent;
  oResponse: TsgcGeminiClass_Response_GenerateContent;
begin
  oRequest := TsgcGeminiClass_Request_GenerateContent.Create;
  Try
    oRequest.Model := 'gemini-2.5-flash';
    oRequest.SystemInstruction := 'You are a helpful assistant.';
    oRequest.MaxOutputTokens := 2048;
    oRequest.Temperature := 0.7;
    oRequest.TopP := 0.9;
    oRequest.TopK := 40;
    oRequest.Contents.Add('user', 'Explain quantum computing in simple terms.');
    oResponse := Gemini.CreateContent(oRequest);
    Try
      if Length(oResponse.Candidates) > 0 then
        ShowMessage(oResponse.Candidates[0].Parts[0].Text);
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

ビジョン — 画像理解

Gemini はネイティブにマルチモーダルです。テキストプロンプトと共に写真、スクリーンショット、図表、グラフを送信すると、詳細な説明、データ抽出、視覚的な Q&A を受け取れます。

// Load an image and ask Gemini to describe it
var
  vBase64: string;
begin
  vBase64 := sgcBase64Encode(LoadFileToBytes('product-photo.png'));
  ShowMessage(Gemini._CreateVisionContent(
    'gemini-2.5-flash',
    'Describe this product image for an e-commerce listing.',
    vBase64, 'image/png'));
end;

ユースケース。 品質検査の自動化、アクセシビリティのための alt テキスト生成、グラフからのデータ抽出、視覚的な検索機能の構築などをすべてネイティブ Delphi コードから実現できます。

構造化 JSON 出力

Gemini が正確なスキーマに準拠した有効で解析可能な JSON を返すことを保証します。レスポンスの MIME タイプとスキーマを設定してポスト処理を排除します — レスポンスは Delphi レコードに直接デシリアライズする準備ができています。

var
  vSchema, vResponse: string;
begin
  vSchema :=
    '{"type":"object","properties":{"name":{"type":"string"},' +
    '"age":{"type":"integer"}},"required":["name","age"]}';
  vResponse := Gemini._CreateContentJSON(
    'gemini-2.5-flash',
    'Extract the name and age: John is 30 years old.',
    vSchema);
  // Returns: {"name": "John", "age": 30}
end;

スキーマ強制。 ResponseMimeType'application/json' に設定し、ResponseSchema を提供することで、Gemini は常に構造的に有効な出力を保証します。

関数呼び出し

JSON Schema でカスタム関数を定義すると、Gemini がそれらをいつどのように呼び出すかを決定します。これは AI をビジネスロジックに接続するエージェント的なマルチステップワークフロー構築の基盤です。

var
  oRequest: TsgcGeminiClass_Request_GenerateContent;
  oFunc: TsgcGeminiClass_Request_FunctionDeclaration;
  oResponse: TsgcGeminiClass_Response_GenerateContent;
begin
  oRequest := TsgcGeminiClass_Request_GenerateContent.Create;
  Try
    oRequest.Model := 'gemini-2.5-flash';
    // Define a function
    oFunc := TsgcGeminiClass_Request_FunctionDeclaration.Create;
    oFunc.Name := 'get_weather';
    oFunc.Description := 'Get the current weather in a location';
    oFunc.Parameters :=
      '{"type":"object","properties":{"location":{"type":"string"}}}';
    oRequest.FunctionDeclarations.Add(oFunc);
    oRequest.Contents.Add('user',
      'What is the weather in Madrid?');
    oResponse := Gemini.CreateContent(oRequest);
    Try
      // Check if Gemini wants to call a function
      if oResponse.Candidates[0].Parts[0].FunctionCallName  '' then
      begin
        ShowMessage('Function: ' + oResponse.Candidates[0].Parts[0].FunctionCallName);
        ShowMessage('Args: ' + oResponse.Candidates[0].Parts[0].FunctionCallArgs);
      end;
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

埋め込み

テキストの高品質なベクター埋め込みを生成します。埋め込みはセマンティック検索、ドキュメントクラスタリング、推薦エンジン、分類タスクを強化します。

// Generate embeddings for a text
var
  vEmbedding: string;
begin
  vEmbedding := Gemini._EmbedContent(
    'text-embedding-004',
    'Delphi is a powerful programming language.');
  ShowMessage(vEmbedding);
end;

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

var
  oResponse: TsgcGeminiClass_Response_Embedding;
  i: Integer;
begin
  oResponse := Gemini.EmbedContent(
    'text-embedding-004',
    'Delphi is a powerful programming language.');
  Try
    for i := 0 to Length(oResponse.Values) - 1 do
      Memo1.Lines.Add(FloatToStr(oResponse.Values[i]));
  Finally
    oResponse.Free;
  End;
end;

トークンカウント

リクエスト送信前にコストを正確に見積もり、コンテキストウィンドウ予算を管理します。

var
  vTokens: string;
begin
  vTokens := Gemini._CountTokens(
    'gemini-2.5-flash',
    'How many tokens does this message consume?');
  ShowMessage(vTokens);
end;

モデル管理

利用可能な Gemini モデルをプログラムで照会します。すべてのモデルを一覧表示するか、表示名、説明、トークン制限を含む特定のモデル ID の詳細を取得します。

// List all available Gemini models
vModels := Gemini._GetModels;
// Get details for a specific model
vModel := Gemini._GetModel('gemini-2.5-flash');
// Typed API: access model properties directly
var
  oModel: TsgcGeminiClass_Response_Model;
begin
  oModel := Gemini.GetModel('gemini-2.5-flash');
  Try
    ShowMessage('Name: ' + oModel.DisplayName);
    ShowMessage('Input limit: ' + IntToStr(oModel.InputTokenLimit));
    ShowMessage('Output limit: ' + IntToStr(oModel.OutputTokenLimit));
  Finally
    oModel.Free;
  End;
end;

設定とオプション

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

プロパティ 説明
GeminiOptions.ApiKey Google Gemini API キー(必須)
HttpOptions.ReadTimeout HTTP 読み取りタイムアウト(ミリ秒、デフォルト: 60000)
LogOptions.Enabled リクエスト/レスポンスのログを有効化
LogOptions.FileName リクエスト/レスポンスキャプチャ用のログファイルパス
RetryOptions.Enabled 一時的な障害(429、503)時の自動リトライ
RetryOptions.Retries 最大リトライ回数(デフォルト: 3)
RetryOptions.Wait リトライ間の待機時間(ミリ秒、デフォルト: 3000)

リクエストパラメーター

パラメーター 説明
Temperature サンプリング温度(0.0〜2.0)。低いほど決定論的になります。
TopP 核サンプリング(0.0〜1.0)。累積確率のカットオフを制御します。
TopK Top-K サンプリング。トークン選択を上位 K 候補に制限します。
MaxOutputTokens レスポンスの最大トークン数(デフォルト: 4096)。
StopSequences 生成を停止するカスタムシーケンス。
ResponseMimeType 出力形式: JSON の場合 'application/json'、テキストの場合 'text/plain'。
ToolChoice モデルが呼び出す関数の選択方法を制御します。