AI 智能体技能:面向 Delphi、C++Builder 和 .NET | eSeGeCe

AI 智能体技能:面向 Delphi、C++Builder 和 .NET

您的 AI 助手从未读过 eSeGeCe 的源码,于是它会凭空捏造并不存在的属性,还会把组件放进错误的单元。智能体技能为它提供每个库真实的公开 API。免费,MIT 许可,一行命令即可安装。

自信满满、却编译不过的代码

让助手用 Delphi 写一个 WebSocket 客户端,您得到的会是一段结构工整、却在细节上出错的代码。原因不是模型粗心,而是模型从未见过这个库。

这些模型学的是公开代码。eSeGeCe 组件是商业产品,其源码从未进入任何训练集。模型认得出 Delphi 组件库的样子,剩下的部分就用它熟悉的其他库来填补。由此产生了四类错误,而这四类错误让您付出的代价完全一样:花上二十分钟,去找出那行看似合理、实则写错的代码。

捏造出来的成员

一个属性或事件,读起来就像是我们会写的东西,可它并不存在。第一个告诉您真相的,是编译器。

错误的单元

组件是真的,uses 子句却不是。这是生成的 sgcWebSockets 代码编译失败最常见的单一原因。

三个版本之前的 API

只要模型见过某个旧示例的片段,它就会照搬一个我们早已改名或移除的方法。

悄无声息的版本类型错误

在我们这里能编译、在您那里却不能的代码,因为它用到的组件需要您的授权并未包含的版本类型。

智能体按需读取的文档

技能不是会运行的插件,也不是在什么数据上训练出来的模型。它就是一个装着 Markdown 的文件夹,其机制刻意保持简单。

1. 智能体只读一段简短的描述

每个技能都以几行 frontmatter 开头,而智能体始终摆在眼前的只有 description。它用平实的语言说明该技能覆盖哪个库、哪个主题领域。

这正是开销得以保持低廉的原因。当您问的是不相干的问题时,您的智能体不必随身背着成千上万行 API 参考。

SKILL.md
---
name: sgcwebsockets-mq
description: Use when connecting Delphi or
  C++Builder code to a message broker with
  sgcWebSockets: MQTT, STOMP including
  RabbitMQ and ActiveMQ, AMQP 0.9.1, AMQP
  1.0, Kafka and WAMP2.
compatibility: Requires Delphi 7 to Delphi
  13, or C++Builder 2007 to 13.
---

2. 由您的问题决定加载什么

当您问起 MQTT 消息代理时,那段描述匹配上了,智能体便载入消息代理技能。其他技能一概不打开。改问 WebRTC,加载的就是另一个技能。

在技能内部,它的浏览方式和您一样:先看组件索引找到组件,再看该组件的 API 页面,然后翻到某个它需要取值的选项类的类型页面。

skill folder
sgcwebsockets-mq/
  SKILL.md
  reference/
    components-index.md
    api/TsgcWSPClient_MQTT.md
    types/TsgcWSMQTTLWT_Options.md
  examples/TsgcWSPClient_MQTT.md
  concepts/overview.md

3. 内容由我们的源码生成

API 页面不是手写的。每次发布时,生成器都会解析整个库,并导出其 public 和 published 表面:每个组件及其属性、方法和事件,它所在的单元,包含它的版本类型,以及这些成员所使用的类型。

因此技能描述的正是您手上的那个版本。它们不会像手工维护的文档那样逐渐失准,上个月新增的组件,在发布当天就已经写进技能。

reference/api/TsgcWSPClient_MQTT.md
unit: sgcWebSocket_Protocols
Edition: Standard

| Delphi | Type |
| `Client: TsgcWebSocketClient` | ... |
| `MQTTVersion: TwsMQTTVersion` | ... |
| `LastWillTestament: ...`      | ... |

4. 生成器写不出来的部分,由人来写

生成的表格能告诉智能体存在哪些东西。它们不会告诉它协议组件本身并不拥有套接字,它要挂接到一个传输客户端上,也不会告诉它连接 1883 端口的代理需要把 Specifications.RFC6455 设为 False

所以每个技能都以一份行动手册开头,由亲手写出这个库的人撰写:何时该用它,动笔写代码之前该先问您什么,以及那些真正会把人绊倒的错误。

the playbook
## Things that catch people out

- Setting Active = true on the protocol
  component does nothing useful. The
  transport client owns the connection.
- One transport carries one protocol.
- MQTT has two heartbeats, and they are
  different mechanisms with the same name.

安装一次,之后只管开口问

有三种智能体可以直接安装插件。其余的读取一个文件夹,您把技能复制进去即可。此后无需调用任何东西:何时该用哪个技能,由智能体自行判断。

/plugin marketplace add esegece-com/agent-skills
/plugin install sgcwebsockets-delphi@esegece

市场只需添加一次,之后您用到多少插件就装多少。/skills 会列出当前生效的技能。日后再安装第二个产品时,不必重复添加市场这一步。

codex plugin marketplace add esegece-com/agent-skills
codex plugin add sgcwebsockets-delphi@esegece
codex plugin list

