基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
使用 AI_EMBED 函数
更新时间:2026-09-15 10:00:45
本文档介绍如何使用 AI 函数服务中的 AI_EMBED 函数,在 OceanBase AI 数据库内部直接将文本或图片转换为向量数据。
说明
图片嵌入从 V4.6.2.1 版本开始支持。
概述
注意
混合搜索(Hybrid Search)依赖 AI 模型管理和 AI_EMBED 函数功能。在删除 AI 模型时,需检查其是否被混合搜索引用,以避免潜在问题。
OceanBase AI 数据库支持使用 AI 函数服务中的 AI_EMBED 函数生成向量嵌入。用户无需安装任何依赖,只需调用 DBMS_AI_SERVICE PL 包注册厂商信息,即可在 SQL 中调用该函数。
AI_EMBED 通过 model_key 指定一个已注册的嵌入模型(Embedding Model),将文本、图片 URL 或图片二进制转换为向量。当模型支持多个维度时,可通过 dim 指定输出的向量维度;对图片输入时,通过 JSON 参数 parameters 指定 {"type":"image"} 指定类型。
前提条件
权限授予
在使用 AI_EMBED 函数等 AI 函数服务之前,需要确保你已拥有相关权限。详细权限请参见 AI 函数调用权限。
模型注册
在使用 AI_EMBED 函数之前,需要先注册厂商。以下为新语法示例:
CALL DBMS_AI_SERVICE.REGISTER_PROVIDER('aliyun-dashscope', '{
"access_key": "sk-xxxx"
}');
注册完成后,可通过 provider/model 格式调用,例如 aliyun-dashscope/text-embedding-v3。更多厂商信息请参见 AI 模型注册。
语法
AI_EMBED(model_key, input[, dim[, parameters]])
参数说明:
| 参数 | 描述 | 类型 | 是否可选 |
|---|---|---|---|
| model_key | 模型标识,provider/model 格式,例如 aliyun-dashscope/text-embedding-v3。 |
VARCHAR(128) | 否 |
| input | 待嵌入的数据:文本、图片 URL(HTTP/HTTPS),或图片二进制(如 BLOB 列、FROM_BASE64(...))。 |
VARCHAR / BLOB | 否 |
| dim | 指定输出向量维度。部分模型支持配置多个维度;可省略,省略时使用模型默认维度。 | INT64 | 是 |
| parameters | 可选配置,JSON 对象或 JSON 字符串。图片输入时须指定 {"type":"image"}。省略 dim 时,可将本参数直接作为第三参数传入。 |
JSON | 是 |
必须指定 model_key、input,并且其中一个为 NULL 时,函数提示报错。
返回值说明如下:
- vector 格式的字符串,嵌入模型根据输入转换的向量。
示例
生成文本向量
SELECT AI_EMBED(
'aliyun-dashscope/text-embedding-v3',
'OceanBase 是一款分布式数据库',
128
) AS embedding;
第三个参数 128 表示期望返回 128 维向量。省略该参数时使用模型的默认维度。
通过图片 URL 生成向量
SELECT AI_EMBED(
'aliyun-dashscope/qwen2.5-vl-embedding',
'https://example.com/sample.png',
'{"type":"image"}'
) AS embedding;
图片 URL 必须使用 HTTP 或 HTTPS。
通过图片二进制生成向量
图片二进制可通过 FROM_BASE64(...) 传入,也可直接使用 BLOB 列。OceanBase 会自动识别图片格式,并转换为模型可接收的格式。
-- 将 BASE64 图片转为二进制后嵌入
SET @img_base64 = '...'; -- 替换为实际的图片 BASE64 字符串
SELECT AI_EMBED(
'aliyun-dashscope/qwen2.5-vl-embedding',
FROM_BASE64(@img_base64),
'{"type":"image"}'
) AS embedding;
-- 图片已保存在 BLOB 列时,可直接传入该列:
SELECT id,
AI_EMBED(
'aliyun-dashscope/qwen2.5-vl-embedding',
image_blob,
'{"type":"image"}'
) AS embedding
FROM image_table;