跳到主要内容

DeepTeam 是什么 · 全景与阅读地图

30 秒导读: DeepTeam 是一个开源、本地运行的 LLM 红队(渗透测试)框架。你只给它两样东西——"想测哪些漏洞"和"用哪些攻击手法"——它就自动合成对抗性输入去打你的模型,再用另一个 LLM 当裁判逐条打分,最后汇总成一份风险报告。整个流程不需要你事先准备数据集。

本章只做两件事:讲清大盘(它是什么、大概怎么转),和当好导航(哪一章讲什么、该跳哪去)。所有机制细节都下放到 01–05 章。


1. 这是什么(零基础也能懂)

一句话定义: DeepTeam 是"给 LLM 用的渗透测试工具"——像安全团队红队攻击一个网站那样,自动化地攻击你的 LLM 应用,找出它会不会泄露隐私、被越狱、被注入指令。

解决什么问题 / 给谁用: 假设你上线了一个客服 chatbot、一个 RAG 问答、或一个能调工具的 agent。你担心:有人诱导它说出系统提示词?有人用花招让它教人做违法的事?有人往检索内容里藏指令劫持它?手动想这些攻击又累又不全。DeepTeam 把"想攻击、造攻击、打模型、判成败"这套流程自动化了。据 README.md:42-46,它本地跑在你机器上,构建在评测框架 DeepEval 之上。

关键设计:它不需要知道你的系统是什么。README.md:198,你唯一要提供的是一个 model_callback——一个"喂进字符串、吐出字符串"的函数,把你的 LLM 应用包起来。攻击者不会知道你的内部实现,DeepTeam 也刻意不要求你交代。

靠 ANY LLM 驱动。 漏洞探针的合成、攻击的增强、以及最后的裁判,全都由 LLM 完成——你可以用 OpenAI,也可以用 DeepEval 支持的任意自定义模型(README.md:61README.md:224)。项目当前版本 deepteam 1.0.6(pyproject.toml:2-3,name = "deepteam" / version = "1.0.6")。

用起来什么样: 最小可跑的一段(取自 README.md:208-222):

from deepteam import red_team
from deepteam.vulnerabilities import Bias
from deepteam.attacks.single_turn import PromptInjection

async def model_callback(input: str) -> str:
# 把这里换成你真实的 LLM 应用
return f"I'm sorry but I can't answer this: {input}"

risk_assessment = red_team(
model_callback=model_callback,
vulnerabilities=[Bias(types=["race"])], # 想测哪些漏洞
attacks=[PromptInjection()], # 用哪些攻击手法
)

red_team(...) 就是整个库的唯一主入口(deepteam/red_team.py:12,函数 red_team),它在 deepteam/__init__.py:14-18 被导出(__all__ = ["red_team", "Guardrails", "__version__"])。

一句话直觉: 把它想成一台"自动化的钓鱼演习机":你告诉它"我怕员工被哪几类钓鱼骗到"(= 漏洞),它就自动写出各种钓鱼邮件(= 攻击)发给你的模型,再逐封判断"上钩没有",最后给你一张演习成绩单。


2. 顶层全景(它大概怎么转)

2.1 主线一段话走通

你把 vulnerabilities(想测的漏洞)attacks(攻击手法) 交给 red_team。DeepTeam 先让每个漏洞生成一批"素颜"探针(baseline 攻击),必要时用 AttackEngine 精炼、校验这些探针,再用你选的 attack 手法把它们增强成真正刁钻的对抗输入(单轮改写,或多轮对话)。这些输入被逐条打到你的 model_callback 上;模型的回答交给一个 LLM 裁判(BaseRedTeamingMetric)判定"防住了还是被攻破了",最终所有结果汇成一份 RiskAssessment 风险报告

2.2 一张图看清数据流

怎么读这张图:从上到下是一条攻击的一生。左边主干是红队主线;右下角两个虚线框是两条旁支产品线,和主线共享部件但入口不同。

