随着《个人信息保护法》的正式实施,国内对个人信息的保护意识显著提高。在这样的背景下,各企业也开始强化员工的信息安全培训,以提高整体的信息保护意识和处理能力。
为了加强团队成员的信息安全意识,我们开展了“信安小卫士”项目。落地方式为通过选择题的形式进行企微消息推送。但随着时间的推进,题库的更新速度和题目的多样性逐渐无法满足需求。
在2024年的今天,结合当前人工智能技术的进展,特别是大语言模型在各行各业的广泛应用,我们提出一个问题:“能否利用大语言模型(LLMs)来生成题库内容呢?”
本文将着重探索AI技术,特别是大语言模型和RAG(Retrieval-Augmented Generation)在信安小卫士中的应用,展示如何通过RAG来优化问答题的生成流程,及通过结合已有垂直领域的知识库,来提高内容质量,最终解决题库更新慢和多样性不足的问题。
当前像GPT-3.5这样的大语言模型已经具备生成选择题目的能力,这使得可以通过简单的对话就能得到专业的信息安全领域的题目。
然而,直接采用预训练好的大语言模型生成信息安全题目存在几个问题:
内容准确性问题:自动生成的题目可能存在准确性问题,包括误导性信息的风险。
安全建议的质量问题:题目中的安全建议可能不完整或误导,可能引起错误的安全实践。
专业术语使用问题:自动生成的内容可能用词不当,导致专业术语使用不准确。
过时信息问题:由于信息快速更新,生成的内容可能包含过时的安全知识。
为了应对以上挑战,利用RAG技术,我们可以在知识库中检索到最相关的信息,以此生成高质量的题目。具体来说,此技术主要包括检索和生成两个阶段,旨在提高生成内容的相关性和准确性。其主要步骤如下所示:
知识库构建: 首先,利用规章制度和相关文献资料构建专业的知识库。这些文档经过多模态文档解析,去除格式和非文本数据后,通过文本分块划分为多个数据块,并进行向量化,以便于后续的检索。
关键词驱动检索: 用户通过关键词如“信息安全”等发起查询,系统利用混合检索从知识库中召回最相关的内容段落。
信息整合: 在得到知识数据和用户的提问后,系统将这些信息以及预定义的提示词输入到大语言模型中。
内容生成: 基于模型的学习和生成能力,自动构造出符合格式要求的单选题或多选题。这个阶段的成功依赖于模型如何准确地整合检索到的信息和用户的需求。
在知识挖掘的实际应用中,使用RAG技术能够显著提升题目生成效率和质量。规章制度作为权威和可靠的知识来源,为大语言模型提供了丰富的专业数据,使得生成的题目不仅准确,而且具有一定难度,这对于答题的趣味性和实用性有一定的帮助。
在使用AI技术如RAG进行知识挖掘时,保证高效和准确的知识检索至关重要。对于存储在不同格式中的数据,如Word或PDF文件,直接对这些文件进行分段处理可能会由于其固有的格式问题,而导致错误的段落分割,甚至影响到语义的完整性。这些问题都可能对后续的信息检索和题目生成带来负面影响。
为解决这一问题,可以将Word和PDF文件转换为txt格式的策略。这种转换的主要优点包括:
格式简化:转换为txt格式的文档被剥离了所有复杂的格式标记和特殊符号,仅保留纯文本信息。这种简化有助于避免在文本处理过程中产生的额外干扰。
维持语义完整性:相较于带格式的文档,纯文本的连贯性更好,有助于保持原文的语义完整性,这对于后续的内容检索和理解尤为重要。
大语言模型提示词(Prompt)是指在与模型交互时,引导大语言模型生成特定输出的输入文本。在本系统中,提示词起到桥梁的作用,帮助系统更好地理解用户的输入,精确地处理用户的需求。提示词可以根据不同的问题需求定制化设计。本系统的提示词包括:角色、工作流程、示例输出和输出限制。
TF-IDF(Term Frequency-Inverse Document Frequency)是一种评估词语对于一个文本集或其中一份文档重要性的加权技术。以下是该技术用于检索关键词生成的步骤:
文本预处理:首先,将所有的文档进行标准化处理,如去除标点符号、去除字母数字、分词等。
计算TF-IDF值:对每个文档计算每个词的TF-IDF值。TF是词频,即某个词在文档中的出现频率;IDF是逆文档频率,用来减少所有文档中常见词的权重。
关键词提取:根据TF-IDF值排序,选取TF-IDF值最高的若干个词作为该文档的关键词。
利用该技术,对已有知识库进行关键词抽取,以构建知识库的关键词库。在检索知识库时,随机选择文档关键词作为提示词的变量输入,即可每次检索不同的文本段落,以供大语言模型处理生成不同的题目内容。
处理代码如下:
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
import json
import re
# 从本地txt文件中读取文档
corpus_file = "规章制度.txt"
with open(corpus_file, 'r', encoding='utf-8') as file:
corpus = ["".join([line.strip() for line in file])]
# 筛选只保留中文和非数字
chinese_pattern = re.compile(r'[\u4e00-\u9fa5]+')
digit_pattern = re.compile(r'\d+')
corpus_filtered = [re.sub(digit_pattern, '', ''.join(chinese_pattern.findall(doc))) for doc in corpus]
# 分词处理
corpus_segmented = [' '.join(jieba.lcut(doc)) for doc in corpus]
# 计算TF-IDF值
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(corpus_segmented)
feature_names = vectorizer.get_feature_names_out()
# 获取每个文档的词语及TF-IDF值并按TF-IDF值排序
for i in range(len(corpus)):
feature_index = tfidf_matrix[i, :].nonzero()[1]
tfidf_scores = zip(feature_index, [tfidf_matrix[i, x] for x in feature_index])
sorted_tfidf_scores = sorted(tfidf_scores, key=lambda x: x[1], reverse=True)
# 输出排序后的词语及TF-IDF值
result = {feature_names[j]: score for j, score in sorted_tfidf_scores}
print(json.dumps(result, indent=4, ensure_ascii=False))
在实际部署中,是基于Dify平台进行的。Dify提供了从Agent构建到AI工作流编排、RAG检索、模型管理等功能,使得构建和管理生成式AI应用变得简单。
考虑到大语言模型主要处理的是语义文本,而工程应用往往需要格式化的输入输出。如何有效地处理大语言模型与具体工程应用之间的衔接是一个关键问题。为了将构建的AI Agent应用到实际,这就需要一个转换机制。这个机制可以简单地通过脚本实现,它在大语言模型和实际应用之间充当桥梁的作用。具体工作流程如图所示:
该流程主要包括:
输入处理: 在送入大语言模型之前,需要将原始输入转换为对模型友好的语义文本形式。这一步骤也包括关键词的随机选择,用于后续知识库的检索。
输出处理: 当大语言模型生成问答内容后,将这些输出转换为符合工程标准的格式化数据。
完成以上输入输出处理后,通过HTTPs请求便可将此工具集成到现有微服务体系中,应用效果如下所示:
通过后台录入题目后,定时任务会在固定时间对题目进行推送。推送方式为企业微信应用消息和H5消息。应用消息效果如下:
H5消息效果如下:
截止定稿已在工作日连续推送信息安全题目122次,团队参与率83.09%。后续将会持续优化题目质量和做题体验,来达到提高团队成员信息安全意识的目的。
本文通过结合大语言模型与RAG技术,尝试进行知识挖掘,探索并完善了“信安小卫士”的应用,但还存在一些问题需要解决:
建立评价标准: 需要建立一套的评估标准,以衡量自动生成题目的内容质量和难度。
屏蔽已有题库: 将现有的题库整合到知识库中,作为模型生成新题目时的参考依据,这将有助于避免内容的重复生成。
题目合规校验: 设计算法自动识别并屏蔽敏感或不当内容,确保内容的合规性。
此外,本文介绍的信安小卫士,是团队在AI领域的一次探索和实践,同样可以非常快的复制到其他垂直领域场景上,希望能够给大家一点启发。
Qy,信也科技后端研发