跳到主要内容

体验 AI 函数服务

本教程将引导您快速上手 seekdb AI 函数服务,深入了解其如何利用 AI 能力,帮助您理解实际应用,并在几分钟内体验 AI 原生数据库的强大功能。

概述

AI 函数通过 SQL 表达式,将 AI 模型能力直接集成到数据库内的数据处理中。它极大地简化了利用 AI 大模型进行数据提取、分析、总结和保存等操作,是当前数据库和数据仓库领域的重要新特性。seekdb 通过 DBMS_AI_SERVICE 包提供全面的 AI 模型和端点管理,并内置了多个 AI 函数表达式,同时支持通过视图监控 AI 模型调用情况。您无需编写额外代码,即可在 SQL 中直接调用 AI 模型,几分钟内即可体验 AI_COMPLETEAI_EMBEDAI_RERANKAI_PROMPT 几个核心函数:

  • AI_EMBED:通过调用嵌入模型(Embedding Model)将文本数据转换为向量数据。
  • AI_COMPLETE:通过调用指定文本生成大模型处理提示词和数据信息,并解析处理结果。
  • AI_PROMPT:将提示词模板和动态数据组织成 JSON 格式,可以在 AI_COMPLETE 函数中替换 prompt 参数直接使用。
  • AI_RERANK:通过调用重排序模型(Rerank Model)根据提示词对文本进行相似度排序。

该特性可以应用于文本生成、文本转换、文本重排序等场景。

前提条件

  • 联系管理员获取相应的数据库连接串,然后执行以下命令连接到数据库:
    # host: seekdb 数据库连接 IP。
    # port: seekdb 数据库连接端口。
    # database_name: 需要访问的数据库名称。
    # user_name: 数据库用户名。
    # password: 数据库密码。
    obclient -h$host -P$port -u$user_name -p$password -D$database_name
  • 确保你已拥有 AI 函数服务相关权限。每个示例前都会提供完整的模型和端点注册信息,您可以直接复制使用。

步骤一:使用 AI_EMBED 生成向量

AI_EMBED 可以将文本转换为向量,用于向量搜索。这是向量搜索的基础步骤,将文本数据转换为高维向量表示,以便进行相似度计算。

注册嵌入模型和端点

CALL DBMS_AI_SERVICE.DROP_AI_MODEL ('ob_embed');
CALL DBMS_AI_SERVICE.DROP_AI_MODEL_ENDPOINT ('ob_embed_endpoint');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL(
'ob_embed', '{
"type": "dense_embedding",
"model_name": "BAAI/bge-m3"
}');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL_ENDPOINT (
'ob_embed_endpoint', '{
"ai_model_name": "ob_embed",
"url": "https://api.siliconflow.cn/v1/embeddings",
-- 需替换为实际的 access_key
"access_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"provider": "siliconflow"
}');

尝试嵌入单行数据

SELECT AI_EMBED("ob_embed", "Hello world") AS embedding;

返回结果预期是一个向量数组,例如 [0.1, 0.2, 0.3]。这样可以将表中的文本批量转换为向量,用于后续的向量搜索。

步骤二:使用 AI_COMPLETE 和 AI_PROMPT 生成文本

AI_COMPLETE 可以在 SQL 中直接调用大语言模型,实现文本生成、翻译、分析等功能。AI_PROMPT 函数可以将提示词模板和动态数据组织成 JSON 格式,可以在 AI_COMPLETE 函数中替换 prompt 参数直接使用。

注册文本生成模型和端点

CALL DBMS_AI_SERVICE.DROP_AI_MODEL ('ob_complete');
CALL DBMS_AI_SERVICE.DROP_AI_MODEL_ENDPOINT ('ob_complete_endpoint');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL(
'ob_complete', '{
"type": "completion",
"model_name": "THUDM/GLM-4-9B-0414"
}');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL_ENDPOINT (
'ob_complete_endpoint', '{
"ai_model_name": "ob_complete",
"url": "https://api.siliconflow.cn/v1/chat/completions",
-- 需替换为实际的 access_key
"access_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"provider": "siliconflow"
}');

尝试情感分析

SELECT AI_COMPLETE("ob_complete", AI_PROMPT('你的任务是对提供的文本进行情感分析,判断其情感倾向为正面还是负面。
以下是需要分析的文本:
<text>
{0}
</text>
判断标准如下:
如果文本表达的是正面情感,输出1;如果文本表达的是负面情感,输出 -1。不要输出其他东西。', '天气真好啊')) AS sentiment;

返回结果如下:

+----------+
| sentiment|
+----------+
| 1 |
+----------+

步骤三:使用 AI_RERANK 优化搜索结果

AI_RERANK 可以对搜索结果进行智能重排序,根据查询词的相关性对文档列表重新排序。

注册重排序模型和端点

CALL DBMS_AI_SERVICE.DROP_AI_MODEL ('ob_rerank');
CALL DBMS_AI_SERVICE.DROP_AI_MODEL_ENDPOINT ('ob_rerank_endpoint');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL(
'ob_rerank', '{
"type": "rerank",
"model_name": "BAAI/bge-reranker-v2-m3"
}');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL_ENDPOINT (
'ob_rerank_endpoint', '{
"ai_model_name": "ob_rerank",
"url": "https://api.siliconflow.cn/v1/rerank",
-- 需替换为实际的 access_key
"access_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"provider": "siliconflow"
}');

尝试重排序

SELECT AI_RERANK("ob_rerank", "Apple", '["apple", "banana", "fruit", "vegetable"]');

返回结果如下:

+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| AI_RERANK("ob_rerank", "Apple", '["apple", "banana", "fruit", "vegetable"]') |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [{"index": 0, "relevance_score": 0.9911285638809204}, {"index": 1, "relevance_score": 0.0030552432872354984}, {"index": 2, "relevance_score": 0.0003349370090290904}, {"index": 3, "relevance_score": 0.00001892922773549799}] |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set

重排序可以显著提升搜索结果的准确性,特别适用于 RAG 场景。

步骤四:综合应用:构建智能问答系统

将三个 AI 函数组合使用,三步构建一个简单的智能问答系统。

注册所有需要的模型和端点

本示例需要同时使用嵌入模型、文本生成模型和重排序模型,请确保已注册以下模型和端点:

-- 注册嵌入模型(如果步骤一中已注册,可跳过)
CALL DBMS_AI_SERVICE.DROP_AI_MODEL ('ob_embed');
CALL DBMS_AI_SERVICE.DROP_AI_MODEL_ENDPOINT ('ob_embed_endpoint');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL(
'ob_embed', '{
"type": "dense_embedding",
"model_name": "BAAI/bge-m3"
}');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL_ENDPOINT (
'ob_embed_endpoint', '{
"ai_model_name": "ob_embed",
"url": "https://api.siliconflow.cn/v1/embeddings",
"access_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"provider": "siliconflow"
}');

