papadoc007/itai-crew-ai-ex05
GitHub: papadoc007/itai-crew-ai-ex05
一个基于 CrewAI 的四 Agent 编排项目,通过顺序流水线自动收集公开情报并生成结构化的网络威胁情报报告。
Stars: 0 | Forks: 0
# CTI Crew — 一个基于 4 个 Agent 的 CrewAI 网络威胁情报团队
**巴尔伊兰大学,高级 AI 系统 — ex05**
为巴尔伊兰大学高级人工智能系统课程编写。
该项目刻意保持简单:四个 agent,四个任务,一个流程,
一次 `crew.kickoff()`。它可以在单台笔记本电脑上端到端运行,不需要
API 密钥,并生成最终报告和可作为运行证据的详细运行日志。
## 1. 团队 — Sentinel CTI 实验室
Sentinel CTI 实验室是一家虚构的精品网络威胁情报公司。
其四阶段 agent 流水线反映了真实 CTI 团队的分工方式:
```
osint_collector --> threat_analyst --> mitigation_advisor --> report_editor
(web_search) (analysis) (defense) (QA + final)
```
| 阶段 | Agent | 工作 |
|-------|------------------------|------------------------------------------------------------------------------|
| 1 | `osint_collector` | 收集公开报告,总结威胁态势,标记不确定性。 |
| 2 | `threat_analyst` | 将原始 OSINT 转化为结构化情报(攻击者、TTPs、风险等级)。 |
| 3 | `mitigation_advisor` | 将分析转化为检测逻辑和优先加固步骤。 |
| 4 | `report_editor` | 验证、去重并构建最终的 Markdown 报告。 |
这四个 agent 共享一个**组织背景设定**(通用的 System Prompt):一家
谨慎且注重来源的 CTI 公司,宁愿标记不确定性,也不愿
编造数据。该团队使用 `Process.sequential` 和 `verbose=True`,并由
单个 `crew.kickoff()` 启动。
任务通过 `context=[previous_task]` 链接,因此每个 agent 都能自动
看到上游的输出。
## 2. 运行项目 (Windows PowerShell)
该项目基于 Python 3.11 开发,默认使用 Ollama (`qwen2.5:7b`),
因此不需要 OpenAI / Anthropic 密钥。
```
# 进入项目
cd "C:\Users\User\Documents\בר אילן\LLM בינה מלכואתית\Matal5\itai-crew-ai-ex05"
# 创建并激活虚拟环境
py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
# 安装运行时依赖
python -m pip install --upgrade pip
pip install -r requirements.txt
# 确保 Ollama 正在运行且模型已拉取
ollama pull qwen2.5:7b
# 运行 crew
python src\main.py
# 或使用明确的 topic:
python src\main.py "LockBit ransomware activity against healthcare sector"
```
如果你只安装了 Python 3.9 或 3.10,请将 `py -3.11` 替换为 `py -3.10`。
如果 `python` 不在 `PATH` 中,请统一使用 `py`。
### 可选:切换至 OpenAI 模型
```
$env:OPENAI_API_KEY = "sk-..."
$env:OPENAI_MODEL_NAME = "gpt-4o-mini"
python src\main.py
```
同样的代码路径依然适用;LLM 由
`src/crew.py::build_llm` 中的环境变量进行选择。
## 3. 运行证明(截图)
这是在 `crew.kickoff()` 期间捕获的真实 CrewAI 详细输出的
真实图像(由
`tools/render_screenshots.py` 从 `outputs/run.log` 渲染生成)。
**启动 — 执行开始,首个任务与 agent:**

**Agent + 工具 — OSINT Collector 调用 `web_search` 工具:**

**团队任务完成(最终任务结束):**

**最终报告(stdout 摘要):**