Codex 用的是 plugin add 而不是 plugin install,市场名称则相同。

克隆仓库,然后把您需要的技能文件夹从 plugins/<plugin>/skills/ 复制到智能体所监视的目录中。工程级优先于全局级,因此放进某个仓库里的技能只对该工程生效。

智能体工程内全局
Claude Code.claude/skills/%USERPROFILE%\.claude\skills\
GitHub Copilot.github/skills/%USERPROFILE%\.copilot\skills\
Cursor.cursor/skills/
Codex CLI.agents/skills/
JetBrains Junie.junie/skills/%USERPROFILE%\.junie\skills\

上述 Copilot 路径同样会被 Visual Studio、VS Code 和 Copilot CLI 读取。在 VS Code 中,请启用 "Chat: Use Agent Skills" 设置,或者从命令面板运行 "Chat: Install Plugin From Source" 并填入仓库地址。

装上之后有什么变化

区别不在于助手变聪明了,而在于它不再对我们的库瞎猜。

能编译的代码

成员取自生成的 API,而不是靠形似推测,因此答案里出现的属性和事件,正是该组件真正公开的那些。

正确的 uses 子句

每个 API 页面都写明组件所在的单元,对 .NET 则写明唯一的命名空间。仅此一项,就消除了最常见的编译失败。

版本类型的问题先说清楚

每个组件都标注了所需的最低版本类型,因此在您动手写代码之前,助手就能告诉您某个组件需要企业版。

它清楚自己不知道什么

技能会明确说明哪些部分有文档。当助手找不到某个枚举时,它得到的指示是向您询问,而不是编造一个看起来没错的常量。

真实示例,而非草图

每个示例都提炼自随产品发布的演示程序,只保留与该组件相关的部分,而不是整个窗体。

天生就是最新的

每次发布都从源码重新生成。新组件在发布当天就有文档,被移除的组件也在同一天消失。

只加载您问到的那部分

按主题拆分意味着一个 MQTT 问题只会载入消息代理技能,一个 222 个组件的库,其余部分不会挤进对话。

免费,且无需授权

采用 MIT 许可,完全公开。您可以先装上它们来评估这个库,之后再决定是否购买,也可以把它们当作独立的文档来读。

横跨各个库的六个插件

每个产品一个插件;至于 sgcWebSockets,则是一个包含多个主题技能的插件,而不是一个庞大的技能。

插件技能数覆盖内容
sgcwebsockets-delphi18WebSocket 核心、消息代理、sgc 子协议、交易所行情、AI 与 LLM、服务集成、HTTP 与传输层、身份验证、P2P 与 WebRTC、IoT,以及六个 sgcHTML 控件技能
sgcwebsockets-dotnet7从 C# 使用同一个库,并附有下文所述的覆盖情况页面
sgcsign-delphi1XAdES、PAdES、CAdES、Authenticode、RFC 3161 时间戳、OCSP 以及各类密钥提供程序
sgcopenapi-delphi1OpenAPI 解析器、SDK 生成器和服务器组件
sgcindy-delphi1定制版 Indy TCP/IP 实现
sgcbiometrics-delphi1Windows Hello、指纹和人脸身份验证

sgcWebSockets 为什么是十八个技能

这个库注册了 222 个组件。用一个技能覆盖全部组件,会迫使智能体为了回答一个关于某个协议的问题而打开整个库,既慢,也让答案变差而不是变好。

所以它按领域做了拆分。每个技能都小到可以完整读完,又具体到能被正确选中;同时还有一个总索引,负责回答“我需要哪个组件”,并把问题引到正确的技能上。

关于 .NET 的实话

已发布的 .NET 程序集,公开了 Delphi 库所注册的 222 个组件中的 70 个。与其让助手即兴发挥出一套并不存在的 C# API,我们宁愿把话说明白。

因此 .NET 插件附带一份生成的覆盖情况页面,逐一列出仅 Delphi 才有的那 152 个组件,以及每个组件所在的单元。它由构建时比对两个产品得出,因此描述的是您手上的构建,而不是某种设想。

只是文档,别无其他

这一点值得说清楚,因为“安装这个插件”确实会让人合理地想知道它到底做了什么。

什么都不会执行

技能就是 Markdown。它里面没有代码,不会在您的机器上运行任何东西,安装它也不会改动您的工程。

不向我们发送任何东西

没有遥测,不回传,也不记录您问了什么。我们并不知道您装了它们,文件一旦复制到本地即可离线使用。

不暴露任何源码

只包含 public 和 published 表面。方法体、private 字段和 protected 成员都被生成器排除在外,因此安装技能不会把我们的实现放到任何人的磁盘上。

MIT 许可

仓库采用 MIT 许可,您可以自由复制、fork 并改造它的结构。一份 NOTICE 文件保留了文档内容本身的权利,这部分仍归我们所有。

大家常问的问题

让您的助手学会这套 API

免费,MIT 许可,一行命令即可安装。然后把您本来就打算问的问题问它。