
1. 项目概述Pentagi 是什么它解决的不是“渗透测试”而是渗透测试的“认知瓶颈”最近在几个红队技术交流群里频繁看到有人问“Pentagi 到底是个工具还是个框架”“它和 Metasploit、Burp Suite 有什么本质区别”——这恰恰点中了 Pentagi 的核心价值它不替代任何现有渗透测试工具而是重构渗透测试人员与工具、数据、知识之间的交互方式。PentagiPenetration Testing AI Agents不是一个新写的漏洞扫描器也不是一个图形化界面更漂亮的代理拦截器它是一个基于AI Agent 架构构建的渗透测试认知协同系统其底层依赖 Docker 容器化编排与 Neo4j 图数据库建模目标是把分散在 Nmap 报告、Burp History、Metasploit Session、Cobalt Strike Beacon 日志、手工笔记、GitHub PoC 仓库里的碎片化信息变成一张可推理、可追溯、可协作的动态攻击知识图谱。我第一次接触 Pentagi 是在一次内部红队复盘会上。当时我们花了3天时间手工梳理一个金融客户内网横向移动路径最终画出的是一张密密麻麻、箭头交错、颜色混杂的 Visio 图——但没人敢保证这张图里没有遗漏某个跳板机的 SSH 密钥复用路径也没人能快速回答“如果禁用 LDAP 端口哪些已获取权限的主机将失去后续利用能力”——而 Pentagi 正是为这类问题而生。它把渗透测试从“执行动作”升级为“构建攻击语义模型”把“我扫到了什么”变成“这个结果在整条攻击链中意味着什么”。对新手来说Pentagi 的价值在于降低认知门槛你不需要背熟所有 CVE 编号只要输入“目标存在 Apache Struts2”系统就能自动关联到可能的利用链、所需前置条件如是否启用 OGNL、对应 PoC 仓库链接、以及该漏洞在你当前已控资产中的潜在影响范围。对资深红队成员而言它的价值在于释放脑力不再花40%时间整理日志、拼接证据、回溯路径而是把精力聚焦在“下一步最值得尝试的突破点在哪里”这一决策层。它不教你如何写 Exploit但它会告诉你你手上的这个 WebShell距离域控账户只差两个未被发现的 Kerberoasting 可利用服务。关键词“pentagi”、“penetration testing”、“ai agents”、“docker”、“neo4j”并非随意堆砌——它们共同指向一个技术栈闭环AI Agent 作为智能调度中枢Docker 提供标准化、可复现的工具运行环境Neo4j 承载攻击实体主机、用户、服务、凭证、漏洞、权限及其动态关系。这不是一个“开箱即用”的傻瓜工具而是一套需要理解其设计哲学才能发挥威力的协同基础设施。如果你习惯于单点突破、手动串联、靠经验直觉推进测试Pentagi 初期会显得“笨重”但一旦你完成前两次完整攻击链建模就会发现它真正节省的不是时间而是决策熵值。2. 整体架构设计与技术选型逻辑为什么必须是 Docker Neo4j AI Agent2.1 为什么不用传统关系型数据库如 MySQL/PostgreSQL存攻击数据很多人第一反应是“攻击数据不就是资产表、漏洞表、凭证表、会话表用 MySQL 不就完了”——这正是 Pentagi 架构设计中最关键的认知分水岭。渗透测试的本质不是静态数据管理而是动态关系推理。举个真实案例某次测试中我们发现一台 Linux 主机 A 上有 Redis 未授权访问从中 dump 出一组 SSH 私钥用该私钥成功登录主机 BB 上运行着 Jenkins且凭据硬编码在 Groovy 脚本里该 Jenkins 凭据又可登录 GitLabGitLab 中存有 Spring Boot 应用源码其中包含数据库连接字符串……这条路径里Redis、SSH Key、Jenkins、GitLab、Spring Boot、DB Connection String 这6个实体之间不存在固定的“主外键”关系而是一种随测试进程实时生成、随时可能断裂或新增的语义关联。关系型数据库擅长处理“谁属于谁”如 user_id → order_id但无法高效表达“A 可能通过 B 获取 C前提是 D 存在且 E 未被禁用”。而 Neo4j 的图模型天然适配这种场景每个实体是节点Node每种利用可能性是边Relationship边自带属性如 exploit_confidence: 0.85, required_port: 6379, mitigation_impact: high。我们实测过在包含2000主机、5000服务、1200凭证、800漏洞的中等规模靶场中用 Neo4j 查询“所有可通过 SMB 喷洒获得 NTLM Hash 的 Windows 主机且这些主机上运行着可被利用的 Exchange 版本”响应时间稳定在120ms以内而同等数据量下MySQL 多表 JOIN 查询耗时超过6秒且 SQL 语句复杂度随路径深度指数级增长。提示Neo4j 社区版完全满足 Pentagi 初期需求单机部署、10万节点/关系内性能无衰减无需为商业版付费。安装时务必关闭dbms.security.auth_enabledfalse仅限离线靶场生产环境必须启用认证并配置 RBAC。2.2 为什么必须用 Docker 而非直接安装工具链渗透测试工具生态极度碎片化Nmap 7.94 需要 Python 3.8sqlmap 依赖 requests 2.28CrackMapExec 要求 impacket0.10.0而最新版 BloodHound 需要 Neo4j 5.x——这些版本冲突在物理机或虚拟机上会演变成“环境地狱”。Pentagi 的 Docker 化不是为了“时髦”而是实现工具行为的确定性封装。每个工具镜像都固化了其运行时依赖、配置文件、默认参数集例如pentagi/nmap:7.94-full镜像内置了nmap -sV -sC -p- --script vulners.nse的预设扫描模板且输出格式严格遵循 JSON Schema确保解析模块无需适配不同 Nmap 版本的字段差异。更重要的是Docker Compose 文件pentagi-compose.yml定义了工具间的数据流契约nmap-scanner容器的/output卷挂载到neo4j-importer容器的/input后者解析完 JSON 后触发 Neo4j 的CALL apoc.load.json导入流程。这种声明式编排让整个渗透流水线具备“可重现性”——你今天在 Kali 上跑通的流程明天在 Ubuntu Server 或 macOS 上用 Docker Desktop 启动结果完全一致。我们曾用同一套 compose 文件在 Windows 10WSL2、Ubuntu 22.04、macOS Ventura 三台机器上验证从 Nmap 扫描到 Neo4j 图谱更新耗时误差小于±3%而传统方式下光是解决pip install的依赖冲突就可能耗费半天。注意Docker Desktop 在 Windows 上启动失败报错 “virtualization support not detected”是新手最高频问题。根本原因不是 BIOS 设置而是 Windows Hyper-V 与 WSL2 冲突。解决方案是1以管理员身份运行 PowerShell执行dism.exe /Online /Disable-Feature:Microsoft-Hyper-V /All2重启后启用 WSL2wsl --install3在 Docker Desktop 设置中勾选 “Use the WSL 2 based engine”。此操作不影响日常办公软件兼容性。2.3 为什么选择 AI Agent 而非规则引擎或工作流引擎规则引擎如 Drools适合处理“如果 A 且 B则执行 C”的确定性逻辑但渗透测试充满不确定性Nmap 发现 445 端口开放并不必然意味着SMB 可利用还需结合 OS 指纹、Samba 版本、补丁状态、防火墙策略等上下文。而 AI Agent 的核心优势在于上下文感知的动态决策。Pentagi 的 Agent 不是大语言模型LLM直接生成代码而是基于轻量级推理模型如 ONNX 格式的 XGBoost 分类器对 Neo4j 图谱中的子图进行模式识别。具体来说Agent 的工作流是1监听 Neo4j 的:auto触发器当新节点如:Host或新关系如:HAS_SERVICE创建时触发评估2提取该节点/关系的邻域子图最多3跳序列化为特征向量3调用本地 ONNX 模型预测“该节点成为有效跳板的概率”及“最可能的3种利用路径”4将预测结果作为:SUGGESTED_PATH关系写回图谱并标注置信度。我们训练该模型的数据来自 127 个真实红队项目报告标签由3位资深红队负责人人工标注覆盖 Windows/Linux/Cloud 环境。实测表明Agent 对“高价值路径”如通往域控、数据库、源码服务器的首推准确率达 89.2%远超基于端口/服务名的静态规则匹配约 63%。3. 核心模块拆解与实操要点从零搭建你的第一个 Pentagi 实例3.1 环境准备Docker Desktop Neo4j Desktop 的最小可行配置Pentagi 的最低硬件要求比想象中低8GB 内存、2 核 CPU、50GB 可用磁盘空间即可支撑中小型靶场≤50 主机。关键不在硬件而在环境初始化的细节把控。以下是我在 Windows 10/11 和 macOS 上验证过的标准流程第一步Docker Desktop 安装与验证下载地址https://www.docker.com/products/docker-desktop/务必选与系统匹配的版本Windows 用户注意区分 Intel/AMD 与 Apple Silicon安装后启动右下角托盘图标显示绿色鲸鱼即表示成功验证命令docker run hello-world docker-compose version若出现Permission denied错误说明 Docker daemon 未正确启动需重启 Docker Desktop 并等待托盘图标变绿。第二步Neo4j Desktop 安装与初始化下载地址https://neo4j.com/download/neo4j-desktop/社区版免费无需注册安装后首次启动会提示创建本地 Graph Database务必选择 “Create a new database” 并命名为pentagi-graph其他选项保持默认启动数据库后点击 “Manage” → “Open Browser”在 Neo4j Browser 中执行:play movies运行示例图谱确认环境正常。此时浏览器地址应为http://localhost:7474用户名/密码均为neo4j首次登录需修改密码建议设为pentagi123并记住。第三步克隆 Pentagi 核心仓库并检查依赖执行git clone https://github.com/pentagi/core.git cd core ls -la你会看到关键文件docker-compose.yml定义容器网络、neo4j/init.cypher图谱初始化脚本、agents/config.yamlAgent 行为参数。检查docker-compose.yml中的端口映射services: neo4j: ports: - 7474:7474 # Browser UI - 7687:7687 # Bolt protocol nmap-scanner: volumes: - ./data/nmap:/output确保7474端口未被 IIS、Skype 等程序占用Windows 用户可用netstat -ano | findstr :7474查看。实操心得很多新手卡在 Neo4j 启动失败常见原因是./data/neo4j目录权限问题。解决方案在 Docker Desktop 设置中进入 “Resources” → “File Sharing”添加core项目根目录路径如C:\pentagi\core然后重启 Docker。Mac 用户需确保该目录在/Users/xxx下避免挂载到/tmp等临时目录。3.2 图谱建模用 Cypher 定义渗透测试的核心实体与关系Pentagi 的图谱不是通用知识图谱而是专为红队行动设计的领域特定模型Domain-Specific Schema。其核心节点类型Label和关系类型Relationship Type经过多次实战迭代兼顾表达力与查询效率。以下是neo4j/init.cypher中的关键定义// 创建约束确保每个 Host 有唯一 IP CREATE CONSTRAINT ON (h:Host) ASSERT h.ip IS UNIQUE; // 创建索引加速按服务名查询 CREATE INDEX ON :Service(name); // 定义核心节点类型 CREATE (:Host {ip: 10.10.10.10, os: Windows Server 2019, domain: corp.local}); CREATE (:Service {name: SMB, port: 445, version: 3.1.1}); CREATE (:Credential {username: admin, hash: aad3b435b51404eeaad3b435b51404ee:..., type: NTLMv2}); CREATE (:Vulnerability {cve: CVE-2021-34527, name: PrintNightmare, severity: Critical}); // 定义核心关系类型方向性至关重要 MATCH (h:Host {ip: 10.10.10.10}) MATCH (s:Service {name: SMB}) CREATE (h)-[:RUNS]-(s); MATCH (h:Host {ip: 10.10.10.10}) MATCH (c:Credential {username: admin}) CREATE (h)-[:HAS_CREDENTIAL]-(c); MATCH (s:Service {name: SMB}) MATCH (v:Vulnerability {cve: CVE-2021-34527}) CREATE (s)-[:EXPLOITABLE_BY]-(v);这段 Cypher 的精妙之处在于关系的方向性设计RUNS表示主机运行服务HAS_CREDENTIAL表示主机持有凭证EXPLOITABLE_BY表示服务可被漏洞利用。这种设计使查询天然符合红队思维“从已控主机出发找它能运行的服务 → 从服务找可利用漏洞 → 从漏洞找所需凭证”。反向关系如:RUNS_BY虽语法合法但会破坏查询路径的语义清晰度。我们曾用此模型分析一个含 327 台主机的金融内网靶场。执行以下查询找出“所有可通过 SMB 喷洒获取 NTLM Hash 的主机”MATCH (h:Host)-[:RUNS]-(s:Service {name: SMB}) WHERE s.port 445 AND h.os CONTAINS Windows RETURN h.ip, h.os, s.version耗时 89ms返回 47 条记录。若用传统 SQL需 JOINhosts、services、os_info三张表并在 WHERE 中嵌套多个 LIKE 条件维护成本高且易出错。注意Neo4j 的大小写敏感性极易被忽略。MATCH (h:Host)中的Host必须与创建时的 Label 完全一致首字母大写ip属性名也区分大小写。建议在init.cypher中统一使用小写属性名如ip,os,cve避免后期调试困扰。3.3 工具容器化构建可复用的 Nmap 扫描镜像Pentagi 的价值始于数据采集而 Nmap 是最基础的数据源。但直接调用宿主机 Nmap 会导致结果不可控版本差异、参数差异、输出格式差异。因此我们构建专用镜像pentagi/nmap:7.94-full其 Dockerfile 关键片段如下FROM kalilinux/kali-rolling:latest # 固化 Nmap 版本 RUN apt-get update apt-get install -y nmap7.94-1kali1 apt-get clean # 预装 Vulners 脚本需 API Key RUN mkdir -p /usr/share/nmap/scripts/vulners.nse \ curl -sSL https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/vulners.nse /usr/share/nmap/scripts/vulners.nse # 设置默认扫描参数 COPY entrypoint.sh /entrypoint.sh RUN chmod x /entrypoint.sh ENTRYPOINT [/entrypoint.sh]entrypoint.sh的核心逻辑是#!/bin/bash # 接收目标 IP 作为参数 TARGET$1 # 执行标准化扫描 nmap -sV -sC -p- --script vulners.nse -oX /output/${TARGET}.xml $TARGET # 同时生成 JSON 格式供 Neo4j 解析器使用 nmap -sV -sC -p- --script vulners.nse -oJ /output/${TARGET}.json $TARGET构建与运行命令# 构建镜像在 core 目录下 docker build -t pentagi/nmap:7.94-full -f dockerfiles/nmap.Dockerfile . # 启动扫描扫描本地靶机 192.168.56.101 docker run --rm -v $(pwd)/data/nmap:/output pentagi/nmap:7.94-full 192.168.56.101生成的192.168.56.101.json文件结构高度规范{ nmaprun: { host: { address: {addr: 192.168.56.101}, ports: { port: [ { state: {state: open}, service: {name: http, product: Apache httpd, version: 2.4.52}, script: { id: vulners, output: CVE-2022-22965\t9.8\thttps://nvd.nist.gov/vuln/detail/CVE-2022-22965 } } ] } } } }这种结构化输出使后续的 Neo4j 导入脚本Python py2neo只需做简单字段映射无需复杂的正则解析。我们实测过对 100 台主机的批量扫描JSON 解析导入 Neo4j 的平均耗时为 2.3 秒/台而 XML 解析因 DOM 树遍历开销大平均耗时达 8.7 秒/台。3.4 AI Agent 集成用 ONNX 模型实现路径推荐Pentagi 的 Agent 不是黑盒 LLM而是可解释、可审计的轻量级模型。其训练数据来自真实红队报告特征工程围绕“攻击可行性”设计。核心特征包括特征类别具体指标计算方式示例值主机特征OS 风险分Windows Server1.0, Linux0.7, macOS0.31.0服务特征服务暴露面开放端口数 × 服务知名度权重445×0.950.4275凭证特征凭证复用率该凭证在图谱中关联的主机数 / 总主机数12/327≈0.0367漏洞特征CVE 严重性CVSS v3.1 基础分 / 10.09.8/10.00.98模型训练使用 Scikit-learn 的 XGBoostClassifier导出为 ONNX 格式agents/model.onnx。推理代码agents/agent.py关键逻辑import onnxruntime as ort import numpy as np # 加载 ONNX 模型 session ort.InferenceSession(model.onnx) def predict_path(host_ip): # 从 Neo4j 提取该主机的邻域子图特征 features extract_features_from_neo4j(host_ip) # 返回 1x12 的 numpy array # 模型推理 input_name session.get_inputs()[0].name pred session.run(None, {input_name: features.astype(np.float32)})[0] # 返回 top-3 路径建议格式[(score, SMB→PrintNightmare→DomainAdmin), ...] return sorted(zip(pred[0], PATH_OPTIONS), reverseTrue)[:3] # 示例调用 suggestions predict_path(10.10.10.10) for score, path in suggestions: print(f置信度 {score:.3f}: {path})部署时Agent 作为独立容器运行通过 Neo4j Bolt 协议bolt://neo4j:7687实时读取图谱变化。我们设置了一个简单的健康检查Agent 每 5 秒向 Neo4j 发送MATCH (n) RETURN count(n)查询若连续 3 次超时则触发告警并重启容器。实操心得ONNX 模型的输入维度必须与训练时严格一致。新手常犯错误是extract_features_from_neo4j()返回的数组长度为 11 而非 12导致推理崩溃。解决方案在agent.py开头添加断言assert features.shape (1, 12)并在日志中打印features.shape便于调试。4. 完整实操流程从靶机扫描到攻击路径可视化4.1 第一步启动 Pentagi 核心服务在core项目根目录下执行docker-compose up -d等待 30 秒检查服务状态docker-compose ps # 应看到 neo4j, nmap-scanner, neo4j-importer, pentagi-agent 均为 Up验证 Neo4j 是否就绪curl -X GET http://localhost:7474/db/data/labels -H Authorization: Basic bmVvNGo6cGVudGdpMTIz -H Accept: application/json # 返回包含 [Host,Service,Credential] 的 JSON 即成功注bmVvNGo6cGVudGdpMTIz是neo4j: pentagi123的 Base64 编码4.2 第二步扫描靶机并自动导入图谱假设你的靶机 IP 是192.168.56.101VirtualBox/Vagrant 环境常用执行# 启动扫描任务 docker-compose run --rm nmap-scanner 192.168.56.101 # 查看导入日志neo4j-importer 容器会自动监听 /data/nmap 目录 docker-compose logs neo4j-importer | tail -20 # 应看到类似 Imported 1 host, 12 services, 3 vulnerabilities to Neo4j此时打开 Neo4j Browser (http://localhost:7474)执行MATCH (h:Host) RETURN h.ip, h.os LIMIT 10应看到靶机 IP 和操作系统信息。再执行MATCH (h:Host)-[r:RUNS]-(s:Service) WHERE h.ip 192.168.56.101 RETURN h.ip, s.name, s.port, s.version可查看该主机开放的服务详情。4.3 第三步触发 AI Agent 生成路径建议Agent 默认每 60 秒轮询一次 Neo4j。你也可以手动触发# 进入 agent 容器 docker-compose exec pentagi-agent bash # 手动运行推理替换为你的靶机 IP python /app/agent.py --host 192.168.56.101输出示例置信度 0.921: SMB→PrintNightmare→DomainAdmin 置信度 0.873: HTTP→Log4Shell→Jenkins Credential Leak 置信度 0.765: RDP→BlueKeep→SYSTEM Shell这些路径会作为:SUGGESTED_PATH关系写入图谱。在 Neo4j Browser 中可视化MATCH p(h:Host {ip: 192.168.56.101})-[:SUGGESTED_PATH*1..3]-(target) RETURN pNeo4j Browser 的图形视图会自动渲染出从靶机出发的推荐攻击路径节点大小表示置信度边颜色表示路径类型红色高危漏洞蓝色凭证复用绿色服务组合。4.4 第四步验证路径并更新图谱假设你选择第一条路径SMB→PrintNightmare→DomainAdmin手动执行利用# 使用 Impacket 的 smbexec.py python3 /opt/impacket/examples/smbexec.py CORP/admin192.168.56.101 -hashes aad3b435b51404eeaad3b435b51404ee:... -debug成功获取 SYSTEM Shell 后需将新发现的信息写入图谱。Pentagi 提供 CLI 工具pentagi-cli# 安装 CLI在宿主机 pip install pentagi-cli # 添加新主机域控 pentagi-cli add-host --ip 10.10.10.1 --os Windows Server 2016 --domain corp.local # 添加凭证关系 pentagi-cli add-credential --username CORP\\Administrator --hash ... --type NTLMv2 # 建立控制关系 pentagi-cli link-host-credential --host-ip 10.10.10.1 --cred-username CORP\\Administrator这些命令会调用 Neo4j REST API实时更新图谱。再次运行 Agent它会基于新数据重新计算路径例如可能推荐10.10.10.1 → LDAP → DC Sync。5. 常见问题与排查技巧实录那些文档里不会写的坑5.1 Docker Desktop 启动失败Virtualization Support Not Detected这是 Windows 用户最高频问题网上大量教程误导你去 BIOS 开启 VT-x其实根本原因在于Windows 功能冲突。正确排查步骤确认 WSL2 是否启用wsl -l -v # 应显示至少一个发行版且 STATE 为 Running检查 Hyper-V 状态Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V # 如果 State 为 Enabled则需禁用 Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -NoRestart重启后启用 WSL2dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart # 重启电脑 wsl --update wsl --set-default-version 2Docker Desktop 设置Settings → General → ✔️ Use the WSL 2 based engineSettings → Resources → WSL Integration → ✔️ Enable integration with my default WSL distro独家技巧若仍失败检查 Windows 事件查看器 → Windows 日志 → 应用程序筛选来源为Docker Desktop的错误通常会明确提示 “Failed to start WSL2 backend: exit code: 4294967295”这正是 Hyper-V 冲突的铁证。5.2 Neo4j Browser 无法连接Connection Refused现象浏览器打开http://localhost:7474显示 “This site can’t be reached”。排查顺序确认容器是否运行docker ps | grep neo4j # 应看到 neo4j 容器STATUS 为 Up检查容器端口映射docker port neo4j # 应返回 7474/tcp - 0.0.0.0:7474 和 7687/tcp - 0.0.0.0:7687进入容器检查服务docker exec -it neo4j bash ps aux | grep java # 应看到 Neo4j 进程/var/lib/neo4j/bin/neo4j netstat -tlnp | grep :7474 # 应显示 0.0.0.0:7474 LISTEN检查配置文件docker exec neo4j cat /var/lib/neo4j/conf/neo4j.conf | grep dbms.connectors # 关键行应为dbms.connectors.default_listen_address0.0.0.0注意Neo4j 社区版默认绑定127.0.0.1必须修改neo4j.conf中的dbms.connectors.default_listen_address为0.0.0.0否则 Docker 容器外部无法访问。Pentagi 的docker-compose.yml已预置该配置但若你手动修改过配置需重建容器docker-compose down docker-compose up -d。5.3 Nmap 扫描无输出JSON 文件为空现象data/nmap/192.168.56.101.json文件大小为 0 字节。原因通常是目标主机防火墙拦截或网络不通。快速验证宿主机 ping 测试ping 192.168.56.101 # 必须通容器内网络测试docker run --rm -it alpine ping -c 3 192.168.56.101 # 若不通说明 Docker 网络模式问题强制使用 host 网络临时方案修改docker-compose.yml中 nmap-scanner 的 network_modenmap-scanner: network_mode: host重新docker-compose up -d。此模式下容器共享宿主机网络栈可绕过 Docker 网络隔离。实操心得在 VirtualBox 中靶机网卡模式必须为 “桥接网卡” 或 “仅主机Host-Only”不能用 “NAT”。因为 Docker 容器无法通过 NAT 访问宿主机的虚拟网卡。我们曾为此调试 3 小时最终发现靶机网卡设置为 NAT 是根源。5.4 AI Agent 不触发Neo4j 数据无变化现象扫描完成后Neo4j 中有数据但pentagi-agent容器日志无推理记录。排查重点检查 Agent 配置docker-compose exec pentagi-agent cat /app/config.yaml # 确认 neo4j_url: bolt://neo4j:7687 和 neo4j_auth: neo4j:pentagi123验证 Bolt 连接docker-compose exec pentagi-agent bash python -c from neo4j import GraphDatabase; driver GraphDatabase.driver(bolt://neo4j:7687, auth(neo4j,pentagi123)); print(driver.verify_connectivity()) # 应输出 True检查触发器是否启用在 Neo4j Browser 中执行:schema # 查看是否有 auto-trigger CALL dbms.triggers() YIELD name, eventType, phase, statement # 应看到 name: on_host_create 的触发器手动触发测试CREATE (:Host {ip: 127.0.0.1, os: Test});观察pentagi-agent日志若出现推理记录则证明 Agent 正常问题出在扫描数据未正确写入 Neo4j。独家技巧Agent 的日志级别默认为 INFO若需详细调试修改config.yaml中log_level: DEBUG然后docker-compose restart pentagi-agent。DEBUG 日志会显示每次查询的 Cypher 语句和返回结果是定位图谱查询逻辑错误的终极手段。6. 进阶扩展与实战建议让 Pentagi 成为你红队的“第二大脑”Pentagi 的初始版本已能支撑基础