惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
博客园 - 【当耐特】
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
D
Docker
T
The Blog of Author Tim Ferriss
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
罗磊的独立博客
小众软件
小众软件
A
About on SuperTechFans
MyScale Blog
MyScale Blog
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
C
Check Point Blog
L
LangChain Blog

博客园 - AlfredZhao

执行新项目 python 脚本前,先用 conda 建一个独立环境 Git 提交代码:从报错到 SSH 免密推送 GitHub 克隆他人私有仓库:从授权到下载 理解Oracle Property Graph:以账户转账示例完成图特性最小测试 APEX 无法分配 SH 用户?一个存储过程轻松解决 SH 中文化样例数据使用手册 Oracle 排除非业务表:一份能直接抄的“全量过滤”SQL 进程都杀了,为什么 `netstat` 还能看到端口? MAC 空间告急?Codex 的 156GB 缓存垃圾,这样清! 人工清理问题数据:先查准,再删除 TK(Trusted Knowledge)为何而生? 使用快捷键快速切换 Mac 外接显示器模式 客户环境 Nginx 配置:流式报表与超时排查要点 Security Central:数据库安全的统一控制与运营平台 Palantir 眼中的一次“订单可能延期”,如何成为实时决策的起点? 从一条订单消息到 Bronze、Silver、Gold:我的第一次 Kafka + Lakehouse 实验 UUID v4 与 v7:同样是唯一 ID,为什么数据库表现可能完全不同? 用 crontab 给 LLM 使用量装上“监控眼” DeepSeek 与 GPT API 价格调整:该关注什么? 查看 Oracle 数据库中的定时任务执行情况 Codex 专用用户登录后自动进入默认项目目录 Mac 小技巧:用方向键优雅处理超长网址 Oracle GDD 与 Raft:别把共识机制和数据主权混为一谈 行业人+AI:真正有价值的四个关键要素 知识库文件解析失败:一次由 Domain Index 引发的定位记录 Unicode 码位数、UTF-8 字节数、中英文差异和 Oracle 长度别再混淆了 Skill 的使用:从路径到能力边界 切换 Embedding 模型时,千万别忽略历史向量维度 kbot 适配 GPT-5.6:一次参数兼容性排查 Git 打 Tag 上传 GitHub 遇到 SSH 超时,如何处理?
在 Oracle APEX 中用 BGE_BASE 生成向量:从模型导入到历史数...
AlfredZhao · 2026-08-24 · via 博客园 - AlfredZhao

2026-08-24 07:39  AlfredZhao  阅读(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一起成长~