以下提交的两个制品同样也是验证依据:
| 文件 | 用途 |
|----------------------------|--------------------------------------------------------------------------|
| `outputs/threat_report.md` | 最终的 8 节 CTI 报告。 |
| `outputs/run.log` | `crew.kickoff()` 的完整详细跟踪记录(每个 agent 步骤及工具调用)。 |
要在重新运行后重新渲染 PNG 图片:
```
.\.venv\Scripts\python.exe tools\render_screenshots.py
```
## 4. 输出结果 — `outputs/threat_report.md`
最终报告始终按此顺序包含以下八个部分:
1. **执行摘要** — 面向忙碌高管的单段落简报。
2. **威胁行为者 / 威胁概述** — 幕后黑手是谁及其动机。
3. **攻击方法 / TTPs** — 他们的操作方式,尽可能映射到 ATT&CK 框架。
4. **潜在影响** — 可能对业务、运营和监管造成的影响。
5. **检测与监控建议** — 需要告警的内容,以及示例逻辑。
6. **缓解建议** — 按优先级排序的预防 / 加固措施。
7. **置信度与局限性** — 哪些是有充分支持的,哪些是推测的。
8. **最终结论** — 简短且可操作的总结。
## 5. 关键设计决策
* **本地优先 LLM。** 默认为 `ollama/qwen2.5:7b`。这符合
课程讲座的精神(构建实用的 agent 系统),无需
付费 API 密钥。同时支持通过环境变量直接替换为 OpenAI。
* **英文内容,希伯来语课程背景。** 代码、prompts、docstrings
和报告均为英文;README 包含希伯来语说明,因为
课程是用希伯来语授课的。
* **平滑的网络搜索回退机制。** 如果可用,OSINT Collector 会使用
`duckduckgo-search`。如果出现任何失败情况(无网络、速率限制、
缺少依赖包、结果为空),该工具将返回清晰的回退
字符串,而不是抛出异常 — 团队的其余部分将继续利用模型自身的
知识进行工作。
* **顺序流程,无记忆。** 采用 `Process.sequential`,`verbose=True`,
`memory=False`。对于学术
作业来说,这是最易预测的设置:易于跟踪、易于调试、易于评分。
* **单一入口点。** `src/main.py` 中仅包含一次
`crew.kickoff()` 调用。
* **日志分流。** `outputs/run.log` 镜像了用户在 stdout 上看到的
相同数据流,因此运行过程完全可复现,便于评分。
## 6. 仓库结构
```
itai-crew-ai-ex05/
├── README.md # this report (with run screenshots)
├── requirements.txt
├── .gitignore
├── src/
│ ├── __init__.py
│ ├── main.py # one-terminal entry point (single kickoff)
│ ├── crew.py # 4 agents + 4 tasks + sequential Crew (LLM config)
│ └── tools.py # free DuckDuckGo web_search @tool
├── outputs/
│ ├── .gitkeep
│ ├── threat_report.md # the generated 8-section CTI brief
│ └── run.log # full verbose run (proof)
├── screenshots/ # rendered run screenshots
│ ├── 01_kickoff.png
│ ├── 02_tool_and_agent.png
│ ├── 03_completion.png
│ └── 04_final_report.png
├── tools/
│ └── render_screenshots.py # turns run.log into terminal-style PNGs
└── docs/
├── PRD.md
├── PLAN.md
└── TODO.md
```
## 7. 与课程讲座的对应关系
| 讲座中的概念 | 在本项目中的位置 |
|-------------------------------------------|------------------------------------------------------------------|
| `Agent` (角色、目标、背景设定、llm) | `src/crew.py::build_agents` |
| `Task` (描述、expected_output) | `src/crew.py::build_tasks` |
| `Crew` (agents、tasks、process、verbose) | `src/crew.py::build_crew` |
| `Process.sequential` | `src/crew.py::build_crew` |
| `context=[previous_task]` 链接 | `src/crew.py::build_tasks` |
| 用于 agent 的自定义 `@tool` | `src/tools.py::web_search` |
| `crew.kickoff(inputs=...)` | `src/main.py::main` (单次调用) |
| 通过 `crewai.LLM` 实现的本地 LLM | `src/crew.py::build_llm` |
| 用于评分 / 调试的详细日志记录 | `src/main.py::configure_logging` -> stdout + `outputs/run.log` |
## 8. 提交说明
* 默认主题为*“针对医疗保健行业的 LockBit 勒索软件活动”*。
任何其他威胁主题都可以通过 `sys.argv[1]` 传入。
* `outputs/run.log` 和 `outputs/threat_report.md` 是审查者
用来确认运行成功的两个制品。两者均已提交
到代码仓库作为凭证。
* 每个 agent 的 System Prompt 均为英文;README 为双语。
* 要生成可端到端运行的输出,无需付费 API 密钥;
你只需要 Ollama 和 `qwen2.5:7b` 模型。
标签:AI风险缓解, CrewAI, DLL 劫持, PyRIT, 人工智能, 多智能体系统, 大语言模型, 安全辅助工具, 用户模式Hook绕过, 网络威胁情报, 逆向工具