DelphAI:将现代大语言模型集成至 Delphi 应用程序的桥梁
在软件开发领域,Delphi 凭借其强大的原生编译能力和快速的 GUI 开发效率,依然在企业级应用和工业控制领域占据一席之地。然而,随着生成式 AI(Generative AI)的爆发,如何将 OpenAI、Anthropic 或本地部署的 LLM(大语言模型)高效地集成到 Delphi 项目中,成为了许多开发者关注的焦点。
DelphAI 正是为了填补这一空白而诞生的开源项目。它不仅是一个简单的 API 封装库,更是一套旨在让 Delphi 开发者能够以“地道”的方式调用 AI 能力的框架。
🚀 项目核心概述
DelphAI 是一个为 Delphi 语言设计的轻量级框架,旨在简化与 AI 接口(特别是兼容 OpenAI 协议的接口)的交互。它将复杂的 HTTP 请求、JSON 解析和流式传输(Streaming)封装在简单的类和方法之下,使开发者无需深陷于 TNetHTTPClient 的细节,即可实现智能对话、文本生成和上下文管理。
核心特性
- 协议兼容性:完美支持 OpenAI API 标准,这意味着它不仅能连接 GPT-4,还能连接任何兼容 OpenAI 格式的本地模型(如通过 Ollama 或 LocalAI 部署的模型)。
- 异步处理:支持非阻塞的 AI 请求,确保在等待 AI 生成答案时,Delphi 的主界面(UI)不会卡死。
- 流式输出(Streaming):支持实时接收 AI 生成的字符,实现类似 ChatGPT 那样逐字跳出的动态效果。
- 类型安全:利用 Delphi 的强类型特性,定义了清晰的请求与响应对象,减少了手动解析 JSON 字符串的错误率。
🛠️ 快速上手指南
1. 环境准备
在开始之前,请确保你拥有:
- IDE: Delphi 10.3 Rio 或更高版本(建议使用 11 或 12)。
- API Key: 一个有效的 OpenAI API Key,或者一个运行中的本地 Ollama 服务地址。
- 依赖库: 确保项目中引用了 System.JSON 和 System.Net.HttpClient。
2. 基础配置
首先,你需要实例化 DelphAI 的客户端并配置你的密钥和端点。
uses
DelphAI.Client, DelphAI.Types;
var
AIClient: TDelphAIClient;
begin
AIClient := TDelphAIClient.Create('sk-your-api-key-here');
// 如果使用本地 Ollama,可以修改 BaseURL
AIClient.BaseURL := 'http://localhost:11434/v1';
AIClient.Model := 'gpt-3.5-turbo'; // 或 'llama3'
end;
💻 实战实例
场景一:简单的单次问答(同步模式)
这是最基础的用法,适用于不需要实时反馈的简单任务,如文本总结或翻译。
procedure TForm1.btnAskClick(Sender: TObject);
var
Response: TAIResponse;
begin
try
// 发送请求并等待结果
Response := AIClient.ChatCompletion('请解释什么是 Delphi 语言的 RTTI?');
memoOutput.Lines.Add(Response.Content);
except
on E: Exception do
ShowMessage('错误: ' + E.Message);
end;
end;
场景二:构建一个具有记忆的对话机器人(上下文管理)
AI 本身是没有记忆的,为了实现连续对话,我们需要将之前的对话历史发送给模型。DelphAI 允许我们构建消息列表。
var
ChatHistory: TList<TMessage>;
begin
ChatHistory := TList<TMessage>.Create;
// 添加系统提示词,定义 AI 的人格
ChatHistory.Add(TMessage.Create('system', '你是一个专业的 Delphi 编程专家,请用简洁的语言回答问题。'));
// 添加用户问题
ChatHistory.Add(TMessage.Create('user', '如何创建动态数组?'));
// 获取 AI 回答并将其存入历史
var Response := AIClient.ChatCompletionList(ChatHistory);
ChatHistory.Add(TMessage.Create('assistant', Response.Content));
memoOutput.Lines.Add(Response.Content);
end;
场景三:实现“打字机”效果(流式传输)
对于长文本生成,流式传输能极大提升用户体验。DelphAI 通过事件回调机制实现了这一点。
procedure TForm1.btnStreamClick(Sender: TObject);
begin
memoOutput.Clear;
// 定义流式回调函数
AIClient.OnChunkReceived :=
procedure(const Chunk: string)
begin
// 在主线程中更新 UI
TThread.Queue(nil, procedure
begin
memoOutput.Text := memoOutput.Text + Chunk;
end);
end;
// 启动异步流式请求
AIClient.ChatCompletionStream('写一篇关于 Delphi 2024 新特性的详细分析报告。');
end;
🔍 深度分析:为什么选择 DelphAI 而不是直接调用 REST API?
很多开发者可能会问:“我直接用 TRESTClient 也能发请求,为什么要用这个库?”
降低认知负载: 直接调用 REST API 需要处理复杂的 JSON 嵌套结构(例如
choices[0].message.content)。DelphAI 将这些路径映射为简单的属性,你只需要调用.Content即可。处理流式数据的复杂性: 处理
text/event-stream协议在 Delphi 中是非常繁琐的,需要手动解析data: {...}格式的片段。DelphAI 内部处理了这些细节,直接将解析后的文本片段通过事件抛出。解耦模型供应商: 通过更改
BaseURL,你可以无缝地在 OpenAI、Azure OpenAI、Groq 或本地 Ollama 之间切换,而无需修改业务逻辑代码。
🛠️ 进阶建议与优化
在使用 DelphAI 开发实际项目时,建议考虑以下几点:
- 超时处理:AI 响应时间波动较大,建议将
TNetHTTPClient的超时时间设置得长一些,避免在生成长文本时触发超时异常。 - Token 成本控制:在构建
ChatHistory时,不要无限制地添加历史记录。建议实现一个简单的“滑动窗口”机制,仅保留最近 10 轮对话,以节省 Token 并避免触碰模型上下文上限。 - 本地模型部署:为了数据隐私和零成本,强烈建议尝试 Ollama + DelphAI。在本地运行
llama3或mistral模型,将BaseURL指向本地端口,即可实现完全私有的 AI 助手。
总结
DelphAI 为 Delphi 开发者打开了一扇窗,让古老的 Pascal 语言能够驾驭最前沿的 AI 能力。无论你是想开发一个智能代码助手,还是想为现有的企业管理软件增加自动化分析功能,DelphAI 提供的简洁接口和稳健架构都使其成为了一个理想的选择。
项目地址:https://github.com/fgrandini/DelphAI



还没有评论,来说两句吧...