你提供 DeepTeam 主线(RedTeamer 编排)
┌──────────────┐
│ vulnerabilities│──┐
│ (想测的漏洞) │ │ ┌───────────────────────────────────────────────┐
└──────────────┘ │ │ ① AttackSimulator:每个漏洞合成 baseline 探针 │
┌──────────────┐ ├──▶│ (vulnerability.simulate_attacks) │
│ attacks │ │ └───────────────────────┬───────────────────────┘
│ (攻击手法) │ │ │
└──────────────┘ │ ┌───────────────────────▼───────────────────────┐
┌──────────────┐ │ │ ② AttackEngine:精炼 / 生成变体 / LLM 校验探针 │
│ model_callback│─┘ │ (可选,refine + validate) │
│ (被测目标) │ └───────────────────────┬───────────────────────┘
└──────┬───────┘ │
│ ┌───────────────────────▼───────────────────────┐
│ │ ③ 增强:单轮 attack.enhance / 多轮 _get_turns │
│ │ 把探针改写成刁钻对抗输入(可多轮升级) │
│ └───────────────────────┬───────────────────────┘
│ │ 对抗输入
└──────────────────────────────────────┤
打目标 ▼
┌──────────────────────────────────────────────┐
│ ④ 目标回答 → BaseRedTeamingMetric 裁判打分 │
│ (LLM-as-a-judge,binary 0/1 + 理由) │
└───────────────────────┬──────────────────────┘

┌──────────────────────────────────────────────┐
│ ⑤ RiskAssessment 风险报告(按漏洞/攻击聚合) │
└──────────────────────────────────────────────┘

┄┄┄┄┄┄┄┄┄┄ 旁支 A:生产拦截 ┄┄┄┄┄┄┄┄┄ ┄┄┄┄┄┄┄ 旁支 B:轨迹扫描 ┄┄┄┄┄┄┄
┆ Guardrails.guard_input / guard_output ┆ ┆ TraceScanner.process_trace ┆
┆ 实时二分类,拦住不安全的输入/输出 ┆ ┆ 扫 agent 执行轨迹(span 树)找问题┆
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄

注意①②③的边界: ① 出"素颜"探针,② 精炼/校验探针,③ 才把它变成真正的攻击。②③ 的算法细节留给 0203;④⑤ 的裁判与聚合留给 04


3. 三大部件一句话职责表

主线由三块拼起来,一条攻击依次穿过它们。认准这三个名字,后面各章都是在放大它们内部。

部件干什么(一句话)关键文件 : 符号
AttackSimulator给每个漏洞合成 baseline 探针,再按权重抽样一个攻击手法去增强deepteam/attacks/attack_simulator/attack_simulator.py:56 · AttackSimulator.simulate / :118 a_simulate
AttackEngine可选的"精炼器":改写探针、生成变体、用 LLM 校验哪些变体真能触发漏洞deepteam/attacks/attack_engine/attack_engine.py:33 · AttackEngine.refine / :109 a_refine
RedTeamer主编排器:串起生成→打目标→裁判→聚合,并发调度、错误吞并、打印报告deepteam/red_teamer/red_teamer.py:93 · RedTeamer.red_team / :309 a_red_team

围绕这三块,还有几个贯穿始终的数据/裁判类型(细节见 01):

类型是什么文件 : 符号
RTTestCase一条测试用例:载着漏洞、攻击输入、目标输出、分数、理由,从头贯穿到尾deepteam/test_case/test_case.py:17 · RTTestCase
BaseAttack所有攻击手法的基类,核心是 enhance()(单轮)与 weight / multi_turn 属性deepteam/attacks/base_attack.py · BaseAttack.enhance
BaseRedTeamingMetric裁判基类,measure / a_measure 给出 0/1 分与理由deepteam/metrics/base_red_teaming_metric.py:7 · BaseRedTeamingMetric
RiskAssessment最终报告对象,按漏洞类型与攻击手法两个维度聚合通过率deepteam/red_teamer/risk_assessment.py:128 · RiskAssessment

4. 巧妙之处速览(为什么这套设计值得读)

只点"妙在哪",证据与展开留给对应章节。

  • 黑盒接口把耦合降到最低。 目标只是一个 model_callback(input) -> str,DeepTeam 不碰你的内部实现,也因此天然支持"任意 LLM 系统"(README.md:198;签名校验见 red_teamer/red_teamer.pyvalidate_model_callback_signature 的调用)。这一刀切得干净:攻击生成、裁判、目标三者彻底解耦。
  • 不需要数据集,攻击是"长出来的"。README.md:237,对抗输入根据你选的漏洞动态合成,而不是从固定测试集里取——这正是红队区别于普通评测的地方。机制见 02
  • 两阶段生成:先造"素颜"再"化妆"。 baseline 探针(AttackSimulator.simulate_baseline_attacks,attack_simulator.py:214)与增强(enhance_attack,:272)分开,于是同一批探针能被不同攻击手法按 weight 概率抽样增强(random.choices(attacks, weights=...),attack_simulator.py:105)。
  • 精炼后自我校验。 AttackEngine 生成变体后,会再用一次 LLM 判断"这个变体是否真的还在攻击该漏洞",过滤掉跑偏的(AttackEngine._validate_candidates_with_llm,attack_engine.py:207)。见 02
  • 单轮与多轮共用一条数据轨。 RTTestCase 既能装单轮 input/actual_output,也能装多轮 turns(RTTestCase.turns,test_case.py:21);_attack 靠"有没有 turns"分流(red_teamer.py:523)。多轮越狱的记忆/升级/回溯见 03
  • 裁判即指标,复用 DeepEval。 每个漏洞自带一个 metric(BaseRedTeamingMetric 继承 DeepEval 的 BaseMetric),红队评测因此复用了成熟评测栈。见 04