-- 注册文本生成模型(如果步骤二中已注册,可跳过)
CALL DBMS_AI_SERVICE.DROP_AI_MODEL ('ob_complete');
CALL DBMS_AI_SERVICE.DROP_AI_MODEL_ENDPOINT ('ob_complete_endpoint');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL(
'ob_complete', '{
"type": "completion",
"model_name": "THUDM/GLM-4-9B-0414"
}');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL_ENDPOINT (
'ob_complete_endpoint', '{
"ai_model_name": "ob_complete",
"url": "https://api.siliconflow.cn/v1/chat/completions",
"access_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"provider": "siliconflow"
}');

-- 注册重排序模型(如果步骤三中已注册,可跳过)
CALL DBMS_AI_SERVICE.DROP_AI_MODEL ('ob_rerank');
CALL DBMS_AI_SERVICE.DROP_AI_MODEL_ENDPOINT ('ob_rerank_endpoint');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL(
'ob_rerank', '{
"type": "rerank",
"model_name": "BAAI/bge-reranker-v2-m3"
}');

CALL DBMS_AI_SERVICE.CREATE_AI_MODEL_ENDPOINT (
'ob_rerank_endpoint', '{
"ai_model_name": "ob_rerank",
"url": "https://api.siliconflow.cn/v1/rerank",
"access_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"provider": "siliconflow"
}');
信息

请将所有 access_key 替换为实际的 API Key。如果在前面的步骤中已经注册过相应的模型,可以跳过对应的注册步骤。

准备数据并生成向量

CREATE TABLE knowledge_base (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
content TEXT,
embedding TEXT
);

INSERT INTO knowledge_base (title, content) VALUES
('seekdb 简介', 'seekdb 是一个强大的数据库系统,支持向量搜索和 AI 函数。'),
('向量搜索', '向量搜索可以用于语义搜索,找到相似的内容。'),
('AI 函数', 'AI 函数可以在 SQL 中直接调用 AI 模型。');

UPDATE knowledge_base
SET embedding = AI_EMBED("ob_embed", content);

向量搜索并重排序

SET @query = "什么是向量搜索?";
SET @query_vector = AI_EMBED("ob_embed", @query);

-- 直接构建字符串数组格式的文档列表
SET @candidate_docs = '["seekdb 是一个强大的数据库系统,支持向量搜索和 AI 函数。", "向量搜索可以用于语义搜索,找到相似的内容。"]';

SELECT AI_RERANK("ob_rerank", @query, @candidate_docs) AS ranked_results;

返回结果如下,index 为文档索引,relevance_score 为相关性分数:

+-------------------------------------------------------------------------------------------------------------+
| ranked_results |
+-------------------------------------------------------------------------------------------------------------+
| [{"index": 1, "relevance_score": 0.9904329776763916}, {"index": 0, "relevance_score": 0.16993996500968933}] |
+-------------------------------------------------------------------------------------------------------------+
1 row in set

生成答案

基于第一步的问题搜索和第二步的重排序结果,生成答案:

SELECT AI_COMPLETE("ob_complete",
AI_PROMPT('基于以下文档内容,回答用户的问题。
用户问题:{0}

相关文档:{1}

请基于以上文档内容,简洁准确地回答用户的问题。', @query, CAST(JSON_EXTRACT(@candidate_docs, '$[1]') AS CHAR))) AS answer;

返回结果如下:

+--------------------------------------------------------------------------------------------------------------------------------------------+
| answer |
+--------------------------------------------------------------------------------------------------------------------------------------------+
| 根据提供的文档内容,向量搜索是一种用于语义搜索的技术,旨在通过比对向量数据来找到相似的内容。 |
+--------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set

通过这三个步骤,您可以在 seekdb 数据库内快速完成完整的 AI 应用流程:向量化、搜索、重排序、生成答案。

总结

通过本教程,您已经掌握了 seekdb AI 函数服务的核心功能:

  • AI_EMBED:文本转向量,为向量搜索准备数据。
  • AI_COMPLETE:在 SQL 中直接调用 LLM,实现文本生成、翻译、分析等功能。
  • AI_RERANK:优化搜索结果的准确性,提升 RAG 应用效果。

下一步

更多操作

更多体验 seekdb 的 AI Native 特性以及尝试基于 seekdb 搭建 AI 应用的使用指导,参见:

除了使用 SQL 进行操作之外,也支持通过 seekdb 提供的 Python SDK(pyseekdb)进行操作,使用方法参见 通过 Python SDK 体验嵌入式pyseekdb 概述