把「收到的一堆审计资料」,变成「一条可核对、可点击、可追溯、可直接被 AI 消费的目录底稿」。
一句话:收到被审计方发来的一堆文件/压缩包后,一条命令自动帮你列出一份带超链接、能打印、能打勾核对的目录表,还能自动对出「对方承诺给的清单 vs 实际交了什么」的缺漏。
状态: v2.2 稳定版 · 许可证: MIT · 作者: Roleyking
ℹ️ 别搞混:这里的 AMI = Audit Material Indexer(审计资料索引器),与 AWS / 云计算的 EC2 AMI(Amazon Machine Image)无关。此工具完全离线,不连任何云。
- 30 秒看懂它干什么
- 它解决什么问题
- 谁适合用
- 需要先装什么
- 快速上手:一个完整例子(照着做)
- 常用命令速查
- 常用参数(带例子)
- 三个输出文件,分别是谁在用
- 常见问题(FAQ)
- 安全与离线
- 给 AI / 系统集成方
- 架构(了解即可,日常用不上)
- 路线图(产品视角)
- 文档 / 相关
- 遇到问题?
- 版本历史
两条命令,两件事:
ami scan — 一键出目录索引 |
ami diff — 承诺清单缺项核对 |
|---|---|
![]() |
![]() |
12 个文件 · 7 个目录 · ZIP 套 ZIP 已穿透 · 每行文件名都是可点击的 file:// 超链接 |
拿对方给的 PBC.xlsx 一比,缺项 1 条(付款凭证.xlsx)立刻现形 |
以上画面均取自仓库内的
examples/demo-project/—— 全部为人工构造的演示数据,不含任何真实审计资料。你可以自己跑一遍复现(见文档 / 相关)。
每次收到被审计方资料包,这几件耗时、易错、靠人肉的事,AMI 一条命令就做完:
| 你手工做 | 会怎样 | 用 AMI |
|---|---|---|
| 打开 Excel 逐条手打文件路径,整理目录 | 一个文件夹一个路径手敲,累了就错,错了就是风险 | 一条命令自动生成目录表,每行文件名可点击打开 |
| 一个文件一个文件打开核对、打勾 | 大包几百上千个文件,核对到一半就麻了 | 目录表自带「核对状态」下拉框(已核对/缺失/疑点/无需关注),点两下完成留痕 |
| 对照对方给的 PBC 清单,一条条查有没有交 | 靠眼睛,漏一条就是报告期缺件 | ami diff 秒出缺项 / 已收 / 多余三张表 |
| 压缩包(ZIP/RAR)里面装了啥,全看不见 | 得先手动解压再看,套娃的包解到崩溃 | 不解压直接列出包内完整结构,中文文件名不乱码 |
| 底稿留痕(版本、哈希、来源) | 无版本无哈希,说不清哪来的 | 每个文件带全局编号 + SHA256 + 来源 + 置信度标注 |
| AI 平台 / 别的系统要用这些底稿 | 每家一套格式,对接就地狱 | 输出标准化 JSON 契约,即插即用 |
- 审计师 / 内审 / 尽调人员 — 收到资料包,要快速出目录索引底稿(working paper)、核对 PBC 缺项、可追溯。
- 合规与内控岗位 — 需要 compliance 留痕:每份资料一个全局编号、SHA256、来源、置信度,任何时候都能回答"这份证据是什么时候、从哪里、以什么状态进入底稿的"。
- AI 审计平台构建者 — 需要一个上游"基础事实层":先把"收到的一堆资料"变成可核对的事实清单,再喂给 AI 做分析。
不用会写代码。命令基本就一条,复制粘贴就能跑。下面每一步都给你看"你会看到什么"。
定位核心是审计,但这套"穿透索引"能力并不挑场景。任何"一个乱得不知道里面到底有啥、还层层套着压缩包"的文件夹,它都能一张表给你盘清楚。两个最值钱的点:
- 穿透压缩包:不解压,直接列出
.zip/.rar内部结构(ZIP 套 ZIP 也会递归展开,中文文件名不乱码)。 - 点击直达:目录表每一行文件名都是可点的
file://超链接,点击直接跳到那个文件——哪怕是埋在 3 层子目录里、zip 包内部最深处的一个文件。
例子:一个交接/归档盘 D:\旧项目打包(archive 场景),几十个 zip,zip 里还套 zip。ami scan D:\旧项目打包 之后,Excel 里直接是 200 行、每行一个无可争议的最终文件;点其中一行,立刻打开那个藏在 web.zip\static\assets\... 最深处的文件——不用先一层层解压再按名找人。
对审计师,这是目录底稿;对普通整理/交接场景,这是含压缩包内部的全景清单。同一个内核,两种用途。
只有基础功能(列目录 + Excel + 缺项核对)的话,只需两样:
| 组件 | 为什么需要 | 怎么装 |
|---|---|---|
| Python 3.11+ | AMI 的运行环境 | 见下方分平台说明 |
| AMI 本身 | 一条 pip install -e . |
见下方 |
可选(不装也能跑,只是少几个高级能力):
| 可选组件 | 没有它会怎样 | 要不要装 |
|---|---|---|
rarfile + 7-Zip |
.rar 包扫不了(ZIP 不受影响) |
常收到 RAR 就装 |
jsonschema |
JSON 校验会降级(跳过校验),其它不受影响 | 想严谨校验就装 |
不确定就复制下面这一整条命令,粘贴到 cmd / 终端回车即可:
pip install -e .[archive,validate]只想要基础功能、不想装可选组件,就:
pip install -e .
⚠️ Windows 用户:装 Python 时务必勾选 "Add Python to PATH",否则找不到命令(见 FAQ)。装好后若ami没识别,改用ami.bat(在仓库根目录)。
场景设定:你审计赵钱孙公司,对方发来一个压缩包 2026年报资料.zip,你解压后得到一个文件夹 D:\审计\赵钱孙-2026年报\被审计方材料。里面长什么样你完全不清楚。
打开 cmd(Windows)或 终端(macOS/Linux),输入:
cd D:\审计\赵钱孙-2026年报
ami scan 被审计方材料你会看到: 屏幕刷出一份清单,结束后,被审计方材料 文件夹里多了 3 个文件:
被审计方材料\
├─ 里面的真实文件(原封不动)
├─ DIRECTORY_INDEX.xlsx ← 主力:好打勾的目录表,用 Excel 打开
├─ DIRECTORY_INDEX.md ← 屏幕版:用 VS Code / Typora 打开,链接能点
└─ DIRECTORY_INDEX.json ← 系统版:给 AI / 自动化用,平时可忽略
打开 DIRECTORY_INDEX.xlsx: 每一行 = 一个文件。第 1 列是全局编号,点「文件名」那列的蓝色链接直接打开原文件,最后两列「核对状态 / 备注」留给你人工打勾和写批注。打印成 A4 就是一张工作底稿。
把对方发来的 PBC 清单(一张 Excel 表格,第一列是"文件应该长这样"的清单)放到任意位置,比如 D:\审计\赵钱孙-2026年报\PBC清单.xlsx。核对:
cd D:\审计\赵钱孙-2026年报
ami diff PBC清单.xlsx --root 被审计方材料你会看到: 屏幕直接报数,并生成一份 PBC_DIFF.md:
PBC 清单共 120 项
已收 115 项
缺 5 项 ← 对方承诺了但没交的,这几项就是你要去催的
多 7 项 ← 实交不在清单里的,可作参考
缺的那 5 项是谁,PBC_DIFF.md 里列得清清楚楚,直接照着去催话。
ami diff对 PBC 清单的要求:一张.xlsx,默认取第 1 个工作表的 A 列,每格一个条目(相对路径或只文件名都行)。清单不在 A 列 → 用--column C;在别的 sheet → 用--sheet 2。核对按相对路径优先、文件名兜底:能对齐路径最严谨(同名文件在不同子目录不会混),--match-by name则只按文件名。导出:默认生成
PBC_DIFF.md;加--xlsx得到缺项 Excel(催件/交上级更常用),加--json得到结构化 JSON。
ami validate D:\审计\赵钱孙-2026年报\被审计方材料\DIRECTORY_INDEX.json返回 VALID 就说明数据完整合规,可以直接给下游系统。
| 你要做的事 | 命令(示意) |
|---|---|
| 收包 → 出目录底稿 | ami scan 资料包目录 |
| 目录底稿里顺带导出 JSON | ami scan 资料包目录 --json |
| 核对 PBC 缺项(要 Excel/JSON) | ami diff 清单.xlsx --root 资料包目录 --xlsx --json |
| 校验已生成的 JSON | ami validate xxx/DIRECTORY_INDEX.json |
| 看数据契约长什么样 | ami inspect |
| 看版本 | ami version |
| 看所有命令 | ami --help |
💡 Windows:如果命令
ami没识别(没加入 PATH),改用ami.bat,如ami.bat scan 被审计方材料。macOS/Linux 装好即用ami。
大多数情况下上面那条 ami scan 就够了。下面这些参数按需加。
性能参考:实测可处理数千文件 + 多层 ZIP 嵌套。默认 >100MB 的文件跳过 SHA256(加
--hash-all强制),超大目录可用--no-hash全程加速。
| 场景 | 命令 |
|---|---|
| 资料超大,跳过哈希加速 | ami scan 被审计方材料 --no-hash |
| 只扫前 3 层目录 | ami scan 被审计方材料 --max-depth 3 |
| 对方 ZIP 中文文件名乱码 | ami scan 被审计方材料 --zip-encoding=gbk |
| 排除某些垃圾文件 | ami scan 被审计方材料 --ignore "*.tmp" "临时文件" |
| 输出到别的文件夹 | ami scan 被审计方材料 -o D:\审计\底稿 |
| 只按文件名核对清单(不比对路径) | ami diff 清单.xlsx --root 被审计方材料 --match-by name |
| 核对清单并出 Excel 缺项表 | ami diff 清单.xlsx --root 被审计方材料 --xlsx --json |
| 文件 | 打开方式 | 给谁 | 特点 |
|---|---|---|---|
DIRECTORY_INDEX.xlsx |
Excel/WPS | 审计师本人 | 8 列、可点击、可打勾、可打印,主力 |
DIRECTORY_INDEX.md |
VS Code / Typora / Obsidian | 屏幕快速看的人 | 目录层级缩进 + emoji,链接可点 |
DIRECTORY_INDEX.json |
任何程序 | AI / 自动化系统 | 标准化契约,机器消费 |
打开后一列一个意思:
| 列 | 内容 | 说明 |
|---|---|---|
# |
全局序号 | 打印后可以说"47 号缺失" |
文件名(蓝字链接) |
文件名 | 点击直接打开原文件 |
来源 |
📁 文件系统 / 📦 ZIP 内 | 区分这文件是在磁盘上还是压缩包里 |
大小 |
人类可读 | 1.2 MB / 345 KB |
修改时间 |
ISO 格式 | 文件最后修改时间 |
SHA256 |
64 位十六进制 | 审计留痕,防止文件被偷换 |
核对状态 |
下拉框:已核对/缺失/疑点/无需关注 | 你人工打勾 |
备注 |
空 | 你手写批注 |
折叠:Excel 左侧有 1 2 3 4 按钮,点 1 折叠到一级目录,点 2 展开二级……目录层级靠它体现。
打印:已设好 A4 横向 + 重复表头 + 页码,直接 Ctrl+P 就是工作底稿。
- Windows:装 Python 时没勾 "Add Python to PATH",或没执行
pip install -e .。补救:每次在 AMI 仓库根目录用ami.bat,双击或cmd里ami.bat scan ...。 - macOS/Linux:确认执行过
pip install -e .;或 Python 版本 < 3.11。
ami.bat 已内置 chcp 65001 + PYTHONUTF8=1。若还乱码,先在 cmd 里手动 chcp 65001 再跑。
能。装好 rarfile + 7-Zip 后,.rar 会被当作文件夹展开(列结构,不解压)。没装就跳过 RAR。
默认自动识别(UTF-8 → GBK → CP437)。绝大多数情况不用管。个别还乱就显式指定:
ami scan <资料> --zip-encoding=gbk(可选:auto / utf-8 / gbk / cp437)。
已内置公式注入防护——文件名/单元格以 = + - @ 开头会自动加 ' 转义,不会执行恶意公式。
在 Windows 上用 ami.bat 生成的一定是 Windows 路径(file:///C:/...),可点。若是在 WSL 里的路径(/mnt/...)换到 Windows 打不开,就用 Windows 原生生成。
按上面"需要先装什么"确认 Python 装好并勾了 Add PATH。多数是装时没勾。
会正常列出并标记(加密的标 [加密]/ZIP_ENCRYPTED,损坏的标异常),不会崩溃,也不影响其它文件正常扫描。
被审计方多层嵌套 + 长文件名最容易撞 Windows 的 MAX_PATH 上限。开启系统长路径支持:注册表 HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled 设为 1(或系统设置里启用长路径)。极端嵌套也可用 --max-depth 限制层级。
macOS 版 Excel 因沙盒限制,file:// 链接可能无法点击。Mac 用户建议以 DIRECTORY_INDEX.md 为主力(VS Code / Typora / Obsidian 里链接可点)。
能。.xlsx 是标准格式,WPS 正常打开,折叠按钮、核对下拉框、超链接、打印均与 Excel 基本一致。
默认是按相对路径核对(最严谨,同名文件在不同子目录不会混)。仅当你明确 --match-by name(只按文件名)或路径没对上走了"文件名兜底"时,不同目录的同名文件可能被合并计为一项。严谨场景建议用默认路径模式。
- 完全离线:不联网,资料包不出本地,适合涉密审计。
- 只读扫描:只读资料,不解压、不改写原始文件。
- 内置防护:Excel 公式注入(CWE-1236)、zip-slip 逃逸阻断、symlink 防穿透、损坏/加密/乱码 ZIP 都标记不崩溃。
- 依赖降级不炸:缺
rarfile就跳过 RAR、缺jsonschema就跳过校验,核心功能照跑。
- 标准契约:
flat_index每条含source(文件系统/ZIP 内)、confidence(FACT/INFERENCE/HYPOTHESIS/SPECULATE 四档)、check_status(核对态)、sha256,全部 schema 校验。想看结构:ami inspect。 - 消费场景:后续
policy-audit(内控文档定位)、a-stock-hv-desk(横向纵向分析)都以此为上游。 - 下一步:MCP server 入口(
ami mcp)已规划,让 AI agent 直接调用 scan / diff。
ami (CLI, 可 pip 安装)
├─ scan → scanner (ScanResult 双轨: tree + flat_index)
│ └─ json_writer / md_writer / excel_writer
├─ diff → differ (PBC 缺项核对)
├─ validate → schema 校验
└─ schema — 全模块共享的单一数据契约(唯一权威定义)
每个模块自带自包含 smoke test(共 60 项 / 6 模块),从仓库根运行:
python -m ami_lib.schema # 15 项
python -m ami_lib.scanner # 17 项
python -m ami_lib.json_writer # 6 项
python -m ami_lib.md_writer # 5 项
python -m ami_lib.excel_writer # 8 项
python -m ami_lib.differ # 9 项| 优先级 | 里程碑 | 内容 | 状态 |
|---|---|---|---|
| 已交付 | v2.2.0 | ami diff PBC 缺项核对 · pip install -e . 打包 · 3 个 P0 安全修复(合规出表 working paper 场景) |
✅ 已交付 |
| 已交付 | v2.1.0 | --zip-encoding 中文压缩包编码自动识别 |
✅ 已交付 |
| 🔜 v2.3 | MCP 入口 ami mcp — AI agent 直接调用 scan/diff(AI 审计生态的关键差异化,优先于脱敏) |
规划 | |
| 战略-2 | 本地脱敏 ami desensitize — 出库/共享前文件名元数据脱敏 |
规划 | |
| 发布 | PyPI + 单文件 EXE — pip install ami-audit + GitHub Releases 的 ami.exe(纯审计师免装 Python) |
规划 | |
| P1 | ami diff-dir <目录1> <目录2> — 两次资料包"目录 vs 目录"差异(新增/删除/修改) |
想法 | |
| P1 | 增量扫描 --since — 只扫新增/变更,应对分批补交 |
想法 | |
| P2 | --template 模板.xlsx + .amiignore 配置 — 输出格式可定制、过滤规则可共享 |
想法 | |
| P3 | 大文件进度条 · ZIP 内类型统计 · RAR 编码自动探测 · 审计日志(谁何时扫了哪) | 按需 |
- README-en.md — English version
- examples/demo-project — 可复现演示包:
ami scan examples/demo-project/provided-materials+ami diff examples/demo-project/PBC.xlsx --root examples/demo-project/provided-materials,一次看懂扫描(含 ZIP 套 ZIP 穿透)与缺项核对 - examples/sample-data — 自带极简样本,
ami scan examples/sample-data可先跑通一遍 - examples/rar-fixtures — 公开 RAR fixture,配
scripts/e2e-rar.py做 RAR 回归 - examples/media — README 里的截图与 GIF;由
python scripts/build-demo-media.py一键重新生成(纯 PIL 渲染,离线可复现)。想换成自己的录屏:直接覆盖同名文件(ami-demo.gif/ami-scan-demo.png/ami-diff-demo.png)即可,README 无需改动;脚本靠哈希识别出手工录屏并自动保护,不会覆盖(--status查看,--force才强制重画) - CONTRIBUTING.md — 贡献指南(含 60 项 smoke test 说明)
- LICENSE — MIT
隐私声明:本仓库
examples/下所有示例(演示数据、RAR fixture 等)均为人工构造的公开演示数据,不含任何真实审计或客户端资料。真实需求是真的、演示数据是假的。AMI 不上传任何数据,资料全程不出本地。
- v2.2.0 (2026-08-19) —
ami diffPBC 缺项核对 +pip install -e .打包 + 3 个 P0 安全修复(目录行公式注入 / zip-slip 前缀边界 / GBK 自测) - v2.1.0 (2026-08-19) —
--zip-encoding参数(ZIP 文件名编码自动识别) - v2.0.0 (2026-08-18) — 完整重构:ZIP 递归、方案 C 双路径、RAR 支持、安全加固、3 轮独立审查 27 问题修复
- v1.0.0 — 原始 dir-tree-index.py(md + Excel 双输出)
AMI v2.2.0 | 2026-08-20 | by Roleyking


