为什么要造这个轮子

项目、论文、实习资料越堆越多,靠手动整理几乎不可能。于是我写了一个 PyQt 桌面工具(开源地址:GitHub - 0zxm/SmartFileAssistant),点几个按钮就能自动分类、建立向量索引、搜索并结合 LLM 输出答案。

技术栈一览

  • UI:PyQt5 负责桌面交互。
  • 检索:LangChain + Chroma 完成语义向量检索,BM25 提供关键词回退。
  • LLM 接入:SiliconFlow / OpenRouter 负责问答、聚类等高阶能力。
  • 格式解析:antiword、PyMuPDF、Docx2txt、Markdown/Text 等组件统一切片入库。

三种分类模式

  1. 按后缀:最简单最快,将 pdf/doc/docx/md/txt 等移动到预设目录。
  2. 按文件名(语义聚类):调用 SiliconFlow LLM,基于文件名+内容抽样生成语义类目,移动前支持人工确认。
  3. 混合 AI:语义复杂的文件交给 classify_by_ai,其余照扩展名规则,双线程并行提升吞吐。

RAG 工作流

  1. 点击“初始化”选择资料目录 → 自动加载/清洗/切块 → 写入 Chroma → 更新 BM25。
  2. 输入关键词检索:界面展示可点击的路径、目录与内容片段。
  3. 查询以 ? 结尾时自动触发 LLM,将参考文档拼进提示词生成回答。

环境配置

pip install -r requirements.txt
cp .env.example .env
source .env   # PowerShell 参见 README 提供的脚本
python main.py

.env 中需配置:

  • SILICONFLOW_API_KEY(必填)
  • SILICONFLOW_CHAT_MODELSILICONFLOW_EMBEDDING_MODEL/URL
  • OPENROUTER_API_KEY/MODEL(可选)
  • ANTIWORD_CMDANTIWORD_MAPPING_FILE(可覆盖默认路径)

Antiword 安装(Windows 示例)

  1. 在项目根目录解压 antiword_windows.zip(或官网包)。
  2. 选择 win64/win32 目录,确保有 antiword.exeUTF-8.txt
  3. 复制到固定位置(示例:E:/VSCodeProject/antiword/)。
  4. .env 中指定:
    ANTIWORD_CMD="E:/VSCodeProject/antiword/antiword.exe"
    ANTIWORD_MAPPING_FILE="E:/VSCodeProject/antiword/UTF-8.txt"
    
  5. & $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/serverclient_refactored。也欢迎在仓库里提 Issue/PR,一起扩展新的分类策略、检索 reranker 或 UI 体验。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