当前位置: 首页 > news >正文

基于RAG(Retrieval Augmented Generation)架构的简单问答系统的Python实现示例

以下是一个基于RAG(Retrieval Augmented Generation)架构的简单问答系统的Python实现示例。这个系统使用langchain库进行文档处理、检索,以及与大语言模型交互。

import os
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains.question_answering import load_qa_chain
from langchain.llms import OpenAI

# 设置OpenAI API密钥
os.environ["OPENAI_API_KEY"] = "your_openai_api_key"


def setup_rag_system(doc_path):
    # 加载文档
    loader = TextLoader(doc_path)
    documents = loader.load()

    # 文本分割
    text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
    texts = text_splitter.split_documents(documents)

    # 生成嵌入
    embeddings = OpenAIEmbeddings()
    docsearch = FAISS.from_documents(texts, embeddings)

    # 加载问答链
    chain = load_qa_chain(OpenAI(), chain_type="stuff")

    return docsearch, chain


def answer_question(docsearch, chain, question):
    # 检索相关文档
    docs = docsearch.similarity_search(question)

    # 生成回答
    answer = chain.run(input_documents=docs, question=question)

    return answer


if __name__ == "__main__":
    doc_path = "your_document_path.txt"
    docsearch, chain = setup_rag_system(doc_path)

    while True:
        question = input("请输入你的问题(输入 '退出' 结束): ")
        if question == "退出":
            break
        response = answer_question(docsearch, chain, question)
        print("回答:", response)
    

代码说明:

  1. 设置环境:设置OpenAI API密钥,这是使用OpenAI模型和嵌入服务所必需的。
  2. 文档加载与处理:使用TextLoader加载文档,然后使用CharacterTextSplitter将文档分割成小块。
  3. 嵌入生成与向量存储:使用OpenAIEmbeddings生成文档块的嵌入向量,并使用FAISS存储这些向量,以便后续检索。
  4. 问答链设置:使用load_qa_chain加载问答链,该链将使用OpenAI模型生成回答。
  5. 问题回答:对于用户输入的问题,系统会检索相关文档,并使用问答链生成回答。

使用方法:

  1. 替换your_openai_api_key为你自己的OpenAI API密钥。
  2. 替换your_document_path.txt为你实际的文档路径。
  3. 运行脚本,输入问题,输入“退出”结束程序。

相关文章:

  • xcode中移除安装的package dependency
  • Spring 事务传播方式
  • 解决Popwindow宽高的问题。
  • 大模型sft-数据构建和选择
  • [特殊字符] 2025蓝桥杯备赛Day7——B2117 整理药名
  • Q2 电商订单数据分析优化
  • WPF UI元素保存为图像文件
  • ip2region与express最佳实践
  • 一些硬件知识【2025/3/1】
  • Maven安装与环境配置
  • 各类神经网络学习:(四)RNN 循环神经网络(下集),pytorch 版的 RNN 代码编写
  • 练习题:98
  • 使用 Ansys Fluent 评估金属管道腐蚀
  • AIGC-名人语录账号运营创作智能体完整指令(DeepSeek,豆包,千问,Kimi,GPT)
  • 实现一个日语假名自测小程序html-css-js版
  • XSS漏洞原理分类标签及关卡
  • 一般c++项目的目录结构
  • Ajax与Axios,以及Apifox的入门使用
  • 【AI-Coding】2025再实现简单的省市联动
  • NAT实验
  • 首次带人形机器人走科技节红毯,傅利叶顾捷:机器人行业没包袱,很多事都能从零开始
  • 时隔3年,持续近2小时,俄乌在土耳其谈成了什么?
  • 嫩黑线货物列车脱轨致1名路外人员死亡,3人被采取刑事强制措施
  • 多地举办演唱会等吸引游客刺激消费,经济日报:引导粉丝经济理性健康发展
  • 奥运“四朝元老”华天回国参赛,伤势未愈谨慎出战全国锦标赛
  • MSCI中国指数5月调整:新增5只A股、1只港股