文本生成类 AI 函数
本文档介绍 seekdb 中支持的文本生成类 AI 函数的相关功能。
AI 函数通过 SQL 表达式,将 AI 模型能力直接集成到数据库内 的数据处理中。它极大地简化了利用 AI 大模型进行数据提取、分析、总结和保存等操作,是当前数据库和数据仓库领域的重要新特性。seekdb 通过 DBMS_AI_SERVICE 包提供 AI 模型和端点管理,并新增了几个内置 AI 函数表达式,并支持通过视图监控 AI 模型调用情况。
前提条件
- 在使用文本生成类 AI 函数之前,需要确保你已拥有相关权限。详细权限请参见 AI 函数服务权限。
- 在使用文本生成类 AI 函数之前,需要确保你已注册好 AI 模型及端点信息。详细信息请参见 AI 模型管理。
AI_COMPLETE 和 AI_PROMPT
AI_COMPLETE 函数通过 model_key 指定一个已注册的文本生成大模型(LLM),对用户提供的提示词(prompt)和数据进行处理,并返回大模型生成的文本信息。用户可以在 prompt 参数中自定义组织提示词和数据库内的数据格式。这种方式不仅支持对文本数据进行多样化处理,还能在数据库内部实现批量处理,有效避免了数据在数据库与大模型之间来回拷贝的开销。
考虑到许多 AI 应用场景中,提示词往往具有高度结构化特征,需要动态注入具体数据,而每次手动使用 CONCAT 等函数拼接提示词和输入内容,不仅开发成本高,还容易写错导致格式问题。为了支持提示词复用和提示词与数据动态组合的需求,seekdb 提供了 AI_PROMPT 函数。AI_PROMPT 将提示词从"静态文本"升级为"可复用、可参数化"的函数模板形式,可以在 AI_COMPLETE 中替代 prompt 参数直接使用,从而极大地简化了提示词的构建过程,提升了开发效率和准确性。
AI_PROMPT 函数
AI_PROMPT 函数用于构建和格式化提示词,支持动态插入数据。
语法
AI_PROMPT 函数语法如下:
AI_PROMPT('template', expr0 [ , expr1, ... ]);
参数说明:
| 参数 | 描述 | 类型 | 是否可空 |
|---|---|---|---|
| template | 用户输入的提示词模板。 | VARCHAR(max_length) | No |
| expr | 用户输入的数据。 | VARCHAR(max_length) | No |
参数 template 和 expr 为必填项,不允许为空。其中,expr 参数只支持 VARCHAR 类型,不支持 JSON 类型。
返回值:
- JSON,格式化后的提示词字符串。
示例
AI_PROMPT 函数将模板字符串和动态数据组织成 JSON 格式:
- 第一个参数(模板字符串 template)会被放在返回 JSON 的
template字段中。 - 后续的参数(数据值 expr0、expr1、...)会被放在返回 JSON 的
args数组中。 - 模板中的占位符
{0}、{1}等会按索引对应args数组中的数据,在AI_COMPLETE函数中使用时会被自动替换。
例如:
SELECT AI_PROMPT('Recommend {0} of the most popular {1} to me.', 'ten', 'mobile phones');
返回结果如下:
{
"template": "Recommend {0} of the most popular {1} to me.",
"args": ["ten", "mobile phones"]
}
基于上个例子,在 AI_COMPLETE 函数中使用 AI_PROMPT 函数:
SELECT AI_COMPLETE("ob_complete",AI_PROMPT('Recommend {0} of the most popular {1} to me.just output name in json array format', 'two', 'mobile phones')) AS ans;
返回结果如下:
+--------------------------------------------------+
| ans |
+--------------------------------------------------+
| ["iPhone 15 Pro Max","Samsung Galaxy S24 Ultra"] |
+--------------------------------------------------+
AI_COMPLETE 函数
语法
AI_COMPLETE 函数语法如下:
AI_COMPLETE(model_key, prompt[, parameters])
--如果使用 AI_PROMPT 函数,则将 prompt 参数替换为 AI_PROMPT 函数,示例见 AI_PROMPT 函数。
AI_COMPLETE(model_key, AI_PROMPT(prompt_template, data))
参数说明:
| 参数 | 描述 | 类型 | 是否可空 |
|---|---|---|---|
| model_key | 数据库内注册的模型。 | VARCHAR(128) | No |
| prompt | 用户输入的提示词信息。 | VARCHAR/TEXT(LONGTEXT) | No |
| parameters | 用于支持配置 API 提供的可选项。模型的可选字段,会被直接放入到生成的消息体里,在不同厂商这里有一定差异。通常来说,常见的可选项有这些:temperature、top_p、max_tokens。一般情况下无需指定用默认配置即可。 | JSON | Yes |
必须指定 model_key、prompt,并且其中一个为 NULL 时,函数提示报错。
返回值:
- text,大模型根据提示词生成的文本。
示例
-
情感分析示例
SELECT AI_COMPLETE("ob_complete","你的任务是对提供的文本进行情感分析,判断其情感倾向为正面还是负面。
以下是需要分析的文本:
<text>
天气真好啊
</text>
判断标准如下:
如果文本表达的是正面情感,输出1;如果文本表达的是负面情感,输出 -1。不要输出其他东西.\n") AS ans;返回结果如下:
+-----+
| ans |
+-----+
| 1 |
+-----+ -
翻译示例
CREATE TABLE comments (
id INT AUTO_INCREMENT PRIMARY KEY,
content TEXT
);
INSERT INTO comments (content) VALUES ('hello world!');
-- 以 concat 表达式形式将处理的数据替换成数据库中表上的列名,自然地就能对数据库中的数据进行批量处理,而无需将数据从数据库拷贝到大模型和将大模型结果拷贝回数据库内
SELECT AI_COMPLETE("ob_complete",
concat("你是一个翻译大师,你需要将以下将英语翻译成中文。以下是需要翻译的文本:<text>",
content,
"</text>")) AS ans FROM comments;返回结果如下:
+-------------+
| ans |
+-------------+
| 你好,世界! |
+-------------+ -
分类示例
SELECT AI_COMPLETE("ob_complete","你是一个分类大师,你会获取到一堆问题文本,你需要区分这些问题的归属,归属列表为[\"硬件部\",\"软件部\",\"其他\"].以下是需要分析的文本:
<text>
这块屏幕质量真差
</text>") AS res;返回结果如下:
+--------+
| res |
+--------+
| 硬件部 |
+--------+