5. 两条旁支产品线(和红队主线并列)

DeepTeam 除了"离线红队"主线,还打包了两条生产/诊断向产品线。它们复用同一批漏洞/裁判概念,但入口和用途不同,详情见 05

旁支用途入口 : 符号
Guardrails(生产拦截)在线上实时对输入/输出做二分类,拦住不安全内容deepteam/guardrails/guardrails.py:43 · Guardrails / :108 guard_input / :160 guard_output
TraceScanner(轨迹扫描)扫描 agent 的执行轨迹(span 树),事后找出其中的安全问题deepteam/trace_scanner/trace_scanner.py:27 · TraceScanner / :45 process_trace

此外还有两块"打包/入口"层,同样在 05 讲:

  • 安全框架(Frameworks): 不想手挑漏洞时,直接传 framework=OWASPTop10() 等,自动把框架类别映射到该测的漏洞与攻击(README.md:243-259;deepteam/frameworks/frameworks.pyAISafetyFramework;可用项 OWASPTop10 / OWASP_ASI_2026 / NIST / MITREdeepteam/frameworks/__init__.py:3-17)。
  • CLI: 用 YAML 配置从命令行跑红队(deepteam/cli/main.py:64app = typer.Typer(...),:238run 命令;示例配置 examples/example_config.yaml)。

6. 各章读什么(阅读地图)

建议顺序就是章号顺序——由浅入深。想直接下钻某个机制,按下表跳。

标题读它当你想知道…
01核心概念与数据模型漏洞/攻击/测试用例/裁判分别是什么,RTTestCase 如何贯穿全程,~36 个漏洞与 20+ 攻击如何组织
02攻击生成流水线(单轮)baseline 探针怎么合成,AttackEngine 如何精炼+校验,单轮 enhance 与按 weight 抽样如何工作
03多轮越狱攻击Linear / Tree / Crescendo 等多轮攻击如何靠记忆、逐步升级、回溯把对话推向越狱
04编排与评测RedTeamer 主循环的并发/错误处理,LLM-as-a-judge 如何打 0/1 分,RiskAssessment 如何聚合成报告
05旁支产品线与打包生产 Guardrails、TraceScanner 轨迹扫描、安全框架映射、以及 CLI/YAML 用法

7. 代码地图(导航索引)

想直接跳进源码,从这张表起步(符号名可 grep,比行号抗漂移)。

主题文件路径符号
主入口(函数)deepteam/red_team.pyred_team
对外导出deepteam/__init__.py__all__(red_team / Guardrails / __version__)
主编排器deepteam/red_teamer/red_teamer.pyRedTeamer.red_team / a_red_team / _attack
攻击合成+增强deepteam/attacks/attack_simulator/attack_simulator.pyAttackSimulator.simulate / simulate_baseline_attacks / enhance_attack
baseline 占位攻击deepteam/attacks/attack_simulator/attack_simulator.pyBaselineAttack
攻击精炼器deepteam/attacks/attack_engine/attack_engine.pyAttackEngine.refine / _validate_candidates_with_llm
攻击基类deepteam/attacks/base_attack.pyBaseAttack.enhance / weight / multi_turn
测试用例数据模型deepteam/test_case/test_case.pyRTTestCase / RTTurn
裁判基类deepteam/metrics/base_red_teaming_metric.pyBaseRedTeamingMetric
风险报告deepteam/red_teamer/risk_assessment.pyRiskAssessment / construct_risk_assessment_overview
安全框架deepteam/frameworks/frameworks.pyAISafetyFramework
生产拦截deepteam/guardrails/guardrails.pyGuardrails.guard_input / guard_output
轨迹扫描deepteam/trace_scanner/trace_scanner.pyTraceScanner.process_trace
CLIdeepteam/cli/main.pyapp(typer)/ run