pentagi
全自动 AI 渗透测试系统,将安全工程师的攻防流程拆解为 Researcher/Developer/Executor 等多角色 LLM Agent 协作执行。亮点是集成了 20+ 专业安全工具(nmap、metasploit、sqlmap 等),支持 OpenAI/Anthropic/Ollama 等 10+ LLM 提供商,自带向量记忆和知识图谱,可在 Docker 沙箱中隔离运行。近期因 AI+安全实操结合的热度飙升,适合安全研究人员快速验证漏洞和生成报告。
README
PentAGI
Penetration testing Artificial General Intelligence加入社区! 与安全研究人员、AI 爱好者和道德黑客同行交流。获取支持、分享见解,并第一时间了解 PentAGI 的最新动态。
目录
- 概述
- 特性
- 架构
- 快速开始
- 登录后如何使用 PentAGI
- API 访问
- 高级设置
- 开发
- 测试 LLM Agent
- Embedding 配置与测试
- 使用 ftester 进行功能测试
- 构建
- 致谢
- 许可协议
概述
PentAGI 是一款创新的自动化安全测试工具,利用尖端人工智能技术。该项目专为信息安全专业人士、研究人员和爱好者设计,他们需要一个强大而灵活的渗透测试解决方案。
特性
- 安全且隔离:所有操作均在沙箱化的 Docker 环境中进行,完全隔离。
- 完全自主:AI 驱动的 agent 自动确定并执行渗透测试步骤,可选的执行监控和智能任务规划增强了可靠性。
- 专业渗透测试工具:内置 20+ 专业安全工具,包括 nmap、metasploit、sqlmap 等。
- 智能记忆系统:长期存储研究成果和成功方法,供将来使用。
- 知识图谱集成:基于 Graphiti 的知识图谱,利用 Neo4j 进行语义关系跟踪和高级上下文理解。
- 网络情报:通过 scraper 内置浏览器,从网络来源收集最新信息。
- 外部搜索系统:集成高级搜索 API,包括 Tavily、Traversaal、Perplexity、DuckDuckGo、Google Custom Search、Sploitus Search 和 Searxng,实现全面信息收集。
- 专家团队:委派系统,配备专门的 AI agent 负责研究、开发和基础设施任务,可选的执行监控和智能任务规划优化了较小模型的性能。
- 全面监控:详细的日志记录,集成 Grafana/Prometheus 实现系统实时观察。
- 详细报告:生成包含利用指南的全面漏洞报告。
- 智能容器管理:根据具体任务需求自动选择 Docker 镜像。
- 现代化界面:简洁直观的 Web UI,用于系统管理和监控。
- 全面的 API:功能齐全的 REST 和 GraphQL API,支持 Bearer token 认证,便于自动化和集成。
- 持久化存储:所有命令和输出存储在支持 pgvector 扩展的 PostgreSQL 中。
- 可扩展架构:基于微服务的设计,支持水平扩展。
- 自托管解决方案:完全控制部署和数据。
- 灵活的认证:支持 10+ LLM 供应商(OpenAI、Anthropic、Google AI/Gemini、AWS Bedrock、Ollama、DeepSeek、GLM、Kimi、Qwen,以及自定义),外加聚合器(OpenRouter、DeepInfra)。对于生产环境本地部署,请参阅我们的 vLLM + Qwen3.5-27B-FP8 指南。
- API 令牌认证:安全的 Bearer token 系统,用于 REST 和 GraphQL API 的程序化访问。
- 快速部署:通过 Docker Compose 轻松设置,配备全面的环境配置。
当前能力边界
- PentAGI 目前是一个自主与辅助引导的渗透测试平台,而不是类似 CALDERA 的攻破与攻击模拟 (BAS) 或带有预定义战役/攻击方案的对手模拟产品。
- 类似 BAS 的 agent 编写攻击脚本应视为概念性或未来工作,而非当前已实现的功能。
- 当前流程报告 UI 支持网页预览、复制到剪贴板、Markdown 下载和 PDF 下载。JSON 格式的流程报告导出目前不作为受支持的输出格式。
- 供应商灵活性通过内置供应商和自定义/OpenAI 兼容端点提供。请参阅 自定义 LLM 供应商配置 和 vLLM + Qwen3.5-27B-FP8 指南。
架构
系统上下文
flowchart TB
classDef person fill:#08427B,stroke:#073B6F,color:#fff
classDef system fill:#1168BD,stroke:#0B4884,color:#fff
classDef external fill:#666666,stroke:#0B4884,color:#fff
pentester["👤 安全工程师
(系统用户)"]
pentagi["✨ PentAGI
(自主渗透测试系统)"]
target["🎯 target-system
(被测系统)"]
llm["🧠 llm-provider
(OpenAI/Anthropic/Ollama/Bedrock/Gemini/Custom)"]
search["🔍 search-systems
(Google/DuckDuckGo/Tavily/Traversaal/Perplexity/Sploitus/Searxng)"]
langfuse["📊 langfuse-ui
(LLM 可观测性仪表盘)"]
grafana["📈 grafana
(系统监控仪表盘)"]
pentester --> |使用 HTTPS| pentagi
pentester --> |通过 HTTPS 监控 AI| langfuse
pentester --> |通过 HTTPS 监控系统| grafana
pentagi --> |测试各种协议| target
pentagi --> |查询 HTTPS| llm
pentagi --> |搜索 HTTPS| search
pentagi --> |报告 HTTPS| langfuse
pentagi --> |报告 HTTPS| grafana
class pentester person
class pentagi system
class target,llm,search,langfuse,grafana external
linkStyle default stroke:#ffffff,color:#ffffff
容器架构(点击展开)graph TB
subgraph 核心服务
UI[前端 UI<br/>React + TypeScript]
API[后端 API<br/>Go + GraphQL]
DB[(向量存储<br/>PostgreSQL + pgvector)]
MQ[任务队列<br/>异步处理]
Agent[AI Agent<br/>多 Agent 系统]
end
subgraph 知识图谱
Graphiti[Graphiti<br/>知识图谱 API]
Neo4j[(Neo4j<br/>图数据库)]
end
subgraph 监控
Grafana[Grafana<br/>仪表盘]
VictoriaMetrics[VictoriaMetrics<br/>时序数据库]
Jaeger[Jaeger<br/>分布式追踪]
Loki[Loki<br/>日志聚合]
OTEL[OpenTelemetry<br/>数据收集]
end
subgraph 分析
Langfuse[Langfuse<br/>LLM 分析]
ClickHouse[ClickHouse<br/>分析数据库]
Redis[Redis<br/>缓存 + 限流]
MinIO[MinIO<br/>S3 存储]
end
subgraph 安全工具
Scraper[Web 爬虫<br/>隔离浏览器]
PenTest[安全工具<br/>20+ 专业工具<br/>沙箱执行]
end
UI --> |HTTP/WS| API
API --> |SQL| DB
API --> |事件| MQ
MQ --> |任务| Agent
Agent --> |命令| PenTest
Agent --> |查询| DB
Agent --> |知识| Graphiti
Graphiti --> |图| Neo4j
API --> |遥测| OTEL
OTEL --> |指标| VictoriaMetrics
OTEL --> |追踪| Jaeger
OTEL --> |日志| Loki
Grafana --> |查询| VictoriaMetrics
Grafana --> |查询| Jaeger
Grafana --> |查询| Loki
API --> |分析| Langfuse
Langfuse --> |存储| ClickHouse
Langfuse --> |缓存| Redis
Langfuse --> |文件| MinIO
classDef core fill:#f9f,stroke:#333,stroke-width:2px,color:#000
classDef knowledge fill:#ffa,stroke:#333,stroke-width:2px,color:#000
classDef monitoring fill:#bbf,stroke:#333,stroke-width:2px,color:#000
classDef analytics fill:#bfb,stroke:#333,stroke-width:2px,color:#000
classDef tools fill:#fbb,stroke:#333,stroke-width:2px,color:#000
class UI,API,DB,MQ,Agent core
class Graphiti,Neo4j knowledge
class Grafana,VictoriaMetrics,Jaeger,Loki,OTEL monitoring
class Langfuse,ClickHouse,Redis,MinIO analytics
class Scraper,PenTest tools
实体关系(点击展开)erDiagram
Flow ||--o{ Task : 包含
Task ||--o{ SubTask : 包含
SubTask ||--o{ Action : 包含
Action ||--o{ Artifact : 产生
Action ||--o{ Memory : 存储
Flow {
string id PK
string name "流程名称"
string description "流程描述"
string status "active/completed/failed"
json parameters "流程参数"
timestamp created_at
timestamp updated_at
}
Task {
string id PK
string flow_id FK
string name "任务名称"
string description "任务描述"
string status "pending/running/done/failed"
json result "任务结果"
timestamp created_at
timestamp updated_at
}
SubTask {
string id PK
string task_id FK
string name "子任务名称"
string description "子任务描述"
string status "queued/running/completed/failed"
string agent_type "researcher/developer/executor"
json context "Agent 上下文"
timestamp created_at
timestamp updated_at
}
Action {
string id PK
string subtask_id FK
string type "command/search/analyze/etc"
string status "success/failure"
json parameters "动作参数"
json result "动作结果"
timestamp created_at
}
Artifact {
string id PK
string action_id FK
string type "file/report/log"
string path "存储路径"
json metadata "附加信息"
timestamp created_at
}
Memory {
string id PK
string action_id FK
string type "observation/conclusion"
vector embedding "向量表示"
text content "记忆内容"
timestamp created_at
}
Agent 交互(点击展开)sequenceDiagram
participant O as Orchestrator
participant R as Researcher
participant D as Developer
participant E as Executor
participant VS as Vector Store
participant KB as Knowledge Base
Note over O,KB: 流程初始化
O->>VS: 查询相似任务
VS-->>O: 返回经验
O->>KB: 加载相关知识点
KB-->>O: 返回上下文
Note over O,R: 研究阶段
O->>R: 分析目标
R->>VS: 搜索类似案例
VS-->>R: 返回模式
R->>KB: 查询漏洞
KB-->>R: 返回已知问题
R->>VS: 存储发现
R-->>O: 研究结果
Note over O,D: 规划阶段
O->>D: 制定攻击计划
D->>VS: 查询利用方法
VS-->>D: 返回技术
D->>KB: 加载工具信息
KB-->>D: 返回能力
D-->>O: 攻击计划
Note over O,E: 执行阶段
O->>E: 执行计划
E->>KB: 加载工具指南
KB-->>E: 返回流程
E->>VS: 存储结果
E-->>O: 执行状态
记忆系统(点击展开)graph TB
subgraph "长期记忆"
VS[(向量存储<br/>Embedding 数据库)]
KB[知识库<br/>领域专业知识]
Tools[工具知识<br/>使用模式]
end
subgraph "工作记忆"
Context[当前上下文<br/>任务状态]
Goals[活跃目标<br/>任务目标]
State[系统状态<br/>资源]
end
subgraph "情景记忆"
Actions[过去动作<br/>命令历史]
Results[动作结果<br/>产出]
Patterns[成功模式<br/>最佳实践]
end
Context --> |查询| VS
VS --> |检索| Context
Goals --> |咨询| KB
KB --> |指导| Goals
State --> |记录| Actions
Actions --> |学习| Patterns
Patterns --> |存储| VS
Tools --> |通知| State
Results --> |更新| Tools
VS --> |增强| KB
KB --> |索引| VS
classDef ltm fill:#f9f,stroke:#333,stroke-width:2px,color:#000
classDef wm fill:#bbf,stroke:#333,stroke-width:2px,color:#000
classDef em fill:#bfb,stroke:#333,stroke-width:2px,color:#000
class VS,KB,Tools ltm
class Context,Goals,State wm
class Actions,Results,Patterns em
链式摘要(点击展开)链式摘要系统通过有选择地摘要较早的消息来管理对话上下文的增长。这对于防止超出 token 限制同时保持对话连贯性至关重要。
flowchart TD
A[输入链] --> B{需要摘要吗?}
B -->|否| C[返回原始链]
B -->|是| D[转换为 ChainAST]
D --> E[应用节段摘要]
E --> F[处理过大的配对]
F --> G[管理最后一段大小]
G --> H[应用问答摘要]
H --> I[用摘要重建链]
I --> J{新链更小吗?}
J -->|是| K[返回优化链]
J -->|否| C
classDef process fill:#bbf,stroke:#333,stroke-width:2px,color:#000
classDef decision fill:#bfb,stroke:#333,stroke-width:2px,color:#000
classDef output fill:#fbb,stroke:#333,stroke-width:2px,color:#000
class A,D,E,F,G,H,I process
class B,J decision
class C,K output
该算法在对话链的结构化表示 (ChainAST) 上运行,保留消息类型,包括工具调用及其响应。所有摘要操作在减少上下文大小的同时,维护关键对话流。
全局摘要器配置选项
| 参数 | 环境变量 | 默认值 | 描述 |
|---|---|---|---|
| 保留最后一段 | SUMMARIZER_PRESERVE_LAST |
true |
是否保留最后一段中的所有消息 |
| 使用问答对 | SUMMARIZER_USE_QA |
true |
是否使用问答对摘要策略 |
| 在问答中摘要人类消息 | SUMMARIZER_SUM_MSG_HUMAN_IN_QA |
false |
是否在问答对中摘要人类消息 |
| 最后一段大小 | SUMMARIZER_LAST_SEC_BYTES |
51200 |
最后一段的最大字节大小 (50KB) |
| 最大主体配大小 | SUMMARIZER_MAX_BP_BYTES |
16384 |
单个主体配对的最大字节大小 (16KB) |
| 最大问答段数 | SUMMARIZER_MAX_QA_SECTIONS |
10 |
保留的最大问答配对数 |
| 最大问答大小 | SUMMARIZER_MAX_QA_BYTES |
65536 |
问答配对部分的最大字节大小 (64KB) |
| 保留问答段 | SUMMARIZER_KEEP_QA_SECTIONS |
1 |
保留的不进行摘要的最新问答段数 |
助手摘要器配置选项
助手实例可以使用自定义的摘要设置来微调上下文管理行为:
| 参数 | 环境变量 | 默认值 | 描述 |
|---|---|---|---|
| 保留最后一段 | ASSISTANT_SUMMARIZER_PRESERVE_LAST |
true |
是否保留助手最后一段中的所有消息 |
| 最后一段大小 | ASSISTANT_SUMMARIZER_LAST_SEC_BYTES |
76800 |
助手最后一段的最大字节大小 (75KB) |
| 最大主体配大小 | ASSISTANT_SUMMARIZER_MAX_BP_BYTES |
16384 |
助手上下文中单个主体配对的最大字节大小 (16KB) |
| 最大问答段数 | ASSISTANT_SUMMARIZER_MAX_QA_SECTIONS |
7 |
助手上下文中保留的最大问答段数 |
| 最大问答大小 | ASSISTANT_SUMMARIZER_MAX_QA_BYTES |
76800 |
助手问答部分的最大字节大小 (75KB) |
| 保留问答段 | ASSISTANT_SUMMARIZER_KEEP_QA_SECTIONS |
3 |
保留的不进行摘要的最新问答段数 |
助手摘要器配置相比全局设置提供更多记忆用于上下文保留,保留更多最近的对话历史,同时确保 token 使用效率。
摘要器环境配置
# 全局摘要器逻辑的默认值
SUMMARIZER_PRESERVE_LAST=true
SUMMARIZER_USE_QA=true
SUMMARIZER_SUM_MSG_HUMAN_IN_QA=false
SUMMARIZER_LAST_SEC_BYTES=51200
SUMMARIZER_MAX_BP_BYTES=16384
SUMMARIZER_MAX_QA_SECTIONS=10
SUMMARIZER_MAX_QA_BYTES=65536
SUMMARIZER_KEEP_QA_SECTIONS=1
# 助手摘要器逻辑的默认值
ASSISTANT_SUMMARIZER_PRESERVE_LAST=true
ASSISTANT_SUMMARIZER_LAST_SEC_BYTES=76800
ASSISTANT_SUMMARIZER_MAX_BP_BYTES=16384
ASSISTANT_SUMMARIZER_MAX_QA_SECTIONS=7
ASSISTANT_SUMMARIZER_MAX_QA_BYTES=76800
ASSISTANT_SUMMARIZER_KEEP_QA_SECTIONS=3
高级 Agent 监督(点击展开)PentAGI 包含复杂的多层 Agent 监督机制,以确保高效的任务执行,防止无限循环,并在卡死状态下提供智能恢复:
执行监控(Beta)
- 自动导师干预:当执行模式指示潜在问题时,自动调用顾问 Agent(导师)
- 模式检测:监控相同的工具调用(阈值:5,可配置)和总的工具调用(阈值:10,可配置)
- 进度分析:评估 Agent 是否朝着子任务目标前进,检测循环和低效
- 替代策略:当当前策略失败时推荐不同方法
- 信息检索指导:建议搜索已存在的解决方案而非重复发明
- 增强的响应格式:工具响应同时包含
<original_result>和<mentor_analysis>部分 - 可配置:通过
EXECUTION_MONITOR_ENABLED启用(默认:false),使用EXECUTION_MONITOR_SAME_TOOL_LIMIT和EXECUTION_MONITOR_TOTAL_TOOL_LIMIT自定义阈值
最适合:较小模型(< 32B 参数)、需要持续指导的复杂攻击场景、防止 Agent 陷入单一方法
性能影响:执行时间和 token 使用增加 2-3 倍,但根据使用 Qwen3.5-27B-FP8 的测试,结果质量提升 2 倍
智能任务规划(Beta)
- 自动分解:规划器(以规划模式运行的顾问)在专业 Agent 开始工作前生成 3-7 个具体的、可操作的步骤
- 上下文感知的计划:通过丰富 Agent 分析完整执行上下文以生成信息充分的计划
- 结构化分配:原始请求包裹在
<task_assignment>结构中,包含执行计划和指令 - 范围管理:通过让 Agent 只关注当前子任务来防止范围蔓延
- 增强指令:计划突出关键操作、潜在陷阱和验证点
- 可配置:通过
AGENT_PLANNING_STEP_ENABLED启用(默认:false)
最适合:模型 < 32B 参数、复杂的渗透测试工作流、提高复杂任务的成功率
增强的顾问配置:当顾问 Agent 使用更强的模型或增强设置时效果极佳。例如:对顾问使用相同的基础模型并采用最大推理模式(参见 vllm-qwen3.5-27b-fp8.provider.yml),即可在相同模型架构下实现全面的任务分析和战略规划。
性能影响:增加规划开销,但显著提高完成率并减少冗余工作
工具调用限制(始终激活)
- 硬限制:无论监督模式状态如何,都防止失控执行
- 按 Agent 类型区分:
- 通用 Agent(助手、主 Agent、渗透测试者、编码员、安装者):
MAX_GENERAL_AGENT_TOOL_CALLS(默认:100) - 受限 Agent(搜索者、丰富者、记忆者、生成者、报告者、顾问、反思者、规划者):
MAX_LIMITED_AGENT_TOOL_CALLS(默认:20)
- 通用 Agent(助手、主 Agent、渗透测试者、编码员、安装者):
- 优雅终止:反思者在接近限制时引导 Agent 正确完成
- 资源保护:确保系统稳定性并防止资源耗尽
反思者集成(始终激活)
- 自动修正:当 LLM 在 3 次尝试后未能生成工具调用时调用
- 战略指导:分析失败并引导 Agent 正确使用工具或使用屏障工具(
done、ask) - 恢复机制:根据特定失败模式提供上下文指导
- 限制执行:在达到工具调用限制时协调优雅终止
开源模型建议
对于 < 32B 参数的模型必须启用: 使用 Qwen3.5-27B-FP8 的测试表明,启用执行监控和任务规划对于较小的开源模型至关重要:
- 质量提升:与无监督的基础执行相比,结果提升 2 倍
- 循环预防:显著减少无限循环和冗余工作
- 攻击多样性:鼓励探索多种攻击向量,而非固守单一方法
- 气隙部署:在封闭网络环境中使用本地 LLM 推理实现生产级自主渗透测试
权衡:
- Token 消耗:由于导师/规划器调用增加 2-3 倍
- 执行时间:由于分析和规划步骤延长 2-3 倍
- 结果质量:在完整性、准确性和攻击覆盖率上提升 2 倍
- 模型要求:当顾问使用增强配置时效果最佳(更高的推理参数、更强的模型变体或不同的模型)
配置策略: 为了在小模型上获得最佳性能,使用增强设置配置顾问 Agent:
- 使用相同模型并启用最大推理模式(示例:
vllm-qwen3.5-27b-fp8.provider.yml) - 或者为顾问使用更强的模型,同时为基础 Agent 保留原始模型
- 根据任务复杂度和模型能力调整监控阈值
PentAGI 的架构设计模块化、可扩展且安全。以下是关键组件:
核心服务
- 前端 UI:基于 React + TypeScript 的 Web 界面,提供类型安全
- 后端 API:基于 Go 的 REST 和 GraphQL API,支持 Bearer token 认证,便于程序化访问
- 向量存储:PostgreSQL 集成 pgvector,用于语义搜索和记忆存储
- 任务队列:异步任务处理系统,确保可靠运行
- AI Agent:多 Agent 系统,具有专业角色,实现高效测试
知识图谱
- Graphiti:知识图谱 API,用于语义关系跟踪和上下文理解
- Neo4j:图数据库,用于存储和查询实体、动作和结果之间的关系
- 自动捕获 Agent 响应和工具执行,构建全面的知识库
监控栈
- OpenTelemetry:统一的可观测性数据收集和关联
- Grafana:实时可视化和告警仪表盘
- VictoriaMetrics:高性能时序指标存储
- Jaeger:端到端分布式追踪,用于调试
- Loki:可扩展的日志聚合和分析
分析平台
- Langfuse:高级 LLM 可观测性和性能分析
- ClickHouse:列式分析数据仓库
- Redis:高速缓存和限流
- MinIO:S3 兼容的对象存储,用于制品
安全工具
- Web 爬虫:隔离的浏览器环境,用于安全的 Web 交互
- 渗透测试工具:20+ 专业安全工具的综合套件
- 沙箱执行:所有操作在隔离容器中运行
记忆系统
- 长期记忆:知识和经验的持久存储
- 工作记忆:当前操作的活动上下文和目标
- 情景记忆:历史动作和成功模式
- 知识库:结构化领域专业知识和工具能力
- 上下文管理:使用链式摘要智能管理不断增长的 LLM 上下文窗口
该系统使用 Docker 容器进行隔离和轻松部署,并为核心服务、监控和分析设置独立的网络,以确保适当的安全边界。每个组件都设计为可水平扩展,并可在生产环境中配置为高可用。
快速开始
系统要求
- Docker 和 Docker Compose(或 Podman — 参见 Podman 配置)
- 最少 2 vCPU
- 最少 4GB RAM
- 20GB 可用磁盘空间
- 互联网访问以下载镜像和更新
使用安装程序(推荐)
PentAGI 提供交互式安装程序,具有基于终端的 UI,用于简化的配置和部署。安装程序将引导您完成系统检查、LLM 供应商设置、搜索引擎配置和安全加固。
支持的平台:
快速安装(Linux amd64):
# 创建安装目录
mkdir -p pentagi && cd pentagi
# 下载安装程序
wget -O installer.zip https://pentagi.com/downloads/linux/amd64/installer-latest.zip
# 解压
unzip installer.zip
# 运行交互式安装程序
./installer
前提条件与权限:
安装程序需要适当的权限来与 Docker API 交互以正常操作。默认情况下,它使用 Docker 套接字(/var/run/docker.sock),这需要:
选项 1(推荐用于生产): 以 root 身份运行安装程序:
sudo ./installer选项 2(开发环境): 将用户添加到
docker组以授予 Docker 套接字访问权限:# 将用户添加到 docker 组 sudo usermod -aG docker $USER # 注销并重新登录,或立即激活组 newgrp docker # 验证 Docker 访问权限(应该能在没有 sudo 的情况下运行) docker ps⚠️ 安全说明: 将用户添加到
docker组会授予 root 等效权限。仅在受控环境中对受信任的用户执行此操作。对于生产部署,请考虑使用 rootless Docker 模式或使用 sudo 运行安装程序。
安装
[原 README 过长已截断]