人工智能赋能:基于Gemini与查询增强的RAG系统实现指南

真智会分析 2025-04-14 13:28:45

生成式AI已无处不在,但大型语言模型(LLM)存在响应失准现象(称为"幻觉")。检索增强生成(RAG)技术能有效改善这一状况。

RAG已成为提升LLM输出的黄金标准。它通过整合模型训练数据外的外部知识来优化输出,特别适用于需要专业领域知识和数据隐私的场景。

我们将实现一个可在本地运行的RAG方案。通过实践,您将掌握可应用于实际项目的RAG系统构建方法。

我们的RAG方案 本方案采用标准RAG架构配合查询增强技术,使用本地向量数据库和托管语言模型。系统流程如下:

技术选型:

知识库:PDF文档内容向量数据库:ChromaDB嵌入生成:Gemini系列产品(需准备Google API密钥)增强技术:查询重构 + 假设文档嵌入(HyDE)开发环境:Jupyter Notebook

实现步骤

环境配置python -m venv rag-env.\Scripts\activatepip install PyPDF2 langchain google-generativeai chromadb核心代码实现import PyPDF2from langchain.text_splitter import RecursiveCharacterTextSplitterimport google.generativeai as genaiimport chromadbimport logging# PDF文本提取def extract_text_from_pdf(pdf_path):    with open(pdf_path, "rb") as file:        reader = PyPDF2.PdfReader(file)        return "".join(page.extract_text() for page in reader.pages)# 文本分块处理def chunk_text(text):    splitter = RecursiveCharacterTextSplitter(        chunk_size=500,         chunk_overlap=50,        separators=["\n\n", "\n", " ", ""])    return splitter.split_text(text)# 嵌入生成genai.configure(api_key="YOUR-API-KEY")def generate_embeddings(texts):    return [genai.embed_content(model="models/text-embedding-004", content=text)['embedding']             for text in texts]# 向量存储def store_embeddings(chunks, embeddings):    client = chromadb.Client()    collection = client.get_or_create_collection(name="doc_chunks")    collection.add(        documents=chunks,        embeddings=embeddings,        ids=[f"chunk_{i}" for i in range(len(chunks))]    )    return collection# 查询增强模块class HyDERetriever:    def __init__(self, collection):        self.collection = collection        def generate_hypothetical_doc(self, query):        prompt = f"生成详细回答'{query}'的假设文档(约500字)"        return genai.GenerativeModel("gemini-1.5-flash").generate_content(prompt).text        def retrieve(self, query, k=3):        hyde_doc = self.generate_hypothetical_doc(query)        embedding = generate_embeddings([hyde_doc])[0]        return self.collection.query(query_embeddings=[embedding], n_results=k)["documents"][0]# 响应生成def generate_response(query, context):    return genai.GenerativeModel("gemini-1.5-flash").generate_content(        f"上下文:{context}\n问题:{query}").text系统集成if __name__ == "__main__":    # 知识库处理    text = extract_text_from_pdf("Insurance_Handbook.pdf")    chunks = chunk_text(text)    collection = store_embeddings(chunks, generate_embeddings(chunks))        # 查询处理    original_query = "保险中的残余市场是什么?"    hyde_retriever = HyDERetriever(collection)    similar_docs = hyde_retriever.retrieve(original_query)        # 结果生成    print(generate_response(original_query, " ".join(similar_docs)))

效果示例 原始查询:"什么是保险残余市场?" 增强后查询:"详细解释保险行业中残余市场的概念,包括典型覆盖风险类型、运作方式以及美国相关监管框架" 生成回答:"保险残余市场指承保人非自愿承接的高风险业务领域。这类市场通常需要政府干预支持,因为其本身难以维持盈亏平衡..."

总结 本文演示了如何:

使用Gemini构建RAG系统实现查询重构和HyDE技术集成ChromaDB进行向量检索 该方案可轻松适配其他领域应用,通过持续的查询优化可进一步提升结果质量。

0 阅读:0

真智会分析

简介:感谢大家的关注