CREATE TABLE it_docs (
doc_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
title VARCHAR2(255),
content CLOB
);
-- 插入模拟数据
INSERT INTO it_docs (title, content) VALUES ('重置密码', '登录系统后点击个人中心,选择安全设置,输入旧密码及两次新密码即可重置。');
INSERT INTO it_docs (title, content) VALUES ('VPN连接失败', '请检查网络连接,确认VPN客户端版本为3.0以上,并尝试重启服务。');
COMMIT;
ALTER TABLE it_docs ADD (embedding VECTOR(1024, FLOAT32)); UPDATE it_docs SET embedding = DBMS_VECTOR.EMBED(content, 'cohere/embed-english-v3.0'); COMMIT;
CREATE VECTOR INDEX idx_doc_vec ON it_docs(embedding)
ALGORITHM HNSW PARAMETERS ('DIMENSION=1024');
DECLARE
v_query_vec VECTOR(1024, FLOAT32);
v_context CLOB;
v_answer CLOB;
BEGIN
-- 1. 将用户问题向量化
SELECT DBMS_VECTOR.EMBED('怎么修改系统密码?', 'cohere/embed-english-v3.0')
INTO v_query_vec FROM DUAL;
-- 2. 检索最相关文档
SELECT LISTAGG(content, ' ') WITHIN GROUP (ORDER BY VECTOR_DISTANCE(embedding, v_query_vec, COSINE))
INTO v_context
FROM (SELECT content FROM it_docs ORDER BY VECTOR_DISTANCE(embedding, v_query_vec, COSINE) FETCH FIRST 2 ROWS ONLY);
-- 3. 调用LLM生成答案
v_answer := DBMS_VECTOR.GENERATE(
prompt => '基于以下资料回答问题。资料:' || v_context || ' 问题:怎么修改系统密码?',
model => 'meta/llama-3-70b-instruct'
);
DBMS_OUTPUT.PUT_LINE(v_answer);
END;
利用Oracle 26ai的原生RAG能力,企业可在保障数据不出库的前提下,快速搭建安全、精准的智能客服或知识库助手。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31547506/viewspace-3116897/ ,如需转载,请注明出处,否则将追究法律责任。