使用Python和OpenAI API构建RAG知识库问答系统

AI教程 2026-06-14

检索增强生成(Retrieval-Augmented Generation,RAG)是目前构建AI问答系统的主流架构。本文将带你从零开始,使用Python和OpenAI API构建一个完整的RAG知识库问答系统。

什么是RAG?

RAG的核心思想是:当用户提出问题时,系统首先从知识库中检索相关文档片段,然后将这些片段作为上下文提供给大语言模型,让模型基于检索到的信息生成回答。这样既利用了LLM的理解和生成能力,又确保了答案的准确性和时效性。

环境准备

首先安装必要的依赖库:

pip install openai chromadb sentence-transformers python-dotenv

步骤1: 初始化向量数据库

import os
import chromadb
from chromadb.utils import embedding_functions
from openai import OpenAI

# 初始化OpenAI客户端
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

# 初始化ChromaDB向量数据库
chroma_client = chromadb.PersistentClient(path="./rag_knowledge_base")
sentence_transformer_ef = embedding_functions.SentenceTransformerEmbeddingFunction(
    model_name="all-MiniLM-L6-v2"
)
collection = chroma_client.get_or_create_collection(
    name="knowledge_base",
    embedding_function=sentence_transformer_ef
)

步骤2: 添加文档到知识库

def add_documents(documents, ids=None, metadatas=None):
    """将文档添加到向量数据库"""
    if ids is None:
        ids = [f"doc_{i}" for i in range(len(documents))]
    collection.add(
        documents=documents,
        ids=ids,
        metadatas=metadatas
    )
    print(f"已添加 {len(documents)} 个文档")

# 示例:添加知识库文档
docs = [
    "Python是一种高级编程语言,由Guido van Rossum创建并于1991年首次发布。",
    "OpenAI API提供了GPT系列模型的访问接口,支持文本生成、代码补全等功能。",
    "ChromaDB是一个开源的向量数据库,专为AI应用设计,支持高效的相似性搜索。",
    "RAG(检索增强生成)是一种结合检索和生成的AI架构,能显著提升回答准确性。"
]
add_documents(docs)

步骤3: 实现RAG问答函数

def rag_query(query, n_results=2):
    # 1. 检索相关文档
    results = collection.query(
        query_texts=[query],
        n_results=n_results
    )
    
    # 2. 构建上下文
    context = "\n\n".join(results['documents'][0])
    
    # 3. 生成回答
    prompt = (
        "请基于以下知识库内容回答问题。\n\n"
        "知识库内容:\n" + context + "\n\n"
        "问题:" + query + "\n\n"
        "请用中文回答,如果知识库中没有相关信息,请明确说明。"
    )
    
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": "你是一个知识问答助手,请基于提供的知识库内容回答问题。"},
            {"role": "user", "content": prompt}
        ],
        temperature=0.3
    )
    
    return response.choices[0].message.content

完整运行示例

将以上代码整合到一个文件 rag_system.py 中,设置好OPENAI_API_KEY环境变量后运行:

export OPENAI_API_KEY="sk-your-api-key"
python rag_system.py

进阶优化建议

1. 文档分块:长文档需要合理分块,常用策略包括固定长度分块、语义分块等
2. 混合检索:结合向量检索和关键词检索,提高召回率
3. 重排序:使用cross-encoder模型对检索结果进行重排序,提升相关性
4. 元数据过滤:利用文档的元数据进行预过滤

通过以上步骤,你已经成功构建了一个完整的RAG知识库问答系统。这个框架可以扩展到处理PDF文档、网页内容、企业知识库等各种场景。

©️版权声明:若无特殊声明,本站所有文章版权均归AI工具集原创和所有,未经许可,任何个人、媒体、网站、团体不得转载、抄袭或以其他方式复制发表本站内容,或在非我站所属的服务器上建立镜像。否则,我站将依法保留追究相关法律责任的权利。

相关文章