vxcontrol/pentagi

GitHub: vxcontrol/pentagi

PentAGI 是一款基于多智能体和知识图谱技术的全自主 AI 渗透测试系统,旨在通过自动化规划与执行复现复杂的攻击路径并生成报告。

Stars: 8842 | Forks: 991

# PentAGI
Penetration testing Artificial General Intelligence

[![Discord](https://img.shields.io/badge/Discord-7289DA?logo=discord&logoColor=white)](https://discord.gg/2xrMh7qX6m)⠀[![Telegram](https://img.shields.io/badge/Telegram-2CA5E0?logo=telegram&logoColor=white)](https://t.me/+Ka9i6CNwe71hMWQy) vxcontrol%2Fpentagi | Trendshift
## 📖 目录 - [概述](#-overview) - [功能特性](#-features) - [快速开始](#-quick-start) - [API 访问](#-api-access) - [高级设置](#-advanced-setup) - [开发](#-development) - [测试 LLM 智能体](#-testing-llm-agents) - [Embedding 配置与测试](#-embedding-configuration-and-testing) - [使用 ftester 进行功能测试](#-function-testing-with-ftester) - [构建](#%EF%B8%8F-building) - [致谢](#-credits) - [许可证](#-license) ## 🎯 概述 PentAGI 是一款利用尖端人工智能技术的创新性自动化安全测试工具。该项目专为信息安全专业人员、研究人员和爱好者设计,提供了一个强大且灵活的渗透测试解决方案。 您可以观看 **PentAGI 概述** 视频: [![PentAGI 概述视频](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/589663e192153001.png)](https://youtu.be/R70x5Ddzs1o) ## ✨ 功能特性 - 🛡️ 安全隔离。所有操作均在完全隔离的沙箱化 Docker 环境中执行。 - 🤖 完全自主。由 AI 驱动的智能体,自动确定并执行渗透测试步骤。 - 🔬 专业渗透测试工具。内置 20 多种专业安全工具套件,包括 nmap、metasploit、sqlmap 等。 - 🧠 智能记忆系统。长期存储研究成果和成功方法,以供将来使用。 - 📚 知识图谱集成。基于 Graphiti 的知识图谱,使用 Neo4j 进行语义关系跟踪和高级上下文理解。 - 🔍 Web 智能。通过 [scraper](https://hub.docker.com/r/vxcontrol/scraper) 内置浏览器,从网络资源收集最新信息。 - 🔎 外部搜索系统。集成高级搜索 API,包括 [Tavily](https://tavily.com)、[Traversaal](https://traversaal.ai)、[Perplexity](https://www.perplexity.ai)、[DuckDuckGo](https://duckduckgo.com/)、[Google Custom Search](https://programmablesearchengine.google.com/)、[Sploitus Search](https://sploitus.com) 和 [Searxng](https://searxng.org),以进行全面的信息收集。 - 👥 专家团队。具备委托系统,拥有专门的 AI 智能体负责研究、开发和基础设施任务。 - 📊 全面监控。详细的日志记录,并与 Grafana/Prometheus 集成,实现实时系统观测。 - 📝 详细报告。生成包含漏洞利用指南的详尽漏洞报告。 - 📦 智能容器管理。根据特定任务要求自动选择 Docker 镜像。 - 📱 现代界面。简洁直观的 Web UI,用于系统管理和监控。 - 🔌 全面的 API。具有 Bearer token 认证的全功能 REST 和 GraphQL API,便于自动化和集成。 - 💾 持久化存储。所有命令和输出均存储在带有 [pgvector](https://hub.docker.com/r/vxcontrol/pgvector) 扩展的 PostgreSQL 中。 - 🎯 可扩展架构。基于微服务的设计,支持水平扩展。 - 🏠 自托管解决方案。完全控制您的部署和数据。 - 🔑 灵活认证。支持各种 LLM 提供商([OpenAI](https://platform.openai.com/)、[Anthropic](https://www.anthropic.com/)、[Ollama](https://ollama.com/)、[AWS Bedrock](https://aws.amazon.com/bedrock/)、[Google AI/Gemini](https://ai.google.dev/)、[Deep Infra](https://deepinfra.com/)、[OpenRouter](https://openrouter.ai/)、[DeepSeek](https://www.deepseek.com/en))、[Moonshot](https://platform.moonshot.ai/))及自定义配置。 - 🔐 API Token 认证。安全的 Bearer token 系统,用于 REST 和 GraphQL API 的程序化访问。 - ⚡ 快速部署。通过 [Docker Compose](https://docs.docker.com/compose/) 轻松设置,提供全面的环境配置。 ## 🏗️ 架构 ### 系统上下文 ``` 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["👤 Security Engineer (User of the system)"] pentagi["✨ PentAGI (Autonomous penetration testing system)"] target["🎯 target-system (System under test)"] llm["🧠 llm-provider (OpenAI/Anthropic/Ollama/Bedrock/Gemini/Custom)"] search["🔍 search-systems (Google/DuckDuckGo/Tavily/Traversaal/Perplexity/Sploitus/Searxng)"] langfuse["📊 langfuse-ui (LLM Observability Dashboard)"] grafana["📈 grafana (System Monitoring Dashboard)"] pentester --> |Uses HTTPS| pentagi pentester --> |Monitors AI HTTPS| langfuse pentester --> |Monitors System HTTPS| grafana pentagi --> |Tests Various protocols| target pentagi --> |Queries HTTPS| llm pentagi --> |Searches HTTPS| search pentagi --> |Reports HTTPS| langfuse pentagi --> |Reports HTTPS| grafana class pentester person class pentagi system class target,llm,search,langfuse,grafana external linkStyle default stroke:#ffffff,color:#ffffff ```
🔄 容器架构 (点击展开) ``` graph TB subgraph Core Services UI[Frontend UI
React + TypeScript] API[Backend API
Go + GraphQL] DB[(Vector Store
PostgreSQL + pgvector)] MQ[Task Queue
Async Processing] Agent[AI Agents
Multi-Agent System] end subgraph Knowledge Graph Graphiti[Graphiti
Knowledge Graph API] Neo4j[(Neo4j
Graph Database)] end subgraph Monitoring Grafana[Grafana
Dashboards] VictoriaMetrics[VictoriaMetrics
Time-series DB] Jaeger[Jaeger
Distributed Tracing] Loki[Loki
Log Aggregation] OTEL[OpenTelemetry
Data Collection] end subgraph Analytics Langfuse[Langfuse
LLM Analytics] ClickHouse[ClickHouse
Analytics DB] Redis[Redis
Cache + Rate Limiter] MinIO[MinIO
S3 Storage] end subgraph Security Tools Scraper[Web Scraper
Isolated Browser] PenTest[Security Tools
20+ Pro Tools
Sandboxed Execution] end UI --> |HTTP/WS| API API --> |SQL| DB API --> |Events| MQ MQ --> |Tasks| Agent Agent --> |Commands| PenTest Agent --> |Queries| DB Agent --> |Knowledge| Graphiti Graphiti --> |Graph| Neo4j API --> |Telemetry| OTEL OTEL --> |Metrics| VictoriaMetrics OTEL --> |Traces| Jaeger OTEL --> |Logs| Loki Grafana --> |Query| VictoriaMetrics Grafana --> |Query| Jaeger Grafana --> |Query| Loki API --> |Analytics| Langfuse Langfuse --> |Store| ClickHouse Langfuse --> |Cache| Redis Langfuse --> |Files| 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 : contains Task ||--o{ SubTask : contains SubTask ||--o{ Action : contains Action ||--o{ Artifact : produces Action ||--o{ Memory : stores Flow { string id PK string name "Flow name" string description "Flow description" string status "active/completed/failed" json parameters "Flow parameters" timestamp created_at timestamp updated_at } Task { string id PK string flow_id FK string name "Task name" string description "Task description" string status "pending/running/done/failed" json result "Task results" timestamp created_at timestamp updated_at } SubTask { string id PK string task_id FK string name "Subtask name" string description "Subtask description" string status "queued/running/completed/failed" string agent_type "researcher/developer/executor" json context "Agent context" 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 "Action parameters" json result "Action results" timestamp created_at } Artifact { string id PK string action_id FK string type "file/report/log" string path "Storage path" json metadata "Additional info" timestamp created_at } Memory { string id PK string action_id FK string type "observation/conclusion" vector embedding "Vector representation" text content "Memory content" timestamp created_at } ```
🤖 智能体交互 (点击展开) ``` 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: Flow Initialization O->>VS: Query similar tasks VS-->>O: Return experiences O->>KB: Load relevant knowledge KB-->>O: Return context Note over O,R: Research Phase O->>R: Analyze target R->>VS: Search similar cases VS-->>R: Return patterns R->>KB: Query vulnerabilities KB-->>R: Return known issues R->>VS: Store findings R-->>O: Research results Note over O,D: Planning Phase O->>D: Plan attack D->>VS: Query exploits VS-->>D: Return techniques D->>KB: Load tools info KB-->>D: Return capabilities D-->>O: Attack plan Note over O,E: Execution Phase O->>E: Execute plan E->>KB: Load tool guides KB-->>E: Return procedures E->>VS: Store results E-->>O: Execution status ```
🧠 记忆系统 (点击展开) ``` graph TB subgraph "Long-term Memory" VS[(Vector Store
Embeddings DB)] KB[Knowledge Base
Domain Expertise] Tools[Tools Knowledge
Usage Patterns] end subgraph "Working Memory" Context[Current Context
Task State] Goals[Active Goals
Objectives] State[System State
Resources] end subgraph "Episodic Memory" Actions[Past Actions
Commands History] Results[Action Results
Outcomes] Patterns[Success Patterns
Best Practices] end Context --> |Query| VS VS --> |Retrieve| Context Goals --> |Consult| KB KB --> |Guide| Goals State --> |Record| Actions Actions --> |Learn| Patterns Patterns --> |Store| VS Tools --> |Inform| State Results --> |Update| Tools VS --> |Enhance| KB KB --> |Index| 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[Input Chain] --> B{Needs Summarization?} B -->|No| C[Return Original Chain] B -->|Yes| D[Convert to ChainAST] D --> E[Apply Section Summarization] E --> F[Process Oversized Pairs] F --> G[Manage Last Section Size] G --> H[Apply QA Summarization] H --> I[Rebuild Chain with Summaries] I --> J{Is New Chain Smaller?} J -->|Yes| K[Return Optimized Chain] J -->|No| 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 ``` 该算法基于对话链的结构化表示 运行,该结构保留了消息类型,包括工具调用及其响应。所有摘要操作在减少上下文大小的同时,都保持了关键的对话流程。 ### 全局摘要器配置选项 | 参数 | 环境变量 | 默认值 | 描述 | | ---------------------- | --------------------------------- | ------ | ---------------------------------------------- | | Preserve Last | `SUMMARIZER_PRESERVE_LAST` | `true` | 是否保留最后部分中的所有消息 | | Use QA Pairs | `SUMMARIZER_USE_QA` | `true` | 是否使用 QA 对摘要策略 | | Summarize Human in QA | `SUMMARIZER_SUM_MSG_HUMAN_IN_QA` | `false`| 是否摘要 QA 对中的人类消息 | | Last Section Size | `SUMMARIZER_LAST_SEC_BYTES` | `51200`| 最后部分的最大字节数 (50KB) | | Max Body Pair Size | `SUMMARIZER_MAX_BP_BYTES` | `16384`| 单个主体对的最大字节数 (16KB) | | Max QA Sections | `SUMMARIZER_MAX_QA_SECTIONS` | `10` | 保留的最大 QA 对部分数 | | Max QA Size | `SUMMARIZER_MAX_QA_BYTES` | `65536`| QA 对部分的最大字节数 (64KB) | | Keep QA Sections | `SUMMARIZER_KEEP_QA_SECTIONS` | `1` | 不进行摘要的最近 QA 部分数量 | ### 助手摘要器配置选项 助手实例可以使用自定义摘要设置来微调上下文管理行为: | Parameter | Environment Variable | Default | Description | | ------------------ | --------------------------------------- | ------- | -------------------------------------------------------------------- | | Preserve Last | `ASSISTANT_SUMMARIZER_PRESERVE_LAST` | `true` | Whether to preserve all messages in the assistant's last section | | Last Section Size | `ASSISTANT_SUMMARIZER_LAST_SEC_BYTES` | `76800` | Maximum byte size for assistant's last section (75KB) | | Max Body Pair Size | `ASSISTANT_SUMMARIZER_MAX_BP_BYTES` | `16384` | Maximum byte size for a single body pair in assistant context (16KB) | | Max QA Sections | `ASSISTANT_SUMMARIZER_MAX_QA_SECTIONS` | `7` | Maximum QA sections to preserve in assistant context | | Max QA Size | `ASSISTANT_SUMMARIZER_MAX_QA_BYTES` | `76800` | Maximum byte size for assistant's QA sections (75KB) | | Keep QA Sections | `ASSISTANT_SUMMARIZER_KEEP_QA_SECTIONS` | `3` | Number of recent QA sections to preserve without summarization | 与全局设置相比,助手摘要器配置提供了更多的上下文保留内存,保留了更多最近的对话历史,同时仍确保高效的 token 使用。 ### 摘要器环境配置 ``` # 全局 summarizer 逻辑的默认值 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 逻辑的默认值 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 ```
PentAGI 的架构设计是模块化、可扩展且安全的。以下是关键组件: 1. **核心服务** - Frontend UI:基于 React 的 Web 界面,使用 TypeScript 确保类型安全 - Backend API:基于 Go 的 REST 和 GraphQL API,具有 Bearer token 认证,用于程序化访问 - Vector Store:带有 pgvector 的 PostgreSQL,用于语义搜索和记忆存储 - Task Queue:异步任务处理系统,用于可靠操作 - AI Agent:具有专门角色的多智能体系统,用于高效测试 2. **知识图谱** - Graphiti:知识图谱 API,用于语义关系跟踪和上下文理解 - Neo4j:图数据库,用于存储和查询实体、动作和结果之间的关系 - 自动捕获智能体响应和工具执行,以构建全面的知识库 3. **监控栈** - OpenTelemetry:统一的可观测性数据收集和关联 - Grafana:实时可视化和告警仪表板 - VictoriaMetrics:高性能时间序列指标存储 - Jaeger:端到端分布式追踪,用于调试 - Loki:可扩展的日志聚合和分析 4. **分析平台** - Langfuse:高级 LLM 可观测性和性能分析 - ClickHouse:列式分析数据仓库 - Redis:高速缓存和速率限制 - MinIO:兼容 S3 的对象存储,用于存储工件 5. **安全工具** - Web Scraper:隔离的浏览器环境,用于安全的 Web 交互 - Pentesting Tools:包含 20 多种专业安全工具的全面套件 - Sandboxed Execution:所有操作均在隔离容器中运行 6. **记忆系统** - 长期记忆:知识和经验的持久化存储 - 工作记忆:当前操作的活跃上下文和目标 - 情景记忆:历史动作和成功模式 - 知识库:结构化的领域专业知识和工具能力 - 上下文管理:使用链式摘要智能管理不断增长的 LLM 上下文窗口 系统使用 Docker 容器进行隔离和轻松部署,为核心服务、监控和分析设置独立的网络,以确保适当的安全边界。每个组件都设计为可水平扩展,并可在生产环境中配置为高可用性。 ## 🚀 快速开始 ### 系统要求 - Docker 和 Docker Compose (或 Podman - 参见 [Podman 配置](#running-pentagi-with-podman)) - 最低 2 vCPU - 最低 4GB RAM - 20GB 可用磁盘空间 - 互联网访问,用于下载镜像和更新 ### 使用安装程序(推荐) PentAGI 提供了一个带有基于终端 UI 的交互式安装程序,用于简化配置和部署。安装程序将引导您完成系统检查、LLM 提供商设置、搜索引擎配置和安全加固。 **支持的平台:** - **Linux**: amd64 [下载](https://pentagi.com/downloads/linux/amd64/installer-latest.zip) | arm64 [下载](https://pentagi.com/downloads/linux/arm64/installer-latest.zip) - **Windows**: amd64 [下载](https://pentagi.com/downloads/windows/amd64/installer-latest.zip) - **macOS**: amd64 (Intel) [下载](https://pentagi.com/downloads/darwin/amd64/installer-latest.zip) | arm64 (M系列) [下载](https://pentagi.com/downloads/darwin/arm64/installer-latest.zip) **快速安装 (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 运行安装程序。 安装程序将: 1. **系统检查**:验证 Docker、网络连接和系统要求 2. **环境设置**:创建并配置具有最佳默认值的 `.env` 文件 3. **提供商配置**:设置 LLM 提供商 4. **搜索引擎**:配置 DuckDuckGo、Google、Tavily、Traversaal、Perplexity、Sploitus、Searx 5. **安全加固**:生成安全凭据并配置 SSL 证书 6. **部署**:使用 docker-compose 启动 PentAGI **生产环境与增强安全性:** 对于生产部署或安全敏感环境,我们**强烈建议**使用分布式双节点架构,其中 Worker 操作在单独的服务器上隔离。这可以防止不受信任的代码执行和主系统上的网络访问问题。 👉 **查看详细指南**: [Worker 节点设置](examples/guides/worker_node.md) 双节点设置提供: - **隔离执行**:Worker 容器在专用硬件上运行 - **网络隔离**:渗透测试的独立网络边界 - **安全边界**:具有 TLS 认证的 Docker-in-Docker - **OOB 攻击支持**:用于带外技术的专用端口范围 ### 手动安装 1. 创建工作目录或克隆仓库: ``` mkdir pentagi && cd pentagi ``` 2. 将 `.env.example` 复制为 `.env` 或下载它: ``` curl -o .env https://raw.githubusercontent.com/vxcontrol/pentagi/master/.env.example ``` 3. 创建示例文件(`example.custom.provider.yml`、`example.ollama.provider.yml`)或下载它们: ``` curl -o example.custom.provider.yml https://raw.githubusercontent.com/vxcontrol/pentagi/master/examples/configs/custom-openai.provider.yml curl -o example.ollama.provider.yml https://raw.githubusercontent.com/vxcontrol/pentagi/master/examples/configs/ollama-llama318b.provider.yml ``` 4. 在 `.env` 文件中填写所需的 API 密钥。 ``` # 必需:至少其中一个 LLM 提供商 OPEN_AI_KEY=your_openai_key ANTHROPIC_API_KEY=your_anthropic_key GEMINI_API_KEY=your_gemini_key # 可选:AWS Bedrock 提供商(企业级模型) BEDROCK_REGION=us-east-1 BEDROCK_ACCESS_KEY_ID=your_aws_access_key BEDROCK_SECRET_ACCESS_KEY=your_aws_secret_key # 可选:本地 LLM 提供商(零成本推理) OLLAMA_SERVER_URL=http://localhost:11434 OLLAMA_SERVER_MODEL=your_model_name # 可选:额外搜索功能 DUCKDUCKGO_ENABLED=true SPLOITUS_ENABLED=true GOOGLE_API_KEY=your_google_key GOOGLE_CX_KEY=your_google_cx TAVILY_API_KEY=your_tavily_key TRAVERSAAL_API_KEY=your_traversaal_key PERPLEXITY_API_KEY=your_perplexity_key PERPLEXITY_MODEL=sonar-pro PERPLEXITY_CONTEXT_SIZE=medium # Searxng 元搜索引擎(聚合多个来源的结果) SEARXNG_URL=http://your-searxng-instance:8080 SEARXNG_CATEGORIES=general SEARXNG_LANGUAGE= SEARXNG_SAFESEARCH=0 SEARXNG_TIME_RANGE= ## Graphiti 知识图谱设置 GRAPHITI_ENABLED=true GRAPHITI_TIMEOUT=30 GRAPHITI_URL=http://graphiti:8000 GRAPHITI_MODEL_NAME=gpt-5-mini # Neo4j 设置(由 Graphiti stack 使用) NEO4J_USER=neo4j NEO4J_DATABASE=neo4j NEO4J_PASSWORD=devpassword NEO4J_URI=bolt://neo4j:7687 # Assistant 配置 ASSISTANT_USE_AGENTS=false # Default value for agent usage when creating new assistants ``` 5. 更改 `.env` 文件中所有与安全相关的环境变量以提高安全性。
安全相关的环境变量 ### 主要安全设置 - `COOKIE_SIGNING_SALT` - Cookie 签名盐,更改为随机值 - `PUBLIC_URL` - 服务器的公共 URL (例如 `https://pentagi.example.com`) - `SERVER_SSL_CRT` 和 `SERVER_SSL_KEY` - 现有 SSL 证书和密钥的自定义路径,用于 HTTPS (这些路径应在 docker-compose.yml 文件中用作挂载卷) ### Scraper 访问 - `SCRAPER_PUBLIC_URL` - 如果要使用不同的 scraper 服务器处理公共 URL,则为 Scraper 的公共 URL - `SCRAPER_PRIVATE_URL` - Scraper 的私有 URL (docker-compose.yml 文件中的本地 scraper 服务器,用于访问本地 URL) ### 访问凭据 - `PENTAGI_POSTGRES_USER` 和 `PENTAGI_POSTGRES_PASSWORD` - PostgreSQL 凭据 - `NEO4J_USER` 和 `NEO4J_PASSWORD` - Neo4j 凭据 (用于 Graphiti 知识图谱)
6. 如果要在 VSCode 或其他 IDE 中将 `.env` 文件用作 envFile 选项,请删除其中的所有行内注释: ``` perl -i -pe 's/\s+#.*$//' .env ``` 7. 运行 PentAGI 栈: ``` curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose.yml docker compose up -d ``` 访问 [localhost:8443](https://localhost:8443) 以进入 PentAGI Web UI (默认为 `admin@pentagi.com` / `admin`) ### 从外部网络访问 PentAGI 默认情况下,出于安全考虑,PentAGI 绑定到 `127.0.0.1` (仅 localhost)。要从网络上的其他机器访问 PentAGI,您需要配置外部访问。 #### 配置步骤 1. 使用服务器的 IP 地址**更新 `.env` 文件**: ``` # 网络绑定 - 允许外部连接 PENTAGI_LISTEN_IP=0.0.0.0 PENTAGI_LISTEN_PORT=8443 # Public URL - 使用您的实际服务器 IP 或主机名 # 将 192.168.1.100 替换为您的服务器 IP 地址 PUBLIC_URL=https://192.168.1.100:8443 # CORS origins - 列出所有将访问 PentAGI 的 URL # 包含 localhost 用于本地访问,以及您的服务器 IP 用于外部访问 CORS_ORIGINS=https://localhost:8443,https://192.168.1.100:8443 ``` 2. **重建容器**以应用更改: ``` docker compose down docker compose up -d --force-recreate ``` 3. **验证端口绑定**: ``` docker ps | grep pentagi ``` 您应该看到 `0.0.0.0:8443->8443/tcp` 或 `:::8443->8443/tcp`。 如果您看到 `127.0.0.1:8443->8443/tcp`,说明环境变量未被拾取。在这种情况下,直接编辑 `docker-compose.yml` 第 31 行: ``` ports: - "0.0.0.0:8443:8443" ``` 然后再次重建容器。 4. **配置防火墙**以允许端口 8443 上的传入连接: ``` # Ubuntu/Debian 使用 UFW sudo ufw allow 8443/tcp sudo ufw reload # CentOS/RHEL 使用 firewalld sudo firewall-cmd --permanent --add-port=8443/tcp sudo firewall-cmd --reload ``` 5. **访问 PentAGI**: - **本地访问**:`https://localhost:8443` - **网络访问**:`https://your-server-ip:8443` ### 使用 Podman 运行 PentAGI PentAGI 完全支持 Podman 作为 Docker 的替代品。但是,当在 **rootless 模式下使用 Podman** 时,scraper 服务需要特殊配置,因为 rootless 容器无法绑定特权端口(1024 以下的端口)。 #### Podman Rootless 配置 默认的 scraper 配置使用端口 443 (HTTPS),这是一个特权端口。对于 Podman rootless,请重新配置 scraper 以使用非特权端口: **1. 编辑 `docker-compose.yml`** - 修改 `scraper` 服务(约第 199 行): ``` scraper: image: vxcontrol/scraper:latest restart: unless-stopped container_name: scraper hostname: scraper expose: - 3000/tcp # Changed from 443 to 3000 ports: - "${SCRAPER_LISTEN_IP:-127.0.0.1}:${SCRAPER_LISTEN_PORT:-9443}:3000" # Map to port 3000 environment: - MAX_CONCURRENT_SESSIONS=${LOCAL_SCRAPER_MAX_CONCURRENT_SESSIONS:-10} - USERNAME=${LOCAL_SCRAPER_USERNAME:-someuser} - PASSWORD=${LOCAL_SCRAPER_PASSWORD:-somepass} logging: options: max-size: 50m max-file: "7" volumes: - scraper-ssl:/usr/src/app/ssl networks: - pentagi-network shm_size: 2g ``` **2. 更新 `.env` 文件** - 将 scraper URL 更改为使用 HTTP 和端口 3000: ``` # Podman rootless 的 Scraper 配置 SCRAPER_PRIVATE_URL=http://someuser:somepass@scraper:3000/ LOCAL_SCRAPER_USERNAME=someuser LOCAL_SCRAPER_PASSWORD=somepass ``` **3. 重建容器**: ``` podman-compose down podman-compose up -d --force-recreate ``` **4. 测试 scraper 连接**: ``` # 在 pentagi 容器内部进行测试 podman exec -it pentagi wget -O- "http://someuser:somepass@scraper:3000/html?url=http://example.com" ``` 如果您看到 HTML 输出,说明 scraper 工作正常。 #### Podman Rootful 模式 如果您以 rootful 模式(使用 sudo)运行 Podman,则可以使用默认配置而无需修改。Scraper 将按预期在端口 443 上工作。 #### Docker 兼容性 所有 Podman 配置仍与 Docker 完全兼容。非特权端口方法在两个容器运行时上的工作方式相同。 ### 助手配置 PentAGI 允许您配置助手的默认行为: | Variable | Default | Description | | ---------------------- | ------- | ----------------------------------------------------------------------- | | `ASSISTANT_USE_AGENTS` | `false` | Controls the default value for agent usage when creating new assistants | 创建新助手时,`ASSISTANT_USE_AGENTS` 设置会影响 "Use Agents" 切换按钮的初始状态: - `false` (默认):默认情况下,新助手在创建时禁用智能体委托 - `true`:默认情况下,新助手在创建时启用智能体委托 请注意,用户在创建或编辑助手时,始终可以通过在 UI 中切换 "Use Agents" 按钮来覆盖此设置。此环境变量仅控制初始默认状态。 ## 🔌 API 访问 PentAGI 通过 REST 和 GraphQL API 提供全面的程序化访问,允许您将渗透测试工作流集成到自动化流水线、CI/CD 流程和自定义应用程序中。 ### 生成 API Token API Token 通过 PentAGI Web 界面进行管理: 1. 在 Web UI 中导航至 **Settings** → **API Tokens** 2. 点击 **Create Token** 以生成新的 API Token 3. 配置 Token 属性: - **Name** (可选):Token 的描述性名称 - **Expiration Date**:Token 过期时间(最短 1 分钟,最长 3 年) 4. 点击 **Create** 并**立即复制 Token** - 出于安全原因,它只会显示一次 5. 在您的 API 请求中将该 Token 用作 Bearer token 每个 Token 都与您的用户帐户关联,并继承您角色的权限。 ### 使用 API Token 在 HTTP 请求的 `Authorization` 标头中包含 API Token: ``` # GraphQL API 示例 curl -X POST https://your-pentagi-instance:8443/api/v1/graphql \ -H "Authorization: Bearer YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{"query": "{ flows { id title status } }"}' # REST API 示例 curl https://your-pentagi-instance:8443/api/v1/flows \ -H "Authorization: Bearer YOUR_API_TOKEN" ``` ### API 探索与测试 PentAGI 提供交互式文档用于探索和测试 API 端点: #### GraphQL Playground 访问 GraphQL Playground:`https://your-pentagi-instance:8443/api/v1/graphql/playground` 1. 点击底部的 **HTTP Headers** 标签页 2. 添加您的授权标头: { "Authorization": "Bearer YOUR_API_TOKEN" } 3. 交互式探索 schema、运行查询和测试变更 #### Swagger UI 访问 REST API 文档:`https://your-pentagi-instance:8443/api/v1/swagger/index.html` 1. 点击 **Authorize** 按钮 2. 以以下格式输入您的 Token:`Bearer YOUR_API_TOKEN` 3. 点击 **Authorize** 以应用 4. 直接从 Swagger UI 测试端点 ### 生成 API 客户端 您可以使用 PentAGI 附带的 schema 文件为您喜欢的编程语言生成类型安全的 API 客户端: #### GraphQL 客户端 GraphQL schema 位于: - **Web UI**:导航至 Settings 下载 `schema.graphqls` - **Direct file**:仓库中的 `backend/pkg/graph/schema.graphqls` 使用以下工具生成客户端: - **GraphQL Code Generator** (JavaScript/TypeScript): [https://the-guild.dev/graphql/codegen](https://the-guild.dev/graphql/codegen) - **genqlient** (Go): [https://github.com/Khan/genqlient](https://github.com/Khan/genqlient) - **Apollo iOS** (Swift): [https://www.apollographql.com/docs/ios](https://www.apollographql.com/docs/ios) #### REST API 客户端 OpenAPI 规范位于: - **Swagger JSON**: `https://your-pentagi-instance:8443/api/v1/swagger/doc.json` - **Swagger YAML**: 位于 `backend/pkg/server/docs/swagger.yaml` 使用以下工具生成客户端: - **OpenAPI Generator**: [https://openapi-generator.tech](https://openapi-generator.tech) openapi-generator-cli generate \ -i https://your-pentagi-instance:8443/api/v1/swagger/doc.json \ -g python \ -o ./pentagi-client - **Swagger Codegen**: [https://github.com/swagger-api/swagger-codegen](https://github.com/swagger-api/swagger-codegen) swagger-codegen generate \ -i https://your-pentagi-instance:8443/api/v1/swagger/doc.json \ -l typescript-axios \ -o ./pentagi-client - **swagger-typescript-api** (TypeScript): [https://github.com/acacode/swagger-typescript-api](https://github.com/acacode/swagger-typescript-api) npx swagger-typescript-api \ -p https://your-pentagi-instance:8443/api/v1/swagger/doc.json \ -o ./src/api \ -n pentagi-api.ts ### API 使用示例
创建新 Flow (GraphQL) ``` mutation CreateFlow { createFlow( modelProvider: "openai" input: "Test the security of https://example.com" ) { id title status createdAt } } ```
列出 Flows (REST API) ``` curl https://your-pentagi-instance:8443/api/v1/flows \ -H "Authorization: Bearer YOUR_API_TOKEN" \ | jq '.flows[] | {id, title, status}' ```
Python 客户端示例 ``` import requests class PentAGIClient: def __init__(self, base_url, api_token): self.base_url = base_url self.headers = { "Authorization": f"Bearer {api_token}", "Content-Type": "application/json" } def create_flow(self, provider, target): query = """ mutation CreateFlow($provider: String!, $input: String!) { createFlow(modelProvider: $provider, input: $input) { id title status } } """ response = requests.post( f"{self.base_url}/api/v1/graphql", json={ "query": query, "variables": { "provider": provider, "input": target } }, headers=self.headers ) return response.json() def get_flows(self): response = requests.get( f"{self.base_url}/api/v1/flows", headers=self.headers ) return response.json() # 用法 client = PentAGIClient( "https://your-pentagi-instance:8443", "your_api_token_here" ) # 创建新的 flow flow = client.create_flow("openai", "Scan https://example.com for vulnerabilities") print(f"Created flow: {flow}") # 列出所有 flow flows = client.get_flows() print(f"Total flows: {len(flows['flows'])}") ```
TypeScript 客户端示例 ``` import axios, { AxiosInstance } from 'axios'; interface Flow { id: string; title: string; status: string; createdAt: string; } class PentAGIClient { private client: AxiosInstance; constructor(baseURL: string, apiToken: string) { this.client = axios.create({ baseURL: `${baseURL}/api/v1`, headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json', }, }); } async createFlow(provider: string, input: string): Promise { const query = ` mutation CreateFlow($provider: String!, $input: String!) { createFlow(modelProvider: $provider, input: $input) { id title status createdAt } } `; const response = await this.client.post('/graphql', { query, variables: { provider, input }, }); return response.data.data.createFlow; } async getFlows(): Promise { const response = await this.client.get('/flows'); return response.data.flows; } async getFlow(flowId: string): Promise { const response = await this.client.get(`/flows/${flowId}`); return response.data; } } // Usage const client = new PentAGIClient( 'https://your-pentagi-instance:8443', 'your_api_token_here' ); // Create a new flow const flow = await client.createFlow( 'openai', 'Perform penetration test on https://example.com' ); console.log('Created flow:', flow); // List all flows const flows = await client.getFlows(); console.log(`Total flows: ${flows.length}`); ```
### 安全最佳实践 使用 API Token 时: - **永远不要将 Token 提交到版本控制** - 使用环境变量或机密管理 - **定期轮换 Token** - 设置适当的过期日期并定期创建新 Token - **为不同的应用程序使用单独的 Token** - 如果需要,可以更轻松地撤销访问权限 - **监控 Token 使用情况** - 在 Settings 页面查看 API Token 活动 - **撤销未使用的 Token** - 禁用或删除不再需要的 Token - **仅使用 HTTPS** - 切勿通过未加密的连接发送 API Token ### Token 管理 - **查看 Token**:在 Settings → API Tokens 中查看所有活动 Token - **编辑 Token**:更新 Token 名称或撤销 Token - **删除 Token**:永久删除 Token(此操作无法撤消) - **Token ID**:每个 Token 都有一个唯一的 ID,可以复制以供参考 Token 列表显示: - Token 名称(如果已提供) - Token ID(唯一标识符) - 状态(active/revoked/expired) - 创建日期 - 过期日期 ### 自定义 LLM 提供商配置 当使用带有 `LLM_SERVER_*` 变量的自定义 LLM 提供商时,您可以微调请求中使用的推理格式: | Variable | Default | Description | | ------------------------------- | ------- | --------------------------------------------------------------------------------------- | | `LLM_SERVER_URL` | | Base URL for the custom LLM API endpoint | | `LLM_SERVER_KEY` | | API key for the custom LLM provider | | `LLM_SERVER_MODEL` | | Default model to use (can be overridden in provider config) | | `LLM_SERVER_CONFIG_PATH` | | Path to the YAML configuration file for agent-specific models | | `LLM_SERVER_PROVIDER` | | Provider name prefix for model names (e.g., `openrouter`, `deepseek` for LiteLLM proxy) | | `LLM_SERVER_LEGACY_REASONING` | `false` | Controls reasoning format in API requests | | `LLM_SERVER_PRESERVE_REASONING` | `false` | Preserve reasoning content in multi-turn conversations (required by some providers) | `LLM_SERVER_PROVIDER` 设置在使用 **LiteLLM proxy** 时特别有用,它会为模型名称添加提供商前缀。例如,当通过 LiteLLM 连接到 Moonshot API 时,像 `kimi-2.5` 这样的模型会变成 `moonshot/kimi-2.5`。通过设置 `LLM_SERVER_PROVIDER=moonshot`,您可以对直接 API 访问和 LiteLLM 代理访问使用相同的提供商配置文件,而无需修改。 `LLM_SERVER_LEGACY_REASONING` 设置影响推理参数发送到 LLM 的方式: - `false` (默认):使用现代格式,其中推理作为带有 `max_tokens` 参数的结构化对象发送 - `true`:使用带有基于字符串的 `reasoning_effort` 参数的旧格式 此设置在使用不同的 LLM 提供商时很重要,因为它们可能期望其 API 请求中有推理格式。如果您在使用自定义提供商时遇到与推理相关的错误,请尝试更改此设置。 `LLM_SERVER_PRESERVE_REASONING` 设置控制是否在多轮对话中保留推理内容: - `false` (默认):对话历史中不保留推理内容 - `true`:保留推理内容并在后续 API 调用中发送 某些 LLM 提供商(例如 Moonshot)需要此设置,当多轮对话中不包含推理内容时,它们会返回类似 "thinking is enabled but reasoning_content is missing in assistant tool call message" 的错误。如果您的提供商需要保留推理内容,请启用此设置。 ### 本地 LLM 提供商配置 PentAGI 支持 Ollama 用于本地 LLM 推理,提供零成本操作和增强的隐私性: | Variable | Default | Description | | ----------------------------------- | --------------------------- | --------------------------------------- | | `OLLAMA_SERVER_URL` | | URL of your Ollama server | | `OLLAMA_SERVER_MODEL` | `llama3.1:8b-instruct-q8_0` | Default model for inference | | `OLLAMA_SERVER_CONFIG_PATH` | | Path to custom agent configuration file | | `OLLAMA_SERVER_PULL_MODELS_TIMEOUT` | `600` | Timeout for model downloads (seconds) | | `OLLAMA_SERVER_PULL_MODELS_ENABLED` | `false` | Auto-download models on startup | | `OLLAMA_SERVER_LOAD_MODELS_ENABLED` | `false` | Query server for available models | 配置示例: ``` # 使用默认模型的基本 Ollama 设置 OLLAMA_SERVER_URL=http://localhost:11434 OLLAMA_SERVER_MODEL=llama3.1:8b-instruct-q8_0 # 带有自动拉取和模型发现的生产环境设置 OLLAMA_SERVER_URL=http://ollama-server:11434 OLLAMA_SERVER_PULL_MODELS_ENABLED=true OLLAMA_SERVER_PULL_MODELS_TIMEOUT=900 OLLAMA_SERVER_LOAD_MODELS_ENABLED=true # 带有特定 agent 模型的自定义配置 OLLAMA_SERVER_CONFIG_PATH=/path/to/ollama-config.yml # Docker 容器内的默认配置文件 OLLAMA_SERVER_CONFIG_PATH=/opt/pentagi/conf/ollama-llama318b.provider.yml ``` **性能注意事项:** - **模型发现** (`OLLAMA_SERVER_LOAD_MODELS_ENABLED=true`):查询 Ollama API 会增加 1-2 秒的启动延迟 - **自动拉取** (`OLLAMA_SERVER_PULL_MODELS_ENABLED=true`):首次启动可能需要几分钟来下载模型 - **拉取超时** (`OLLAMA_SERVER_PULL_MODELS_TIMEOUT=900`):15 分钟(以秒为单位) - **静态配置**:禁用这两个标志并在配置文件中指定模型,以实现最快的启动 #### 创建具有扩展上下文的自定义 Ollama 模型 PentAGI 需要比默认 Ollama 配置具有更大上下文窗口的模型。您需要通过 Modelfile 创建具有增加的 `num_ctx` 参数的自定义模型。虽然典型的智能体工作流消耗约 64K token,但 PentAGI 使用 110K 上下文大小作为安全裕度并处理复杂的渗透测试场景。 **重要**:`num_ctx` 参数只能在模型创建期间通过 Modelfile 设置 - 它不能在模型创建后更改或在运行时覆盖。 ##### 示例:具有扩展上下文的 Qwen3 32B FP16 创建一个名为 `Modelfile_qwen3_32b_fp16_tc` 的 Modelfile: ``` FROM qwen3:32b-fp16 PARAMETER num_ctx 110000 PARAMETER temperature 0.3 PARAMETER top_p 0.8 PARAMETER min_p 0.0 PARAMETER top_k 20 PARAMETER repeat_penalty 1.1 ``` 构建自定义模型: ``` ollama create qwen3:32b-fp16-tc -f Modelfile_qwen3_32b_fp16_tc ``` ##### 示例:具有扩展上下文的 QwQ 32B FP16 创建一个名为 `Modelfile_qwq_32b_fp16_tc` 的 Modelfile: ``` FROM qwq:32b-fp16 PARAMETER num_ctx 110000 PARAMETER temperature 0.2 PARAMETER top_p 0.7 PARAMETER min_p 0.0 PARAMETER top_k 40 PARAMETER repeat_penalty 1.2 ``` 构建自定义模型: ``` ollama create qwq:32b-fp16-tc -f Modelfile_qwq_32b_fp16_tc ``` 这些自定义模型在 Docker 镜像 `/opt/pentagi/conf/` 中包含的预构建提供商配置文件(`ollama-qwen332b-fp16-tc.provider.yml` 和 `ollama-qwq32b-fp16-tc.provider.yml`)中被引用。 ### OpenAI 提供商配置 PentAGI 支持 OpenAI 的高级语言模型,包括专为复杂分析任务设计的最新推理能力 o 系列模型: | Variable | Default | Description | | -------------------- | --------------------------- | --------------------------- | | `OPEN_AI_KEY` | | API key for OpenAI services | | `OPEN_AI_SERVER_URL` | `https://api.openai.com/v1` | OpenAI API endpoint | 配置示例: ``` # 基本 OpenAI 设置 OPEN_AI_KEY=your_openai_api_key OPEN_AI_SERVER_URL=https://api.openai.com/v1 # 使用代理以增强安全性 OPEN_AI_KEY=your_openai_api_key PROXY_URL=http://your-proxy:8080 ``` OpenAI 提供商提供尖端功能,包括: - **推理模型**:具有逐步分析思维的高级 o 系列模型 (o1, o3, o4-mini) - **最新 GPT-4.1 系列**:为复杂的安全研究和漏洞利用开发优化的旗舰模型 - **具有成本效益的选项**:从用于大批量扫描的 nano 模型到用于深度分析的强大推理模型 - **多功能性能**:快速、智能的模型,非常适合多步骤安全分析和渗透测试 - **经过验证的可靠性**:行业领先的模型,在各种安全场景中具有一致的性能 系统会根据任务复杂性自动选择适当的 OpenAI 模型,从而优化性能和成本效益。 ### Anthropic 提供商配置 PentAGI 与 Anthropic 的 Claude 模型集成,以其卓越的安全性、推理能力和对复杂安全上下文的复杂理解而闻名: | Variable | Default | Description | | ---------------------- | ------------------------------ | ------------------------------ | | `ANTHROPIC_API_KEY` | | API key for Anthropic services | | `ANTHROPIC_SERVER_URL` | `https://api.anthropic.com/v1` | Anthropic API endpoint | 配置示例: ``` # 基本 Anthropic 设置 ANTHROPIC_API_KEY=your_anthropic_api_key ANTHROPIC_SERVER_URL=https://api.anthropic.com/v1 # 在安全环境中使用代理 ANTHROPIC_API_KEY=your_anthropic_api_key PROXY_URL=http://your-proxy:8080 ``` Anthropic 提供商提供卓越的功能,包括: - **高级推理**:具有卓越推理能力的 Claude 4 系列,用于复杂的渗透测试 - **扩展思考**:Claude 3.7 具有逐步思考能力,用于有条不紊的安全研究 - **高速性能**:Claude 3.5 Haiku,用于极快的漏洞扫描和实时监控 - **全面分析**:Claude Sonnet 模型,用于复杂的安全分析和威胁搜寻 - **安全优先设计**:内置安全机制,确保负责任的安全测试实践 该系统利用 Claude 对安全上下文的高级理解,提供全面且负责任的渗透测试指导。 ### Google AI (Gemini) 提供商配置 PentAGI 通过 Google AI API 支持 Google 的 Gemini 模型,提供最先进的推理能力和多模态功能: | Variable | Default | Description | | ------------------- | ------------------------------------------- | ------------------------------ | | `GEMINI_API_KEY` | | API key for Google AI services | | `GEMINI_SERVER_URL` | `https://generativelanguage.googleapis.com` | Google AI API endpoint | 配置示例: ``` # 基本 Gemini 设置 GEMINI_API_KEY=your_gemini_api_key GEMINI_SERVER_URL=https://generativelanguage.googleapis.com # 使用代理 GEMINI_API_KEY=your_gemini_api_key PROXY_URL=http://your-proxy:8080 ``` Gemini 提供商提供高级功能,包括: - **思考能力**:具有逐步分析的高级推理模型 (Gemini 2.5 系列) - **多模态支持**:文本和图像处理,用于全面的安全评估 - **大上下文窗口**:高达 2M token,用于分析大量代码库和文档 - **具有成本效益的选项**:从高性能 pro 模型到经济的 flash 变体 - **专注于安全的模型**:为渗透测试工作流优化的专用配置 系统会根据智能体需求自动选择适当的 Gemini 模型,平衡性能、功能和成本效益。 ### AWS Bedrock 提供商配置 PentAGI 与 Amazon Bedrock 集成,提供来自领先 AI 公司(包括 Anthropic、AI21、Cohere、Meta 和 Amazon 自有模型)的广泛基础模型访问: | Variable | Default | Description | | --------------------------- | ----------- | ------------------------------------------------------- | | `BEDROCK_REGION` | `us-east-1` | AWS region for Bedrock service | | `BEDROCK_ACCESS_KEY_ID` | | AWS access key ID for authentication | | `BEDROCK_SECRET_ACCESS_KEY` | | AWS secret access key for authentication | | `BEDROCK_SESSION_TOKEN` | | AWS session token as alternative way for authentication | | `BEDROCK_SERVER_URL` | | Optional custom Bedrock endpoint URL | 配置示例: ``` # 带有凭证的基本 AWS Bedrock 设置 BEDROCK_REGION=us-east-1 BEDROCK_ACCESS_KEY_ID=your_aws_access_key BEDROCK_SECRET_ACCESS_KEY=your_aws_secret_key # 使用代理以增强安全性 BEDROCK_REGION=us-east-1 BEDROCK_ACCESS_KEY_ID=your_aws_access_key BEDROCK_SECRET_ACCESS_KEY=your_aws_secret_key PROXY_URL=http://your-proxy:8080 # 使用自定义 endpoint(用于 VPC endpoints 或测试) BEDROCK_REGION=us-east-1 BEDROCK_ACCESS_KEY_ID=your_aws_access_key BEDROCK_SECRET_ACCESS_KEY=your_aws_secret_key BEDROCK_SERVER_URL=https://bedrock-runtime.us-east-1.amazonaws.com ``` AWS Bedrock 提供商提供全面的功能,包括: - **多提供商访问**:通过单一接口访问来自 Anthropic (Claude)、AI21 (Jamba)、Cohere (Command)、Meta (Llama)、Amazon (Nova, Titan) 和 DeepSeek (R1) 的模型 - **高级推理**:支持 Claude 4 和其他具有逐步思考能力的推理模型 - **多模态模型**:支持文本、图像和视频处理的 Amazon Nova 系列,用于全面的安全分析 - **企业安全**:AWS 原生安全控制、VPC 集成和合规性认证 - **成本优化**:广泛的模型尺寸和功能范围,用于具有成本效益的渗透测试 - **区域可用性**:在您首选的 AWS 区域中部署模型,以实现数据驻留和性能 - **高性能**:通过 AWS 全球基础设施进行低延迟推理 系统根据任务复杂性和要求自动选择适当的 Bedrock 模型,利用全方位的可用基础模型以获得最佳安全测试结果。 有关高级配置选项和详细设置说明,请访问我们的 [文档](https://docs.pentagi.com)。 ## 🔧 高级设置 ### Langfuse 集成 Langfuse 为监控和分析 AI 智能体操作提供高级功能。 1. 在现有的 `.env` 文件中配置 Langfuse 环境变量。
Langfuse 重要环境变量 ### 数据库凭据 - `LANGFUSE_POSTGRES_USER` 和 `LANGFUSE_POSTGRES_PASSWORD` - Langfuse PostgreSQL 凭据 - `LANGFUSE_CLICKHOUSE_USER` 和 `LANGFUSE_CLICKHOUSE_PASSWORD` - ClickHouse 凭据 - `LANGFUSE_REDIS_AUTH` - Redis 密码 ### 加密和安全密钥 - `LANGFUSE_SALT` - Langfuse Web UI 中的哈希盐 - `LANGFUSE_ENCRYPTION_KEY` - 加密密钥(32 字节,十六进制) - `LANGFUSE_NEXTAUTH_SECRET` - NextAuth 的密钥 ### 管理员凭据 - `LANGFUSE_INIT_USER_EMAIL` - 管理员邮箱 - `LANGFUSE_INIT_USER_PASSWORD` - 管理员密码 - `LANGFUSE_INIT_USER_NAME` - 管理员用户名 ### API 密钥和 Token - `LANGFUSE_INIT_PROJECT_PUBLIC_KEY` - 项目公共密钥(也从 PentAGI 侧使用) - `LANGFUSE_INIT_PROJECT_SECRET_KEY` - 项目秘密密钥(也从 PentAGI 侧使用) ### S3 存储 - `LANGFUSE_S3_ACCESS_KEY_ID` - S3 访问密钥 ID - `LANGFUSE_S3_SECRET_ACCESS_KEY` - S3 秘密访问密钥
2. 在 `.env` 文件中启用 PentAGI 服务的 Langfuse 集成。 ``` LANGFUSE_BASE_URL=http://langfuse-web:3000 LANGFUSE_PROJECT_ID= # default: value from ${LANGFUSE_INIT_PROJECT_ID} LANGFUSE_PUBLIC_KEY= # default: value from ${LANGFUSE_INIT_PROJECT_PUBLIC_KEY} LANGFUSE_SECRET_KEY= # default: value from ${LANGFUSE_INIT_PROJECT_SECRET_KEY} ``` 3. 运行 Langfuse 栈: ``` curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose-langfuse.yml docker compose -f docker-compose.yml -f docker-compose-langfuse.yml up -d ``` 访问 [localhost:4000](http://localhost:4000) 以使用 `.env` 文件中的凭据进入 Langfuse Web UI: - `LANGFUSE_INIT_USER_EMAIL` - 管理员邮箱 - `LANGFUSE_INIT_USER_PASSWORD` - 管理员密码 ### 监控和可观测性 为了进行详细的系统操作跟踪,可以与监控工具集成。 1. 在 `.env` 文件中启用 PentAGI 的 OpenTelemetry 和所有可观测性服务的集成。 ``` OTEL_HOST=otelcol:8148 ``` 2. 运行可观测性栈: ``` curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose-observability.yml docker compose -f docker-compose.yml -f docker-compose-observability.yml up -d ``` 访问 [localhost:3000](http://localhost:3000) 以进入 Grafana Web UI。 ### 知识图谱集成 PentAGI 与 [Graphiti](https://github.com/vxcontrol/pentagi-graphiti) 集成,这是一个由 Neo4j 支持的时间知识图谱系统,可为 AI 智能体操作提供高级语义理解和关系跟踪。vxcontrol fork 提供了专用于渗透测试目的的自定义实体和边缘类型。 #### 什么是 Graphiti? Graphiti 自动从智能体交互中提取并存储结构化知识,构建实体、关系和时间上下文的图谱。这可以实现: - **语义记忆**:存储和调用工具、目标、漏洞和技术之间的关系 - **上下文理解**:跟踪不同的渗透测试动作随时间如何相互关联 - **知识重用**:从过去的渗透测试中学习并将见解应用于新的评估 - **高级查询**:搜索复杂的模式,例如“哪些工具对类似目标有效?” #### 启用 Graphiti Graphiti 知识图谱是**可选的**,默认情况下禁用。要启用它: 1. 在 `.env` 文件中配置 Graphiti 环境变量: ``` ## Graphiti 知识图谱设置 GRAPHITI_ENABLED=true GRAPHITI_TIMEOUT=30 GRAPHITI_URL=http://graphiti:8000 GRAPHITI_MODEL_NAME=gpt-5-mini # Neo4j 设置(由 Graphiti stack 使用) NEO4J_USER=neo4j NEO4J_DATABASE=neo4j NEO4J_PASSWORD=devpassword NEO4J_URI=bolt://neo4j:7687 # OpenAI API key(Graphiti 实体提取所需) OPEN_AI_KEY=your_openai_api_key ``` 2. 与主 PentAGI 服务一起运行 Graphiti 栈: ``` # 如果需要,下载 Graphiti compose 文件 curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose-graphiti.yml # 启动带有 Graphiti 的 PentAGI docker compose -f docker-compose.yml -f docker-compose-graphiti.yml up -d ``` 3. 验证 Graphiti 正在运行: ``` # 检查服务健康状况 docker compose -f docker-compose.yml -f docker-compose-graphiti.yml ps graphiti neo4j # 查看 Graphiti 日志 docker compose -f docker-compose.yml -f docker-compose-graphiti.yml logs -f graphiti # 访问 Neo4j Browser(可选) # 访问 http://localhost:7474 并使用 NEO4J_USER/NEO4J_PASSWORD 登录 # 访问 Graphiti API(可选,用于调试) # 访问 http://localhost:8000/docs 查看 Swagger API 文档 ``` #### 存储内容 启用后,PentAGI 会自动捕获: - **智能体响应**:所有智能体推理、分析和决策 - **工具执行**:执行的命令、使用的工具及其结果 - **上下文信息**:Flow、Task 和 Subtask 层次结构 ### GitHub 和 Google OAuth 集成 与 GitHub 和 Google 的 OAuth 集成允许用户使用他们在这些平台上的现有帐户进行身份验证。这提供了几个好处: - 简化的登录过程,无需创建单独的凭据 - 通过受信任的身份提供商增强安全性 - 访问 GitHub/Google 帐户中的用户个人资料信息 - 与现有开发工作流的无缝集成 要使用 GitHub OAuth,您需要在 GitHub 帐户中一个新的 OAuth 应用程序,并在 `.env` 文件中设置 `OAUTH_GITHUB_CLIENT_ID` 和 `OAUTH_GITHUB_CLIENT_SECRET`。 要使用 Google OAuth,您需要在 Google 帐户中创建一个新的 OAuth 应用程序,并在 `.env` 文件中设置 `OAUTH_GOOGLE_CLIENT_ID` 和 `OAUTH_GOOGLE_CLIENT_SECRET`。 ### Docker 镜像配置 PentAGI 允许您配置用于执行各种任务的 Docker 镜像选择。系统会根据任务类型自动选择最合适的镜像,但您可以通过指定您喜欢的镜像来限制此选择: | Variable | Default | Description | | ---------------------------------- | ---------------------- | ----------------------------------------------------------- | | `DOCKER_DEFAULT_IMAGE` | `debian:latest` | Default Docker image for general tasks and ambiguous cases | | `DOCKER_DEFAULT_IMAGE_FOR_PENTEST` | `vxcontrol/kali-linux` | Default Docker image for security/penetration testing tasks | 设置这些环境变量后,AI 智能体将被限制在您指定的镜像选择范围内。这对于以下情况特别有用: - **安全执行**:限制仅使用经过验证且受信任的镜像 - **环境标准化**:在所有操作中使用企业或自定义镜像 - **性能优化**:利用预装必要工具的预构建镜像 配置示例: ``` # 使用自定义镜像进行常规任务 DOCKER_DEFAULT_IMAGE=mycompany/custom-debian:latest # 使用专用镜像进行渗透测试 DOCKER_DEFAULT_IMAGE_FOR_PENTEST=mycompany/pentest-tools:v2.0 ``` ## 💻 开发 ### 开发要求 - golang - nodejs - docker - postgres - commitlint ### 环境设置 #### 后端设置 运行一次 `cd backend && go mod download` 以安装所需的包。 要生成 swagger 文件,必须在 ``` swag init -g ../../pkg/server/router.go -o pkg/server/docs/ --parseDependency --parseInternal --parseDepth 2 -d cmd/pentagi ``` 之前通过 ``` go install github.com/swaggo/swag/cmd/swag@v1.8.7 ``` 安装 `swag` 包。 要生成 graphql resolver 文件,必须运行 ``` go run github.com/99designs/gqlgen --config ./gqlgen/gqlgen.yml ``` 之后您可以在 `pkg/graph` 文件夹中看到生成的文件。 要从 sqlc 配置生成 ORM 方法(数据库包) ``` docker run --rm -v $(pwd):/src -w /src --network pentagi-network -e DATABASE_URL="{URL}" sqlc/sqlc generate -f sqlc/sqlc.yml ``` 要从 OpenAPI 规范生成 Langfuse SDK ``` fern generate --local ``` 并安装 fern-cli ``` npm install -g fern-api ``` #### 测试 要运行测试 `cd backend && go test -v ./...` #### 前端设置 运行一次 `cd frontend && npm install` 以安装所需的包。 要生成 graphql 文件,必须运行 `npm run graphql:generate`,该命令使用 `graphql-codegen.ts` 文件。 确保您已全局安装 `graphql-codegen`: ``` npm install -g graphql-codegen ``` 之后您可以运行: * `npm run prettier` 检查您的代码格式是否正确 * `npm run prettier:fix` 修复它 * `npm run lint` 检查您的代码是否 lint 正确 * `npm run lint:fix` 修复它 要生成 SSL 证书,您需要运行 `npm run ssl:generate`(该命令使用 `generate-ssl.ts` 文件),或者当您运行 `npm run dev` 时会自动生成。 #### 后端配置 在 `.vscode/launch.json` 文件中编辑 `backend` 的配置: - `DATABASE_URL` - PostgreSQL 数据库 URL (例如 `postgres://postgres:postgres@localhost:5432/pentagidb?sslmode=disable`) - `DOCKER_HOST` - Docker SDK API (例如对于 macOS `DOCKER_HOST=unix:///Users//Library/Containers/com.docker.docker/Data/docker.raw.sock`) [更多信息](https://stackoverflow.com/a/62757128/5922857) 可选: - `SERVER_PORT` - 运行服务器的端口(默认:`8443`) - `SERVER_USE_SSL` - 为服务器启用 SSL(默认:`false`) #### 前端配置 在 `.vscode/launch.json` 文件中编辑 `frontend` 的配置: - `VITE_API_URL` - 后端 API URL。*省略* URL 协议(例如 `localhost:8080`,*而不是* `http://localhost:8080`) - `VITE_USE_HTTPS` - 为服务器启用 SSL(默认:`false`) - `VITE_PORT` - 运行服务器的端口(默认:`8000`) - `VITE_HOST` - 运行服务器的主机(默认:`0.0.0.0`) ### 运行应用程序 #### 后端 在 `backend` 文件夹中运行命令: - 使用 `.env` 文件设置环境变量,例如 `source .env` - 运行 `go run cmd/pentagi/main.go` 以启动服务器 #### 前端 在 `frontend` 文件夹中运行命令: - 运行 `npm install` 以安装依赖项 - 运行 `npm run dev` 以运行 Web 应用程序 - 运行 `npm run build` 以构建 Web 应用程序 打开浏览器并访问 Web 应用程序 URL。 ## 🧪 测试 LLM 智能体 PentAGI 包含一个名为 `ctester` 的强大实用程序,用于测试和验证 LLM 智能体能力。此工具可帮助确保您的 LLM 提供商配置与不同的智能体类型正常工作,从而允许您为每个特定的智能体角色优化模型选择。 该实用程序具有多个智能体的并行测试、详细报告和灵活的配置选项等功能。 ### 关键功能 - **并行测试**:同时测试多个智能体以获得更快的结果 - **全面的测试套件**:评估基本补全、JSON 响应、函数调用和渗透测试知识 - **详细报告**:生成带有成功率和性能指标的 Markdown 报告 - **灵活的配置**:根据需要测试特定的智能体或测试组 - **专门的测试组**:包括针对网络安全和渗透测试场景的领域特定测试 ### 使用场景 #### 对于开发者(具有本地 Go 环境) 如果您已克隆仓库并安装了 Go: ``` # 带有 .env 文件的默认配置 cd backend go run cmd/ctester/*.go -verbose # 自定义 provider 配置 go run cmd/ctester/*.go -config ../examples/configs/openrouter.provider.yml -verbose # 生成报告文件 go run cmd/ctester/*.go -config ../examples/configs/deepinfra.provider.yml -report ../test-report.md # 仅测试特定 agent 类型 go run cmd/ctester/*.go -agents simple,simple_json,primary_agent -verbose # 仅测试特定测试组 go run cmd/ctester/*.go -groups basic,advanced -verbose ``` #### 对于用户(使用 Docker 镜像) 如果您更喜欢使用预构建的 Docker 镜像而不设置开发环境: ``` # 使用 Docker 在默认环境下进行测试 docker run --rm -v $(pwd)/.env:/opt/pentagi/.env vxcontrol/pentagi /opt/pentagi/bin/ctester -verbose # 使用您的自定义 provider 配置进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ -v $(pwd)/my-config.yml:/opt/pentagi/config.yml \ vxcontrol/pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/config.yml -agents simple,primary_agent,coder -verbose # 生成详细报告 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ -v $(pwd):/opt/pentagi/output \ vxcontrol/pentagi /opt/pentagi/bin/ctester -report /opt/pentagi/output/report.md ``` #### 使用预配置的提供商 Docker 镜像内置了对主要提供商的支持,并包含针对其他服务的预配置提供商文件: ``` # 使用 OpenRouter 配置进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/openrouter.provider.yml # 使用 DeepInfra 配置进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/deepinfra.provider.yml # 使用 DeepSeek 配置进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/deepseek.provider.yml # 使用 Moonshot 配置进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/moonshot.provider.yml # 使用 OpenAI 配置进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -type openai # 使用 Anthropic 配置进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -type anthropic # 使用 Gemini 配置进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -type gemini # 使用 AWS Bedrock 配置进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -type bedrock # 使用自定义 OpenAI 配置进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/custom-openai.provider.yml # 使用 Ollama 配置(本地推理)进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/ollama-llama318b.provider.yml # 使用 Ollama Qwen3 32B 配置(需要创建自定义模型)进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/ollama-qwen332b-fp16-tc.provider.yml # 使用 Ollama QwQ 32B 配置(需要创建自定义模型和 71.3GB VRAM)进行测试 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/ollama-qwq32b-fp16-tc.provider.yml ``` 要使用这些配置,您的 `.env` 文件只需要包含: ``` LLM_SERVER_URL=https://openrouter.ai/api/v1 # or https://api.deepinfra.com/v1/openai or https://api.deepseek.com or https://api.openai.com/v1 or https://api.moonshot.ai/v1 LLM_SERVER_KEY=your_api_key LLM_SERVER_MODEL= # Leave empty, as models are specified in the config LLM_SERVER_CONFIG_PATH=/opt/pentagi/conf/openrouter.provider.yml # or deepinfra.provider.yml or deepseek.provider.yml or custom-openai.provider.yml or moonshot.provider.yml LLM_SERVER_PROVIDER= # Provider name for LiteLLM proxy (e.g., openrouter, deepseek, moonshot) LLM_SERVER_LEGACY_REASONING=false # Controls reasoning format, for OpenAI must be true (default: false) LLM_SERVER_PRESERVE_REASONING=false # Preserve reasoning content in multi-turn conversations (required by Moonshot, default: false) # 对于 OpenAI(官方 API) OPEN_AI_KEY=your_openai_api_key # Your OpenAI API key OPEN_AI_SERVER_URL=https://api.openai.com/v1 # OpenAI API endpoint # 对于 Anthropic(Claude 模型) ANTHROPIC_API_KEY=your_anthropic_api_key # Your Anthropic API key ANTHROPIC_SERVER_URL=https://api.anthropic.com/v1 # Anthropic API endpoint # 对于 Gemini(Google AI) GEMINI_API_KEY=your_gemini_api_key # Your Google AI API key GEMINI_SERVER_URL=https://generativelanguage.googleapis.com # Google AI API endpoint # 对于 AWS Bedrock(企业级基础模型) BEDROCK_REGION=us-east-1 # AWS region for Bedrock service BEDROCK_ACCESS_KEY_ID=your_aws_access_key # AWS access key ID BEDROCK_SECRET_ACCESS_KEY=your_aws_secret_key # AWS secret access key BEDROCK_SESSION_TOKEN=your_aws_session_token # AWS session token (alternative auth method) BEDROCK_SERVER_URL= # Optional custom Bedrock endpoint # 对于 Ollama(本地推理) OLLAMA_SERVER_URL=http://localhost:11434 OLLAMA_SERVER_MODEL=llama3.1:8b-instruct-q8_0 OLLAMA_SERVER_CONFIG_PATH=/opt/pentagi/conf/ollama-llama318b.provider.yml OLLAMA_SERVER_PULL_MODELS_ENABLED=false OLLAMA_SERVER_LOAD_MODELS_ENABLED=false ``` #### 使用未验证组织的 OpenAI 对于有权访问最新推理模型(o1、o3、o4-mini)的未验证组织的 OpenAI 帐户,您需要使用自定义配置。 要将 OpenAI 与未验证的组织帐户一起使用,请按如下方式配置您的 `.env` 文件: ``` LLM_SERVER_URL=https://api.openai.com/v1 LLM_SERVER_KEY=your_openai_api_key LLM_SERVER_MODEL= # Leave empty, models are specified in config LLM_SERVER_CONFIG_PATH=/opt/pentagi/conf/custom-openai.provider.yml LLM_SERVER_LEGACY_REASONING=true # Required for OpenAI reasoning format ``` 此配置使用预构建的 `custom-openai.provider.yml` 文件,该文件将所有智能体类型映射到未验证组织可用的模型,使用 `o3-mini` 代替 `o1`、`o3` 和 `o4-mini` 等模型。 您可以使用以下命令测试此配置: ``` # 使用自定义 OpenAI 配置测试未经验证的账户 docker run --rm \ -v $(pwd)/.env:/opt/pentagi/.env \ vxcontrol/pentagi /opt/pentagi/bin/ctester -config /opt/pentagi/conf/custom-openai.provider.yml ``` #### 使用 LiteLLM Proxy 当使用 LiteLLM 代理访问各种 LLM 提供商时,模型名称带有提供商名称前缀(例如 `moonshot/kimi-2.5` 而不是 `kimi-2.5`)。要将相同的提供商配置文件与直接 API 访问和 LiteLLM 代理一起使用,请设置 `LLM_SERVER_PROVIDER` 变量: ``` # 直接访问 Moonshot API LLM_SERVER_URL=https://api.moonshot.ai/v1 LLM_SERVER_KEY=your_moonshot_api_key LLM_SERVER_CONFIG_PATH=/opt/pentagi/conf/moonshot.provider.yml LLM_SERVER_PROVIDER= # Empty for direct access # 通过 LiteLLM 代理访问 LLM_SERVER_URL=http://litellm-proxy:4000 LLM_SERVER_KEY=your_litellm_api_key LLM_SERVER_CONFIG_PATH=/opt/pentagi/conf/moonshot.provider.yml LLM_SERVER_PROVIDER=moonshot # Provider prefix for LiteLLM ``` 使用 `LLM_SERVER_PROVIDER=moonshot`,系统会自动为配置文件中的所有模型名称添加 `moonshot/` 前缀,使其与 LiteLLM 的模型命名约定兼容。 **LiteLLM 支持的提供商名称:** - `openai` - 通过 LiteLLM 访问 OpenAI 模型 - `anthropic` - 通过 LiteLLM 访问 Anthropic/Claude 模型 - `gemini` - 通过 LiteLLM 访问 Google Gemini 模型 - `openrouter` - 用于 OpenRouter 聚合器 - `deepseek` - 用于 DeepSeek 模型 - `deepinfra` - 用于 DeepInfra 托管 - `moonshot` - 用于 Moonshot AI (Kimi) - 您的 LiteLLM 实例中配置的任何其他提供商名称 这种方法允许您: - 对直接和代理访问使用相同的配置文件 - 在不修改配置文件的情况下在提供商之间切换 - 轻松使用 LiteLLM 测试不同的路由策略 #### 在生产环境中运行测试 如果您已经有一个正在运行的 PentAGI 容器并想测试当前配置: ``` # 使用当前环境变量在现有容器中运行 ctester docker exec -it pentagi /opt/pentagi/bin/ctester -verbose # 以确定性顺序测试特定 agent 类型 docker exec -it pentagi /opt/pentagi/bin/ctester -agents simple,primary_agent,pentester -groups basic,knowledge -verbose # 在容器内生成报告文件 docker exec -it pentagi /opt/pentagi/bin/ctester -report /opt/pentagi/data/agent-test-report.md # 从主机访问报告 docker cp pentagi:/opt/pentagi/data/agent-test-report.md ./ ``` ### 命令行选项 该实用程序接受几个选项: - `-env ` - 环境文件的路径(默认:`.env`) - `-type ` - 提供商类型:`custom`、`openai`、`anthropic`、`ollama`、`bedrock`、`gemini`(默认:`custom`) - `-config ` - 自定义提供商配置的路径(默认:来自 `LLM_SERVER_CONFIG_PATH` 环境变量) - `-tests ` - 自定义测试 YAML 文件的路径(可选) - `-report ` - 写入报告文件的路径(可选) - `-agents ` - 要测试的智能体类型的逗号分隔列表(默认:`all`) - `-groups ` - 要运行的测试组的逗号分隔列表(默认:`all`) - `-verbose` - 启用详细输出,包含每个智能体的详细测试结果 ### 可用的智能体类型 智能体按以下确定性顺序进行测试: 1. **simple** - 基本补全任务 2. **simple_json** - JSON 结构化响应 3. **primary_agent** - 主要推理智能体 4. **assistant** - 交互式助手模式 5. **generator** - 内容生成 6. **refiner** - 内容优化和改进 7. **adviser** - 专家建议和咨询 8. **reflector** - 自我反思和分析 9. **searcher** - 信息收集和搜索 10. **enricher** - 数据丰富和扩展 11. **coder** - 代码生成和分析 12. **installer** - 安装和设置任务 13. **pentester** - 渗透测试和安全评估 ### 可用的测试组 - **basic** - 基本补全和提示响应测试 - **advanced** - 复杂推理和函数调用测试 - **json** - JSON 格式验证和结构测试(专为 `simple_json` 智能体设计) - **knowledge** - 特定领域的网络安全和渗透测试知识测试 ### 提供商配置示例 提供商配置定义了用于不同智能体类型的模型: ``` simple: model: "provider/model-name" temperature: 0.7 top_p: 0.95 n: 1 max_tokens: 4000 simple_json: model: "provider/model-name" temperature: 0.7 top_p: 1.0 n: 1 max_tokens: 4000 json: true # ... 其他 agent 类型 ... ``` ### 优化工作流程 1. **创建基线**:使用默认配置运行测试以建立基准性能 2. **分析特定于智能体的性能**:查看确定性的智能体顺序以识别表现不佳的智能体 - 使用提供商特定的配置为每种智能体类型试验不同的模型 4. **关注领域知识**:特别关注网络安全专业知识的知识组测试 5. **验证函数调用**:确保关键智能体类型的基于工具的测试一致通过 6. **比较结果**:在所有测试组中寻找最佳成功率和性能 7. **部署最佳配置**:在具有优化设置的生产环境中使用 此工具有助于确保您的 AI 智能体为其特定任务使用最有效的模型,在优化成本的同时提高可靠性。 ## 🧮 Embedding 配置和测试 PentAGI 使用向量 Embedding 进行语义搜索、知识存储和记忆管理。系统支持多种 Embedding 提供商,可以根据您的需求和偏好进行配置。 ### 支持的 Embedding 提供商 PentAGI 支持以下 Embedding 提供商: - **OpenAI** (默认):使用 OpenAI 的文本 Embedding 模型 - **Ollama**:通过 Ollama 的本地 Embedding 模型 - **Mistral**:Mistral AI 的 Embedding 模型 - **Jina**:Jina AI 的 Embedding 服务 - **HuggingFace**:来自 HuggingFace 的模型 - **GoogleAI**:Google 的 Embedding 模型 - **VoyageAI**:VoyageAI 的 Embedding 模型
Embedding 提供商配置 (点击展开) ### 环境变量 要配置 Embedding 提供商,请在 `.env` 文件中设置以下环境变量: ``` # 主 embedding 配置 EMBEDDING_PROVIDER=openai # Provider type (openai, ollama, mistral, jina, huggingface, googleai, voyageai) EMBEDDING_MODEL=text-embedding-3-small # Model name to use EMBEDDING_URL= # Optional custom API endpoint EMBEDDING_KEY= # API key for the provider (if required) EMBEDDING_BATCH_SIZE=100 # Number of documents to process in a batch EMBEDDING_STRIP_NEW_LINES=true # Whether to remove new lines from text before embedding # 高级设置 PROXY_URL= # Optional proxy for all API calls # SSL/TLS 证书配置(用于与 LLM 后端和工具服务器的外部通信) EXTERNAL_SSL_CA_PATH= # Path to custom CA certificate file (PEM format) inside the container # Must point to /opt/pentagi/ssl/ directory (e.g., /opt/pentagi/ssl/ca-bundle.pem) EXTERNAL_SSL_INSECURE=false # Skip certificate verification (use only for testing) ```
如何添加自定义 CA 证书 (点击展开) 如果您看到此错误:`tls: failed to verify certificate: x509: certificate signed by unknown authority` **步骤 1:** 获取 PEM 格式的 CA 证书包(可以包含多个证书) **步骤 2:** 将文件放在主机上的 SSL 目录中: ``` # 默认位置(如果未设置 PENTAGI_SSL_DIR) cp ca-bundle.pem ./pentagi-ssl/ # 或自定义位置(如果在 docker-compose.yml 中使用 PENTAGI_SSL_DIR) cp ca-bundle.pem /path/to/your/ssl/dir/ ``` **步骤 3:** 在 `.env` 文件中设置路径(路径必须在容器内): ``` # 卷 pentagi-ssl 挂载到容器内的 /opt/pentagi/ssl EXTERNAL_SSL_CA_PATH=/opt/pentagi/ssl/ca-bundle.pem EXTERNAL_SSL_INSECURE=false ``` **步骤 4:** 重启 PentAGI: ``` docker compose restart pentagi ``` **注意:** - `pentagi-ssl` 卷挂载到容器内的 `/opt/pentagi/ssl` - 您可以使用 docker-compose.yml 中的 `PENTAGI_SSL_DIR` 变量更改主机目录 - 文件在一个 PEM 文件中支持多个证书和中间 CA - 仅将 `EXTERNAL_SSL_INSECURE=true` 用于测试(生产环境不推荐)
特定于提供商的限制 每个提供商都有特定的限制和支持的功能: - **OpenAI**:支持所有配置选项 - **Ollama**:不支持 `EMBEDDING_KEY`,因为它使用本地模型 - **Mistral**:不支持 `EMBEDDING_MODEL` 或自定义 HTTP 客户端 - **Jina**:不支持自定义 HTTP 客户端 - **HuggingFace**:需要 `EMBEDDING_KEY` 并支持所有其他选项 - **GoogleAI**:不支持 `EMBEDDING_URL`,需要 `EMBEDDING_KEY` - **VoyageAI**:支持所有配置选项 如果未指定 `EMBEDDING_URL` 和 `EMBEDDING_KEY`,系统将尝试使用相应的 LLM 提供商设置(例如,当 `EMBEDDING_PROVIDER=openai` 时使用 `OPEN_AI_KEY`)。 ### 为什么一致的 Embedding 提供商很重要 始终如一地使用相同的 Embedding 提供商至关重要,因为: 1. **向量兼容性**:不同的提供商生成具有不同维度和数学属性的向量 2. **语义一致性**:更换提供商可能会破坏以前嵌入的文档之间的语义相似性 3. **记忆损坏**:混合 Embedding 可能会导致搜索结果不佳和知识库功能损坏 如果您更改 Embedding 提供商,则应刷新并重新索引整个知识库(请参阅下面的 `etester` 实用程序)。
### Embedding 测试实用程序 PentAGI 包含一个专门的 `etester` 实用程序,用于测试、管理和调试 Embedding 功能。此工具对于诊断和解决与向量 Embedding 和知识存储相关的问题至关重要。
Etester 命令 (点击展开) ``` # 测试 embedding provider 和数据库连接 cd backend go run cmd/etester/main.go test -verbose # 显示有关 embedding 数据库的统计信息 go run cmd/etester/main.go info # 删除 embedding 数据库中的所有文档(请谨慎使用!) go run cmd/etester/main.go flush # 重新计算所有文档的 embeddings(在更改 provider 之后) go run cmd/etester/main.go reindex # 在 embedding 数据库中搜索文档 go run cmd/etester/main.go search -query "How to install PostgreSQL" -limit 5 ``` ### 使用 Docker 如果您在 Docker 中运行 PentAGI,则可以在容器内使用 etester: ``` # 测试 embedding provider docker exec -it pentagi /opt/pentagi/bin/etester test # 显示详细的数据库信息 docker exec -it pentagi /opt/pentagi/bin/etester info -verbose ``` ### 高级搜索选项 `search` 命令支持各种过滤器以缩小结果范围: ``` # 按文档类型筛选 docker exec -it pentagi /opt/pentagi/bin/etester search -query "Security vulnerability" -doc_type guide -threshold 0.8 # 按 flow ID 筛选 docker exec -it pentagi /opt/pentagi/bin/etester search -query "Code examples" -doc_type code -flow_id 42 # 所有可用的搜索选项 docker exec -it pentagi /opt/pentagi/bin/etester search -help ``` 可用的搜索参数: - `-query STRING`:搜索查询文本(必需) - `-doc_type STRING`:按文档类型过滤 - `-flow_id NUMBER`:按 Flow ID 过滤(正数) - `-answer_type STRING`:按答案类型过滤 - `-guide_type STRING`:按指南类型过滤 - `-limit NUMBER`:最大结果数(默认:3) - `-threshold NUMBER`:相似度阈值(0.0-1.0,默认:0.7) ### 常见故障排除场景 1. **更改 Embedding 提供商后**:始终运行 `flush` 或 `reindex` 以确保一致性 2. **搜索结果不佳**:尝试调整相似度阈值或检查 Embedding 是否正确生成 3. **数据库连接问题**:验证 PostgreSQL 是否正在运行并安装了 pgvector 扩展 4. **缺少 API 密钥**:检查您选择的 Embedding 提供商的环境变量
## 🔍 使用 ftester 进行功能测试 PentAGI 包含一个名为 `ftester` 的多功能实用程序,用于调试、测试和开发特定功能和 AI 智能体行为。虽然 `ctester` 侧重于测试 LLM 模型能力,但 `ftester` 允许您在精确控制执行上下文的情况下直接调用单个系统功能和 AI 智能体组件。 ### 关键功能 - **直接函数访问**:无需运行整个系统即可测试单个函数 - **Mock 模式**:使用内置 Mock 在没有实时 PentAGI 部署的情况下测试函数 - **交互式输入**:以交互方式填充函数参数以进行探索性测试 - **详细输出**:带有格式化响应和错误的彩色编码终端输出 - **上下文感知测试**:在特定 Flow、Task 和 Subtask 的上下文中调试 AI 智能体 - **可观测性集成**:所有函数调用都记录到 Langfuse 和 Observability 栈 ### 使用模式 #### 命令行参数 使用特定函数和参数直接从命令行运行 ftester: ``` # 使用 mock 模式的基本用法 cd backend go run cmd/ftester/main.go [function_name] -[arg1] [value1] -[arg2] [value2] # 示例:在 mock 模式下测试终端命令 go run cmd/ftester/main.go terminal -command "ls -la" -message "List files" # 使用真实 flow 上下文 go run cmd/ftester/main.go -flow 123 terminal -command "whoami" -message "Check user" # 在特定 task/subtask 上下文中测试 AI agent go run cmd/ftester/main.go -flow 123 -task 456 -subtask 789 pentester -message "Find vulnerabilities" ``` #### 交互模式 不带参数运行 ftester 以获得引导式交互体验: ``` # 启动交互模式 go run cmd/ftester/main.go [function_name] # 例如,交互式填写 browser 工具参数 go run cmd/ftester/main.go browser ```
可用的函数 (点击展开) ### 环境函数 - **terminal**:在容器中执行命令并返回输出 - **file**:在容器中执行文件操作(读取、写入、列出) ### 搜索函数 - **browser**:访问网站并截取屏幕截图 - **google**:使用 Google Custom Search 搜索网络 - **duckduckgo**:使用 DuckDuckGo 搜索网络 - **tavily**:使用 Tavily AI 搜索引擎进行搜索 - **traversaal**:使用 Traversaal AI 搜索引擎进行搜索 - **perplexity**:使用 Perplexity AI 进行搜索 - **sploitus**:搜索安全漏洞利用、漏洞 (CVE) 和渗透测试工具 - **searxng**:使用 Searxng 元搜索引擎进行搜索(聚合来自多个引擎的结果) ### 向量数据库函数 - **search_in_memory**:在向量数据库中搜索信息 - **search_guide**:在向量数据库中查找指南文档 - **search_answer**:在向量数据库中查找问题的答案 - **search_code**:在向量数据库中查找代码示例 ### AI 智能体函数 - **advice**:从 AI 智能体获取专家建议 - **coder**:请求代码生成或修改 - **maintenance**:运行系统维护任务 - **memorist**:在向量数据库中存储和组织信息 - **pentester**:执行安全测试和漏洞分析 - **search**:跨多个源的复杂搜索 ### 实用函数 - **describe**:显示关于 Flow、Task 和 Subtask 的信息
调试 Flow 上下文 (点击展开) `describe` 函数提供有关 Flow 中 Task 和 Subtask 的详细信息。这对于在 PentAGI 遇到问题或卡住时诊断问题特别有用。 ``` # 列出系统中的所有 flow go run cmd/ftester/main.go describe # 显示特定 flow 的所有 task 和 subtask go run cmd/ftester/main.go -flow 123 describe # 显示特定 task 的详细信息 go run cmd/ftester/main.go -flow 123 -task 456 describe # 显示特定 subtask 的详细信息 go run cmd/ftester/main.go -flow 123 -task 456 -subtask 789 describe # 显示包含完整描述和结果的详细输出 go run cmd/ftester/main.go -flow 123 describe -verbose ``` 此函数允许您识别 Flow 可能卡住的确切点,并通过直接调用适当的智能体函数来恢复处理。
函数帮助和发现 (点击展开) 每个函数都有一个帮助模式,显示可用的参数: ``` # 获取特定函数的帮助 go run cmd/ftester/main.go [function_name] -help # 示例: go run cmd/ftester/main.go terminal -help go run cmd/ftester/main.go browser -help go run cmd/ftester/main.go describe -help ``` 您也可以不带参数运行 ftester 以查看所有可用函数的列表: ``` go run cmd/ftester/main.go ```
输出格式 (点击展开) `ftester` 实用程序使用彩色编码输出以简化解释: - **蓝色标题**:章节标题和键名 - **青色 [INFO]**:一般信息消息 - **绿色 [SUCCESS]**:成功的操作 - **红色 [ERROR]**:错误消息 - **黄色 [WARNING]**:警告消息 - **黄色 [MOCK]**:指示 Mock 模式操作 - **洋红色值**:函数参数和结果 JSON 和 Markdown 响应会自动格式化以提高可读性。
高级使用场景 (点击展开) ### 调试卡住的 AI Flow 当 PentAGI 在 Flow 中卡住时: 1. 通过 UI 暂停 Flow 2. 使用 `describe` 识别当前的 Task 和 Subtask 3. 使用相同的 task/subtask ID 直接调用智能体函数 4. 检查详细输出以识别问题 5. 根据需要恢复 Flow 或手动干预 ### 测试环境变量 验证 API 密钥和外部服务配置是否正确: ``` # 测试 Google search API 配置 go run cmd/ftester/main.go google -query "pentesting tools" # 测试对外部网站的 browser 访问 go run cmd/ftester/main.go browser -url "https://example.com" ``` ### 开发新的 AI 智能体行为 开发新的提示模板或智能体行为时: 1. 在 UI 中创建测试 Flow 2. 使用 ftester 直接用不同的提示调用智能体 3. 观察响应并相应地调整提示 4. 检查 Langfuse 以获取所有函数调用的详细跟踪 ### 验证 Docker 容器设置 确保容器配置正确: ``` go run cmd/ftester/main.go -flow 123 terminal -command "env | grep -i proxy" -message "Check proxy settings" ```
Docker 容器使用 (点击展开) 如果您在 Docker 中运行 PentAGI,则可以在容器内使用 ftester: ``` # 在运行中的 PentAGI 容器内运行 ftester docker exec -it pentagi /opt/pentagi/bin/ftester [arguments] # 示例: docker exec -it pentagi /opt/pentagi/bin/ftester -flow 123 describe docker exec -it pentagi /opt/pentagi/bin/ftester -flow 123 terminal -command "ps aux" -message "List processes" ``` 这对于您没有本地开发环境的生产部署特别有用。
与可观测性工具集成 (点击展开) 通过 ftester 进行的所有函数调用都记录到: 1. **Langfuse**:捕获整个 AI 智能体交互链,包括提示、响应和函数调用 2. **OpenTelemetry**:记录用于系统性能分析的指标、跟踪和日志 3. **终端输出**:提供有关函数执行的即时反馈 要访问详细日志: - 检查 Langfuse UI 以获取 AI 智能体跟踪(通常在 `http://localhost:4000`) - 使用 Grafana 仪表板获取系统指标(通常在 `http://localhost:3000`) - 检查终端输出以获取即时函数结果和错误
### 命令行选项 主实用程序接受几个选项: - `-env ` - 环境文件的路径(可选,默认:`.env`) - `-provider ` - 要使用的提供商类型(默认:`custom`,选项:`openai`、`anthropic`、`ollama`、`bedrock`、`gemini`、`custom`) - `-flow ` - 用于测试的 Flow ID(0 表示使用 Mock,默认:`0`) - `-task ` - 用于智能体上下文的 Task ID(可选) - `-subtask ` - 用于智能体上下文的 Subtask ID(可选) 特定于函数的参数在函数名称后使用 `-name value` 格式传递。 ## 🏗️ 构建 ### 构建 Docker 镜像 Docker 构建过程自动嵌入 git 标签中的版本信息。要正确为您的构建设置版本,请使用提供的脚本: #### Linux/macOS ``` # 加载版本变量 source ./scripts/version.sh # 标准构建 docker build \ --build-arg PACKAGE_VER=$PACKAGE_VER \ --build-arg PACKAGE_REV=$PACKAGE_REV \ -t pentagi:$PACKAGE_VER . # 多平台构建 docker buildx build \ --platform linux/amd64,linux/arm64 \ --build-arg PACKAGE_VER=$PACKAGE_VER \ --build-arg PACKAGE_REV=$PACKAGE_REV \ -t pentagi:$PACKAGE_VER . # 构建并推送 docker buildx build \ --platform linux/amd64,linux/arm64 \ --build-arg PACKAGE_VER=$PACKAGE_VER \ --build-arg PACKAGE_REV=$PACKAGE_REV \ -t myregistry/pentagi:$PACKAGE_VER \ --push . ``` #### Windows (PowerShell) ``` # 加载版本变量 . .\scripts\version.ps1 # 标准构建 docker build ` --build-arg PACKAGE_VER=$env:PACKAGE_VER ` --build-arg PACKAGE_REV=$env:PACKAGE_REV ` -t pentagi:$env:PACKAGE_VER . # 多平台构建 docker buildx build ` --platform linux/amd64,linux/arm64 ` --build-arg PACKAGE_VER=$env:PACKAGE_VER ` --build-arg PACKAGE_REV=$env:PACKAGE_REV ` -t pentagi:$env:PACKAGE_VER . ``` #### 无版本快速构建 对于没有版本跟踪的开发构建: ``` docker build -t pentagi:dev . ``` ## 👏 致谢 本项目得益于以下研究和开发: - [Emerging Architectures for LLM Applications](https://lilianweng.github.io/posts/2023-06-23-agent) - [A Survey of Autonomous LLM Agents](https://arxiv.org/abs/2403.08299) ## 📄 许可证 ### PentAGI Core 许可证 **PentAGI Core**: 根据 [MIT License](LICENSE) 授权 Copyright (c) 2025 PentAGI Development Team ### VXControl Cloud SDK 集成 **VXControl Cloud SDK Integration**: 此仓库在**特殊许可例外**下集成了 [VXControl Cloud SDK](https://github.com/vxcontrol/cloud),该例外**仅**适用于官方 PentAGI 项目。 #### ✅ 官方 PentAGI 项目 - 此官方仓库:`https://github.com/vxcontrol/pentagi` - VXControl LLC 分发的官方版本 - 根据 VXControl LLC 的直接授权使用的代码 #### ⚠️ Fork 和第三方使用的重要提示 如果您 Fork 本项目或创建衍生作品,VXControl SDK 组件将受 **AGPL-3.0** 许可证条款约束。您必须: 1. **移除 VXControl SDK 集成** 2. **开源您的整个应用程序**(遵守 AGPL-3.0 copyleft 条款) 3. **从 VXControl LLC 获取商业许可证** #### 商业许可 有关在专有应用程序中商业使用 VXControl Cloud SDK,请联系: - **Email**: info@vxcontrol.com - **Subject**: "VXControl Cloud SDK Commercial License"
标签:AGI, CISA项目, Cybersecurity, DLL 劫持, Docker容器, EVTX分析, EVTX分析, LLM智能体, Penetration Testing, PE 加载器, Python, Red Teaming, 人工智能, 大语言模型, 密码管理, 恶意样本开发, 插件系统, 攻击面发现, 攻防模拟, 无后门, 日志审计, 测试用例, 用户模式Hook绕过, 网络安全, 自主代理, 自动化攻防, 请求拦截, 防御绕过, 隐私保护