Ollama Delphi API 客户端

· 组件

Ollama 让您可以轻松在本地硬件上运行大型语言模型——无需云端依赖、无 API 费用,并完全保护数据隐私。对于希望在应用程序中集成本地 AI 功能的 Delphi 开发者,sgcWebSockets 提供了 TsgcHTTP_API_Ollama——一个使用简洁、类型安全的 Delphi 代码封装整个 Ollama API 的原生组件。

无论您需要将敏感数据保留在本地、构建离线 AI 功能、管理自己的模型库,还是为本地向量搜索生成嵌入向量,该组件都能让您直接访问 Ollama 的所有功能。无需云端账户,无需定期支付 API 费用。只需放置组件,指向您的 Ollama 实例,即可开始构建。

完整的 API 覆盖

Ollama API 的每个主要功能都开箱即用。

聊天补全
发送带有系统提示的消息,同步或流式接收响应。完全控制温度、top-p 和停止序列。
实时流式传输
使用 Server-Sent Events 逐 token 流式传输响应。使用本地运行的模型构建响应式 UI。
模型管理
以编程方式拉取、查看详情、列出标签和删除模型。从 Delphi 代码实现完整的生命周期管理。
嵌入向量
在本地生成向量嵌入。无需向云端发送数据即可实现语义搜索、聚类和分类。
自托管/可配置主机
通过可配置的主机 URL 连接到任何 Ollama 实例。可在本地、局域网服务器或私有云中运行。
内置重试与日志记录
在瞬态故障时自动重试,可配置重试次数和等待间隔。完整的请求/响应日志记录用于调试。

快速入门

不到一分钟即可将 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."

实时流式传输

为构建响应式用户界面,使用 Server-Sent Events 逐 token 流式传输模型响应。

// 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、停止序列、最大 token 数),请使用类型化的请求和响应类。

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 服务器 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 模型,无需按 token 计费。结合 sgcWebSockets 内置的重试逻辑和日志记录,您可以获得适用于 Delphi 的生产就绪本地 AI 集成。