LangChain 5易速鲜花内部问答系统

news/2024/10/3 17:57:20

展示了一个完整的问答系统的实现,使用了Flask来构建Web界面、langchain进行文档处理和检索,以及OpenAI的语言模型。代码的复杂性在于集成了多种高级技术和处理大型数据集和语言模型。

  1. LangChain 实现给动物取名字,
  2. LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字
  3. LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄
  4. LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve

运行效果如下:
在这里插入图片描述
代码以及注释如下(代码为黄佳老师的课程Demo,如需要知道代码细节请读原文):

import os  # 导入os模块,用于与文件系统交互# 从langchain导入各种文档加载器
from langchain.document_loaders import PyPDFLoader  # 加载PDF文档的加载器
from langchain.document_loaders import Docx2txtLoader  # 加载DOCX文档的加载器
from langchain.document_loaders import TextLoader  # 加载纯文本文档的加载器
from dotenv import load_dotenv  # 导入dotenv,用于管理环境变量load_dotenv()  # 从.env文件加载环境变量# 从指定目录加载文档
base_dir = './OneFlower'  # 存储文档的目录
documents = []
for file in os.listdir(base_dir):file_path = os.path.join(base_dir, file)  # 构建完整的文件路径if file.endswith('.pdf'):loader = PyPDFLoader(file_path)  # 加载PDF文件documents.extend(loader.load())elif file.endswith('.docx'):loader = Docx2txtLoader(file_path)  # 加载DOCX文件documents.extend(loader.load())elif file.endswith('.txt'):loader = TextLoader(file_path)  # 加载文本文件documents.extend(loader.load())# 将文档分割成块以便嵌入和向量存储
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=10)
chunked_documents = text_splitter.split_documents(documents)# 在Qdrant向量数据库中存储分割和嵌入的文档
from langchain.vectorstores import Qdrant
from langchain.embeddings import OpenAIEmbeddings
vectorstore = Qdrant.from_documents(documents=chunked_documents,embedding=OpenAIEmbeddings(),location=":memory:",collection_name="my_documents",)# 设置模型和检索链
import logging
from langchain.chat_models import ChatOpenAI
from langchain.retrievers.multi_query import MultiQueryRetriever
from langchain.chains import RetrievalQAlogging.basicConfig()
logging.getLogger('langchain.retrievers.multi_query').setLevel(logging.INFO)llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)  # 初始化一个大型语言模型工具 - OpenAI的GPT-3.5retriever_from_llm = MultiQueryRetriever.from_llm(retriever=vectorstore.as_retriever(), llm=llm)  # 初始化一个MultiQueryRetrieverqa_chain = RetrievalQA.from_chain_type(llm, retriever=retriever_from_llm)  # 初始化一个RetrievalQA链# 使用Flask实现问答系统的UI
from flask import Flask, request, render_template
app = Flask(__name__)  # 创建Flask应用@app.route('/', methods=['GET', 'POST'])
def home():if request.method == 'POST':question = request.form.get('question')  # 接收用户输入作为问题result = qa_chain({"query": question})  # RetrievalQA链 - 读取问题,生成答案return render_template('index.html', result=result)  # 返回模型答案以渲染网页return render_template('index.html')  # 渲染网页if __name__ == "__main__":app.run(host='0.0.0.0',debug=True,port=5000)  # 运行Flask应用

在这里插入图片描述

代码

  • https://github.com/zgpeace/pets-name-langchain/tree/feature/docQA

参考

  • https://github.com/huangjia2019/langchain/tree/main/02_%E6%96%87%E6%A1%A3QA%E7%B3%BB%E7%BB%9F

https://dhexx.cn/news/show-5144214.html

相关文章

微信小程序配置企业微信的在线客服

配置企业微信后台 代码实现 <button tap"openCustomerServiceChat">打开企业微信客服</button>methods: {openCustomerServiceChat(){wx.openCustomerServiceChat({extInfo: {url: 你刚才的客服地址},corpId: 企业微信的id,showMessageCard: true,});} …

Redis学习笔记17:基于spring data redis及lua脚本批处理scan指令查询永久有效的key

Redis的KEYS和SCAN指令都可以用于在数据库中搜索匹配指定模式的键。然而&#xff0c;它们之间有一些关键的区别&#xff1b; KEYS指令会在整个数据库中阻塞地执行匹配操作&#xff0c;并返回匹配的键列表。如果数据库很大&#xff0c;或者匹配的键很多&#xff0c;将会对性能产…

【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 本章将介绍视觉SLAM的基本问题之一&#xff1a;如何描述刚体在三维空间中的运动&#xff1f; 旋转矩阵 点、向量和坐标系 三维空间由3个轴组成&…

C语言的5个内存段你了解吗?( 代码段/数据段/栈/堆)

前言&#xff1a;这些内存段在程序运行时起着不同的作用&#xff0c;有不同的分配方式和存储内容。对于 C 语言程序员来说&#xff0c;了解这些内存段的特性和用途有助于更好地理解内存管理、变量的存储位置以及程序执行过程中的内存分配情况 1. 代码段 (Code Segment) 内容&a…

AIGC ChatGPT4对Gbase数据库进行总结

ChatGPT4 用一个Prompt完成Gbase数据库的总结。 AIGC ChatGPT 职场案例 AI 绘画 与 短视频制作 PowerBI 商业智能 68集 数据库Mysql 8.0 54集 数据库Oracle 21C 142集 Office 2021实战应用 Python 数据分析实战&#xff0c; ETL Informatica 数据仓库案例实战 Excel 2021实操 …

利用AlphaMissense准确预测蛋白质组范围内的错义变体效应

Editor’s summary 蛋白质中单个氨基酸的变化有时影响不大&#xff0c;但通常会导致蛋白质折叠、活性或稳定性方面的问题。只有一小部分变体进行了实验研究&#xff0c;但有大量的生物序列数据适合用作机器学习方法的训练数据。程等人开发了AlphaMissense&#xff0c;这是一种…

MATLAB算法实战应用案例精讲-【神经网络】Transformer

目录 前言 算法原理 编码器 自注意力机制 从宏观视角看自注意力机制

电力感知边缘计算网关产品设计方案-业务流程设计

1.工业数据通信流程 工业数据是由仪器仪表、PLC、DCS等工业生产加工设备提供的,通过以太网连接工业边缘计算网关实现实时数据采集。按照现有的通信组网方案,在理想通信状态下可以保证有效获取工业数据的真实性和有效性。 边缘计算数据通信框架图: 2.边缘计算数据处理方案 …

【Web】Flask|Jinja2 SSTI

目录 ①[NISACTF 2022]is secret ②[HNCTF 2022 WEEK2]ez_SSTI ③[GDOUCTF 2023] ④[NCTF 2018]flask真香 ⑤[安洵杯 2020]Normal SSTI ⑥[HNCTF 2022 WEEK3]ssssti ⑦[MoeCTF 2021]地狱通讯 ①[NISACTF 2022]is secret dirsearch扫出/secret 明示get传一个secret ?…

AVL树你需要了解一下

AVL树介绍 AVL树是一种自平衡二叉查找树&#xff0c;它得名于发明者G.M.Adel’son-Vel’skii和E.M.Landis。AVL树的特点是任何节点的两个子树的高度最大差别为1&#xff0c;因此它也被称为高度平衡树。在AVL树中&#xff0c;每个节点的平衡因子只有-1、0、1三种&#xff0c;通…