VasileiosMalt/investigation-skill-poirot
GitHub: VasileiosMalt/investigation-skill-poirot
Poirot 是一个 AI 驱动的多模态案件调查技能,能对目录中的文本、图片、音视频证据进行摄取、分类和演绎推理,最终生成带认知状态标注的结构化调查报告。
Stars: 0 | Forks: 0
## 什么是 Poirot?
Poirot 是一个为 AI 助手设计的智能调查技能。只需将其指向一个包含案件文件的目录 —— 文档、图像、音频、视频、电子表格、电子邮件等任何材料 —— 它将会:
1. **摄取并理解**所有文本证据,构建一个结构化的案件知识库 (CKB),包含实体、时间线、矛盾点和信息缺口。
2. **分类与路由**每一份证据,根据模态和相关性进行分类,并根据实时的模型可用性为每个分析任务分配最优的 LLM/VLLM 模型。
3. **分析图像**采用严格的两阶段 VQA 流程 —— 首先进行客观观察,然后提出衍生问题,最后仅在异常情况确实可疑时才进行条件性深入分析。
4. **转录并分析音频和视频** —— 客观转录、元素提取、衍生问题、条件性深入分析。
5. **综合所有发现**生成一份结构化的调查报告,该报告基于明确的逻辑链、认知状态和演绎推理 —— 绝不将推测伪装成事实。
Poirot **不是一个固定的流水线**。Agent 在每一步都会运用判断力,根据证据的实际需求,决定运行哪些脚本、以何种顺序运行以及使用什么参数。
## 核心特性
- 🔍 **完全演绎推理** —— 每一个主张都会标记一个认知状态:`[E]` 已确认,`[S]` 可疑,`[P]` 可能,`[X]` 已排除
- 🧠 **实时模型路由** —— 从您的提供商处获取可用模型,并为每个任务(视觉、音频、推理、综合)分配最佳模型
- 🎛️ **提供商无关** —— 支持 OpenAI、Anthropic、Google、OpenRouter、Groq、Together、Mistral,或任何本地 vLLM / Ollama 服务器
- 🔑 **API 密钥可选** —— 在 Agent 透传模式下无需密钥即可运行;由调用的 AI Agent 原生处理 LLM 调用
- 📷 **自适应 VQA** —— 根据观察到的元素动态生成问题;仅在证据确实异常时才进行深入分析
- 🎙️ **音频 / 视频情报** —— Whisper 转录、DTE 提取、关键帧分析、行为线索
- 📎 **完整引用** —— 每一项发现都可溯源至源文件和时间戳
- 🗂️ **Agent 智能化** —— Agent 会读取输出、重新评估,并决定下一步运行什么
## 安装
```
git clone https://github.com/your-username/poirot.git
cd poirot
# 安装依赖(均为可选 — 详情见 requirements.txt)
pip install -r requirements.txt
```
**系统要求:** Python 3.10+。所有外部依赖都是可选的 —— 当缺少相关包时,Poirot 会平稳降级。
**如需进行音频/视频分析**,必须单独安装 `ffmpeg`:
- macOS: `brew install ffmpeg`
- Ubuntu: `sudo apt install ffmpeg`
- Windows: `winget install ffmpeg` (或通过 Chocolatey 安装: `choco install ffmpeg`)
## 快速开始
```
# 在案例目录上运行完整 pipeline
python scripts/poirot_run.py --case /path/to/case/
# 使用特定输出目录
python scripts/poirot_run.py --case /path/to/case/ --output-dir /path/to/results/
# 跳过不需要的阶段
python scripts/poirot_run.py --case /path/to/case/ --skip-phases 4
# 使用静态模型配置(跳过实时模型获取)
python scripts/poirot_run.py --case /path/to/case/ --no-router
```
该流程默认将所有输出写入 `
/_poirot_output/` 目录:
| 文件 | 内容 |
|---|---|
| `case_manifest.json` | 完整的文件清单及其模态 |
| `case_knowledge_base.md` | 结构化的实体/时间线/矛盾点记录 |
| `evidence_manifest.json` | 已分类的证据及分析脚手架 |
| `image_analysis_report.md/json` | 每张图像的 VQA 发现 |
| `av_analysis_report.md/json` | 音频/视频转录和分析 |
| `routing_plan.json` | 每项任务的实时模型分配方案 |
| `logical_chains.md` | 跨模态关联工作记录 |
| `poirot_report.md` | **最终调查报告** |
## 配置
API 密钥和模型选择**完全是可选的**。Poirot 支持三种运行模式:
| 模式 | 触发条件 | 设置方式 |
|---|---|---|
| **Agent** | 未配置密钥和提供商 | 无需设置 —— 由调用的 AI Agent 原生处理 LLM 调用 |
| **Local** | 设置了 `POIROT_LOCAL_URL` | 指向 Ollama / vLLM / LM Studio —— 无需密钥 |
| **Cloud** | 存在 API 密钥 | 完整的实时模型获取 + 最佳任务路由 |
### `.env` 文件 (推荐在 Cloud 模式下使用)
```
cp .env.example .env
# 编辑 .env — 仅取消注释你需要的键
```
```
# 选择一个提供商(或让 Poirot 从现有的任意键自动检测)
OPENAI_API_KEY=sk-...
# ANTHROPIC_API_KEY=sk-ant-...
# GOOGLE_API_KEY=AIza...
# OPENROUTER_API_KEY=sk-or-...
# 可选:固定特定模型,而不是让 router 自动选择
# POIROT_TEXT_MODEL=gpt-4o-mini
# POIROT_VISION_MODEL=gpt-4o
# POIROT_AUDIO_MODEL=whisper-1
# 可选:使用本地服务器(无需密钥)
# POIROT_LOCAL_URL=http://localhost:11434/v1
# POIROT_LOCAL_MODEL=llava
```
如果缺少必需的密钥且 Poirot 正在终端中运行,它将**以交互方式提示您**。您可以将其留空以回退到 Agent/Local 模式。
## 支持的文件类型
| 模态 | 格式 |
|---|---|
| 文本 / 文档 | `.txt` `.md` `.pdf` `.docx` `.odt` `.rtf` `.msg` `.eml` `.xlsx` `.csv` |
| 图像 | `.jpg` `.jpeg` `.png` `.gif` `.bmp` `.tiff` `.webp` `.heic` |
| 音频 | `.mp3` `.wav` `.m4a` `.aac` `.flac` `.ogg` `.opus` `.wma` |
| 视频 | `.mp4` `.mov` `.avi` `.mkv` `.wmv` `.webm` `.m4v` `.mpeg` |
## 模型路由
在进行任何分析之前,Poirot 会从您的提供商处获取实时模型列表,并构建最佳路由方案 —— 为每项调查任务分配最佳可用模型:
| 任务 | 选择标准 |
|---|---|
| CKB 生成 | 长上下文 + 最强推理能力 |
| 证据分类 | 快速 / 廉价的文本模型 |
| 图像 VQA 与 DTE 提取 | 最佳可用视觉模型 |
| 深入分析 (异常跟进) | 高级视觉模型 |
| 音频转录 | 原生 ASR;回退至本地 Whisper |
| 视频分析 | 视觉 + 大上下文窗口 |
| 综合分析 | 最强可用推理模型 |
路由方案会保存到 `routing_plan.json` 中以供检查。使用 `--no-router` 可跳过获取过程,并使用静态的 `.env` 模型设置。
**支持实时模型获取的提供商:** OpenAI · Anthropic · Google · OpenRouter · Groq · Together · Mistral · Local (兼容 OpenAI)
## 推理协议
Poirot 遵循在 `steps/00-reasoning-protocol.md` 中定义的严格认知原则:
- **先观察后解释** —— 第一阶段始终是客观描述;在提取元素之前不得出任何结论。
- **默认零假设** —— 每一项证据在证明有问题之前,均被视为平平无奇。
- **不作假设** —— 没有至少两个确证数据点支持的情况下,不作任何推断。
- **深入分析是有条件的** —— 只有当一项观察同时具备*具体性*、*异常性*且与案件*具有实质性关联*时,才会触发第二阶段的分析。
- **每项主张均带有认知状态:**
- `[E]` **已确认** —— 直接观察到,明确无误,无需推理
- `[S]` **可疑** —— 值得调查,检测到模式但尚未确认
- `[P]` **可能** —— 根据证据来看是合理的,但尚未得到证实
- `[X]` **已排除** —— 被矛盾证据所推翻
## Agent 使用
Poirot 旨在由具有完整调查裁量权的 AI Agent 驱动。Agent 自行决定运行哪些脚本、以何种顺序运行,以及是否随着新发现的出现而重新运行各个阶段。
**直接运行单个脚本:**
```
# 根据来自文本的新上下文重新分析特定图像
python scripts/run_image_analysis.py \
--evidence _poirot_output/evidence_manifest.json \
--ckb _poirot_output/case_knowledge_base.md \
--output-dir _poirot_output
# 在调查中期得出发现后重新综合
python scripts/synthesize_report.py \
--ckb _poirot_output/case_knowledge_base.md \
--image-report _poirot_output/image_analysis_report.json \
--av-report _poirot_output/av_analysis_report.json \
--output-dir _poirot_output
# 检查你的提供商和案例的 routing plan
python scripts/model_router.py --provider openai --modalities text,image,audio
```
## 项目结构
```
poirot/
├── assets/ Logo and visual assets
│ └── logo.png
├── scripts/ Runnable investigation pipeline scripts
│ ├── poirot_run.py Main entrypoint — full pipeline orchestrator
│ ├── env_config.py .env loader, provider detection, key prompting
│ ├── model_router.py Live model fetcher + optimal task routing
│ ├── ingest_case.py Phase 1 — file scan, text extraction, CKB prompt
│ ├── classify_evidence.py Phase 2 — evidence classification and scaffolding
│ ├── run_image_analysis.py Phase 3 — adaptive VQA pipeline
│ ├── run_audio_video_analysis.py Phase 4 — audio/video transcription and analysis
│ └── synthesize_report.py Phase 5 — cross-modal deductive synthesis
├── steps/ Phase instruction documents (for AI agents)
│ ├── 00-reasoning-protocol.md Orthological reasoning constitution
│ ├── 01-ingest-case.md
│ ├── 02-classify-evidence.md
│ ├── 03-image-analysis.md
│ ├── 04-audio-video-analysis.md
│ └── 05-synthesis-report.md
├── references/
│ ├── model_endpoints.md Provider and model reference
│ └── supported_formats.md Supported file formats per modality
├── examples/
│ └── sample_case_investigation.md
├── .env.example Configuration template
├── .gitignore
├── requirements.txt
├── SKILL.md AI agent skill definition
├── CONTRIBUTING.md
└── LICENSE
```
## 许可证
Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) —— 详见 [LICENSE](LICENSE)。
灵感源自我的小小灰色脑细胞 🩶
标签:Agent Skill, AI 智能体, AI风险缓解, DLL 劫持, DNS解析, LLM, Petitpotam, Python, Unmanaged PE, VQA 视觉问答, 信息提取, 图像分析, 多模态分析, 大语言模型, 密码管理, 开源项目, 情报分析, 数据泄露, 文本挖掘, 无后门, 案件调查, 电子取证, 矛盾检测, 网络诊断, 自动化报告, 视频分析, 逆向工具, 音频转录