文件自动分类与语义检索:我如何用 PyQt + LangChain 打造智能资料整理工具
·
为什么要造这个轮子
项目、论文、实习资料越堆越多,靠手动整理几乎不可能。于是我写了一个 PyQt 桌面工具(开源地址:GitHub - 0zxm/SmartFileAssistant),点几个按钮就能自动分类、建立向量索引、搜索并结合 LLM 输出答案。
技术栈一览
- UI:PyQt5 负责桌面交互。
- 检索:LangChain + Chroma 完成语义向量检索,BM25 提供关键词回退。
- LLM 接入:SiliconFlow / OpenRouter 负责问答、聚类等高阶能力。
- 格式解析:antiword、PyMuPDF、Docx2txt、Markdown/Text 等组件统一切片入库。
三种分类模式
- 按后缀:最简单最快,将 pdf/doc/docx/md/txt 等移动到预设目录。
- 按文件名(语义聚类):调用 SiliconFlow LLM,基于文件名+内容抽样生成语义类目,移动前支持人工确认。
- 混合 AI:语义复杂的文件交给
classify_by_ai,其余照扩展名规则,双线程并行提升吞吐。
RAG 工作流
- 点击“初始化”选择资料目录 → 自动加载/清洗/切块 → 写入 Chroma → 更新 BM25。
- 输入关键词检索:界面展示可点击的路径、目录与内容片段。
- 查询以
?结尾时自动触发 LLM,将参考文档拼进提示词生成回答。
环境配置
pip install -r requirements.txt
cp .env.example .env
source .env # PowerShell 参见 README 提供的脚本
python main.py
.env 中需配置:
SILICONFLOW_API_KEY(必填)SILICONFLOW_CHAT_MODEL、SILICONFLOW_EMBEDDING_MODEL/URLOPENROUTER_API_KEY/MODEL(可选)ANTIWORD_CMD、ANTIWORD_MAPPING_FILE(可覆盖默认路径)
Antiword 安装(Windows 示例)
- 在项目根目录解压
antiword_windows.zip(或官网包)。 - 选择 win64/win32 目录,确保有
antiword.exe与UTF-8.txt。 - 复制到固定位置(示例:
E:/VSCodeProject/antiword/)。 .env中指定:ANTIWORD_CMD="E:/VSCodeProject/antiword/antiword.exe" ANTIWORD_MAPPING_FILE="E:/VSCodeProject/antiword/UTF-8.txt"& $env:ANTIWORD_CMD -h验证安装。
目录速览
main.py:PyQt 启动入口。ui.py:界面事件,负责搜索/分类。rag_component.py:构建、检索、混合召回逻辑。ai_cloud_plugin.py:SiliconFlow/OpenRouter API 封装。file_read.py:多格式读取 + antiword。embedding/:接口示例与工具脚本。refactored_project/:拆分的 client/server 版本,方便二次开发。
常见问题
.doc无法解析 → 确认 antiword 路径或加入PATH。.env未生效 → 每个终端都需source .env或写入系统变量。- 入库太慢 → 减小
TEXT_SPEilTER_CHUNK_SIZE、分批导入,或切回本地 embedding。 - Chroma 目录冲突 → 修改
constants.py中的CHROMA_DB_PATH后重新初始化。
后续计划
想要命令行/API 版本?可以参考 refactored_project/server 与 client_refactored。也欢迎在仓库里提 Issue/PR,一起扩展新的分类策略、检索 reranker 或 UI 体验。
更多推荐




所有评论(0)