🚀 PentAGI:AI 驅動的滲透測試利器,新手也能輕鬆上手!
身為一位台灣的資訊安全愛好者,你是否也曾對滲透測試感到既嚮往又有點卻步?複雜的工具、繁瑣的步驟,常常讓人望而卻步。今天要介紹的 PentAGI 是一個令人興奮的工具,它利用 AI 的力量,將滲透測試自動化,讓你在安全的環境下,也能輕鬆體驗駭客的快感! 這篇文章將針對台灣讀者,深入淺出地介紹 PentAGI 的核心概念、功能,以及如何開始使用它。 讓我們一起探索這個 AI 滲透測試的未來吧!
🔍 什麼是 PentAGI?
PentAGI 全名為 Penetration testing Artificial General Intelligence, 簡單來說,它是一個利用 AI 執行滲透測試的工具。 想像一下,你不需要精通所有滲透測試的技巧,只需要告訴 PentAGI 你想測試的目標,它就能自動執行一系列的步驟,像是資訊收集、漏洞掃描、漏洞利用,最後生成一份詳細的報告。 這對於資訊安全從業人員、研究人員,甚至是剛入門的初學者來說,都是一個非常強大的工具。
✨ PentAGI 的特色功能
PentAGI 提供了許多令人驚豔的功能,讓它在眾多滲透測試工具中脫穎而出:
- 🛡️ 安全隔離:所有操作都在沙盒化的 Docker 環境中執行,確保安全和隔離,避免對你的系統造成任何潛在的風險。這意味著 PentAGI 就像一個安全的遊樂場,你在裡面做任何事,都不會影響到外面的世界。
- 🤖 全自動化:由 AI 驅動的代理人(Agent)自動決定和執行滲透測試的步驟,你只需要專注於結果分析即可。 想像一下,你就像一位指揮官,指揮著一群 AI 士兵,在戰場上自動作戰。
- 🔬 專業滲透測試工具:內建超過 20 種專業的安全工具,例如 nmap(網路掃描器)、Metasploit(滲透測試框架)、sqlmap(SQL 注入工具)等等, 幾乎涵蓋了所有滲透測試所需的工具,省去了你自行配置的麻煩。
- 🧠 智慧記憶系統:長時間儲存測試結果和成功的方法,以便日後使用。 就像一位經驗豐富的駭客,PentAGI 會不斷學習和進化,變得越來越聰明。
- 📚 知識圖譜整合:利用 Neo4j 建立 Graphiti 知識圖譜,追蹤语义關係並增强上下文理解。這讓 PentAGI 能夠更深入地了解滲透測試的脈絡。
- 🔍 網路情報收集:內建瀏覽器 (使用 scraper),從網路來源收集最新資訊。 就像一個情報收集員,PentAGI 會持續從網路上蒐集最新的資訊,幫助你更有效地進行滲透測試。
- 🔎 整合外部搜尋系統:整合了多個進階的搜尋 API,包含 Tavily、Traversaal、Perplexity、DuckDuckGo、Google Custom Search、Sploitus Search 以及 Searxng,可以進行全面的資訊收集。
- 👥 專家團隊:透過專業的 AI 代理人,進行研究、開發和基礎設施任務。 你可以將不同的任務分配給不同的 AI 代理人,就像擁有一個團隊一樣。
- 📊 全面監控:詳細的日誌記錄和與 Grafana/Prometheus 的整合,可以即時觀察系統。
- 📝 詳細報告:生成包含利用指南的完整漏洞報告。 報告會詳細說明發現的漏洞,以及如何利用這些漏洞。
- 📦 智慧容器管理:根據特定任務的需求,自動選擇 Docker 镜像。
- 📱 現代化介面:乾淨直觀的 Web UI,用於系統管理和監控。
- 🔌 全面 API:提供功能齊全的 REST 和 GraphQL API, 帶有 Bearer token 驗證,以便自動化和整合。
- 💾 持續性儲存:所有指令和輸出都儲存在 PostgreSQL,並使用 pgvector 擴充功能。
- 🎯 可擴展架構:基於微服務的設計,支援水平擴展。
- 🏠 自託管解決方案:完全控制你的部署和數據。
- 🔑 彈性驗證:支援多種 LLM 供應商(OpenAI、Anthropic、Ollama、AWS Bedrock、Google AI/Gemini、Deep Infra、OpenRouter、DeepSeek)、Moonshot 及自定義配置。
- 🔐 API Token 驗證:安全 Bearer token 系統,用於程式碼存取 REST 和 GraphQL API。
- ⚡ 快速部署:透過 Docker Compose 輕鬆設定,並提供完整的環境配置。
總之,PentAGI 就像一位經驗豐富的滲透測試專家, 能夠自動化、高效且安全地進行各種測試, 即使你是新手,也能從中學習,並快速提升你的安全技能。
🏗️ PentAGI 的架構
PentAGI 的架構設計是模組化的、可擴展的,而且非常安全。 讓我們來看看它主要的元件:
- 核心服務:
- 前端 UI:基於 React 的 Web 介面,使用 TypeScript 提供類型安全。
- 後端 API:基於 Go 的 REST 和 GraphQL API,使用 Bearer token 驗證實現程式碼存取。
- 向量儲存:使用 PostgreSQL 和 pgvector 進行语义搜尋和記憶體儲存。
- 任務佇列:非同步任務處理系統,確保操作的可靠性。
- AI 代理人:多代理人系統,具有特定角色,用於高效的測試。
- 知識圖譜:
- Graphiti:知識圖譜 API,用於语义關係追蹤和上下文理解。
- Neo4j:圖形資料庫,用於儲存和查詢實體、操作和結果之間的關係。
- 監控堆疊:
- OpenTelemetry:統一的觀測資料收集和關聯。
- Grafana:即時可視化和警報儀表板。
- VictoriaMetrics:高效能的時序資料儲存。
- Jaeger:端到端的分散式追蹤,用於除錯。
- Loki:可擴展的日誌聚合和分析。
- 分析平台:
- Langfuse:進階的 LLM 觀測和效能分析。
- ClickHouse:面向列的分析資料倉儲。
- Redis:高速快取和速率限制。
- MinIO:S3 相容的物件儲存,用於保存人工產物。
- 安全工具:
- Web Scraper:隔離的瀏覽器環境,用於安全地進行 Web 互動。
- 滲透測試工具:包含超過 20 種專業安全工具。
- 沙盒執行:所有操作都在隔離的容器中運行。
- 記憶體系統:
- 長期記憶體:知識和經驗的持久性儲存。
- 工作記憶體:當前的上下文和目標,用於當前操作。
- 情景記憶體:歷史操作和成功模式。
- 知識庫:結構化的領域專業知識和工具功能。
- 上下文管理:使用鏈總結智慧地管理不斷增長的 LLM 上下文視窗。
PentAGI 使用 Docker 容器進行隔離和簡單的部署,核心服務、監控和分析使用獨立的網路,以確保正確的安全邊界。 每個元件都設計為水平擴展,並可在生產環境中配置高可用性。
🚀 快速入門:在台灣開始使用 PentAGI
🛠️ 系統需求
- Docker 和 Docker Compose (或 Podman – 詳見 使用 Podman 執行 PentAGI)
- 至少 2 個 vCPU
- 至少 4GB RAM
- 20GB 可用硬碟空間
- 網路連線,用於下載镜像和更新
📝 使用安裝程式(推薦)
PentAGI 提供了一個互動式安裝程式,帶有基於終端的 UI,可簡化配置和部署。 安裝程式引導你完成系統檢查、LLM 供應商設定、搜尋引擎配置和安全強化。
支援平台:
* Linux:amd64 下載 | arm64 下載
* Windows:amd64 下載
* macOS:amd64 (Intel) 下載 | arm64 (M-series) 下載
快速安裝(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 socket (/var/run/docker.sock),這需要:
- 選項 1 (推薦用於生產環境): 以 root 身分執行安裝程式:
sudo ./installer - 選項 2 (開發環境): 將你的使用者新增到
docker群組,授予其存取 Docker socket 的權限:# 將你的使用者新增到 docker 群組 sudo usermod -aG docker $USER # 登出並重新登入,或立即啟用群組 newgrp docker # 驗證 Docker 存取權限 (應該在沒有 sudo 的情況下執行) docker ps⚠️ 安全注意事項: 將使用者新增到
docker群組會授予 root 等效的權限。 僅在受信任的使用者和受控環境中執行此操作。 對於生產部署,請考慮使用 rootless Docker 模式或使用 sudo 執行安裝程式。
安裝程式將:
1. 系統檢查:驗證 Docker、網路連線和系統需求
2. 環境設定:建立並配置 .env 檔案,使用最佳預設值
3. 供應商配置:設定 LLM 供應商 (OpenAI、Anthropic、Gemini、Bedrock、Ollama、自定義)
4. 搜尋引擎:配置 DuckDuckGo、Google、Tavily、Traversaal、Perplexity、Sploitus、Searxng
5. 安全強化:產生安全憑證並配置 SSL 憑證
6. 部署:使用 docker-compose 啟動 PentAGI
對於生產環境和增強安全性:
對於生產部署或安全敏感的環境,我們強烈建議使用分散式雙節點架構,其中工作者操作在單獨的伺服器上隔離。 這可以防止在你的主系統上執行不受信任的程式碼和網路存取問題。
👉 查看詳細指南:工作者節點設定
雙節點設定提供:
* 隔離執行:工作者容器在專用硬體上執行
* 網路隔離:滲透測試的獨立網路邊界
* 安全邊界:Docker-in-Docker,具有 TLS 驗證
* OOB 攻擊支援:專用連接埠範圍,用於帶外技術
🛠️ 手動安裝
- 建立一個工作目錄或克隆儲存庫:
mkdir pentagi && cd pentagi
- 將
.env.example複製到.env,或下載它:
curl -o .env https://raw.githubusercontent.com/vxcontrol/pentagi/master/.env.example
- 建立範例檔案 (
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
- 在
.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 堆疊使用)
NEO4J_USER=neo4j
NEO4J_DATABASE=neo4j
NEO4J_PASSWORD=devpassword
NEO4J_URI=bolt://neo4j:7687
# 助理配置
ASSISTANT_USE_AGENTS=false # 建立新助理時的代理人使用預設值
- 如果要在 VSCode 或其他 IDE 中使用
.env檔案作為 envFile 選項,請從.env檔案中刪除所有內嵌註解:
perl -i -pe 's/\s+#.*$//' .env
- 執行 PentAGI 堆疊:
curl -O https://raw.githubusercontent.com/vxcontrol/pentagi/master/docker-compose.yml
docker compose up -d
訪問 localhost:8443 存取 PentAGI Web UI(預設為 admin@pentagi.com / admin)
[!NOTE]
如果您遇到關於pentagi-network或observability-network或langfuse-network的錯誤,您需要先運行docker-compose.yml來建立這些網路,然後運行docker-compose-langfuse.yml、docker-compose-graphiti.yml和docker-compose-observability.yml以使用 Langfuse、Graphiti 和 Observability 服務。你必須至少設定一個 Language Model 供應商 (OpenAI、Anthropic、Gemini、AWS Bedrock 或 Ollama) 才能使用 PentAGI。 AWS Bedrock 提供企業級存取多個領先 AI 公司的基礎模型,而 Ollama 如果你有足夠的計算資源,則提供零成本的本地推論。 額外的搜尋引擎 API 金鑰是可選的,但建議用於獲得更好的結果。
LLM_SERVER_*環境變數是實驗性功能,將在未來更改。 目前您可以使用它們來指定自訂 LLM 伺服器 URL 和所有代理人類型的一個模型。
PROXY_URL是所有 LLM 供應商和外部搜尋系統的全域代理 URL。 您可以使用它來與外部網路隔離。
docker-compose.yml檔案以 root 使用者身分執行 PentAGI 服務,因為它需要存取 docker.sock 才能進行容器管理。 如果您使用 TCP/IP 網路連線到 Docker 而不是 socket 檔案,您可以移除 root 權限,並使用預設的pentagi使用者來提高安全性。
🌐 從外部網路存取 PentAGI
預設情況下,PentAGI 繫結到 127.0.0.1 (僅限 localhost) 以確保安全。 若要從網路上的其他機器存取 PentAGI,您需要設定外部存取。
設定步驟
- 更新
.env檔案,其中包含伺服器的 IP 位址:
# 網路繫結 - 允許外部連線
PENTAGI_LISTEN_IP=0.0.0.0
PENTAGI_LISTEN_PORT=8443
# 公開 URL - 使用您的實際伺服器 IP 或主機名稱
# 將 192.168.1.100 替換為您的伺服器 IP 位址
PUBLIC_URL=https://192.168.1.100:8443
# CORS 來源 - 列出所有將存取 PentAGI 的 URL
# 包含 localhost 用於本機存取,以及您的伺服器 IP 用於外部存取
CORS_ORIGINS=https://localhost:8443,https://192.168.1.100:8443
[!IMPORTANT]
* 將192.168.1.100替換為您的實際伺服器 IP 位址
* 不要 在PUBLIC_URL或CORS_ORIGINS中使用0.0.0.0– 使用實際的 IP 位址
* 在CORS_ORIGINS中包含 localhost 和您的伺服器 IP,以提高靈活性
- 重新建立容器 以套用變更:
docker compose down
docker compose up -d --force-recreate
- 驗證連接埠繫結:
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"
然後再次重新建立容器。
- 設定防火牆 以允許在連接埠 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
- 存取 PentAGI:
- 本機存取: `https://localhost:8443`
- 網路存取: `https://your-server-ip:8443`
[!NOTE]
您需要在瀏覽器中接受自簽名 SSL 憑證警告,才能透過 IP 位址存取。
🐳 使用 Podman 執行 PentAGI
PentAGI 完全支援 Podman 作為 Docker 的替代方案。 但是,當使用 Podman 處於 rootless 模式時,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 # 從 443 更改為 3000
ports:
- "${SCRAPER_LISTEN_IP:-127.0.0.1}:${SCRAPER_LISTEN_PORT:-9443}:3000" # 映射到連接埠 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
[!IMPORTANT]
Podman 的主要變更:
* 對於SCRAPER_PRIVATE_URL,使用 HTTP 而不是 HTTPS
* 使用連接埠 3000 而不是 443
* 將內部expose更改為3000/tcp
* 更新連接埠映射以將目標設定為3000而不是443
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 允許您配置助理的預設行為:
| 變數 | 預設值 | 說明 |
|---|---|---|
ASSISTANT_USE_AGENTS |
false |
建立新助理時,控制代理人使用的預設值 |
ASSISTANT_USE_AGENTS 設定會影響在 UI 中建立新助理時,「使用代理人」切換的初始狀態:
* false (預設):預設會停用代理人委派來建立新助理
* true:預設會啟用代理人委派來建立新助理
請注意,使用者始終可以在建立或編輯助理時,透過在 UI 中切換「使用代理人」按鈕來覆寫此設定。 此環境變數只控制初始預設狀態。
🔑 API 存取
PentAGI 透過 REST 和 GraphQL API 提供全面的程式碼存取, 讓你可以將滲透測試工作流程整合到你的自動化管線、CI/CD 流程和自訂應用程式中。
🔑 產生 API Token
API Token 是透過 PentAGI Web 介面管理的:
- 在 Web UI 中導航到 Settings → API Tokens
- 按一下 Create Token 以產生新的 API Token
- 配置 Token 屬性:
- Name (可選):Token 的描述性名稱
- Expiration Date:Token 過期的時間 (最少 1 分鐘,最多 3 年)
- 按一下 Create,然後立即複製 Token – 出於安全原因,它只會顯示一次
- 在你的 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
在 `https://your-pentagi-instance:8443/api/v1/graphql/playground` 存取 GraphQL Playground
- 按一下底部的 HTTP Headers 索引標籤
- 新增你的授權標頭:
json
{
"Authorization": "Bearer YOUR_API_TOKEN"
} - 互動式探索 schema、執行查詢和測試變更
Swagger UI
在 `https://your-pentagi-instance:8443/api/v1/swagger/index.html` 存取 REST API 文件
- 按一下 Authorize 按鈕
- 以以下格式輸入你的 Token:
Bearer YOUR_API_TOKEN - 按一下 Authorize 以套用
- 直接從 Swagger UI 測試端點
⚙️ 產生 API Client
你可以使用 PentAGI 包含的 schema 檔案,為你喜歡的程式語言產生型別安全的 API Client:
GraphQL Clients
GraphQL schema 可在以下位置取得:
* Web UI:導航到設定以下載 schema.graphqls
* 直接檔案:儲存庫中的 backend/pkg/graph/schema.graphqls
使用下列工具產生 Client:
* GraphQL Code Generator (JavaScript/TypeScript):https://the-guild.dev/graphql/codegen
* genqlient (Go):https://github.com/Khan/genqlient
* Apollo iOS (Swift):https://www.apollographql.com/docs/ios
REST API Clients
OpenAPI 規格可在以下位置取得:
* Swagger JSON:https://your-pentagi-instance:8443/api/v1/swagger/doc.json`backend/pkg/server/docs/swagger.yaml` 取得
* **Swagger YAML**:可在
使用下列工具產生 Client:
* OpenAPI Generator:https://openapi-generator.tech
bash
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
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
npx swagger-typescript-api \ -p https://your-pentagi-instance:8443/api/v1/swagger/doc.json \ -o ./src/api \ -n pentagi-api.ts
🔑 API 使用範例
建立新的流程 (GraphQL)
mutation CreateFlow {
createFlow(
modelProvider: "openai"
input: "Test the security of https://example.com"
) {
id
title
status
createdAt
}
}
列出流程 (REST API)
curl https://your-pentagi-instance:8443/api/v1/flows \
-H "Authorization: Bearer YOUR_API_TOKEN" \
| jq '.flows[] | {id, title, status}'
Python Client 範例
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 = client.create_flow("openai", "Scan https://example.com for vulnerabilities")
print(f"Created flow: {flow}")
# 列出所有流程
flows = client.get_flows()
print(f"Total flows: {len(flows['flows'])}")
TypeScript Client 範例
“`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<Flow[]> {
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;
}
}
// 使用方式
const client = new PentAGIClient(
‘https://your-pentagi-instance:8443’,
‘your_api_token_here’
);
// 建立新的流程
const flow = await client.
參考閱讀
https://github.comundefined