在 Oracle APEX 中用 BGE_BASE 生成向量:从模型导入到历史数据更新

向量检索的第一步,是把文本转成向量。笔者这里使用 Oracle 数据库中的 ONNX 模型 BGE_BASE,并在 APEX 调用匿名块,为历史内容生成或更新向量。

01 | 导入 BGE_BASE ONNX 模型

先将 bge-base-zh-v1.5.onnx 放入数据库目录 DM_DUMP,再通过 DBMS_VECTOR.LOAD_ONNX_MODEL 导入:

sql 复制代码
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;
/

导入完成后,可查询模型信息:

sql 复制代码
SELECT model_name, algorithm, mining_function
FROM user_mining_models
WHERE model_name = 'BGE_BASE';

结果中,BGE_BASE 的算法为 ONNX,挖掘函数为 EMBEDDING

02 | 为历史内容生成或更新向量

模型可通过 VECTOR_EMBEDDING 将文本转换为向量。例如:

sql 复制代码
SELECT VECTOR_EMBEDDING(BGE_BASE USING 'Hi, Alfred' AS DATA) AS embedding;

在历史表 t_history 中,笔者通过匿名块逐行处理内容:仅处理尚未向量化,或标记为需要更新的记录。

sql 复制代码
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一起成长~

相关推荐
Lee_jerome3 天前
从 PyTorch 权重到 RK3588 板端推理:ResNet18 二分类模型完整部署教程
pytorch·边缘计算·rk3588·模型部署·onnx·resnet18·int8量化
johnny2331 个月前
ONNX生态简介与实战:ONNX Runtime
onnx
大鹏的NLP博客1 个月前
深度学习模型PyTorch与ONNX数值一致性校验通用技术报告
人工智能·pytorch·深度学习·onnx
阿钱真强道1 个月前
13 YOLOv8的ONNX输出结构——9个张量如何变成检测框
目标检测·onnx·yolov8·nms·dfl
weiwei228442 个月前
神经网络模型导出及开放标准格式ONNX
pytorch·onnx
再一次等风来2 个月前
YOLO26 实测记录:从模型下载、预测验证到 ONNX Runtime 推理部署
yolo·计算机视觉·onnx·yolo26
慢慢向上的蜗牛2 个月前
Qwen3-0.6B ONNX(KV-Cache)模型部署
llm·onnx·文本生成·自回归·kv-cache
指尖在键盘上舞动2 个月前
RKNN 模型部署:onnx转rknn后精度下降 —— 精度调优与问题排查
python·ubuntu·rk3588·rknn·onnx·npu
vonlycn4 个月前
PaddleDetection转ONNX 填坑
python·onnx·paddledetection