ChatPDFLike 项目介绍
ChatPDFLike 是一个用于文档问答的全流程应用,借助大语言模型 API,用户可以通过自然语言与 PDF 文档进行交互。需要注意的是,此项目为独立项目,与 ChatPDF 无官方关联。
概述
ChatPDFLike 是一个网络应用,支持用户上传 PDF 文件,通过自然语言进行查询和交互。它利用诸如 OpenAI 的 GPT-3.5 Turbo 等大型语言模型来理解文档内容,并提供简洁准确的答案。此外,应用还能展示生成答案时使用的文档部分作为参考。
功能
- PDF 文档上传:可以上传本地 PDF 文件或提供 PDF 文件的 URL。
- 自然语言交互:用户可以通过自然语言询问 PDF 内容的问题。
- 精准回答:根据文档内容提供简洁的回答。
- 来源参考:展示生成答案时引用的文档部分。
- 多语言模型支持:支持 OpenAI 和 Ollama 模型。
- 网页界面:简单直观的界面,基于 Flask 和 JavaScript 构建。
工作原理
1. 文本提取与处理
- 使用
PyPDF2
解析 PDF。 - 从每页提取文本,并分割为可管理的文本块。
2. 生成嵌入
- 对于每个文本块,使用选择的嵌入模型生成一个嵌入向量。
- 这些嵌入表示文本块的语义意义,并用于相似度计算。
3. 用户查询处理
- 用户提问时,使用相同的嵌入模型生成查询的嵌入向量。
4. 相似度搜索
- 计算查询嵌入与文本块嵌入之间的余弦相似度。
- 根据最高的相似度选择最相关的文本块。
5. 构建提示
- 为语言模型创建提示语,包括用户的问题和最相关的文本块。
6. 生成回答
- 提示语发送至语言模型(如 GPT-3.5 Turbo)。
- 模型依据提供的上下文生成用户问题的答案。
7. 显示回答
- 在网页界面中展示答案。
- 提供文本块来源作为参考。
入门指南
前置要求
- Python:需要 3.6 版本或更高。
- API 密钥:
- OpenAI API Key:使用 OpenAI 模型进行嵌入和答案生成所需。
- Ollama API Key:可选,使用 Ollama 模型时所需。
安装步骤
-
克隆项目代码仓库
git clone https://github.com/Ulov888/chatpdflike.git cd chatpdflike
-
安装依赖包
使用
pip
安装所需的包:pip install -r requirements.txt
API 密钥配置
获取 OpenAI 的 API 密钥:
-
注册并获取 API 密钥。
-
设置
OPENAI_API_KEY
环境变量:export OPENAI_API_KEY="your_openai_api_key"
获取 Ollama 的 API 密钥(如果需要):
-
获取 Ollama API 密钥。
-
设置
OLLAMA_API_KEY
环境变量:export OLLAMA_API_KEY="your_ollama_api_key"
使用方法
-
启动应用
运行 Flask 应用程序:
python run.py
默认情况下,服务器将在
http://0.0.0.0:8080
运行。 -
访问网页界面
打开浏览器,导航至
http://localhost:8080
。 -
上传 PDF 文档
可以选择:
- 点击“上传 PDF”从计算机选择并上传文件。
- 输入 PDF 文档的 URL 并点击“提交”。
-
与 PDF 互动
- PDF 处理完毕后,可通过屏幕右侧的聊天界面询问其内容。
- 在输入框输入问题并点击“发送”。
-
查看回答
- 应用的回复将显示在问题下面。
- 提供文档来源(如页码和摘录)以提供上下文。
自定义功能
提示策略
可以通过修改 generate_embedding.py
中 Chatbot
类的 create_prompt
方法调整语言模型的行为。策略包括:
- 论文:总结科学论文。
- 手册:总结金融手册(中文回答)。
- 合约:理解合同(中文回答)。
- 默认:通用策略(中文回答)。
通过修改 create_prompt
中的 strategy
参数选择策略。
限制
- OpenAI API 费用:使用 OpenAI 的 API 将产生使用费用,需要监控以避免意外开销。
- PDF 解析:使用
PyPDF2
解析,某些复杂 PDF 可能无法完美处理。 - 嵌入限制:嵌入的最大令牌限制可能会限制文本块大小或提示的最大长度。
- 模型回答:回答的质量和准确性取决于语言模型的表现和所检索文本块的相关性。
贡献
欢迎贡献!如有任何建议或改进,随时提交问题或拉取请求。
许可
本项目基于 Apache 许可证 授权。