DocumentGPT
基于LangChain和FAISS的PDF文档智能问答工具,支持多工具Agent协作
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于LangChain和FAISS的PDF文档智能问答工具,支持多工具Agent协作
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样的场景:你需要快速消化一篇 80 页的学术论文,传统方式是逐页阅读、标注、查阅资料——这往往要花上数小时。但现在,如果你能把整篇论文"喂"给 AI,然后像跟人聊天一样提问呢?"第三段提到的实验方法具体怎么设计的?""这篇文章的核心贡献是什么?"——DocumentGPT 就是来解决这个问题的。
DocumentGPT 诞生于 2023 年 RAG(检索增强生成)技术快速成熟的时期。作者 aju22 基于 LangChain 生态构建了这个工具,目标用户是研究人员、学生和知识工作者。核心思路很清晰:把 PDF 文档切块、向量化、存入 FAISS 向量数据库,用户提问时通过语义检索找到最相关的内容块,再由 GPT-3.5-turbo 生成回答。
项目使用 MIT 许可证,主题标签涵盖 langchain、llm、semantic-search、vector-database 等主流 AI 关键词,技术栈选择紧跟行业趋势。
DocumentGPT 的设计并非简单的"上传 PDF → 问问题"单轮交互,而是构建了一个多工具协作的 Agent 体系:
四大工具协同工作:
Lookup Tool(本地检索):基于 FAISS 向量数据库的语义搜索,在 PDF 内容块中找到最相关的上下文。底层使用 LangChain 的 RetrievalQA 链,检索策略为 stuff 类型——将所有相关块拼接到 prompt 中。
Arxiv Tool(论文搜索):集成 arxiv.org 学术论文库,Agent 可以自主判断"当前问题需要参考外部论文",自动搜索并引用 arXiv 资源。
Web Search Tool(网络搜索):通过 SerpAPI 实时搜索网络,补充文档中缺失的最新信息。
Summarization Tool(摘要生成):基于 LangChain load_summarize_chain 的 map_reduce 策略,对整个文档或指定段落生成摘要。
这套工具组合使得 DocumentGPT 不仅仅是一个问答机器人,而是一个具备"自我知识管理"能力的智能助手。用户可以追问、多轮对话、系统还会记录对话历史中的关键短语。
上传 PDF 后,系统自动解析并展示文档预览
基于文档内容的智能问答,回答附带来源标注
从代码结构看,DocumentGPT 采用了清晰的分层架构:
pypdf 提取文本,通过 RecursiveCharacterTextSplitter 按 1000 字符块切分文本,存入 FAISS 向量库。文本清洗逻辑(连字符合并、换行规范化、冗余空行去除)保证了向量化的质量。ZeroShotAgent + Tool 架构,记忆管理使用 ConversationBufferWindowMemory。CustomTool 抽象基类。关键依赖版本:
langchain==0.0.234:较老版本,API 可能与新版不兼容openai==0.27.8:兼容旧版 SDK,AuthenticationError 处理逻辑针对此版本faiss-cpu==1.7.4:CPU 版 FAISS,无需 GPUstreamlit-extras==0.2.7:增强 Streamlit UI 组件前端技术栈:纯 Streamlit,无 React/Vue 等 SPA 框架,组件化程度低,适合快速原型但不适合大规模定制。
DocumentGPT 的部署难度为简单——标准的 pip 安装即可运行:
pip install -r requirements.txt
streamlit run app.py
硬件需求极低:CPU 运行,faiss-cpu 不需要 GPU,RAM 4GB+ 即可。支持的操作系统覆盖 Linux/macOS/Windows。
但致命缺陷是:无 Docker 支持。 没有任何 Dockerfile 或 docker-compose.yml 文件,依赖 OpenAI API Key 和 SerpAPI Key 需要在运行时手动配置(Streamlit secrets 机制)。这意味着无法实现"一行命令启动"的容器化部署。
| 维度 | 评分 |
|---|---|
| 架构设计 | 中等——分层清晰但耦合度高 |
| AI 框架使用 | LangChain(stuff chain) |
| 代码规模 | 小型项目(< 5 个核心模块) |
| 测试覆盖 | 未发现测试文件 |
| 文档质量 | README 结构完整,缺少部署文档 |
| 数据隐私 | ⚠️ 文档上传到第三方 API(OpenAI),涉及隐私数据处理 |
1. 依赖旧版 LangChain 的风险。 langchain==0.0.234 发布于 LangChain 快速迭代期,当前 LangChain 已演进至 0.3.x+。API 变更可能导致升级困难。
2. API Key 硬编码与隐私问题。 用户需要提供 OpenAI API Key,PDF 文档内容会通过 API 传输到 OpenAI 服务器。对于包含敏感信息的学术/商业文档,存在数据泄露风险。
3. 搜索工具依赖外部服务。 Arxiv Tool 和 Web Search Tool 分别依赖 arxiv 库和 SerpAPI,后者为付费服务。
4. FAISS CPU 性能瓶颈。 大文档(> 100 页)向量化速度较慢,且向量检索精度受 chunk size 和 overlap 参数影响,需要用户手动调优。
DocumentGPT 代表了 2023 年 RAG 应用的一个典型范式:LangChain + Streamlit + FAISS + OpenAI。它证明了用相对少的代码(~1500 行 Python)就能构建出可用的文档问答系统。
这类工具的兴起推动了一个趋势:知识获取的民主化。过去需要专业 NLP 团队才能实现的文档智能理解,如今任何人都可以通过开源工具自行搭建。当然,隐私、成本、精度仍然是制约其进入企业核心场景的三座大山。
# 1. 克隆项目
git clone https://github.com/aju22/DocumentGPT.git
cd DocumentGPT
# 2. 安装依赖(建议 Python 3.10+)
pip install -r requirements.txt
# 3. 配置 API Key(创建 .streamlit/secrets.toml)
echo '[secrets]
openai_api_key = "sk-..."
serp_api_key = "..." # 可选
' > .streamlit/secrets.toml
# 4. 启动
streamlit run app.py
访问 http://localhost:8501,上传 PDF 即可开始对话。
分析时间:2026-08-02 | 数据来源:GitHub API | 框架:LangChain | 语言:Python