AI チャット

TsgcAIChat は、7 つの大規模言語モデルプロバイダーに対応した単一のチャットクライアントです。Provider を設定し、API キーとモデルを指定して Chat を呼び出すだけです。ベンダーの変更は代入 1 行で済み、それ以外のコードはそのまま使えます。

TsgcAIChat

プロバイダーに依存しないチャットコンポーネントです。会話履歴を保持し、プロバイダー固有の JSON ボディを構築し、対応する HTTP API クライアントを駆動して、アシスタントのテキストを 1 回の呼び出しで、あるいはトークン単位で返します。

コンポーネントクラス

TsgcAIChat

用途

プロバイダー中立な LLM チャット

プラットフォーム

Win32 および Win64

sgcAI は単体で完結しています。このコンポーネントは、土台となる sgcWebSockets Core ランタイムとともに sgcAI に同梱されています。

モデルに質問する

プロバイダーを選び、キーとモデルを設定して Chat を呼び出します。ストリーミング版と非同期版も同じ設定を使います。

uses
  sgcAI, sgcAI_Chat;

var
  oChat: TsgcAIChat;
  vAnswer: string;
begin
  oChat := TsgcAIChat.Create(nil);
  oChat.Provider := aicpAnthropic;
  oChat.ChatOptions.ApiKey    := 'sk-ant-...';
  oChat.ChatOptions.Model     := 'claude-sonnet-4-5';
  oChat.ChatOptions.MaxTokens := 4096;
  oChat.SystemMessage := 'You are a Delphi expert.';
  oChat.MaxHistoryMessages := 20;

  // Blocking call, returns the assistant text.
  vAnswer := oChat.Chat('How do I keep a WebSocket connection alive?');

  // Token by token, delivered on OnChatStream.
  oChat.OnChatStream := OnChatStreamHandler;
  oChat.ChatStream('Now explain it to a beginner.');
end;

procedure TForm1.OnChatStreamHandler(Sender: TObject;
  const aChunk: string; var Cancel: Boolean);
begin
  Memo1.Text := Memo1.Text + aChunk;
  Cancel := StopRequested;   // abort a long generation
end;
// includes: sgcAI.hpp, sgcAI_Chat.hpp

TsgcAIChat *oChat = new TsgcAIChat(NULL);
oChat->Provider = aicpOpenAI;
oChat->ChatOptions->ApiKey = "sk-...";
oChat->ChatOptions->Model  = "gpt-6-astra";
oChat->SystemMessage = "You are a Delphi expert.";

String vAnswer = oChat->Chat("How do I keep a WebSocket connection alive?");

// Local models: same code, no data leaves the machine.
oChat->Provider = aicpOllama;
oChat->ChatOptions->BaseUrl = "http://127.0.0.1:11434";
oChat->ChatOptions->Model   = "llama3";
vAnswer = oChat->Chat("Same question, local model.");

主なプロパティとメソッド

最もよく使うメンバーです。

Provider

Provider でベンダーを選択します。aicpOpenAI、aicpAnthropic、aicpGemini、aicpDeepSeek、aicpOllama、aicpGrok、aicpMistral が指定できます。変更すると、以前のプロバイダー用にキャッシュされていたクライアントは解放されます。

ChatOptions

ApiKey、Model、MaxTokens、Temperature、TopP、BaseUrl を設定します。Temperature と TopP を既定値のままにするとリクエストから省略されるため、プロバイダー側の既定値が適用されます。

会話

SystemMessage は毎ターンのペルソナを設定します。MaxHistoryMessages は再送する過去メッセージの数を制限し、トークンコストを抑えます。ClearHistory と GetHistory で履歴のリセットと読み出しを行います。

呼び出し

Chat はブロッキングで応答を返します。ChatStream は SSE 経由でストリーミングします。ChatWithSystem は 1 ターンだけシステムプロンプトを上書きします。ChatAsync は Delphi 2010 以降で future を返します。

イベント

OnChatMessage は完了した各メッセージをそのロールとともに通知します。OnChatStream はすべてのチャンクを配信し、Cancel フラグを備えています。OnChatError はプロバイダーおよびトランスポートのエラーを通知します。

ドキュメントと抽出

