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

展示了一个完整的问答系统的实现,使用了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 RetrievalQA

logging.basicConfig()
logging.getLogger('langchain.retrievers.multi_query').setLevel(logging.INFO)

llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)  # 初始化一个大型语言模型工具 - OpenAI的GPT-3.5

retriever_from_llm = MultiQueryRetriever.from_llm(retriever=vectorstore.as_retriever(), llm=llm)  # 初始化一个MultiQueryRetriever

qa_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/169738.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AVL树你需要了解一下

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

vue3 setup展示数据

效果图 1.创建数据 content.js import { reactive } from vueconst data reactive({color:red,title: 二十四节气,subTitle: 节气,是干支历中表示自然节律变化以及确立“十二月建”(月令)的特定节令。,list: [{name: "立春",con…

hdfsClient_java对hdfs进行上传、下载、删除、移动、打印文件信息尚硅谷大海哥

Java可以通过Hadoop提供的HDFS Java API来控制HDFS。通过HDFS Java API,可以实现对HDFS的文件操作,包括文件的创建、读取、写入、删除等操作。 具体来说,Java可以通过HDFS Java API来创建一个HDFS文件系统对象,然后使用该对象来进…

基于单片机GPS轨迹定位和里程统计系统

**单片机设计介绍, 基于单片机GPS轨迹定位和里程统计系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 一个基于单片机、GPS和里程计的轨迹定位和里程统计系统可以被设计成能够在移动的交通工具中精确定位车辆的位置…

clickhouse分布式之弹性扩缩容的故事

现状 社区不支持喔,以后也不会有了。曾经尝试过,难道是是太难了,无法实现吗?因为他们企业版支持了,可能是利益相关吧,谁知道呢,毕竟开源也要赚钱,谁乐意一直付出没有回报呢。 社区…

N 字形变换

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下: P A H N A P L S I I G Y I R 之后,你的输出需要从左往右逐行读取&#xff0…

使用树莓派学习Linux系统编程的 --- 库编程(面试重点)

在之前的Linux系统编程中,学习了文件的打开;关闭;读写;进程;线程等概念.... 本节补充“Linux库概念 & 相关编程”,这是一个面试的重点! 分文件编程 在之前的学习中,面对较大的…

什么是希尔伯特空间?

照片由 丹克里斯蒂安佩杜雷什 on Unsplash 一、说明 在本文中,我们将探讨希尔伯特空间这个非常重要的主题。希尔伯特空间由于其特性而经常出现在物理和工程中。为了理解希尔伯特空间,我们从度量空间的定义开始。 二、基础概念 集合是定义明确的元素的集合…

ClickHouse的 MaterializeMySQL引擎

1 概述 MySQL 的用户群体很大,为了能够增强数据的实时性,很多解决方案会利用 binlog 将数据写入到 ClickHouse。为了能够监听 binlog 事件,我们需要用到类似 canal 这样的第三方中间件,这无疑增加了系统的复杂度。 ClickHouse 20.…

Python-----PyInstaller的简单使用

PyInstaller简介 PyInstaller是一个Python库,可以将Python应用程序转换为独立的可执行文件。PyInstaller支持跨平台,可以在Windows、Linux和MacOS上生成可执行文件。 PyInstaller会分析Python程序,并将程序打包成一个完整的可执行文件&…

汽车级全保护型六路半桥驱动器NCV7708FDWR2G 原理、参数及应用

NCV7708FDWR2G 是一款全保护型六路半桥驱动器,特别适用于汽车和工业运动控制应用。六个高压侧和低压侧驱动器可自由配置,也可单独控制。因此可实现高压侧、低压侧和 H 桥控制。H 桥控制提供正向、逆向、制动和高阻抗状态。驱动器通过标准 SPI 接口进行控…

【SpringCloud】Eureka基于Ribbon负载均衡的调用链路流程分析

文章目录 前言1.调用形式2.LoadBalancerInterceptor3.负载均衡流程分析3.1 调用流程图3.2 intercept()方法3.3 execute()方法3.4 getServer()方法3.4 子类的chooseServer()方法3.5 getLoadBalancerStats().…

pytho你-opencv划痕检测

pytho你-opencv划痕检测 这次实验,我们将对如下图片进行划痕检测,其实这个比较有难度,因为清晰度太差了。 我们做法如下: (1)读取图像为灰度图像,进行自适应直方图均衡化处理,增强…

【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 ?…

AIGC ChatGPT4对Gbase数据库进行总结

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

【Java】volatile-内存可见性问题

1、什么是内存可见性问题? (1)实例 要明白什么是内存可见性,我们首先来看一段代码 public class demo1 {public static int isQuit 0;public static void main(String[] args) {Thread thread1 new Thread(()->{while (is…

基于单片机K型热电偶温度采集报警系统

**单片机设计介绍, 基于单片机K型热电偶温度采集报警系统 文章目录 一 概要简介系统特点系统组成工作原理应用领域 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于单片机K型热电偶温度采集报警系统介绍 简介 该系统是基于单片…

PDF控件Spire.PDF for .NET【转换】演示:自定义宽度、高度将 PDF 转 SVG

我们在上一篇文章中演示了如何将 PDF 页面转换为 SVG 文件格式。本指南向您展示如何使用最新版本的 Spire.PDF 以及 C# 和 VB.NET 指定输出文件的宽度和高度。 Spire.Doc 是一款专门对 Word 文档进行操作的 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻…

【2023云栖】陈守元:阿里云开源大数据产品年度发布

本文根据 2023 云栖大会演讲实录整理而成,演讲信息如下: 演讲人:陈守元 | 阿里云计算平台事业部开源大数据产品总监 演讲主题:阿里云开源大数据产品年度发布 随着云计算的不断发展,未来数据处理和应用的趋势将围绕C…

镭速,克服UDP传输缺点的百倍提速传输软件工具

在网络传输中,我们经常会面临这样的困难:文件太大,传输速度太慢,浪费时间和流量;文件太小,传输速度太快,容易出现丢包和乱序,损害数据的完整性和正确性。这些困难的根本在于传输层协…