Delphi 使用场景:一个任务,一个页面
产品页告诉你一个组件能做什么,参考页告诉你每个属性叫什么名字,但它们都不会告诉你怎样把手头这件事做完。这些页面负责这一部分。每一页把一个任务从空白窗体带到可运行的代码,在每一步都写明单元和组件名称,并在开头就说明需要哪个产品、哪个版本和哪些平台,让你在写下第一行代码之前就知道成本。
产品页告诉你一个组件能做什么,参考页告诉你每个属性叫什么名字,但它们都不会告诉你怎样把手头这件事做完。这些页面负责这一部分。每一页把一个任务从空白窗体带到可运行的代码,在每一步都写明单元和组件名称,并在开头就说明需要哪个产品、哪个版本和哪些平台,让你在写下第一行代码之前就知道成本。
这份清单里的每一页都遵循同样的结构,因为要回答的始终是同样的三个问题,而且顺序也相同。
页面按你想要的结果来组织,组件在任务推进到它们时才出现。如果一个任务跨越多个组件,它们全都在这里,顺序就是你实际会遇到它们的顺序。如果存在两条路线,两条都会展示,并写清它们之间的取舍。
这里的 Pascal 代码来自正式发行的源码和随包附带的示例工程,不是伪代码。每个 uses 子句都写出单元名称,事件处理程序带着真实的签名,那些会让你损失一个下午的失败场景就写在它们发生的地方,而不是塞进脚注。
每一页都在顶部写明该任务需要的产品、版本、编译器版本和平台。其中一半功能由 sgcVer.inc 里的 {$IFDEF} 控制,所以一个无法解析的方法往往是授权问题,而不是语法问题,这件事最好在第一页就知道。
下面每段摘要本身就足以回答问题,因此你可以在打开完整页面之前,先判断它值不值得你接下来的二十分钟。
从 VCL、FMX 或控制台应用发送一段提示词并拿到回答,模型可以是 OpenAI 或 Anthropic Claude 这样的托管模型,也可以是通过 Ollama 跑在你自己机器上的模型。有两条路线。TsgcAIChat 把所有厂商放在同一套 API 之后,更换厂商只需要给 Provider 赋一次值;而分厂商客户端 TsgcHTTP_API_OpenAI、TsgcHTTP_API_Anthropic 和 TsgcHTTP_API_Ollama 则完整暴露各家 API,供你使用视觉输入、批量任务、向量嵌入或语音转写。
接着,页面会讲每个项目随后都会遇到的三件事。第一是流式输出,让文字在模型还在生成时就出现在备注框里,既有解码后的增量层面,也有原始事件层面。第二是工具调用,你用 JSON Schema 描述一个 Pascal 函数,模型再请你执行它。第三是托管模型与本地模型之间的选择,对于任何受数据处理协议约束的场景,这是一个合规决策,而不是性能决策。
需要:sgcWebSockets Enterprise,或独立的 sgcAI 包。REST 客户端可在 Windows、macOS、Linux、iOS 和 Android 上编译;TsgcAIChat 仅限 Windows,因此页面同时展示了两条路线。
带 PKCE 的授权码流程,也就是如今所有提供方对原生桌面应用所期望的流程,由一个非可视组件驱动完成。不需要嵌入式浏览器,不需要你自己的 Web 服务器,也不需要 REST 框架。TsgcHTTP_OAuth2_Client 生成 verifier,派生 challenge,打开系统浏览器,在回环重定向上监听,交换授权码,并携带令牌触发 OnAfterAccessToken。
这套流程在桌面端出问题的地方就是重定向,所以页面在这上面花了不少篇幅:为什么重定向是回环地址而不是公网 URL,要向提供方注册什么,以及 redirect_uri_mismatch 到底在告诉你什么。随后还会讲刷新令牌,让浏览器不必再打开第二次;讲如何存放凭据而不是随手一放;讲现成的 Google 和 Microsoft 组件;以及 Gmail 和 Microsoft 365 如今在 SMTP 和 IMAP 上所要求的 XOAUTH2 交接。
需要:sgcWebSockets Standard 及以上版本,或独立的 sgcAuth 包。支持 Windows、macOS、Linux、iOS 和 Android。只有授权服务器那一半属于 Enterprise 功能。
阅读指南 →两个应用位于两个不同的网络,彼此直接交换一条聊天通道、一路麦克风流和一路摄像头流,中间没有媒体服务器,进程里也没有嵌入浏览器。页面把 WebRTC 拆成它实际包含的四个问题:用 SDP 的 offer 和 answer 描述会话、把这份描述送到对端、在 NAT 之间找到一条通路,以及真正把字节传出去。
信令是需要你自己写的那部分,所以这里给出了完整实现,是一个基于 TsgcWebSocketServer 的简单中继,只有三种消息类型。接着是对等连接及其事件、ICE 候选,以及 host、server reflexive 和 relay 三类候选各自的代价,还有人们常常忘记打开的 TURN 开关、支持逐通道可靠性的 SCTP 数据通道,以及音视频轨道,它们与数据通道属于不同的传输方式,失败模式也不同。最后收尾讲的是那些完全不产生错误的失败,这正是点对点难以调试的原因。
需要:对等连接、ICE 和 TURN 客户端随 sgcWebSockets Enterprise 提供。offer 与 answer 方法、数据通道和媒体轨道需要在 Enterprise 之上再加 sgcWebRTC 包,该包也包含在 All-Access 中。STUN 客户端在 Standard 版本中即可获得。
阅读指南 →还有更多任务正在整理中。如果你正在做的那件事还没出现在这里,博客用一篇篇文章覆盖了其中很大一部分内容,同时技术支持也会为你指出合适的示例工程。
这里汇总了每一页在开头部分给出的同样信息,让你不必打开三个标签页就能比较三个任务的成本。
| 指南 | 主要组件 | 产品与版本 | 平台 |
|---|---|---|---|
| 从 Delphi 调用 LLM | TsgcAIChat, TsgcHTTP_API_OpenAI, TsgcHTTP_API_Anthropic, TsgcHTTP_API_Ollama |
sgcWebSockets Enterprise,或独立的 sgcAI 包 | REST 客户端支持 Windows、macOS、Linux、iOS 和 Android。TsgcAIChat 仅限 Windows。 |
| 带 PKCE 的 OAuth2 登录 | TsgcHTTP_OAuth2_Client,以及 Google 和 Microsoft 封装组件 |
sgcWebSockets Standard 及以上版本,或独立的 sgcAuth 包 | Windows、macOS、Linux、iOS 和 Android |
| 两个应用之间的 WebRTC | TsgcRTCPeerConnection, TsgcICEClient, TsgcTURNClient, TsgcWebSocketServer |
对等连接需要 sgcWebSockets Enterprise,offer 与 answer、数据通道和媒体则还需要 sgcWebRTC 包。两者都包含在 All-Access 中。 | 采集与渲染需要 Windows。传输部分本身是跨平台的。 |
上面每一条关于版本的说明,都与正式发行的 sgcVer.inc 中强制执行的一致。完整拆解请见 Delphi 功能矩阵,而选择哪个版本页面则从另一个方向走一遍同样的决策。
下面这些页面回答相邻的问题:某个组件做什么、它叫什么名字、它与同类相比如何,以及它的价格。
| sgcWebSockets 本页每一篇指南背后的库,涵盖从 WebSocket 和 HTTP/2 到 MQTT、AMQP、WebRTC 以及 AI 客户端。 | 打开 | |
| 库对比 还在挑选库,而不是在写代码?对比中心把 sgcWebSockets 与 Indy、ICS、TMS、mORMot 2、IPWorks 和 Chilkat 并列呈现。 | 打开 | |
| 组件参考 库中的每一个组件,连同它们各自公开的属性、方法和事件,以及背后的技术文档。 | 打开 | |
| 术语表 这些指南用到的协议、密码学和身份验证术语,每一条都链接到定义它的 RFC。 | 打开 | |
| 博客 数百篇实操文章,包括这些指南各自引用的发布说明文章。 | 打开 | |
| 版本与价格 Standard、Professional、Enterprise 和 All-Access 各自包含什么,以及独立扩展包的定位。 | 打开 |