ChatWithDocument と ChatWithDocumentBase64 はメッセージとともに PDF や画像を 1 つ送信し、ChatWithAttachments と ChatJSONWithAttachments は TsgcAIChatAttachments リストに保持した複数のファイルを送信します。OpenAI、Anthropic、Gemini は PDF をそのまま読み取り、他のプロバイダーは画像を受け取ります。チャットを TsgcAIDocumentExtractor に接続すれば、請求書、領収書、身分証明書をスキーマで検証済みの JSON に変換でき、フィールドごとに信頼度が得られます。

ローカルモデル

Provider を aicpOllama に設定すると、ChatOptions.BaseUrl でコンポーネントを自前の Ollama ホストに向けられるため、プロンプトと応答がマシンの外に出ることはありません。

ツール呼び出し

ChatWithTools は、ツール定義(名前、説明、JSON Schema)をメッセージとともに送信し、モデルが要求するツール呼び出しを返します。ツールを実行し、AddToolResult で各結果を返してから、もう一度呼び出します。7 つのプロバイダーすべてで、それぞれの形式で動作します。TsgcAIAgent がこのループを代わりに実行します。

モデルエイリアスとフォールバック

ChatOptions.Model には fast や smart などのエイリアスを指定できます。エイリアスは ModelAliases でモデルまたは provider:model に対応付け、LoadModelAliasesFromFile、LoadModelAliasesFromJSON、LoadModelAliasesFromURL で読み込みます。Fallbacks は、接続エラー、HTTP 5xx、HTTP 429、未知のモデルのときに次に試すプロバイダーとモデルを列挙し、OnFallback が切り替えのたびに通知します。

トークン使用量とガードレール

LastUsage と OnChatUsage は、すべてのリクエストのプロバイダー、モデル、入力、出力、キャッシュされたトークンを、UserId と SessionId とともに通知し、LastFinishReason は直前の回答が終了した理由(stop や length など)を示します。UsageMeter に TsgcAIUsageMeter を割り当てるとコストと予算を管理でき、Guardrails に TsgcAIGuardrails を割り当てると PII のマスキング、ツールルール、スキーマ検証を利用できます。

モデルエイリアス、フォールバック、トークン使用量

モデルを役割で呼び分け、プロバイダーが失敗しても応答を続け、すべてのリクエストのトークン数を確認できます。2026.11.0 の新機能です。

uses
  sgcAI, sgcAI_Chat;

procedure TForm1.ChatWithFallback;
var
  oFallback: TsgcAIChatFallback;
begin
  sgcAIChat1.Provider := aicpOpenAI;
  sgcAIChat1.ChatOptions.ApiKey := 'sk-...';
  // aliases: alias=model or alias=provider:model
  sgcAIChat1.ModelAliases.Add('fast=gpt-6-luna');
  sgcAIChat1.ModelAliases.Add('smart=anthropic:claude-opus-5-5');
  sgcAIChat1.ProviderApiKeys.Add('anthropic=sk-ant-...');
  sgcAIChat1.ChatOptions.Model := 'fast';
  // tried in order on a connection error, HTTP 5xx, HTTP 429 or an unknown model
  oFallback := sgcAIChat1.Fallbacks.Add;
  oFallback.Provider := aicpGemini;
  oFallback.Model := 'gemini-3-flash';
  oFallback.ApiKey := 'AIza...';
  sgcAIChat1.OnFallback := DoFallback;

  Memo1.Lines.Add(sgcAIChat1.Chat('Write a haiku about Delphi.'));
  Memo1.Lines.Add(Format('Answered by %s %s: %d input, %d output tokens',
    [sgcAIChat1.LastUsage.Provider, sgcAIChat1.LastUsage.Model,
    sgcAIChat1.LastUsage.InputTokens, sgcAIChat1.LastUsage.OutputTokens]));
end;

procedure TForm1.DoFallback(Sender: TObject; const aFromProvider, aFromModel,
  aToProvider, aToModel, aError: string);
begin
  Memo1.Lines.Add('Fallback from ' + aFromProvider + ' to ' + aToProvider +
    ': ' + aError);
end;

仕様と参考資料

このコンポーネントが利用するサービスとプロトコルの一次情報です。

さらに詳しく

オンラインヘルプsgcAI コンポーネントの完全な API リファレンスと利用ガイドです。
sgcAI の全コンポーネント15 コンポーネントすべての機能一覧を確認できます。
無料体験版をダウンロード自分の API キーで 7 つのプロバイダーすべてを試せます。
価格Single、Team、Site の各ライセンス。完全なソースコード付きです。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

はじめてみませんか

無料体験版をダウンロードすれば、数分で Delphi のフォームの裏側に言語モデルを組み込めます。