uppalapatipurnaraviteja99/threat-researcher
GitHub: uppalapatipurnaraviteja99/threat-researcher
基于 LangGraph 构建的多智能体威胁情报助手,通过规划、研究和事实核查三个智能体的协作工作流自动生成 CVE 漏洞简报。
Stars: 0 | Forks: 0
# ThreatResearcher
一个用于编写 CVE 威胁情报简报的多智能体系统。基于 LangGraph + Tavily 构建。
我开发这个项目是因为我想学习 LangGraph 和多智能体模式,而威胁简报是一个非常合适的应用场景——它们需要任务分解(规划)、网络搜索(研究)以及事实核查(评估)。
## 工作原理
三个智能体,一个工作流:
1. Planner 接收问题并将其拆分为 3-5 个子问题
2. Researcher 针对每个子问题调用 Tavily,并起草带有内联引用的简报
3. Critic 根据来源对每一项声明进行事实核查。如果发现任何毫无根据的内容,它会将工作退回给 Researcher(最多重试 2 次)
## 为什么重写 Critic
Critic 的第一个版本是一个只有两行的 prompt,它仅仅会问“这份简报好吗?回答 GOOD 或 BAD”。不出所料,它对所有的内容都回答 GOOD。在一份包含多处幻觉事实的 CVE-2024-3400 简报中,它什么都没发现。
后来使用 Pydantic schema 重写了它,强制 LLM 逐一列出具体毫无根据的声明。在同一份简报中,它抓住了 8 处问题。
经验教训:用于事实核查的自由文本“看起来不错吗?”这类 prompt 是毫无用处的。你需要结构化输出,并且必须让模型逐条声明进行核查。
## Provider 切换
`PROVIDER` 环境变量可在 OpenAI、Anthropic 和 Ollama 之间进行选择。主要使用 `gpt-4o-mini` 进行了测试,因为它成本低廉。Anthropic 和 Ollama 的路径已经接通,但我还没有进行过全面的质量对比。
## 运行方式
```
pip install -r requirements.txt
cp .env.example .env
# 编辑 .env 并添加你的 keys
python run.py "Give me a brief on CVE-2024-3400"
```
你需要一个 OpenAI key 和一个 Tavily key(免费版即可)。
## 测试用例
- CVE-2024-3400 (Palo Alto PAN-OS)
- CVE-2023-34362 (MOVEit)
- CVE-2021-44228 (Log4Shell)
全部成功生成了简报。Critic 在所有简报上都标记了内容,这确实是关键所在。
## 不足之处
- Tavily 免费版每月限制 1000 次搜索,如果频繁测试,很快就会耗尽额度
- Critic 过于严格——有时会标记那些实际上在来源中存在但措辞不同的声明。这是我目前可以接受的权衡
- 仅支持英文来源
- 没有缓存,因此每次运行都会全新调用 Tavily
## 下一步计划
在 Critic 中加入语义相似度匹配,这样它就不会标记那些经过复述但有根据的声明。也许还会尝试专门使用一个较小的本地模型作为 Critic。
标签:AI智能体, AI风险缓解, DLL 劫持, Petitpotam, 多智能体协同, 大语言模型, 威胁情报, 开发者工具, 漏洞分析, 自动化摘要, 路径探测, 逆向工具