文章总结: RAG架构在网络安全领域通过结合外部安全知识库检索与大模型生成,解决了威胁情报时效性差、漏洞信息更新滞后、安全政策解读不精准三大痛点。文章详细介绍了RAG的核心原理、技术选型、实战案例及质量优化方法,强调高可信安全知识库构建、精准威胁检索策略和合规防护生成机制是落地关键,为企业安全团队提供了从轻量开源到企业级定制的完整实施路径。
综合评分: 91
文章分类: AI安全,安全建设,应用安全,数据安全,网络安全
纯享笔记:10/ RAG架构入门
原创
heyong
BurpSuite实战教程
2025年12月11日 07:59
安徽
写在前面
★
计划花费20~30篇幅,来做一套人工智能笔记,纯享版。内容涉及的产品细节不一定是最新的,但忠于实验记录,方便网络安全或其他行业的同学快速地了解AI技术。
目前已完成的篇幅如下:
RAG架构入门
在安全领域,大模型应用常面临威胁情报时效性差、漏洞信息更新滞后、安全政策解读不精准3大痛点,检索增强生成(RAG)作为连接大模型与安全知识库的核心技术,凭借实时检索安全数据+精准生成防护方案的特性,成为解决上述问题的关键方案。本文结合RAG技术最新进展,从核心原理、安全领域技术选型、实战落地到质量优化,全方位讨论RAG在网络安全场景的产品架构逻辑。
一、大模型安全应用开发的三种模式:何时选RAG?
大模型应用开发主要分为提示工程、RAG、微调三类模式,三者适用场景互补,核心决策逻辑如下:
| 模式 | 核心适用场景 | 局限性 |
| — | — | — |
| 提示词工程 | 基础安全概念问答(如什么是SQL注入)、快速验证防护思路 | 无法处理实时威胁情报,易混淆相似漏洞(如CVE-2024-21413与CVE-2024-21415),能力受限于模型训练时的安全知识 |
| RAG | 实时威胁分析(如最新勒索软件家族IcedID的传播路径)、漏洞应急响应(如Apache Log4j2漏洞修复步骤)、企业安全政策解读 | 依赖安全知识库质量,检索链路需适配威胁情报的动态更新特性 |
| 微调 | 高频固定安全任务(如安全日志异常检测) | 成本高、需大量标注安全数据(如漏洞案例、威胁样本),无法实时接入新爆发的漏洞情报 |
当需要实时威胁情报支撑可溯源的解决方案,或企业内部安全制度解读时,RAG是最优选择;提示词工程适合轻量安全科普,微调适合高频固定安全任务。
二、RAG核心原理
RAG(Retrieval-Augmented Generation)在网络安全领域的核心,是将外部安全知识库检索与大模型生成结合,解决大模型静态安全知识与幻觉式防护建议问题。
完整流程分为三大阶段:
(一)数据预处理:构建高质量安全知识库
这是RAG的基础,核心是将非结构化安全数据转化为可检索的向量形式,行业内已形成标准化流程:
- 多源安全数据接入:支持威胁情报报告(PDF)、漏洞库文档(CVE Details Excel)、安全设备日志(TXT)、恶意代码分析报告(PPT)、安全政策文件(Word)等,图片类分析报告需通过LayoutLLM/Qwen-VL等多模态模型提取文本信息;
- 场景智能分块:
- 基础策略:按安全事件类型切分(如漏洞描述+影响范围+修复方案为一个语义块,
chunk_size=1200、overlap=250),避免漏洞修复步骤拆分至多个chunk; - 进阶策略:基于威胁情报层级(如威胁家族→传播路径→检测规则→处置方案)的多粒度拆分,实际安全项目验证该方式可提升漏洞检索准确率40%+;
- 向量化处理:通过优化的Embedding模型将文本块转为向量,存储至向量数据库(如FAISS、Milvus),核心是安全数据原文+向量+情报更新时间戳三存储,便于溯源与时效性筛选。
(二)知识检索:精准召回安全相关信息
检索阶段的核心是快速定位最新威胁情报与漏洞方案,主流方案为多路召回+优先级重排序:
- 查询处理:将用户问题(如如何检测IcedID勒索软件)向量化,结合指令优化(如
Instruct: 从威胁情报库检索检测规则 Query: 检测IcedID勒索软件的方法)提升语义匹配度; - 多路召回:融合关键词检索(如IcedID 检测规则 YARA)、语义向量检索(安全Embedding模型)、威胁标签检索(如勒索软件→Windows平台→4月爆发),实际应用中该方式可将威胁情报召回查全率提升至95%+;
- 优先级重排序:对召回结果按威胁紧急程度(如CVSS评分)、情报更新时间、与企业业务匹配度二次排序,筛选Top-K文本块(通常K=3-8,优先选择72小时内更新的情报)作为生成阶段输入。
(三)答案生成:精准且合规的内容输出
核心是将检索到的安全文本块,与用户问题组装为增强上下文,输入大模型后生成安全方案。重点优化方向为安全提示词工程+动态防护栏,解决漏洞修复步骤缺失、威胁处置建议不完整、安全政策解读格式错误、防护方案幻觉四大问题。
三、关键技术选型
(一)Embedding模型选择:适配安全场景语义
Embedding模型需精准理解漏洞编号、威胁标签、防护术语等专业语义,MTEB榜单(https://huggingface.co/spaces/mteb/leaderboard)覆盖20+安全领域模型,核心选型如下:
| 模型类型 | 代表模型 | 核心特点 | 适用场景 |
| — | — | — | — |
| 安全通用嵌入 | SecureBERT 2.0(Cisco) | 基于ModernBERT架构、支持长文本输入、优化安全术语理解,Hugging Face可获取 | 企业级威胁情报检索、漏洞匹配、多源安全报告分析 |
| | DEMIST-2(Darktrace) | 轻量化架构、支持云/本地/边缘多环境部署、低延迟,专注威胁分类与检测 | 实时威胁分析、安全设备日志检索 |
| | APT-LLM(学术优化模型) | 基于BERT/ALBERT等架构、适配APT攻击检测场景、擅长行为模式编码 | 高级持续性威胁(APT)检测、异常行为分析 |
| 中文安全优化 | M3E-Turbo(通用模型中文优化) | 轻量高效、中文语义理解强、支持长文本处理 | 国内企业安全制度问答、中文漏洞报告检索 |
| 指令驱动模型 | Qwen-7B(适配安全指令微调) | 支持工具调用扩展、中文安全场景适配性好、开源可定制 | 漏洞应急响应、安全工具联动生成方案 |
核心选型原则:
- 中文安全场景优先选M3E-Turbo+安全领域微调;
- 实时威胁检测、多环境部署选DEMIST-2;
- 企业级漏洞检索、威胁报告分析选SecureBERT 2.0;
- APT攻击检测场景选APT-LLM相关优化版本。
(二)工具链选型:符合安全合规要求
| 类型 | 代表工具 | 核心优势 | 适用场景 | 官方链接 |
| — | — | — | — | — |
| 开源框架 | LangChain | 支持安全工具调用(如Nmap、SQLMap)、自定义性强、生态成熟 | 企业私有化安全知识库开发、多工具联动RAG | https://www.langchain.com |
| | Qwen-Agent | 支持工具扩展与流程编排、可集成威胁情报检索、开源免费 | 中文安全场景快速落地(如内网漏洞问答、扫描工具联动) | https://qwen.readthedocs.io/en/stable/framework/qwen_agent.html |
| | Dify | 低代码可视化操作、支持数据加密与权限管控、适配合规需求 | 中小团队安全政策解读、基础威胁问答、私有化部署 | https://dify.ai |
| 成品工具 | NotebookLM(Google) | 文档预处理能力强、支持多源文档关联分析 | 非敏感威胁分析、外部公开情报验证 | https://notebooklm.google |
| | Cherry Studio | 多模型集成、开源免费、支持中文场景适配 | 中小团队轻量安全检索(如CNVD漏洞查询) | https://cherryai.dev |
| | Coze(企业版) | 开箱即用、支持知识库私有化、生态完善 | 企业快速落地安全问答(非涉密场景) | https://coze.ai |
| 向量数据库 | FAISS | 本地部署便捷、检索速度快、支持大规模数据 | 小规模安全知识库(百万级漏洞/情报chunk) | https://faiss.ai |
| | Milvus | 分布式架构、支持数据加密存储、适配等保合规 | 大规模企业安全知识库(亿级chunk,需等保合规) | https://milvus.io |
四、实战案例:Qwen-Agent + FAISS搭建本地安全知识库检索
以企业内部《网络安全漏洞应急响应手册》PDF(含CVE漏洞修复步骤、勒索软件处置流程)为例,完整实现本地安全RAG问答,解决安全文本块页码溯源最新漏洞精准检索核心问题。
(一)核心代码实现(适配安全场景与页码逻辑)
from PyPDF2 import PdfReader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings # 调用真实开源Embedding
from langchain_community.vectorstores import FAISS
from langchain.chains.question_answering import load_qa_chain
from qwen_agent.llm import get_llm_model # 真实Qwen-Agent LLM调用
from typing import List, Dict
# 1. 提取PDF文本并关联页码
def extract_security_pdf_with_page(pdf_path: str) -> Dict[int, str]:
"""按页码提取安全手册文本,返回{页码: 文本}字典,优先保留漏洞编号、处置步骤"""
pdf = PdfReader(pdf_path)
page_text_dict = {}
for page_num, page in enumerate(pdf.pages, start=1):
text = page.extract_text()
if text:
# 保留安全关键信息,去除无关格式字符
security_text = text.replace("\t", "").strip()
page_text_dict[page_num] = security_text
return page_text_dict
# 2. 按语义分块并保留页码信息
def split_security_text_with_page(page_text_dict: Dict[int, str]) -> List[Dict]:
"""将每页安全文本按漏洞/威胁类型分块,每个chunk关联原始页码与安全标签"""
text_splitter = RecursiveCharacterTextSplitter(
separators=["\n\n", "漏洞编号:", "威胁类型:", "处置步骤:"], # 按安全语义分隔
chunk_size=1200,
chunk_overlap=250
)
chunks_with_page = []
for page_num, text in page_text_dict.items():
# 提取安全标签(如CVE-2024-21413勒索软件)
security_tags = []
if"CVE-"in text:
security_tags.extend([tag for tag in text.split() if tag.startswith("CVE-")])
if"威胁类型:"in text:
threat_type = text.split("威胁类型:")[1].split("\n")[0]
security_tags.append(threat_type)
chunks = text_splitter.split_text(text)
for chunk in chunks:
chunks_with_page.append({
"text": chunk,
"page": page_num,
"security_tags": security_tags # 新增安全标签,便于检索筛选
})
return chunks_with_page
# 3. 构建安全向量库并存储页码、标签(使用SecureBERT 2.0开源模型)
def build_security_faiss_db(chunks_with_page: List[Dict]) -> FAISS:
# 加载安全领域Embedding模型(Hugging Face获取)
embeddings = HuggingFaceEmbeddings(
model_name="cisco-secure/SecureBERT-2.0-base",
model_kwargs={"trust_remote_code": True}
)
# 提取纯文本用于向量化
texts = [chunk["text"] for chunk in chunks_with_page]
# 构建向量库
db = FAISS.from_texts(texts, embeddings)
# 存储chunk与页码、安全标签的映射
db.metadata = {
chunk["text"]: {
"page": chunk["page"],
"tags": chunk["security_tags"]
} for chunk in chunks_with_page
}
return db
# 4. 安全问答与溯源(增加威胁紧急度判断)
def security_rag_qa(db: FAISS, query: str) -> Dict:
# 初始化Qwen大模型(支持安全指令优化)
llm = get_llm_model(model="qwen-max", temperature=0.3)
# 检索相关安全chunk(优先筛选含匹配安全标签的结果)
docs = db.similarity_search(query, k=8)
# 加载安全问答链(stuff模式适合漏洞步骤类文档)
chain = load_qa_chain(llm, chain_type="stuff")
# 生成安全增强提示词
security_prompt = f"""根据以下网络安全文档,回答用户问题:
1. 若涉及漏洞,需包含CVE编号、影响版本、修复步骤(分点列出);
2. 若涉及威胁处置,需包含检测方法、隔离步骤、恢复建议;
3. 确保信息与文档一致,禁止编造防护方案;
用户问题:{query}"""
# 生成回答
response = chain.invoke({
"input_documents": docs,
"question": security_prompt
})
# 溯源页码与安全标签
sources = []
for doc in docs:
meta = db.metadata.get(doc.page_content, {"page": "未知", "tags": []})
sources.append(f"页码{meta['page']}(标签:{','.join(meta['tags'])}):{doc.page_content[:80]}...")
# 判断威胁紧急度(含CVE则按CVSS评分分级)
urgency = "低"
for source in sources:
if"CVE-"in source and"CVSS评分:"in source:
cvss_score = float(source.split("CVSS评分:")[1].split()[0])
if cvss_score >= 9.0:
urgency = "极高(需1小时内响应)"
elif cvss_score >= 7.0:
urgency = "高(需4小时内响应)"
elif cvss_score >= 4.0:
urgency = "中(需24小时内响应)"
return {
"answer": response["output_text"],
"sources": sources,
"threat_urgency": urgency # 新增威胁紧急度,辅助安全决策
}
# 主流程调用
if __name__ == "__main__":
# 配置参数
SEC_PDF_PATH = "网络安全漏洞应急响应手册.pdf"
# 执行流程
page_text = extract_security_pdf_with_page(SEC_PDF_PATH)
chunks = split_security_text_with_page(page_text)
db = build_security_faiss_db(chunks)
# 示例查询(CVE漏洞问答)
query = "如何修复CVE-2024-21413漏洞?"
result = security_rag_qa(db, query)
print("回答:", result["answer"])
print("来源:", result["sources"])
print("威胁紧急度:", result["threat_urgency"])
(二)关键安全优化点
- 页码与安全标签关联:新增漏洞编号、威胁类型标签,便于检索时快速筛选相关安全数据,提升匹配精准度;
- 安全语义分块:按漏洞编号、威胁类型、处置步骤分隔,避免修复步骤割裂,符合安全人员操作习惯;
- 安全问答链增强:提示词明确安全输出要求(分点列步骤、禁止编造),新增威胁紧急度判断,基于CVSS评分给出响应时限,辅助应急决策;
- 真实模型适配:采用Cisco SecureBERT 2.0开源模型,提升CVE编号、威胁术语的语义匹配精度,避免虚构模型依赖。
五、RAG质量优化
行业对RAG质量优化已形成成熟方法论,核心解决数据质量差、检索关键信息遗漏、防护生成错错误三大问题:
(一)数据准备阶段:从原始安全数据到高可信知识库
核心问题:威胁情报过时、漏洞信息矛盾、安全文档格式混乱。优化方案:
- 安全数据治理流程:
- 审计:识别过时情报(如3个月前未更新的威胁家族)、矛盾漏洞信息(如不同来源的修复步骤冲突);
- 清洗:去重(相同CVE的重复报告)、纠错(修复步骤中的命令错误)、更新(补充漏洞补丁版本)、一致性检查(统一CVSS评分标准);
- 脱敏:处理安全文档中的内网IP、设备账号等敏感数据;
- 标注:添加安全
(一)数据准备阶段:从原始安全数据到高可信知识库
核心问题:威胁情报过时、漏洞信息矛盾、安全文档格式混乱。优化方案:
- 安全数据治理流程:
- 审计:识别过时情报(如3个月前未更新的威胁家族)、矛盾漏洞信息(如不同来源的修复步骤冲突);
- 清洗:去重(相同CVE的重复报告)、纠错(修复步骤中的命令错误)、更新(补充漏洞补丁版本)、一致性检查(统一CVSS评分标准);
- 脱敏:处理安全文档中的内网IP、设备账号等敏感数据,可采用IP掩码替换(如192.168.1.10→192.168.1.*)、账号匿名化等方式;
- 标注:添加安全元数据(情报来源如NVD/CNVD、更新时间、CVSS评分、适用操作系统/业务系统),便于检索时筛选;
- 安全智能文档技术:
- 多模态解析:使用LayoutLMv3(Hugging Face开源)、Qwen-VL等多模态模型,处理漏洞分析报告中的攻击链流程图、恶意代码样本截图,提取文本化防护逻辑(如流程图中的攻击步骤→对应防御措施);
- 安全文档树构建:按威胁家族→漏洞类型→影响范围→检测规则→修复方案→应急响应层级构建知识结构,例如勒索软件→IcedID→Windows平台→YARA规则→补丁安装→隔离感染主机,便于溯源关联。
(二)知识检索阶段:从模糊召回到精准安全匹配
核心问题:关键漏洞信息缺失、最新威胁情报排名靠后。优化方案:
- 安全查询转换澄清意图:
- 意图识别:通过Qwen-7B、Llama 3等开源大模型识别模糊查询(如如何防御勒索软件→ 检测方法/隔离步骤/数据恢复);
- 查询扩展:补充安全关键词(如防御勒索软件→ 防御IcedID勒索软件 Windows 10 YARA规则),可基于安全知识库的标签体系自动扩展;
- 安全混合检索+重排:
- 混合检索:融合关键词检索(BM25算法,适配CVE编号、漏洞名称、威胁家族等精准匹配场景)、语义向量检索(SecureBERT 2.0/M3E-Turbo,适配攻击路径、防护逻辑等模糊语义场景)、威胁标签检索(基于预定义的威胁类型、影响平台、风险等级标签);
- 安全重排序:使用Cross-BERT、Sentence-BERT等开源模型对召回结果二次排序,排序权重优先级为CVSS评分(权重40%)>情报更新时间(权重30%)>与企业业务匹配度(权重20%)>检索相似度(权重10%),优先返回高风险、最新、与业务强相关的安全数据。
(三)答案生成阶段:从自由生成到合规安全输出
核心问题:漏洞修复步骤缺失、威胁处置建议不完整、安全政策解读格式错误、防护方案幻觉(如编造不存在的补丁)。优化方案:
- 安全提示词模板优化:
- 原始提示词:根据上下文回答问题:如何修复CVE-2024-21413?;
- 优化提示词:根据以下网络安全文档,回答CVE-2024-21413的修复方案,需严格遵循以下要求:1. 明确影响的软件版本(如Apache Tomcat 9.0.0-9.0.80);2. 分操作系统提供具体修复命令(Linux/Windows分别列出);3. 给出修复后的验证方法(如命令行检测、工具扫描);4. 仅使用文档中的信息,禁止添加文档外的内容或编造补丁链接/命令;
- 安全动态防护栏(Dynamic Guardrails):
- 事实性校验:通过关键词匹配+正则表达式检查生成内容,例如是否包含CVE编号修复命令是否带操作系统前缀补丁版本是否与文档一致,缺失则触发模型重新生成;
- 格式校验:强制要求漏洞修复、威胁处置类回答按1. 影响范围;2. 操作步骤;3. 验证方法;4. 注意事项分点输出,安全政策解读按合规要求→责任部门→整改时限→测评标准结构化呈现;
- 幻觉防护:将生成内容与检索到的原文进行相似度比对(使用Embedding模型计算语义相似度),若相似度低于70%,则在回答末尾标注本方案部分内容未在参考文档中明确提及,建议结合NVD/CNVD官方信息交叉验证。
六、Q&A
1. 安全领域,构建RAG有意义吗?
有!核心安全价值在于:
- 效率成本:减少大模型输入长度,降低安全应急响应时的计算延迟(如漏洞处置需快速返回结果,避免长上下文导致的响应超时);
- 知识更新:实时对接NVD/CNVD等漏洞库、360安全大脑等威胁情报平台,解决零日漏洞新威胁家族的知识滞后问题(LLM训练数据无法覆盖实时爆发的安全事件);
- 可解释性:检索过程可溯源至具体安全文档页码与来源(如来源:CNVD-2024-XXXX漏洞报告,页码3),便于安全审计与方案验证,符合等保2.0安全事件可追溯要求;
- 数据隐私:支持私有化部署(如基于FAISS+LangChain在企业内网搭建),避免企业内网漏洞、日志等敏感数据上传公网,降低数据泄露风险;
- 合规适配:可定制化接入行业安全政策(如等保2.0、金融行业安全规范),生成符合合规要求的防护方案,减少合规整改成本。
2. 企业安全团队何时自研RAG,何时用成品工具?
| 自研RAG | 成品工具(NotebookLM/Coze) |
| — | — |
| 数据隐私要求高(如金融/政务内网安全、含涉密漏洞信息、未脱敏的内部日志) | 非敏感安全场景(如外部威胁情报查询、通用漏洞科普、公开安全政策解读) |
| 需深度适配业务安全流程(如对接企业漏洞扫描设备(Nessus/绿盟)、安全编排自动化响应(SOAR)系统、内网日志分析平台) | 基础安全问答(如什么是等保2.0三级要求)、轻量威胁分析(如外部公开IOC查询) |
| 大规模安全知识库(如企业历史漏洞案例、内部安全制度、千万级威胁情报chunk) | 小规模安全数据(如部门级安全手册、外部公开漏洞库、非核心业务威胁情报) |
| 需定制化安全功能(如威胁紧急度自动分级、漏洞与业务资产关联分析、合规整改跟踪) | 无定制化需求,追求快速落地(如1-2天内搭建基础安全问答工具) |
3. 结构化安全数据(如漏洞扫描Excel报告、SQL安全日志)如何融入RAG?
通过Text2SQL工具链+RAG融合实现,核心流程如下:
- 工具选型:使用LangChain的
SQLDatabaseChain、Qwen-Agent的Text2SQL插件,或开源工具SQLGlot,对接漏洞扫描结果Excel(通过pandas读取)、安全日志SQL数据库(如MySQL、Elasticsearch); - 数据预处理:将结构化数据的字段说明(如漏洞ID、扫描时间、资产IP、风险等级、修复状态)、表结构信息存入RAG知识库,便于LLM理解数据结构;
- 交互流程:用户自然语言查询(如查询192.168.1.0/24网段的高风险漏洞)→ LLM(如Qwen-7B)基于知识库中的表结构信息生成SQL查询语句→ 执行SQL获取结构化结果(如漏洞ID:CVE-2024-21413,资产IP:192.168.1.10,风险等级:高)→ 将结构化结果与RAG检索到的漏洞修复方案结合→ 生成包含资产信息+修复步骤+验证方法的完整回答。
4. 中小企业安全团队如何低成本构建RAG?
- 工具选择:开源免费组合(Qwen-Agent + FAISS + M3E-Turbo),无需付费API,最低8GB内存的服务器即可本地部署;
- 数据处理:优先收集公开安全数据(如CNVD漏洞库、国家网络安全通报中心报告、360安全大脑公开情报),通过Python脚本批量下载并转为Markdown格式,降低解析复杂度;
- 简化功能:初期聚焦核心场景(如漏洞修复步骤查询、安全政策解读),暂不接入复杂工具链(如SOAR系统),后期逐步扩展;
- 部署方式:部署在企业内网服务器或私有云,避免云服务成本,同时通过防火墙、访问控制列表(ACL)限制访问权限,保障数据安全。
七、总结
RAG在网络安全领域的核心是让大模型精准调用实时、可信的安全知识,其技术体系已形成开源工具链+安全场景适配的成熟路径。企业安全团队落地RAG的关键在于:高可信的安全知识库构建是基础(需保障情报时效性、准确性与隐私性),精准的威胁检索策略是核心(需适配安全优先级与语义匹配需求),合规的防护生成机制是保障(需避免幻觉式方案与格式错误)。
无论是选择LangChain/Qwen-Agent自研定制,还是Dify/Coze快速落地,都需围绕安全应急响应效率、数据隐私合规、业务适配度三大核心目标,结合企业自身数据规模与技术实力选择方案。对于中小企业,推荐从公开安全数据+轻量化开源工具起步,快速验证场景价值后再逐步迭代;对于大型企业,可基于Milvus分布式向量数据库+SecureBERT 2.0构建大规模安全知识库,实现检索-分析-处置全流程自动化。
★
以上均为实验匆匆记录,然后AI整理和修订,错误之处,请在文末留言,谢谢! 深入交流请加知识星球【勇哥和他的朋友们】或者【AI自动化】
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:BurpSuite实战教程 heyong《纯享笔记:10/ RAG架构入门》