- AI 应用
- 大模型
- 本地部署
- 桌面应用
【免费下载链接】ai-file-sorter
Cross-platform desktop application for content-aware file organization and renaming. Supports local and remote LLMs, preview-based workflows, and fully user-controlled changes.
AI File Sorter 是一款跨平台的AI 文件分类与整理工具,它通过本地或远程 LLM 理解文件内容,自动给出「主分类 : 子分类」建议,并在你确认后才真正移动或重命名文件。本文深入解析其分类引擎的三大核心机制:Prompt 构建、Taxonomy 归一化与一致性机制,帮助你理解分类结果是如何一步步产生、被校准并保持稳定的。
一、分类引擎的整体流程
在深入细节之前,先看清一条完整的分类流水线,所有机制都挂在这条链路上:
- 扫描:
FileScanner遍历目标目录,产出文件条目(见 app/lib/FileScanner.cpp); - 分类:CategorizationService 为每个文件组装 Prompt,调用 LLM 并解析「主分类 : 子分类」;
- 归一化:DatabaseTaxonomyNormalizer 把模型输出的五花八门的标签折叠成统一的分类体系(Taxonomy);
- 一致性处理:
ConsistencyPassService对整批结果做二次校准; - 审阅与应用:你在审阅界面逐条确认,应用才执行移动/重命名,全程支持撤销与 Dry Run 预览。
官方文档对两种分类模式有专门说明,值得先读一遍:docs/categorization-behavior.md。
二、Prompt 构建:每个文件的"提问方式"都不一样
分类质量的上限首先由 Prompt 决定。LocalLLMPromptBuilder(app/lib/LocalLLMPromptBuilder.cpp)按文件类型选择不同的系统提示词:
- 普通文件:依据文件名、扩展名和目录上下文判断,遇到安装包会先识别它安装的是什么软件;
- 文档文件:先抽取"文档摘要"(Document summary)作为主要证据,再结合路径线索;
- 图片文件:附带视觉模型生成的"图片描述",并明确区分「截图类」应按屏幕内容而非按图片本身分类;
- 目录:按名称与路径主题给出宽泛分类。
更关键的是两种分类风格会切换提示词策略(在分类设置对话框中可切换):
- More consistent(更一致):图片一律以
Images为主分类,追求目录树稳定; - More refined(更精细):允许按语义给出如
Wildlife / Lions这样的主题分类。
Prompt 的"上下文区块"由build_combined_context统一拼装(CategorizationService.cpp),按顺序包含:
| 区块 | 作用 |
|---|---|
| 一致性提示块 | 注入本批最近 5 条同类文件的分类结果作为参照 |
| 白名单候选块 | 限制可选主分类;白名单超过 30 项时,自动检索出最相关的 8 个候选,避免撑爆上下文 |
| 学习候选块 | 从用户历史确认的决策中检索相似候选,让引擎"越用越懂你" |
| 分类语言指令 | 非英文界面时,指示模型输出对应语言风格的分类 |
| 主分类候选 | 按文件族(family)收窄可选的主分类集合 |
针对小模型的上下文限制,还有两级保护:prompt_token_budget预留生成空间,shrink_user_prompt_for_context在重试时逐级压缩摘要段(1200→800→500→300 字符)再压缩整段 Prompt(1800→700 字符),确保小上下文模型也能跑通。
三、Taxonomy 归一化:让"Docs"和"Documents"归为一类
LLM 的输出天然不稳定:同一个文件这次叫Documents,下次可能叫Docs,再下次可能是Doc Files。如果不做归一化,分类结果会散落成一堆近义文件夹。DatabaseTaxonomyNormalizer(app/include/DatabaseTaxonomyNormalizer.hpp)负责解决这个问题,它分四层处理:
1️⃣ 基础归一化:normalize_label把标签转为小写字母数字加规范空格的形式;strip_trailing_stopwords去掉结尾的file/files/doc/photo等无信息量词缀(taxi files→taxi,但单 token 不动)。
2️⃣ 同义词折叠:内置映射表把常见变体收敛到规范名,例如:
doc、docs、text、papers→Documentsapplication、apps、programs、patches→Softwarephoto、screenshot、wallpaper→Images- 旧版
Music→ 规范名Audio;Installer Builders→Installer Tools
3️⃣ 语义家族(Semantic Family):对Manuals、Guides、Licenses、Presentations等家族,若子分类只是General、Misc或与主分类重复的泛化词,会自动折叠为General,避免Documents / Documents这类无意义层级。
4️⃣ 模糊匹配:归一化后仍对不上库中已有条目时,resolve_category会计算编辑距离相似度(Levenshtein,DatabaseManager.cpp),当主分类与子分类的综合得分 ≥ 0.85 时判定为同一分类,并把原始写法记为别名,后续直接精确命中,不再重复模糊计算。
四、一致性机制:让整批结果"前后统一"
归一化解决"名字统一",一致性机制解决"判断统一"——同一批里 50 个 PDF 不应被分成 50 个不同的子类别。引擎用三层手段实现:
1. 会话内一致性提示(Consistency Hints)
collect_consistency_hints(CategorizationService.cpp)为每个文件生成签名(如FILE:.pdf),从本批会话历史取最近 5 条同签名分类结果;不足时再从数据库中取该扩展名近期分类补齐。这些提示以这样的文本注入 Prompt:
Recent assignments for similar items: - Documents : Tax forms - Documents : Invoices Prefer one of the above when it fits; otherwise, choose the closest consistent alternative.2. 分类缓存与用户学习库(分离存储)
- 分类缓存:存历史分类结果与重命名建议,重复扫描秒出结果,相当于"本地记忆",可随时清理,不影响模型;
- 用户学习库:UserLearningStore 单独存储在配置目录,只收录你在审阅中明确批准的决策,并按词法+向量相似度检索候选。两者刻意分开,清缓存不会丢掉你教给引擎的习惯。
3. 一致性通道(Consistency Pass)
整批分类完成后,若开启该选项,ConsistencyPassService(app/lib/ConsistencyPassService.cpp)会进行第二次 LLM 校准:
- 每10 个文件为一块,把"已知分类体系(Taxonomy JSON)+ 当前分配"发给模型;
- 明确要求:优先复用已有分类条目、合并近义标签(如
DocsvsDocuments)、不合并不同概念、保持原顺序逐行输出完整路径 => 主分类 : 子分类,以END收尾; - 解析器逐行校验,未知路径 ID 或空分类会自动回退到原值并记录警告;
- 修正结果仍要经过
resolve_category归一化后写回数据库,保证不产生新的"野生分类"。
五、效果对比:乱目录 → 结构化文件夹
下图是同一文件夹整理前后的对比,可以看到分类引擎 + 归一化 + 一致性校准共同作用的结果:顶层目录稳定、同类文件聚合、无近义重复分类。
应用前你始终可以先看 Dry Run 预览(DryRunPreviewDialog),所有变更都是用户完全可控的。
六、核心模块速查
| 机制 | 关键文件 |
|---|---|
| Prompt 构建 | app/lib/LocalLLMPromptBuilder.cpp |
| 分类主流程与提示块拼装 | app/lib/CategorizationService.cpp |
| Taxonomy 归一化 | app/lib/DatabaseTaxonomyNormalizer.cpp |
| 模糊匹配与别名 | app/lib/DatabaseManager.cpp |
| 一致性通道 | app/lib/ConsistencyPassService.cpp |
| 用户学习库 | app/include/UserLearningStore.hpp |
| 行为说明文档 | docs/categorization-behavior.md |
一句话总结:AI File Sorter 的分类引擎 = 按文件类型定制的 Prompt 拼装 + 多层 Taxonomy 归一化兜底 + 会话提示/缓存/学习库/批量校准四层一致性保障——这正是它能对成百上千个文件给出既准确又稳定的分类结果的原因。
- AI 应用
- 大模型
- 本地部署
- 桌面应用
【免费下载链接】ai-file-sorter
Cross-platform desktop application for content-aware file organization and renaming. Supports local and remote LLMs, preview-based workflows, and fully user-controlled changes.
相关推荐
Chat2DB 离线版本地部署指南:Docker 与源码两条路径跑通完整流程
Chat2DB 离线版本地部署指南:Docker 与源码两条路径跑通完整流程 Chat2DB 是一款跨平台的数据库客户端和 SQL 工作空间,可连接 40 多种
数据库客户端AI 应用数据分析终极指南:Cherry Studio如何实现分布式数据一致性架构
终极指南:Cherry Studio如何实现分布式数据一致性架构 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端,其核心优势在于通过精心
人工智能大模型AI 应用交互助手本地部署Hugo 模板函数 compare.Eq 深度解析:多参数相等性判断与类型归一化机制
Hugo 模板函数 compare.Eq 深度解析:多参数相等性判断与类型归一化机制 compare.Eq 是 Hugo 模板引擎 compare 命名空间下最
开发工具前端CLI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考