利用LangChain和大型语言模型实现精准的基于PDF的问答系统
本仓库旨在帮助您构建一个强大的问答系统,该系统可以通过结合Langchain和包括OpenAI的GPT3模型在内的大型语言模型(LLMs)来准确回答问题。
图片展示了系统的架构,您可以根据需要更改代码。此代码的主要组件如下:
-
后端: 使用FastAPI框架用Python编写,具有以下功能:
- 处理来自客户端的所有请求。
- 创建数据处理管道。它将PDF文档转换为文本并将其分割成更小的块。感谢Langchain提供的数据加载器,您也可以将其用于其他文档类型。后端还处理嵌入部分。它初始化嵌入模型。我使用了
SentenceTransformers
,使其更快且免费。您也可以使用OpenAI嵌入或其他嵌入。我使用Qdrant云(免费层)来托管我的嵌入和文本文件,以便快速搜索和检索。它可以被其他基于向量的数据库替代,例如Pinecone、Weaviate、Elasticsearch等,具体取决于供应商,可以在云上或本地托管。
-
前端: 我使用React/Typescript开发了它。
快速开始
如果您打算使用Qdrant Cloud,则需要注册并获取您的API_KEY
和HOST_URL
。否则,您可以在本地运行Qdrant。您可以查看文档这里。您还需要OpenAI的API密钥。
在获得密钥后,您需要在backend/app
目录中创建一个.env
文件,包含以下信息:
QDRANT_HOST=
QDRANT_API_KEY=
OPENAI_API_KEY=
克隆仓库:
git clone https://github.com/mallahyari/drqa.git
运行前端非常简单。您只需进入frontend
目录并运行:
npm install
npm start
要运行后端,首先创建一个虚拟环境,然后从backend/app
目录运行:
pip install -r requirements.txt
python main.py
优势
本仓库可以作为一个通用指南,帮助您了解如何将您自己的数据与LLMs和其他框架(如Langchain,LlamaIndex)结合使用。此外,由于它仅使用OpenAI来生成最终的响应,因此显著减少了API调用成本。
未来改进
- 流媒体功能:客户端将在响应可用时立即接收到响应流。
- 缓存:添加缓存可以使系统更加高效。对于类似或重复的问题,您无需生成响应/调用API,因为它们已存储在缓存中。
- 用户界面:重写用户界面以改善用户体验。
- 添加不同类型的文件进行问答。目前,您仅可以使用PDF文件。
- 为长对话和总结添加记忆功能。
- 以及更多!
讨论和贡献
如果您有任何评论或反馈,请不要犹豫,使用Discussions
部分并新开一个主题。您也可以通过Linkedin或Twitter直接联系。