ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

用 AI 整理代码片段:让模型提建议,把文件操作留给可复核的计划

用 AI 整理代码片段:让模型提建议,把文件操作留给可复核的计划

桌面上有十几个叫 test、demo、final 的脚本时,模型很适合建议分类和文件名。但如果把它返回的目录和名字直接交给文件系统,便利就可能变成覆盖、越界写入或误删。

2026 年 10 月 13 日,Ollama 与 Fly.io 的集成说明把凭据保管和可用实例范围放到网关层。这种分工对本地整理工具同样有启发:让模型理解内容,让程序决定它可以做什么。官方说明

一份整理计划必须回答什么

每条建议至少包含源文件、目标分类、目标名字、理由。源文件由扫描器选定,模型只能从固定分类中选择,并提供一个不含路径分隔符的文件名。执行前展示差异,检查同名目标,保留原文件。

“先写新文件,再删除源文件”仍可能在部分失败时丢失工作。第一版工具宁可只做复制,等使用者确认归档可用,再通过单独流程处理旧文件。也不要自动执行整理后的代码。

可复核复制的最小实现

示例只操作临时教学目录。保存为 organize.py 运行,它会保留一个输出临时目录,便于查看结果;没有扫描你的桌面。

from pathlib import Path import hashlib import tempfile ALLOWED = {"python", "notes", "other"} def digest(path): return hashlib.sha256(path.read_bytes()).hexdigest() def planned_copy(src, out, category, name, apply=False): if category not in ALLOWED: raise ValueError("未知分类") if (not name or name in {".", ".."} or any(c in name for c in '/\\:\0') or Path(name).name != name): raise ValueError("文件名包含路径或特殊字符") if src.is_symlink() or not src.is_file(): raise ValueError("源文件不是普通文件") target = out / category / name if target.exists() or target.is_symlink(): raise FileExistsError(target) before = digest(src) if apply: target.parent.mkdir(parents=True, exist_ok=True) with target.open("xb") as dest: dest.write(src.read_bytes()) if digest(target) != before: raise OSError("复制校验失败") return target root = Path(tempfile.mkdtemp(prefix="organize-demo-")) src = root / "demo.py" src.write_text("print('hello')\n", encoding="utf-8") out = root / "organized" target = planned_copy(src, out, "python", "hello.py") assert not target.exists() # 默认只预览 planned_copy(src, out, "python", "hello.py", apply=True) assert src.exists() and digest(src) == digest(target) try: planned_copy(src, out, "python", "../escape.py") except ValueError: pass else: raise AssertionError("越界文件名未拒绝") print("源文件保留,复制校验通过:", root)

这个例子刻意不让模型指定源路径,也不删除任何文件。目标目录由程序控制;若扩展为多用户服务,还要处理目录符号链接、并发改名和检查后被替换的竞争条件。不能把单用户临时目录中的测试当成安全沙箱验证。pathlib 官方说明

索引在复制成功后更新

真正的归档索引应记录源哈希、目标路径、执行时间与状态。复制失败的项目保留为失败,不要先给 README 写一句“已归档”。撤销也应引用这份清单,而不是凭文件名猜测哪个是旧版本。

本文实跑了预览、复制、哈希一致和越界文件名拒绝;模型分类效果、并发文件系统和真实桌面集成未测。整理工具最贴心的地方,是能让人放心点开“预览”,而不是让人担心下一次启动。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进