funcpointer/interlock-ai

GitHub: funcpointer/interlock-ai

这是一个AI驱动的工程PDF跨文档差异检测系统,用于自动识别参数不匹配并评估严重性。

Stars: 0 | Forks: 0

# nglish. "AI" is common technical jargon, so I might keep it as "AI". 工程PDF跨文档差异检测。审阅者上传同一项目的两个PDF文件;系统以**带身份感知的配对**、**配对置信度评分**、**诚实未配对记录展示**以及可选的LLM重要性判断,呈现带方向性、引用性的**严重性分级**参数不匹配。 **实时演示:** https://interlock-ai-re8mb948inkerzmkn5zpgv.streamlit.app/ (Streamlit Cloud 免费层 — 首次访问可能因冷启动需约30秒) - PRD: [`docs/PRD.md`](docs/PRD.md) — 审阅者画像、切入点、5层平台路径 - TDD: [`docs/TDD.md`](docs/TDD.md) — 架构、容差范围、评估、已知限制 - 架构图: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — 控制流、数据流、缓存层次 - 著作权: [`docs/AUTHORSHIP.md`](docs/AUTHORSHIP.md) — 哪些是构建的/复用的/披露的,按阶段 - 演示脚本: [`docs/DEMO_SCRIPT.md`](docs/DEMO_SCRIPT.md) — 3分钟演练 - 锁定范围 + 测试数据: [`docs/SCOPE.md`](docs/SCOPE.md), [`docs/FIXTURES.md`](docs/FIXTURES.md) - 风险登记册: [`docs/RISK_REGISTER.md`](docs/RISK_REGISTER.md) - 待办事项(超出范围): [`docs/BACKLOG.md`](docs/BACKLOG.md) ## 快速开始(本地) ``` uv sync uv run pytest --deselect tests/real_world # 261 tests, ~1:30 wall-clock uv run streamlit run src/interlock/ui/app.py ``` ## 系统要求 - Python 3.12 (在 `.python-version` 中固定) - [uv](https://github.com/astral-sh/uv) - Ghostscript (Camelot 依赖): `brew install ghostscript` - `.env` 已从 `.env.example` 填充: - `VOYAGE_API_KEY` — 必需(语义对齐 + 规范术语表) - `ANTHROPIC_API_KEY` — 视觉OCR回退(任何扫描PDF页面)和可选的LLM重要性判断所必需 ## 演示 仓库附带了两对测试数据。 ### 选项 1 — 修订版差异(60% 基准 ↔ 90% 修订版) - `doc_a_60pct.pdf` — 文档 A(权威版,真实的Eaton样本协调研究) - `doc_b_90pct.pdf` — 文档 B(下游版,衍生自文档 A,包含6处有文档记录的变更 — 见 `fixtures/mutations/MUTATIONS.md`) 预期结果:**4个标记**,全部归类为**严重**严重性 — 均属于小数点移位类(`%Z 5.75 → 0.575`, `故障电流 20,000 → 200,000 A`, `变压器额定值 1000 → 100 kVA` × 2处)。零误报。FP-1单位等效陷阱(`150 kVA` vs `0.15 MVA`)通过Pint单位标准化被抑制。默认抑制信息级别内的容差变化(降低置信度阈值滑块可使其显示)。 ### 选项 2 — 跨文档(设备规格书 ↔ 协调研究) - `spec_xfmr_001.pdf` — 文档 A(权威版,合成的变压器设备数据表;见 `docs/AUTHORSHIP.md` 的披露说明) - `doc_a_60pct.pdf` — 文档 B(下游版,复用相同的Eaton研究) 预期结果:通过语义对齐 + 规范术语表显示**3个标记**: - `额定功率 1100 kVA ↔ 变压器额定值 1000 kVA`(次要,偏差9%) - `一次电压 12.47 kV ↔ 系统电压 13.8 kV`(主要,偏差10.7%,配对置信度0.90) - `额定阻抗 4.5 % ↔ %Z 5.75 %`(主要,偏差28%) 另外,在“📋 未配对记录”展开部分显示规格书侧的**4条未配对记录**(二次电压、频率、BIL、绝缘等级 — 在研究中无对应项)以及研究侧的**49条未配对记录**(熔断器标识符 + 重复变压器引用 — 在规格书中无对应项),以诚实报告差距。在侧边栏切换 **使用LLM重要性判断** 可为每个标记添加工程原理 + 下游效应传播的注释(Anthropic Opus 4.7,提示缓存)。 ### 选项 3 — 扫描PDF(视觉OCR + 合理性再OCR) - `doc_a_scanned.pdf` — `doc_a_60pct.pdf` 的JPEG编码栅格图(每页纯图像,零原生文本) 在侧边栏启用 **视觉OCR**;数据摄取会将每个低覆盖率页面通过Claude Sonnet 4.5(300 DPI)处理,并在某个数值超出其数据族合理性范围时,以400 DPI进行验证性再OCR处理。UI中显示每页进度条。可与 `doc_b_90pct.pdf`(或任何其他文档)配对,基于提取的文本进行完整审阅。恢复54个参数,而原生基线为52个(104%的产出率)。 A/B比较证实选项2展示了选项1无法实现的能力: ``` uv run python scripts/run_ab.py cat eval/results/ab_comparison.json ``` ## 评估 ``` uv run python scripts/run_eval.py cat eval/results/baseline.json ``` 黄金数据集:`fixtures/eval/gold.yaml`。验收阈值锁定在 `docs/FIXTURES.md` 第6节(对真正正例的召回率=1.0,对陷阱的误报率=0.0)。 ## 部署(Streamlit Cloud) 1. 使用拥有此仓库的GitHub账户登录 https://share.streamlit.io 。 2. 新建应用 → 仓库 `funcpointer/interlock-ai`, 分支 `main`, 主文件 `streamlit_app.py` (根入口垫片;实际UI在 `src/interlock/ui/app.py`)。 3. 高级设置 → Python 3.12。 4. 密钥 → 将 `VOYAGE_API_KEY` 和 `ANTHROPIC_API_KEY` 以TOML格式粘贴。 5. 部署。 `packages.txt` 声明了 `ghostscript`,以便Camelot的格栅解析器能在云运行器上工作。 ## 访问说明 | 资产 | 位置 | 审阅者如何访问 | |---|---|---| | 源代码 | https://github.com/funcpointer/interlock-ai | 公开只读。阶段标签和 `v1.*` 检查点提供时间点快照。 | | 已部署原型 | https://interlock-ai-re8mb948inkerzmkn5zpgv.streamlit.app/ | 公开只读。首次访问因冷启动约需30秒(Streamlit Cloud免费层)。 | | 演示视频 | (录制后添加URL) | 公开只读。 | | 测试数据PDF | 仓库中的 `fixtures/pdfs/` | 在git中跟踪。真实的Eaton文档是公开样本;合成测试数据在 `docs/AUTHORSHIP.md` 中披露。 | | 评估黄金数据集 | `fixtures/eval/gold*.yaml` | 在git中跟踪。验收阈值在 `docs/FIXTURES.md` 第6节。 | | API密钥 | 不在仓库中(`.env` 已被git忽略) | 审阅者自带 `VOYAGE_API_KEY` 和 `ANTHROPIC_API_KEY` 用于本地运行;已部署的Streamlit Cloud实例已在服务器端配置。 | | 内部会话记录/规划笔记 | `docs/superpowers/`, `CLAUDE.md` | 已被git忽略。不属于提交内容。 | ## 阶段标签 仓库的历史被划分为TDD阶段;每个阶段以一个可验证的检查点标签结束。 ``` phase-0-scaffold phase-3-extract phase-6-citation phase-1-fixtures phase-4-align phase-7-ui phase-2-ingest phase-5-detect phase-8-eval phase-9-deploy phase-11-cross-doc phase-12-real-world phase-13-tolerance phase-14-entity-claim phase-17-deliverables phase-18-ux-ocr phase-19-identity-alignment phase-20-ocr-quality v1.0-mvp · v1.1-cross-doc · v1.2-real-world · v1.3-tolerance · v1.4-entity-claim · v1.5-mvp-ready ``` **测试覆盖范围(v1.5-mvp-ready):** 261个通过(默认),83个标记为慢速 + 实时API测试被排除,mypy严格检查通过,ruff检查通过。每次演示运行成本低于0.10美元(利用diskcache + Anthropic 1小时提示缓存本体块)。对9页扫描测试数据启用OCR运行:冷启动约0.45美元,热启动约0美元。
标签:AI审核, Apex, API集成, Kubernetes, OCR, PDF差异检测, Python, Streamlit, 严重性分级, 制造, 包管理, 参数匹配, 可观测性, 工程文档, 工程管理, 建筑, 控制流, 数据流, 文档处理, 无后门, 机器学习, 机械工程, 测试驱动开发, 缓存层次, 置信度评分, 表格提取, 视觉AI, 访问控制, 跨文档比较, 身份感知, 逆向工具