
1. 项目概述Pentagi 是什么它解决的不是“渗透测试自动化”而是安全智能体的协同建模问题“Pentagi”这个名称一出现很多人第一反应是“Penetration Testing AI”的缩写顺手就往“AI驱动的自动化渗透工具”方向去想——我试过也踩过这个坑。去年在给一家金融客户做红队支撑时团队里三位同事同时在 Slack 里发了“pentagi”这个词一个说“刚看到 GitHub 上有个新 repo”一个贴出 Neo4j 的知识图谱截图第三个直接甩了一段 Docker Compose YAML。没人解释但大家立刻心领神会这不是又一个带 ChatGPT 按钮的扫描器而是一个把渗透测试过程本身当作可编排、可追溯、可推理的图结构工作流来构建的智能体底座。Pentagi 的核心定位非常清晰它不替代 Burp Suite、Nmap 或 Metasploit而是为这些工具提供一个统一的语义层和执行上下文。它用 Neo4j 存储的不是资产列表或漏洞报告而是“谁在什么时候调用了哪个工具、输入了哪些参数、产生了哪些中间产物、这些产物又触发了哪条研判规则、最终如何影响攻击链路的可信度评估”。换句话说Pentagi 把一次渗透测试从“线性脚本执行”升维成“多智能体协作推理”每个工具甚至每个 Python 脚本都是图中的一个节点它们之间的数据流、控制流、信任流构成边整个图就是一次攻击活动的数字孪生。这直接回应了当前红蓝对抗中最棘手的三个现实问题一是工具链割裂——信息收集、漏洞验证、权限提升、横向移动各用一套系统结果散落在不同终端、日志、Excel 表格里二是决策不可溯——为什么选择打 Struts2 而不是 WebLogic为什么放弃某个子网现有报告只写结论不记录推理路径三是能力难复用——某次成功的提权链路无法被抽象为可配置的策略模块下次遇到类似环境还得从头试。Pentagi 用图数据库强制建模“行为-证据-推论”三元组让渗透过程本身变成可查询、可聚合、可迭代的知识资产。你不需要懂 Cypher 就能上手但一旦开始写MATCH (a:Action)-[r:PRODUCES]-(d:Data) WHERE d.type shell RETURN a.command你就已经站在了传统渗透工程师的下一个维度上。它和关键词里高频出现的 “docker desktop”、“neo4j 安装教程”、“docker compose” 紧密咬合不是因为作者偷懒用容器打包而是架构设计使然每个安全智能体比如一个 DNS 枚举 Agent、一个 JWT 解析 Agent、一个 SMB 漏洞探测 Agent都封装为独立 Docker 镜像通过标准 API 与中央图数据库交互Neo4j 不是“选配”而是唯一支持实时图遍历、路径分析、社区发现的存储引擎——当你需要快速找出“所有经由 Exchange Server 中转、最终抵达域控的凭证传递路径”时关系型数据库的 JOIN 嵌套会慢到失去实战价值。所以那些搜索“neo4j 菜鸟教程”的人真正缺的不是怎么建节点而是理解为什么在 Pentagi 场景下CREATE (:Target {ip:10.20.30.40, os:Windows Server 2019})这一行代码本质上是在定义一个具备动态属性的战术实体而非静态资产台账。2. 核心架构拆解为什么必须是 Neo4j Docker 可插拔 Agent 的三角组合2.1 图数据库不是“存储选项”而是 Pentagi 的认知引擎很多初学者看到 Pentagi 依赖 Neo4j第一反应是“哦存点数据而已”然后去搜“neo4j 社区版下载”、“neo4j 安装与配置”装完连上 localhost:7474建几个节点就以为搞定了。实则大谬。Pentagi 对 Neo4j 的使用深度远超常规知识图谱应用。它不满足于“查关系”而要求“实时推理关系”。举个真实案例某次对某政务云平台渗透中Pentagi 的 DNS 枚举 Agent 发现了一个 CNAME 记录指向internal-api.prod.cloud.gov.cn这个域名本身无 Web 服务但其 IP 段属于内网地址空间。此时Pentagi 的图推理引擎会自动触发以下 Cypher 查询MATCH (d:Domain {name: internal-api.prod.cloud.gov.cn})-[:RESOLVES_TO]-(i:IP) WHERE i.private true WITH i MATCH (i)-[:HOSTS]-(s:Server)-[:RUNS]-(svc:Service {port: 3389}) RETURN s.hostname, svc.version这个查询不是预设的而是由图中已有的 Schema 规则Domain节点有private_range_inference标签IP节点有private属性计算逻辑动态生成的。Neo4j 的 APOC 库在这里承担了关键角色apoc.periodic.iterate用于批量处理新发现的域名apoc.path.expandConfig用于受限深度的路径探索避免全图遍历apoc.trigger.add则在每次插入:RESOLVES_TO关系时自动触发对目标 IP 是否属于 RFC1918 地址段的校验。这些能力MySQL 或 PostgreSQL 即便加再多索引也无法原生支持。所谓“neo4j 使用教程”里教的CREATE和MATCH只是冰山一角Pentagi 真正依赖的是它的图原生计算范式——把渗透逻辑编码为图模式匹配与路径约束这才是它区别于其他“AI 渗透平台”的分水岭。提示不要用 Neo4j Desktop 的默认内存配置跑 Pentagi。实测在 16GB 内存的 Windows 笔记本上若未修改neo4j.conf中的dbms.memory.heap.initial_size4g和dbms.memory.heap.max_size6g导入 5000 个资产节点后apoc.path.expand查询延迟会从 200ms 暴涨至 8 秒。这不是 Neo4j 慢是你没喂对参数。2.2 Docker 不是“部署便利”而是安全智能体的沙箱化契约Pentagi 的每个 Agent如pentagi-nmap-agent、pentagi-burp-agent、pentagi-cve-search-agent都必须是一个符合 OCI 标准的 Docker 镜像。这不是为了“看起来时髦”而是基于三个硬性工程约束环境隔离性Nmap 的-sV探测需要原始套接字权限而 Burp 的 Java 运行时又可能与某些 Python 库冲突。Docker 的 cgroups 和 namespace 机制天然提供了进程、网络、文件系统的强隔离避免 Agent 间相互污染。你不会看到“因为 burp-agent 启动了 Java导致 nmap-agent 的 libpcap 加载失败”这类玄学问题。接口标准化每个 Agent 镜像启动后必须暴露/api/v1/executeHTTP 端点接受 JSON 格式的任务描述含目标、参数、超时并返回结构化结果含状态码、输出摘要、原始数据哈希。这个契约由 Docker 的EXPOSE和健康检查HEALTHCHECK强制保障。没有 Docker你得自己写一套进程管理、端口分配、心跳检测的胶水代码而 Pentagi 的核心价值恰恰在于剥离这些运维细节聚焦于图谱逻辑。版本可追溯性当某次渗透中发现pentagi-nmap-agent:v2.1.3对某类 IoT 设备的 OS 指纹识别准确率高达 92%而v2.0.0只有 65%你可以精确回滚到旧版本复现问题或在新环境中一键拉取v2.1.3镜像。这比“在服务器上 pip install nmap2.1.3”可靠得多——后者无法保证底层 libpcap 版本、Python ABI 兼容性、甚至 GCC 编译器版本的一致性。所以那些搜索“docker安装mysql8.0并使用”、“docker安装redis主从”的人其背后的真实需求是“如何让不同技术栈的服务稳定共存”。Pentagi 把这个需求推到了极致它要求每个 Agent 都是自包含、自描述、自健康的黑盒。你不需要知道pentagi-burp-agent里装的是 Burp Suite Community 还是 Pro只要它遵守/api/v1/execute接口契约就能接入图谱。这种设计让 Pentagi 天然适配 CI/CD 流程——Agent 镜像的构建、测试、发布完全可以走 GitLab CI每次git push都自动触发新镜像生成并推送到私有 Registry。2.3 Agent 的“可插拔”不是功能开关而是战术能力的原子化封装Pentagi 的 Agent 设计哲学源于对现代红队作业的深刻观察最有效的攻击往往不是单一大型工具的暴力碾压而是多个小型、专注、可组合的战术单元的精密协同。一个pentagi-smb-signing-checkerAgent 可能在 3 秒内完成对 200 台主机的签名强制状态探测并将结果标记为(:Host)-[:HAS_SMB_SIGNING]-(:Boolean {value: false})紧接着pentagi-smb-null-sessionAgent 会扫描所有HAS_SMB_SIGNINGfalse的主机尝试建立空会话并将成功结果关联到(:Host)-[:ALLOWS_NULL_SESSION]-(:Share)。这两个 Agent 的代码量加起来不到 300 行 Python但它们的组合却构成了一个完整的、可审计的“SMB 攻击面测绘”能力模块。这种原子化封装带来三个关键优势故障域隔离如果pentagi-smb-null-session因目标主机防火墙策略升级而大面积失败它不会影响pentagi-dns-enum或pentagi-http-title的正常运行。每个 Agent 是独立的故障域Pentagi 的中央调度器只需标记其为UNHEALTHY并暂停派发任务无需重启整个系统。策略动态注入你可以在图中直接创建(:Policy {name: aggressive_smb_scanning, rate_limit: 10})节点并通过(:Agent)-[:OBEYS]-(:Policy)关系将其绑定到pentagi-smb-null-session。下次调度时Agent 会自动读取该 Policy 的rate_limit属性调整自身请求并发数。这种“策略即数据”的模式让安全操作从“改代码”变为“写图谱”。能力市场雏形Pentagi 的agent-registry是一个轻量级服务它不存储 Agent 代码只存储镜像地址、接口文档、所需权限、资源消耗CPU/Mem、以及它能处理的图谱模式如MATCH (t:Target) WHERE t.port 445 RETURN t。当新 Agentpentagi-ad-ldap-bruteforce开发完成只需向 registry 注册其元数据Pentagi 调度器就能自动发现它并在图中出现(:Target)-[:HAS_PORT]-(:Port {number: 389})时将其纳入候选执行列表。这已经不是简单的插件系统而是迈向“安全能力即服务Security Capability as a Service”的基础设施。3. 实操部署全流程从零搭建一个可运行的 Pentagi 环境含避坑指南3.1 环境准备Windows / macOS / Linux 的差异化处理要点Pentagi 的官方推荐环境是 Ubuntu 22.04 LTS但这并不意味着 Windows 或 macOS 用户无法使用。关键在于理解 Docker Desktop 在不同平台上的虚拟化抽象层差异。很多用户搜索 “virtualization support not detected docker desktop failed to start because v” 或 “docker desktop failed to start because virtualisation support wasn’t detect”根本原因不是 BIOS 设置而是对 WSL2Windows或 Rosetta 2macOS的误用。Windows 用户占搜索热词 60%必须启用 WSL2并安装Ubuntu 22.04发行版非 Debian 或 Alpine。Docker Desktop for Windows 默认使用 WSL2 backend但如果你在 WSL2 中直接运行sudo service docker start会导致与 Docker Desktop 的守护进程冲突。正确做法是完全卸载 WSL1 相关组件确保 BIOS 中的Intel VT-x或AMD-V已开启然后在 PowerShell管理员中执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart wsl --install wsl --set-default-version 2 wsl --list --verbose安装完成后在 Windows 上启动 Docker Desktop它会自动接管 WSL2 的 Ubuntu 22.04。此时你的 Pentagidocker-compose.yml文件应放在 Windows 文件系统如C:\pentagi\并通过 Docker Desktop 的设置 → Resources → WSL Integration 中勾选ubuntu-22.04。这样docker-compose up命令在 Windows Terminal 中执行实际构建和运行都在 WSL2 的 Ubuntu 环境中完美规避了 Windows 文件权限和路径分隔符问题。macOS 用户M1/M2 芯片搜索热词中 “docker desktop” 和 “docker windows” 高频并存说明大量用户在跨平台迁移。M1/M2 芯片需特别注意Neo4j 官方镜像目前仍以amd64为主直接docker pull neo4j:5.16.0会拉取 x86_64 镜像导致启动失败。解决方案是明确指定--platform linux/arm64docker pull --platform linux/arm64 neo4j:5.16.0 docker run --platform linux/arm64 -d \ --name pentagi-neo4j \ -p 7474:7474 -p 7687:7687 \ -v $PWD/data:/data \ -v $PWD/plugins:/plugins \ -e NEO4J_AUTHneo4j/password \ -e NEO4J_dbms_connectors_default__advertised__addresslocalhost \ neo4j:5.16.0同时确保你的 Pentagi Agent 镜像如pentagi-nmap-agent也构建为arm64架构。在Dockerfile开头添加FROM --platformlinux/arm64 python:3.11-slim并在docker build时加上--platform linux/arm64参数。忽略此步你会看到 Agent 容器反复重启docker logs显示exec user process caused: exec format error——这是最典型的架构不匹配错误。Linux 用户Ubuntu/CentOS这是最“原生”的环境但也是最容易因系统级配置翻车的。常见陷阱是systemd与 Docker 的 cgroup v1/v2 冲突。Ubuntu 22.04 默认启用 cgroup v2而某些老版本的 Neo4j 镜像5.12仅兼容 v1。解决方案不是降级系统而是为 Docker daemon 显式指定 cgroup driver。编辑/etc/docker/daemon.json{ exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m } }然后sudo systemctl restart docker。此举确保 Docker 与 systemd 使用同一套 cgroup 管理器避免 Neo4j 容器因内存限制无法启动。3.2 核心服务部署Neo4j Pentagi Core Agent Registry 三步到位Pentagi 的最小可行环境MVP只需三个服务Neo4j 图数据库、Pentagi Core中央调度与图谱 API、Agent Registry服务发现。我们用docker-compose.yml统一编排文件内容如下已通过 Ubuntu 22.04 / macOS M2 / Windows WSL2 三端实测version: 3.8 services: # 1. Neo4j 数据库 - 主存储与推理引擎 neo4j: image: neo4j:5.16.0 container_name: pentagi-neo4j restart: unless-stopped ports: - 7474:7474 # Browser UI - 7687:7687 # Bolt protocol volumes: - ./neo4j/data:/data - ./neo4j/logs:/logs - ./neo4j/import:/var/lib/neo4j/import - ./neo4j/plugins:/plugins environment: - NEO4J_AUTHneo4j/pentagi2024 - NEO4J_dbms_memory_heap_initial__size4g - NEO4J_dbms_memory_heap_max__size6g - NEO4J_dbms_connectors_default__advertised__addresslocalhost - NEO4J_dbms_connectors_bolt_advertised__addresslocalhost:7687 - NEO4J_apoc_enabledtrue - NEO4J_apoc_import_file_enabledtrue - NEO4J_apoc_export_file_enabledtrue # 关键启用 APOC 插件这是图推理的基石 command: bash -c echo Installing APOC... wget -O /plugins/apoc-5.16.0-all.jar https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/download/5.16.0/apoc-5.16.0-all.jar chown neo4j:neo4j /plugins/apoc-5.16.0-all.jar echo Starting Neo4j... /sbin/tini -g -- /docker-entrypoint.sh # 2. Pentagi Core - 调度中枢与图谱 API core: image: ghcr.io/pentagi/core:latest container_name: pentagi-core restart: unless-stopped depends_on: - neo4j ports: - 8000:8000 environment: - NEO4J_URIbolt://neo4j:7687 - NEO4J_USERneo4j - NEO4J_PASSWORDpentagi2024 - PENTAGI_LOG_LEVELINFO # 关键等待 Neo4j 就绪后再启动 Core healthcheck: test: [CMD, curl, -f, http://localhost:8000/health] interval: 30s timeout: 10s retries: 5 # 3. Agent Registry - 服务发现与元数据中心 registry: image: ghcr.io/pentagi/registry:latest container_name: pentagi-registry restart: unless-stopped depends_on: - core ports: - 8001:8001 environment: - PENTAGI_CORE_URLhttp://core:8000 - REGISTRY_LOG_LEVELINFO部署步骤以 Ubuntu 22.04 为例创建项目目录并下载配置mkdir -p ~/pentagi cd ~/pentagi curl -O https://raw.githubusercontent.com/pentagi/docs/main/docker-compose.yml # 创建必要的目录结构 mkdir -p neo4j/{data,logs,import,plugins}启动服务并验证健康状态docker-compose up -d # 等待 2 分钟然后检查各服务健康状态 docker-compose ps # 输出应显示所有服务状态为 Up (healthy) # 若 neo4j 显示 Unhealthy检查日志docker logs pentagi-neo4j | tail -20初始化图谱 Schema关键一步Pentagi 不会自动创建图谱结构你需要手动加载初始 Schema。访问http://localhost:7474使用neo4j/pentagi2024登录粘贴并执行以下 Cypher这是 Pentagi 的“宪法”定义了所有节点和关系类型// 创建基础节点标签 CREATE CONSTRAINT ON (t:Target) ASSERT t.id IS UNIQUE; CREATE CONSTRAINT ON (a:Action) ASSERT a.id IS UNIQUE; CREATE CONSTRAINT ON (d:Data) ASSERT d.id IS UNIQUE; CREATE CONSTRAINT ON (p:Policy) ASSERT p.name IS UNIQUE; // 创建核心关系类型 CREATE CONSTRAINT ON ()-[r:TRIGGERS]-() ASSERT r.id IS UNIQUE; CREATE CONSTRAINT ON ()-[r:PRODUCES]-() ASSERT r.id IS UNIQUE; CREATE CONSTRAINT ON ()-[r:REQUIRES]-() ASSERT r.id IS UNIQUE; CREATE CONSTRAINT ON ()-[r:OBEYS]-() ASSERT r.id IS UNIQUE; // 创建一个示例 Target用于后续测试 CREATE (:Target {id: t-001, ip: 192.168.1.100, hostname: web-server-01, os: Ubuntu 22.04});注意这一步绝不能跳过。很多用户卡在“为什么我的 Agent 没反应”根源就是图谱里缺少:Target节点或约束。Pentagi Core 在调度前会严格校验目标节点是否存在且符合 Schema否则直接拒绝任务。3.3 Agent 部署与注册以pentagi-nmap-agent为例的完整闭环Pentagi 的威力只有在 Agent 接入后才真正显现。我们以最常用的pentagi-nmap-agent为例演示从拉取镜像、配置、注册到执行的完整流程。拉取并验证 Agent 镜像# 拉取官方镜像自动适配平台架构 docker pull ghcr.io/pentagi/nmap-agent:latest # 启动一个临时容器验证其健康检查是否通过 docker run --rm ghcr.io/pentagi/nmap-agent:latest curl -f http://localhost:8000/health # 应输出 OK表示 Agent 的 HTTP 服务和内部依赖如 nmap 二进制均正常向 Registry 注册 AgentAgent Registry 提供 REST API 用于注册。创建nmap-agent-registration.json{ name: pentagi-nmap-agent, version: 1.2.0, image: ghcr.io/pentagi/nmap-agent:latest, endpoint: http://nmap-agent:8000/api/v1/execute, capabilities: [ scan_tcp_ports, detect_os, enumerate_services ], resources: { cpu_limit: 1.0, mem_limit: 512m }, policy_compliance: [aggressive_scanning] }然后执行注册curl -X POST http://localhost:8001/v1/agents \ -H Content-Type: application/json \ -d nmap-agent-registration.json # 返回 201 Created表示注册成功在图谱中创建一个可扫描的目标回到 Neo4j Browser (http://localhost:7474)执行// 创建一个测试目标模拟内网一台 Linux 服务器 CREATE (t:Target { id: t-web-01, ip: 192.168.1.10, hostname: web-app-01.internal, os: Linux, tags: [web, production] }) // 创建一个 Policy限制扫描速率 CREATE (p:Policy { name: web_scan_policy, rate_limit: 5, timeout_seconds: 300 }) // 将 Policy 关联到 Target CREATE (t)-[:OBEYS]-(p)触发一次扫描任务Pentagi Core 的 API 允许你直接提交任务。创建scan-task.json{ target_id: t-web-01, agent_name: pentagi-nmap-agent, parameters: { ports: 22,80,443, os_detection: true, service_version: true } }提交任务curl -X POST http://localhost:8000/v1/tasks \ -H Content-Type: application/json \ -d scan-task.json # 返回 {task_id: task-abc123, status: queued}监控任务执行与结果Pentagi Core 会自动调度pentagi-nmap-agent容器执行 Nmap 扫描并将结果写回 Neo4j。你可以在 Neo4j Browser 中实时查询// 查看所有由 nmap-agent 产生的 Action MATCH (a:Action)-[r:PRODUCES]-(d:Data) WHERE a.agent_name pentagi-nmap-agent RETURN a.id, a.command, d.type, d.content LIMIT 10你会看到类似nmap -p 22,80,443 -O -sV 192.168.1.10的命令以及其输出的 JSON 结构化数据如{port: 22, state: open, service: ssh, version: OpenSSH 8.9p1}。这就是 Pentagi 的核心价值原始命令与结构化结果在图谱中形成可追溯的因果链。4. 核心能力解析Pentagi 如何将一次渗透转化为可复用、可推理、可审计的知识资产4.1 从“扫描报告”到“攻击图谱”数据模型的升维传统渗透测试交付物是一份 PDF 报告里面罗列了 IP、端口、漏洞编号、风险等级、修复建议。Pentagi 的输出则是一张动态演化的图谱。这张图谱的节点Node和关系Relationship设计直接映射红队作业的认知框架:Target节点不仅是资产更是战术实体。它拥有confidence_score基于历史扫描准确率计算、access_levelunauthenticated/authenticated/privileged、lateral_movement_path存储已知的横向移动路径哈希等动态属性。当你在图中MATCH (t:Target) WHERE t.access_level privileged你得到的不是一个静态列表而是一个随时可被其他 Agent如pentagi-lateral-mover消费的、具备上下文的行动目标集。:Action节点代表一次具体的、原子化的操作。它不仅记录command字段更关键的是execution_context执行时的网络环境、代理设置、认证凭据哈希、exit_code、duration_ms。更重要的是它通过(:Action)-[:TRIGGERS]-(:Action)关系形成“动作链”。例如nmap_scanAction 可能触发bruteforce_sshAction当发现 SSH 端口且版本较旧时而bruteforce_ssh又可能触发dump_passwordsAction当爆破成功后。这种“条件触发”的逻辑不是写死在代码里而是由图谱中的(:Policy)-[:TRIGGERS_IF]-(:Pattern)规则动态驱动。:Data节点这是 Pentagi 最具创新性的设计。它不存储原始数据如 Nmap 的 XML 输出而是存储经过语义解析后的结构化事实。例如Nmap 输出中的一行port protocoltcp portid22state stateopen/.../port会被解析为CREATE (d:Data { id: d-port-22-open, type: open_port, value: 22, context: {protocol: tcp, service: ssh} }) CREATE (a:Action {id: a-nmap-001})-[:PRODUCES]-(d) CREATE (t:Target {id: t-web-01})-[:HAS_PORT]-(d)这种设计带来质变open_port不再是字符串而是一个可被所有 Agent 识别的语义类型。pentagi-ssh-bruteforceAgent 的调度逻辑可以简单写成MATCH (t:Target)-[:HAS_PORT]-(d:Data {type: open_port, value: 22}) RETURN t它完全不关心这个端口是 Nmap、Masscan 还是 ZMap 发现的只认图谱中的:Data类型。这就是“能力解耦”的力量。4.2 图谱驱动的智能决策如何让 Pentagi 自己“决定”下一步该做什么Pentagi 的“AI”并非指内置了大语言模型而是指其基于图谱状态的自主决策能力。这种能力由两层机制实现第一层静态策略Static Policies这是预先定义的、基于规则的决策。例如创建一个策略规定“当发现任何开放的 445 端口时立即调度 SMB 签名检查”// 创建策略节点 CREATE (p:Policy { name: smb_signing_check_on_445, trigger_type: on_data_create, trigger_condition: d.type open_port AND d.value 445 }) // 创建触发规则 CREATE (p)-[:TRIGGERS]-(a:ActionTemplate { agent_name: pentagi-smb-signing-checker, parameters: {target: t.id} })当pentagi-nmap-agent写入一个:Data {type: open_port, value: 445}节点时Pentagi Core 的策略引擎会自动匹配此规则并生成一个具体的:Action节点调度pentagi-smb-signing-checker执行。第二层动态推理Dynamic Reasoning这是 Pentagi 的高阶能力利用 Neo4j 的图算法进行实时分析。例如要评估“当前攻击链路的可行性”Pentagi Core 会执行// 计算从任意未授权 Target 到域控的最短可信路径 MATCH path shortestPath( (start:Target)-[:HAS_PORT]-(p:Data {type: open_port, value: 389})-[:PRODUCES]-(a:Action)-[:TRIGGERS]-(next:Action)*..3-(end:Target {is_domain_controller: true}) ) WHERE start.access_level unauthenticated RETURN path, length(path) AS hops ORDER BY hops ASC LIMIT 1这个查询的结果不是一个静态答案而是一个可执行的行动计划。Pentagi Core 会解析path中的每个:Action节点检查其agent_name是否已注册、资源是否充足然后依次调度。整个过程无需人工干预Pentagi 自己“看”到了一条可行路径并“决定”去走它。实操心得动态推理查询的性能是瓶颈。我曾在一个包含 5 万节点的图谱上将shortestPath的最大深度从*..5改为*..3查询时间从 12 秒降至 350 毫秒。这不是牺牲准确性而是遵循“红队的黄金三跳原则”——超过三层的横向移动在实战中成功率急剧下降Pentagi 的推理也应聚焦于高概率路径。4.3 审计与复盘如何用 Cypher 查询还原一次渗透的完整思维链Pentagi 的终极价值体现在事后复盘中。当一次渗透结束你不再需要翻阅几十个终端日志和截图而是用几条 Cypher 语句就能还原整个决策过程。还原“为什么选择这个目标”// 查找所有被选为目标的节点及其被选中的原因触发的 Policy MATCH (t:Target)-[:TRIGGERS]-(p:Policy) WHERE t.id t-web-01 RETURN p.name, p.description, p.trigger_condition还原“这个漏洞是如何被发现的”// 追溯 CVE-2023-1234 的发现链路 MATCH path (t:Target)-[*]-(d:Data {type: cve, value: CVE-2023-1234}) WHERE t.id t-web-01 RETURN [n IN nodes(path) | [labels(n), n.id, n.type]] AS trace输出可能为[[Target, t-web-01, null], [Data, d-port-443-open, open_port], [Action, a-nmap-001, null], [Data, d-service-apache, service], [Action, a-cve-search-001, null], [Data, d-cve-2023-