Oracle 23ai的RAG(Retrieval-Augmented Generation,检索增强生成),并非简单的“功能叠加”,而是基于其原生向量引擎、多模数据处理能力的深度整合,核心依赖三大核心能力,让RAG开发变得简单、高效、安全。

1. 内置分块函数VECTOR_CHUNKS:文档分块无需外部工具

长文档直接生成向量会导致语义割裂,影响检索精度——因此RAG的第一步,也是关键一步,是将长文档拆分为语义完整的短文本块。传统做法需要依赖LangChain等外部分块工具,手动配置分块规则、处理文本格式,不仅繁琐,还容易出现分块不均、语义断裂的问题。
Oracle 23ai内置VECTOR_CHUNKS函数,直接在数据库内完成文本分块,无需任何外部依赖,核心优势的在于:

  • 智能分块:支持按字符、单词、词汇令牌三种模式拆分,自动识别句子边界、段落结构,避免语义割裂,适配中文、英文等多语言场景,无需手动配置分块规则;
  • 灵活配置:可自定义分块长度、重叠度(如500字/块,重叠50字),平衡检索精度与效率,适配不同长度的文档(如产品手册、合同文件、培训资料);
  • 多格式兼容:支持VARCHAR2、CLOB、NCLOB等多种文本格式,直接读取数据库内存储的文档内容,无需额外导入导出,分块后自动生成块偏移量、块长度等元数据,方便后续追溯。
    示例:将数据库内存储的企业制度文档(CLOB类型)拆分为500字/块,重叠50字,自动插入文本块表:

    -- 调用VECTOR_CHUNKS拆分长文本,插入文本块表
    INSERT INTO doc_chunks (doc_id, chunk_content, chunk_index, chunk_offset)
    SELECT 
    1 AS doc_id,
    chunk_text AS chunk_content,
    ROWNUM AS chunk_index,
    chunk_offset
    FROM TABLE(VECTOR_CHUNKS(
    (SELECT doc_content FROM doc_archives WHERE doc_id = 1), -- 数据库内的长文档
    500, -- 分块长度(500字)
    50,  -- 重叠度(50字)
    'by chars' -- 按字符分块
    ));

    2. 原生向量生成VECTOR_EMBEDDING:向量生成无需外部模型调用

    向量生成是RAG的核心环节,传统架构需要调用外部AI模型(如OpenAI、本地部署的Sentence-BERT)生成向量,再将向量导入向量库,不仅存在数据传输风险,还会因模型接口不稳定影响效率。
    Oracle 23ai内置VECTOR_EMBEDDING函数,直接在数据库内完成文本向量生成,支持两种模式,彻底解决外部依赖问题:

  • 内置AI模型:无需部署外部模型,直接调用Oracle内置的文本嵌入模型(如all-MiniLM-L6-v2),生成符合行业标准的高维向量(支持768维、1536维等主流维度),适配大多数RAG场景,生成速度快、语义精度高;
  • 外部模型集成:支持调用外部AI服务(如Ollama、OpenAI API)或导入ONNX格式的自定义模型(如PyTorch、TensorFlow训练的模型),满足企业个性化语义需求,向量生成后直接存储到数据库的VECTOR列,无需额外导入向量库,数据不出库更安全。
    同时,结合Oracle 23ai原生的VECTOR数据类型,支持8-bit、16-bit、32-bit、64-bit四种精度,可根据场景灵活选择——例如文本嵌入用FLOAT32精度,平衡存储成本与计算精度;图像/音频向量用FLOAT64精度,保障检索精度,智能存储优化可进一步降低空间占用。
    示例:为文本块生成1536维FLOAT32精度向量,直接存入VECTOR列:

    -- 为文本块生成向量,存入chunk_emb列
    UPDATE doc_chunks
    SET chunk_emb = VECTOR_EMBEDDING(
    'all-MiniLM-L6-v2', -- 内置嵌入模型
    chunk_content,      -- 分块后的文本内容
    VECTOR_OUTPUT => 'FLOAT32', -- 向量精度
    DIMENSIONS => 1536 -- 向量维度
    )
    WHERE doc_id = 1;

    3. 多模混合检索:向量检索与关系查询无缝融合

    传统RAG的检索环节,向量检索与关系数据检索是分离的,需要跨系统关联,效率低且精度差。而Oracle 23ai的RAG原生支持,依托其多模数据融合能力,实现了“向量相似度+关系条件+JSON/图数据”的混合检索,一次查询即可完成多维度筛选,大幅提升检索精度与效率。
    核心优势在于:

  • 向量索引优化:支持HNSW、IVF-Flat两种核心向量索引,HNSW索引适合中小规模数据、高召回率场景(如智能问答),IVF-Flat索引适合十亿级海量数据场景,检索响应时间可降至毫秒级,适配不同规模的企业知识库;
  • 混合查询语法:在SQL中直接融合向量相似度查询与关系条件查询,无需跨系统关联,例如“检索与‘企业数字化转型’语义相似、且发布时间在2023年后的制度文档”,一次查询即可完成筛选,同时支持余弦距离、欧氏距离等多种相似度度量方式,适配不同语义场景;
  • Hybrid Search支持:可同时结合向量语义检索与Oracle Text关键词检索,兼顾语义相似性与关键词精准匹配,避免单一检索方式的局限性——例如某些文档语义相近但关键词不匹配,或关键词匹配但语义偏差,混合检索可实现“取长补短”,进一步提升检索精度,且无需数据重复存储,复用数据库原有文本检索能力。
    示例:用户提问“企业数字化转型的核心步骤是什么”,生成向量后,检索相似文本块并关联原文档信息:

    -- 1. 生成用户提问的向量
    DECLARE
    v_query VARCHAR2(1000) := '企业数字化转型的核心步骤是什么';
    v_query_emb VECTOR(1536) FLOAT32;
    BEGIN
    v_query_emb := VECTOR_EMBEDDING('all-MiniLM-L6-v2', v_query, VECTOR_OUTPUT => 'FLOAT32', DIMENSIONS => 1536);
    
    -- 2. 混合检索:相似向量+文档类型筛选,返回Top5结果
    SELECT 
        d.doc_name,
        c.chunk_content,
        VECTOR_SIMILARITY(c.chunk_emb, v_query_emb, 'COSINE') AS similarity
    FROM doc_chunks c
    JOIN doc_archives d ON c.doc_id = d.doc_id
    WHERE d.doc_type = '制度文档' -- 关系条件筛选
    ORDER BY c.chunk_emb <-> v_query_emb -- 向量相似度降序(<->为余弦距离运算符)
    FETCH FIRST 5 ROWS ONLY;
    END;
    /

    4. LLM无缝集成:检索结果一键喂给LLM,生成精准回答

    Oracle 23ai支持通过PL/SQL、Python等方式,直接调用本地或云端LLM服务(如Oracle Cloud AI、GPT-4、Ollama),将检索到的相似文本块作为上下文,自动生成贴合企业业务的回答,无需手动拼接上下文、调用LLM接口,实现RAG全流程自动化。
    更重要的是,检索结果与LLM调用均在数据库内完成,敏感数据无需传输到外部系统,既保障了数据安全,又简化了开发流程——开发者无需关注多系统协同,只需专注于业务逻辑即可。

Related Posts