PentAGI 全 Agent 配置验证实录:vLLM 部署 Qwen3.6-27B-FP8 的 295/295 测试报告深度解读与复现指南
【免费下载链接】pentagiFully autonomous AI Agents system capable of performing complex penetration testing tasks项目地址: https://gitcode.com/GitHub_Trending/pe/pentagi
这份技术指南以 PentAGI 仓库中的 vllm-qwen3.6-27b-fp8.report.md 测试报告为主线,围绕"如何在 PentAGI 中验证一套面向 vLLM 自托管 Qwen3.6-27B-FP8 的多 Agent 配置是否可用"展开。你将读懂报告里每一项数据背后的含义,掌握 ctester(Provider 配置测试器)的完整用法,并理解测试框架在源码层面的执行与能力门控机制,最终能够自己复现、批量验证任意 LLM Provider 配置。
一、报告背景:这套测试体系的定位
PentAGI 是一套能够自主完成复杂渗透测试任务的 AI Agent 系统,内部按职责划分了多种 Agent 角色(主控、助手、代码生成、渗透测试、检索等),每个角色对应一套独立的 LLM 调用参数。这意味着:一套 Provider 配置是否"可用",取决于它是否能让所有 Agent 角色都稳定工作,而不是只看单个对话效果好不好。
这份报告正是为解决这个验证问题而产生的产物。它由 PentAGI 自带的ctester(Provider Configuration Tester)工具自动生成,入口在 backend/cmd/ctester/main.go,Markdown 报告格式由 backend/cmd/ctester/report.go 的WriteReportToFile生成(报告头部的# LLM Agent Testing Report、Generated:时间戳、总体结果表结构均出自该函数)。
报告针对的目标是运行在vLLM上的Qwen/Qwen3.6-27B-FP8模型。根据配套配置 vllm-qwen3.6-27b-fp8.provider.yml 文件头注释,该模型具有以下特征(这些信息来自配置注释,实际以模型官方文档为准):
- 架构:混合注意力,75% DeltaNet + 25% 全注意力(48+16 层);
- 上下文:原生 262K,可经 YaRN 扩展到 1M;
- 视觉:属于 VLM(带视觉编码器),即使纯文本任务也会占用显存;
- FP8 量化,适合在 vLLM 上低成本自托管。
测试于 2026-07-23 11:02:56 UTC 执行,覆盖 13 种 Agent 配置、共295 个测试用例,全部通过(100%),整体平均延迟 3.325 秒。
二、总体结果:13 种 Agent 配置 295/295 全部通过
报告开篇的 Overall Results 表格是整份报告的核心结论,原表完整如下:
| Agent | Model | Reasoning | Success Rate | Average Latency |
|---|---|---|---|---|
| simple | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 1.297s |
| simple_json | Qwen/Qwen3.6-27B-FP8 | false | 7/7 (100.00%) | 1.093s |
| primary_agent | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 4.874s |
| assistant | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 4.496s |
| generator | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 4.518s |
| refiner | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 5.409s |
| adviser | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 4.690s |
| reflector | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 2.113s |
| searcher | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 0.494s |
| enricher | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 0.270s |
| coder | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 4.309s |
| installer | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 4.625s |
| pentester | Qwen/Qwen3.6-27B-FP8 | true | 24/24 (100.00%) | 3.453s |
Total: 295/295 (100.00%) successful testsOverall average latency: 3.325s
关于表中各列,需要注意几点:
- Reasoning 列:从 report.go 的聚合逻辑看,该列表示该 Agent 的测试结果中是否检测到推理(thinking)输出,而非简单对应配置里是否开启了思考模式;
- Success Rate 列:成功率与平均延迟均排除被标记为
Unsupported(能力不受支持)的用例——代码注释明确指出"不受支持的可选能力不计入成功率,它属于'尝试过但该模型不提供',而非'尝试后失败'"(见 backend/cmd/ctester/main.go); - 从延迟分布看,13 种 Agent 配置分为三个梯队:轻量级(enricher 0.27s、searcher 0.49s)、中间层(simple、simple_json、reflector)、重型推理型(refiner、primary_agent、installer 等 4~5s 级),这与各 Agent 配置的采样参数和是否启用思考模式直接相关(详见第五节)。
三、逐 Agent 详细结果与延迟矩阵
原报告对每个 Agent 按 Basic Tests / Advanced Tests 分组列出了每个用例的延迟。为便于横向对比,下面将全部数据重组为矩阵形式(每个数据点均来自原报告,未做删减;所有用例结果均为 ✅ Pass,错误列为空)。
3.1 基础测试矩阵(8 项 × 13 Agent,单位:秒)
| 测试用例 | simple | primary_agent | assistant | generator | refiner | adviser | reflector | searcher | enricher | coder | installer | pentester |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Simple Math | 0.817 | 3.840 | 3.507 | 2.585 | 3.699 | 3.787 | 0.611 | 0.672 | 0.217 | 2.783 | 2.641 | 2.630 |
| Text Transform Uppercase | 0.873 | 2.757 | 1.897 | 2.628 | 3.012 | 2.683 | 0.609 | 0.208 | 0.212 | 2.497 | 2.646 | 2.407 |
| Count from 1 to 5 | 0.616 | 23.297 | 24.442 | 23.202 | 23.392 | 22.764 | 20.127 | 0.214 | 0.209 | 22.545 | 22.984 | 3.551 |
| Math Calculation | 0.523 | 2.085 | 1.769 | 1.985 | 1.961 | 2.060 | 0.550 | 0.217 | 0.207 | 2.090 | 2.059 | 1.991 |
| Basic Echo Function | 0.942 | 1.593 | 1.990 | 1.791 | 2.761 | 2.330 | 1.434 | 0.215 | 0.221 | 2.165 | 1.856 | 1.816 |
| Streaming Simple Math Streaming | 0.512 | 1.733 | 1.866 | 2.590 | 2.349 | 2.256 | 0.559 | 0.292 | 0.274 | 2.531 | 2.449 | 1.833 |
| Streaming Count from 1 to 3 Streaming | 0.633 | 3.092 | 3.995 | 3.357 | 3.090 | 3.909 | 0.751 | 0.243 | 0.261 | 4.619 | 4.693 | 4.556 |
| Streaming Basic Echo Function Streaming | 1.377 | 2.554 | 2.554 | 2.504 | 2.226 | 4.587 | 1.474 | 0.475 | 0.477 | 2.314 | 2.316 | 3.526 |
3.2 进阶测试矩阵(16 项 × 13 Agent,单位:秒)
| 测试用例 | simple | primary_agent | assistant | generator | refiner | adviser | reflector | searcher | enricher | coder | installer | pentester |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| JSON Response Function | 1.342 | 3.371 | 2.256 | 2.982 | 3.152 | 0.519 | 1.402 | 0.291 | 0.253 | 1.965 | 2.602 | 2.596 |
| Search Query Function | 0.890 | 1.165 | 1.687 | 2.255 | 2.804 | 0.297 | 0.818 | 0.317 | 0.287 | 1.762 | 1.596 | 1.433 |
| Ask Advice Function | 1.150 | 3.085 | 2.096 | 2.174 | 3.465 | 4.167 | 1.805 | 0.402 | 0.235 | 2.114 | 2.780 | 2.162 |
| Streaming Search Query Function Streaming | 0.884 | 1.586 | 1.609 | 1.719 | 1.743 | 1.687 | 1.035 | 0.328 | 0.232 | 1.459 | 1.641 | 1.209 |
| Basic Context Memory Test | 0.635 | 3.608 | 3.280 | 3.138 | 3.283 | 2.957 | 0.793 | 0.214 | 0.212 | 3.015 | 2.458 | 3.880 |
| Function Argument Memory Test | 0.581 | 1.422 | 1.519 | 1.350 | 1.567 | 2.440 | 0.591 | 0.214 | 0.288 | 1.983 | 1.962 | 1.940 |
| Function Response Memory Test | 0.551 | 3.631 | 2.905 | 2.353 | 1.550 | 3.161 | 1.043 | 0.239 | 0.445 | 1.850 | 1.824 | 1.501 |
| Penetration Testing Memory with Tool Call | 1.691 | 3.060 | 3.206 | 6.086 | 3.854 | 3.586 | 1.845 | 0.262 | 0.409 | 2.977 | 2.969 | 2.826 |
| Cybersecurity Workflow Memory Test | 0.600 | 2.691 | 3.167 | 2.940 | 2.232 | 3.017 | 0.819 | 0.229 | 0.313 | 6.159 | 2.246 | 2.473 |
| Read a file, then edit it via unified diff | 3.886 | 4.489 | 8.111 | 5.938 | 5.511 | 4.254 | 3.852 | 0.579 | 0.428 | 3.949 | 5.041 | 4.081 |
| Penetration Testing Methodology | 3.163 | 9.435 | 8.559 | 10.433 | 9.651 | 8.891 | 2.214 | 5.138 | 0.222 | 8.198 | 16.871 | 11.146 |
| Vulnerability Assessment Tools | 2.430 | 12.149 | 6.973 | 7.994 | 11.079 | 8.617 | 2.514 | 0.221 | 0.214 | 7.722 | 7.280 | 7.677 |
| SQL Injection Attack Type | 0.530 | 4.313 | 3.183 | 3.726 | 15.503 | 3.427 | 1.162 | 0.212 | 0.206 | 4.845 | 3.475 | 3.017 |
| Penetration Testing Framework | 3.282 | 10.616 | 8.294 | 7.251 | 13.215 | 13.348 | 1.400 | 0.214 | 0.217 | 7.508 | 8.601 | 7.160 |
| Web Application Security Scanner | 2.106 | 7.340 | 5.902 | 4.251 | 5.997 | 5.351 | 1.947 | 0.212 | 0.210 | 4.216 | 5.177 | 5.180 |
| Penetration Testing Tool Selection | 1.108 | 4.046 | 3.132 | 3.175 | 2.713 | 2.462 | 1.350 | 0.237 | 0.214 | 2.137 | 2.830 | 2.267 |
3.3 JSON 专项(simple_json,7 项,单位:秒)
| 测试用例 | 分组 | 结果 | 延迟 |
|---|---|---|---|
| Vulnerability Report Memory Test | Advanced | ✅ Pass | 2.003s |
| Person Information JSON | Advanced | ✅ Pass | 0.787s |
| Project Information JSON | Advanced | ✅ Pass | 0.767s |
| User Profile JSON | Advanced | ✅ Pass | 0.904s |
| Streaming Person Information JSON Streaming | Advanced | ✅ Pass | 0.890s |
| JSON Array Response Without Schema | Advanced | ✅ Pass | 1.350s |
| Structured Output With JSON Schema | Capability(structured_output) | ✅ Pass | 0.944s |
3.4 数据背后的延迟特征分析
从矩阵可以读出几个有价值的规律(以下为基于报告数据的观察,供排障参考):
- "Count from 1 to 5"是最大的延迟异常点。该用例在 primary_agent(23.297s)、assistant(24.442s)、generator(23.202s)、refiner(23.392s)、adviser(22.764s)、coder(22.545s)、installer(22.984s)上普遍耗时 20 秒以上,而在 pentester 上仅 3.551s、在 searcher/enricher 上不足 0.25s。对照配置可以发现:这些慢速 Agent 的配置均未显式关闭思考模式(未设置
enable_thinking: false),而 searcher、enricher、simple 均显式禁用了思考。可以推断该用例的高延迟与模型思考 token 的生成长度有关(该用例带有较长的 system 提示并要求精确输出,触发模型长时间内部推理)。 - searcher / enricher 几乎瞬时完成。这两个角色在配置中禁用了思考、温度 0.7,且承担的是检索/富化类轻任务,其平均延迟(0.494s / 0.270s)在所有 Agent 中最低。
- refiner 是重型推理角色中平均延迟最高的(5.409s),且"SQL Injection Attack Type"单用例达到 15.503s、"Penetration Testing Framework"达到 13.215s,说明其对专业领域问答的推理长度更长。
- 所有"Read a file, then edit it via unified diff"用例全部通过。该用例是 runner 中唯一手工构造的、非 YAML 定义的动态多轮测试(read_file → edit_file 的完整工具调用闭环),13 种 Agent 配置均能在 0.4~8.1 秒内完成,验证了该模型在真实文件编辑工作流中的工具调用稳定性。
- simple_json 的能力测试通过意义重大。
Structured Output With JSON Schema验证的是模型后端对 schema 约束输出(llms.WithStructuredOutput)的原生支持能力。从 tests.yml 的注释可知,该测试属于"前瞻性预检"——即使 PentAGI 运行时尚未完全接入该调用路径,也要提前确认模型具备能力。
四、复现这份报告:ctester 完整使用指南
4.1 前置条件
- 一个可用的 vLLM 服务端,已部署
Qwen/Qwen3.6-27B-FP8(兼容 OpenAI API 协议)。PentAGI 仓库 examples/guides 目录下提供了 vLLM 部署相关参考指南,如 vllm-qwen35-27b-fp8.md; - 准备
.env环境文件(ctester 通过-env指定,内部使用 godotenv 加载,并读取项目配置); - 从 backend/cmd/ctester 编译出 ctester 可执行文件。
4.2 命令行参数
ctester 的全部参数定义见 backend/cmd/ctester/main.go:
| 参数 | 默认值 | 说明 |
|---|---|---|
-env | .env | 环境文件路径 |
-type | custom | Provider 类型:custom / openai / anthropic / gemini / bedrock / ollama / deepseek / glm / kimi / qwen / minimax |
-name | 空 | Provider 名称,用于构造PROVIDER_NAME/MODEL_NAME |
-config | 空 | Provider 配置文件路径(会同时覆盖 LLM 与 Ollama 的 server config) |
-tests | 空 | 自定义测试用例 YAML 文件路径(覆盖内置注册表) |
-report | 空 | Markdown 报告输出路径 |
-agents | all | 逗号分隔的 Agent 类型(simple、simple_json、primary_agent、assistant、generator、refiner、adviser、reflector、searcher、enricher、coder、installer、pentester) |
-groups | all | 逗号分隔的测试分组(basic、advanced、json、knowledge) |
-workers | 4 | 并行 worker 数 |
-verbose | false | 输出每个用例的 PASS/FAIL 详情 |
4.3 复现命令
要复现这份针对 vLLM + Qwen3.6-27B-FP8 的完整测试(对应 thinking 模式配置),可执行:
./ctester \ -env .env \ -type custom \ -config examples/configs/vllm-qwen3.6-27b-fp8.provider.yml \ -agents all \ -groups all \ -workers 4 \ -verbose \ -report vllm-qwen3.6-27b-fp8.report.md-type custom对应 vLLM 这类 OpenAI 兼容自托管端点(createProvider中custom分支使用custom.DefaultProviderConfig(cfg)构造,见 backend/cmd/ctester/main.go);-groups all会展开为 basic、advanced、json、knowledge 四个分组(见 backend/cmd/ctester/main.go);- 若只想快速验证某个角色(如 pentester),可改为
-agents pentester;只想跑知识域用例,可改为-groups knowledge; -report指定后,报告将以与本文相同格式写入 Markdown 文件(由WriteReportToFile生成,见 report.go);- 想要全量验证不带思考模式的另一套配置,只需把
-config换成 vllm-qwen3.6-27b-fp8-no-think.provider.yml 即可,测试框架会按新配置重新执行全部用例。
五、支撑这份报告的 Provider 配置详解
报告的结果与 vllm-qwen3.6-27b-fp8.provider.yml 中的 13 个 Agent 配置一一对应。该配置文件头注释给出了官方推荐的采样参数基线:
- 通用任务:temp=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0;
- 精确编码任务:temp=0.6, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0。
5.1 配置文件结构
配置以agent 类型:为键,每个条目包含统一的采样参数字段:
| 字段 | 说明 |
|---|---|
model | 模型标识,此处为"Qwen/Qwen3.6-27B-FP8" |
temperature | 采样温度 |
top_k/top_p/min_p | 采样截断参数 |
presence_penalty/repetition_penalty | 重复惩罚 |
n | 生成候选数(均设为 1) |
max_tokens | 最大生成 token 数(均设为 32768) |
json | 仅 simple_json 开启(true),表示强制 JSON 输出模式 |
extra_body.chat_template_kwargs.enable_thinking | 是否关闭 Qwen 的思考模式(false 表示关闭) |
5.2 13 种 Agent 配置的差异设计
这是理解延迟矩阵的关键。配置对 13 个角色做了四类差异化设计:
A 类:关闭思考 + 低温(temp 0.7)——simple、simple_json、searcher、enricher。它们承担确定性任务(回显、检索、JSON 输出),显式设置enable_thinking: false避免思考 token 拖慢响应,这与矩阵中它们 0.2~1.3s 的极低延迟吻合。
B 类:开启思考 + 通用采样(temp 1.0)——primary_agent、assistant、generator、refiner、adviser。作为对话/生成/规划类角色,保持 thinking 模式以获得更高质量的推理,延迟落在 4.5~5.4s。
C 类:reflector(temp 1.0,但显式关闭思考)——反射/校验类角色,关闭思考但保持高温,平均 2.113s。
D 类:精确编码参数(temp 0.6, presence_penalty 0.0)——coder、installer、pentester。这三个是实际动手执行代码与渗透操作的角色,采用配置头注释中的"精确编码任务"推荐参数。值得注意:pentester 平均延迟仅 3.453s,且"Count from 1 to 5"异常慢的问题在它身上不明显(3.551s),提示低温 + 低 presence_penalty 的组合对推理长度有收敛作用。
5.3 thinking 与 no-think 两套配置的对比
仓库同时提供了 vllm-qwen3.6-27b-fp8-no-think.provider.yml,其中所有 13 个 Agent 均设置了enable_thinking: false,且温度统一为 0.7/1.0。两份配置形成 A/B 对照:前者验证"思考模式全开"下的上限质量,后者验证"纯快速响应"下的吞吐表现。实际部署时可按业务需求取舍——例如将 searcher/enricher 类低频思考角色与 pentester 类高频操作角色分开配置。
六、测试框架源码级原理
报告背后是一套完整可复用的测试执行框架,位于 backend/pkg/providers/tester。
6.1 执行流程
入口是TestProvider(见 runner.go),流程分四步:
- 加载测试注册表:默认使用内置注册表(
testdata.LoadBuiltinRegistry(),数据源为 tests.yml),也可通过-tests传入自定义 YAML; - 收集测试请求:
collectTestRequests按测试分组 × Agent 类型展开所有用例组合,过滤掉流式关闭、类型不兼容、能力不支持的请求;其中"Read a file, then edit it via unified diff"用例由newFileEditTestCase()手工构造(非 YAML),并在每个 Agent 上使用独立实例以避免多轮对话状态串扰; - 并行执行:
executeTestsParallel使用 channel + worker pool 并发执行(默认 4 个 worker,可用-workers调整),testWorker逐个执行用例; - 聚合分组:
groupResults将结果按 13 种 Agent 类型归组,映射到 result.go 定义的ProviderTestResults结构。
6.2 用例执行路径
executeTest(见 runner.go)按用例形态分派到不同的 Provider 调用:
- 带
ExtraOptions(当前仅 structured_output 能力测试)→CallWithExtraOptions; - 带消息与工具 →
CallWithTools,且若用例实现MultiTurnTestCase接口(如文件编辑用例),会循环处理"工具调用 → 工具响应 → 再次调用"的多轮闭环; - 仅消息 →
CallEx;纯 prompt →Call。
6.3 能力门控(Capability Gating)
这是框架最精巧的部分。capability.go 中的capabilitySupported决定能力测试是否真的执行,原则是:只测试 PentAGI 真实运行时会发出的调用。
adaptive_thinking(自适应思考)测试仅当该 Agent 的配置实际会触发llms.WithAdaptiveReasoning时运行(UsesAdaptiveThinking判定,见 pconfig/config.go);reasoning_off测试仅当该 Agent 配置的推理模式显式为off时运行;structured_output例外地无条件执行,因为它是为即将接入的 simple_json 结构化输出路径做的前瞻预检——即使模型不支持,也会被标记为Unsupported(⊘)而非失败,不拉低成功率。
这解释了为什么报告中每个 Agent 的用例数恰为 24:能力门控让测试集合与配置动态对齐,缺省能力的用例不会出现在结果里造成误报。
6.4 测试用例注册表
内置用例全部定义在 tests.yml,按四类分组组织:
- basic:基础完成度(数学、大小写、计数)、系统-用户双角色消息、流式版本、基础函数调用(echo);
- advanced:函数调用(JSON 响应、搜索、建议)、上下文记忆链(多轮消息 + 工具调用历史)、文件编辑多轮闭环、推理能力测试;
- json:纯 JSON 输出、无 schema 的 JSON 数组、带 JSON Schema 的结构化输出;
- knowledge:渗透测试领域知识(侦查、nmap、SQL 注入、Metasploit、Burp Suite、工具选择),用于验证模型在安全领域的基础素养。
知识域用例正是 PentAGI 的领域特色——它不仅验证模型"能对话",还验证模型"懂渗透"。
七、从报告到实战:如何把结论用起来
- 作为配置准入门槛:任何新的 LLM Provider 接入 PentAGI 前,都建议跑一遍 ctester。仓库 examples/tests 目录下还沉淀了 openai、anthropic、deepseek、gemini、kimi、minimax、moonshot、novita、openrouter、ollama 等二十余份同格式报告,可作为横向对比基线;
- 报告即配置验收单:若某个 Agent 出现 ❌ Fail,优先检查该 Agent 的采样参数(尤其是思考模式开关)是否与其任务类型匹配——参考第五节的四类差异化设计;
- 延迟基线用于容量规划:整体平均 3.325s、单用例最高 24.4s 的实测数据,可以作为评估 vLLM 服务端并发与排队策略的输入。若延迟不可接受,可优先将低频角色(searcher、enricher)切换到 no-think 配置,或为其分配独立实例;
- 持续回归:升级模型版本、调整 vLLM 服务参数(如显存、批处理)后,用同一命令重新生成报告并 diff 延迟矩阵,可快速发现配置回归。
总而言之,这份 295/295 的报告证明:在 vLLM 上以 FP8 量化的 Qwen3.6-27B-FP8,经过 vllm-qwen3.6-27b-fp8.provider.yml 这样的分角色差异化配置,可以完整支撑 PentAGI 全部 13 种 Agent 角色的工具调用、多轮记忆、JSON 输出与安全领域知识任务。借助 ctester 与这套开源的测试框架,任何自托管模型都可以在接入生产流程前获得同样严谨、可复现、可横向对比的验证结论。
【免费下载链接】pentagiFully autonomous AI Agents system capable of performing complex penetration testing tasks项目地址: https://gitcode.com/GitHub_Trending/pe/pentagi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考