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 返回符合您的 schema 的有效 JSON,设置响应 MIME 类型和 schema 以保证可解析的结果。
函数调用
使用 JSON Schema 定义自定义函数,Gemini 决定何时调用它们,支持构建智能体式的多步工作流。
向量嵌入
为文本生成向量嵌入,驱动语义搜索、聚类、分类和推荐系统。
词元计数
在发送请求前统计词元数,精确估算费用并管理上下文窗口预算。
模型管理
列出所有可用 Gemini 模型或获取特定模型的详情,包括输入/输出词元限制。
内置重试与日志
可配置重试次数和等待间隔,在瞬态故障时自动重试。提供完整请求/响应日志以便调试。

快速开始

在不到一分钟内将 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;

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

实时流式传输

对于响应式用户界面,通过 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 原生支持多模态。将照片、截图、图表或图形与文本提示一起发送,获取详细描述、数据提取或视觉问答。

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

使用场景。自动化质量检测、为无障碍访问生成替代文本、从图表中提取数据,或构建视觉搜索功能——全部通过原生 Delphi 代码实现。

结构化 JSON 输出

保证 Gemini 返回符合您确切 schema 的有效、可解析 JSON。设置响应 MIME 类型和 schema 以消除后处理步骤——响应可直接反序列化到您的 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;

schema 强制执行。通过将 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 控制模型选择要调用的函数的方式。