在 Oracle APEX 中用 BGE_BASE 生成向量:从模型导入到历史数据更新
2026-08-24 07:39 AlfredZhao 阅读(17) 评论(0) 收藏 举报向量检索的第一步,是把文本转成向量。笔者这里使用 Oracle 数据库中的 ONNX 模型 BGE_BASE,并在 APEX 调用匿名块,为历史内容生成或更新向量。
01 | 导入 BGE_BASE ONNX 模型
先将 bge-base-zh-v1.5.onnx 放入数据库目录 DM_DUMP,再通过 DBMS_VECTOR.LOAD_ONNX_MODEL 导入:
BEGIN
DBMS_VECTOR.LOAD_ONNX_MODEL(
directory => 'DM_DUMP',
file_name => 'bge-base-zh-v1.5.onnx',
model_name => 'BGE_BASE',
metadata => JSON('{
"function": "embedding",
"embeddingOutput": "embedding",
"input": {"input": ["DATA"]}
}')
);
END;
/
导入完成后,可查询模型信息:
SELECT model_name, algorithm, mining_function
FROM user_mining_models
WHERE model_name = 'BGE_BASE';
结果中,BGE_BASE 的算法为 ONNX,挖掘函数为 EMBEDDING。
02 | 为历史内容生成或更新向量
模型可通过 VECTOR_EMBEDDING 将文本转换为向量。例如:
SELECT VECTOR_EMBEDDING(BGE_BASE USING 'Hi, Alfred' AS DATA) AS embedding;
在历史表 t_history 中,笔者通过匿名块逐行处理内容:仅处理尚未向量化,或标记为需要更新的记录。
DECLARE
CURSOR c_history IS
SELECT rowid AS rid, content
FROM t_history
WHERE content IS NOT NULL
AND (v IS NULL OR v_needs_update = 1);
BEGIN
FOR r IN c_history LOOP
UPDATE t_history
SET v = VECTOR_EMBEDDING(BGE_BASE USING r.content AS DATA),
v_needs_update = 0
WHERE rowid = r.rid;
END LOOP;
COMMIT;
END;
其中,v 用于保存生成后的向量;v_needs_update 用于标识是否需要重新向量化。内容为空的数据不会参与处理,已完成且无需更新的数据也会被跳过。
关注我,和AI一起成长~
AlfredZhao©版权所有「从Oracle起航,领略精彩的IT技术。」
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/22646960
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/22646960
👋 感谢阅读,欢迎关注我的公众号 「赵靖宇」
浙公网安备 33010602011771号