在生成式AI(GenAI)浪潮中,检索增强生成(Retrieval-Augmented Generation, RAG)已成为连接大语言模型(LLM)与企业私有数据的关键桥梁。传统RAG架构通常依赖外部向量数据库(如Pinecone、Milvus)、Python脚本和复杂微服务编排,不仅部署繁琐,还带来数据一致性、安全性和运维成本等挑战。

但如果你使用的是 Oracle Database 23c 或更高版本,好消息是:你完全可以用纯SQL,在一个数据库内完成整个RAG流程——从文本嵌入、向量存储、语义检索到结果生成提示(prompt)构建,全部原生支持,无需跳出熟悉的SQL环境。

本文将手把手带你用 Oracle AI + SQL 实现端到端的 RAG 应用,让企业数据在安全、高效、统一的平台上赋能智能问答。


一、为什么选择 Oracle 原生 RAG?

Oracle Database 自 23c 起全面支持 向量数据类型(VECTOR)和 向量相似度搜索(通过 VECTOR_DISTANCE 函数),并内置与 OCI Generative AI 服务的集成能力。这意味着:

  • 数据不出库:敏感业务数据始终留在 Oracle 安全边界内
  • 简化架构:省去向量数据库、ETL管道、API网关等中间件
  • 事务一致:向量与业务数据同事务更新,避免同步延迟
  • 权限统一:复用 Oracle RAS、Database Vault 等企业级安全机制

二、RAG 四步走:全部用 SQL 实现

步骤1:准备文档并生成嵌入向量(Embeddings)

假设你有一张 documents 表,包含企业知识库内容:

CREATE TABLE documents (
    id NUMBER PRIMARY KEY,
    title VARCHAR2(255),
    content CLOB
);

Oracle 提供 DBMS_VECTOR 包,可调用 OCI 上托管的嵌入模型(如 cohere/embed-english-v3.0)生成向量:

-- 添加向量列
ALTER TABLE documents ADD (embedding VECTOR(1024, FLOAT32));

-- 为每篇文档生成嵌入(需配置OCI凭证)
UPDATE documents
SET embedding = DBMS_VECTOR.EMBED(
    input => content,
    model => 'cohere/embed-english-v3.0'
);
COMMIT;

注:DBMS_VECTOR.EMBED 会自动调用 OCI GenAI 服务,返回 1024 维浮点向量。

步骤2:创建向量索引(加速检索)

为提升相似度搜索性能,创建 HNSW 向量索引:

CREATE VECTOR INDEX doc_embedding_idx 
ON documents(embedding) 
ALGORITHM HNSW;
步骤3:语义检索——用自然语言找相关文档

当用户提问“如何重置Oracle数据库密码?”时,我们先将其转为向量,再在库中找最相似的文档:

WITH query_vec AS (
    SELECT DBMS_VECTOR.EMBED('如何重置Oracle数据库密码?', 'cohere/embed-english-v3.0') AS vec FROM DUAL
)
SELECT d.title, d.content,
       VECTOR_DISTANCE(d.embedding, q.vec, COSINE) AS similarity
FROM documents d, query_vec q
ORDER BY similarity ASC  -- 余弦距离越小越相似
FETCH FIRST 3 ROWS ONLY;

此查询返回 top-3 最相关文档片段,作为上下文注入 LLM。

步骤4:构建 Prompt 并调用生成模型(可选)

若需直接生成答案,可继续使用 DBMS_VECTOR.GENERATE 调用 OCI 的 LLM(如 meta/llama-3-70b-instruct):

DECLARE
    v_context CLOB;
    v_answer  CLOB;
BEGIN
    -- 拼接检索到的上下文
    SELECT LISTAGG('【' || title || '】' || content, CHR(10)) INTO v_context
    FROM (
        WITH query_vec AS (
            SELECT DBMS_VECTOR.EMBED('如何重置Oracle数据库密码?', 'cohere/embed-english-v3.0') AS vec FROM DUAL
        )
        SELECT d.title, d.content
        FROM documents d, query_vec q
        ORDER BY VECTOR_DISTANCE(d.embedding, q.vec, COSINE)
        FETCH FIRST 3 ROWS ONLY
    );

    -- 调用LLM生成答案
    v_answer := DBMS_VECTOR.GENERATE(
        prompt => '基于以下资料回答问题。资料:' || v_context || 
                  ' 问题:如何重置Oracle数据库密码?',
        model => 'meta/llama-3-70b-instruct'
    );

    DBMS_OUTPUT.PUT_LINE(v_answer);
END;
/

至此,从用户提问到生成可信答案,全程在 Oracle 数据库内完成,无外部依赖。


三、优势总结:SQL 即 AI 工作流

传统RAG架构 Oracle 原生 RAG
多组件(向量库+API+调度器) 单一数据库
数据需导出再导入 数据原地增强
权限/审计分散 统一安全策略
开发需Python/JS 全SQL/PLSQL

结语:让数据库成为AI引擎

Oracle 正在重新定义数据库的角色——它不仅是数据的仓库,更是智能的引擎。通过将向量计算、嵌入生成、语义检索与大模型调用深度集成到 SQL 引擎中,Oracle 让企业能以最低成本、最高安全性和最大敏捷性拥抱 RAG 技术。

如果你已在使用 Oracle,不妨试试用几行 SQL,开启你的原生 AI 之旅。毕竟,在 AI 时代,最强大的模型,可能就藏在你已有的数据库里

提示:需 Oracle Database 23c Free / Enterprise 或 Oracle Autonomous Database,并启用 OCI GenAI 服务权限。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