你的用户不想要一行筛选控件。他们想输入金额大于 500 按日期降序排列,然后看到表格随之变化。sgcWebSockets 2026.10 为 sgcHTML 新增了AI Data Pack:一个位于表格、数据表和透视表之上的查询栏,可以把一句话转换成筛选、排序、一个分组、高亮显示和一个数量限制。
有意思的地方不在于它调用了一个模型,而在于答案到达你的数据之前经历了什么。
两行代码
uses
sgcHTML_AI;
FAssistant := TsgcHTMLAIAssistant.Create(Self);
FAssistant.Provider := aiprOpenAI;
FAssistant.APIKey := ReadSetting('openai.key');
FGrid.AIAssistant := FAssistant;
FGrid.AIQueryEnabled := True;
这就是全部接线工作。查询栏出现在表格上方,问题以一个标签的形式返回,说明系统理解了什么,还有一个控件可以再次清除它。
完全没有 API 密钥也能用
不设置提供商,这个组件包依然能作答。库里内置的一个基于规则的解析器能理解人们实际会输入的问题:
金额大于 500 按日期降序排列(amount greater than 500 sort by date desc)按国家分组前 10 名介于 A 和 B 之间,包括逗号小数- 高亮请求
当提供商调用失败时,同一个解析器就是后备方案,它也是在没有 AI 单元的平台上运行的那部分。因此这个功能会退化为一个仍然有用的东西,而不是退化为一个错误,你也可以把它交付给一个不愿意为 token 付费的客户。
离开机器的是什么
默认情况下,你的行数据不会离开。请求只携带列名、列标题、列类型和三个示例值,仅此而已:
FAssistant.AllowRowDataToProvider := False; { the default }
FAssistant.MaxRows := 50; { when it is True }
这既出于显而易见的原因,也出于一个不那么显而易见的原因:更小的请求更便宜、也更快。
校验就是安全边界
无论返回什么,在应用之前都会先对照你自己的列进行检查。每个列名都对照白名单,每个运算符都对照一个封闭集合,每个值都按其所在列的类型强制转换,每个限制都会被夹紧。如果没有任何内容能通过检查,整个结果集就会被清空,并附带说明,这样模型生成的文本永远不会到达页面。
这个后果值得说清楚:一个试图夹带指令的问题不会产生任何结果。不是错误页面,不是部分筛选,什么都没有。我们在构建过程中用注入提示词和脚本载荷做过测试,这正是 QA 套件如今强制把关的行为。
不止是查询栏
列助手。表格的一列可以请求建议,每行一个,每条建议都会展示出来,由人来接受或拒绝。在人做出决定之前,不会写入任何内容。
智能粘贴到表单。粘贴一个地址、一段邮件签名或电子表格中的一行,表单就会把它映射到相应的字段上,并标记出哪些字段被填写了。
内联提示框。新增的 TsgcHTMLComponent_InlineAIPrompt 是字段旁边的一个小弹出框:提问、阅读答案、接受或放弃。
用哪个提供商
七个,而且只是一个属性:aiprOpenAI、aiprAnthropic、aiprGemini、aiprDeepSeek、aiprOllama、aiprGrok 和 aiprMistral。配合 aiprOllama 和一个 BaseUrl,整套系统可以运行在客户自己的硬件上,任何东西都不会离开这栋楼。
在它之下是这次发布的另一半:TsgcAIChat 现在可以要求这些提供商中的任何一个,通过新增的 ChatJSON 方法,回答遵循你提供的模式(schema)的 JSON,该方法会解析答案,如果无法解析,则会附上解析错误再问一次。这正是让一个结构化答案变成你可以直接采取行动的东西,而不是你还得手动抓取的东西。
在真实数据上看看效果
新增的演示 18.AIData 在大约 26,000 条预先生成的订单行上提供四个页面,不需要 API 密钥即可运行,并会打印出哪个引擎回答了每个问题,以及服务器花了多少毫秒。数据集是 SQLite,在首次启动时创建,所以没有任何东西需要安装。
升级
这个组件包是 sgcHTML 的一部分,在分配助手之前处于未激活状态:一个没有 AIAssistant 的表格,渲染出的标记与之前完全一样。
延伸阅读
观看视频
关于此功能的简短视频发布在eSeGeCe 频道上。
有问题、反馈,或需要迁移方面的帮助?欢迎联系我们 — 你会收到编写这些代码的人的回复。
