1. 项目概述
最近在整理公司历年技术文档时,发现一个痛点:虽然积累了大量的PDF、Word、Excel等格式的技术文档,但当需要查找某个具体问题的解决方案时,往往要花费大量时间翻阅。这让我萌生了搭建一个本地文档智能问答系统的想法——就像给电脑装了个"文档管家",随时可以快速准确地回答基于这些文档内容的问题。
这个系统基于Streamlit和LangChain构建,能够处理多种常见文档格式(PDF、Word、TXT、Excel等),通过自然语言理解用户提问,并从本地文档库中精准定位相关信息。最关键是所有数据处理和问答都在本地完成,特别适合企业敏感数据或需要离线使用的场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心组件解析
2.1 技术栈选型
选择Streamlit+LangChain组合主要基于以下考量:
-
Streamlit:作为展示层,它能让开发者用Python快速构建交互式Web应用,省去前端开发工作。实测从零开始到第一个可交互原型,仅需不到50行代码。
-
LangChain:作为核心处理框架,它提供了文档加载、文本分割、向量化存储和语义搜索的完整工具链。其模块化设计让我们可以灵活组合不同组件。
提示:如果对隐私要求极高,可以考虑用HuggingFace的本地模型替代OpenAI API,虽然效果稍逊但完全离线。
2.2 系统工作原理
整个系统的处理流程可分为四个关键阶段:
-
文档加载:通过LangChain的文档加载器(Document Loaders)支持多种格式:
- PDF:PyPDFLoader
- Word:Docx2txtLoader
- Excel:UnstructuredExcelLoader
- 纯文本:TextLoader
-
文本处理:
- 使用RecursiveCharacterTextSplitter进行文本分割
- 设置chunk_size=1000(适合大多数文档)
- chunk_overlap=200保证上下文连贯性
-
向量化存储:
- 选用开源的SentenceTransformer进行文本嵌入
- 向量数据库采用轻量级的FAISS
- 索引构建耗时约0.5秒/万字符(实测数据)
