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

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

http://www.kler.cn/a/136119.html

相关文章:

  • PostgreSql-学习06-libpq之同步命令处理
  • 手机无法连接电脑,如何解决(快速排除手机与电脑连接问题的方法)
  • 【Apache Paimon】-- 10 -- Paimon 0.9.0 集成 Hive 3.1.3
  • vue+springboot+cas配置及cookie传递问题
  • flutter 使用dio 请求go语言后台数据接口展示瀑布流图片
  • Shell自定义(二)
  • 使用cli批量下载GitHub仓库中所有的release
  • 暖阳脚本_ 将Agent技术的灵活性引入RPA,清华等发布自动化智能体ProAgent
  • SpringCloud--分布式锁实现
  • K8S配置资源管理
  • 2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C卷
  • 【grafana | clickhouse】实现展示多折线图
  • SVR和SVM是什么关系
  • ES索引数据清理脚本示例
  • 01背包 P1507 NASA的食物计划
  • 十一、统一网关GateWay(搭建网关、过滤器、跨越解决)
  • 傅里叶级数@正弦级数和余弦级数@奇偶延拓和周期延拓
  • mysql清除数据痕迹_MySQL使用痕迹清理~/.mysql_history - milantgh
  • 【手撕数据结构】(三)顺序表和链表
  • PyCharm:PyCharm新建.py文件时自动带出指定内容
  • 服务器端请求伪造(SSRF)
  • 提高matlab运算效率——预分配内存
  • [github配置] 远程访问仓库以及问题解决
  • 数据结构02附录01:顺序表考研习题[C++]
  • 前端入门(二)Vue2到Vue3
  • golang学习笔记——要求用户输入一个数字,如果该数字为负数,则进入紧急状态