1. 引言
在数字化时代,应用助手作为一种软件工具,对于提升用户工作效率、降低学习成本以及增强用户体验具有重要意义。它通过提供用户界面、指导和建议等方式,简化了用户与操作系统或应用程序之间的交互,成为用户与系统之间的桥梁。应用助手不仅能够提高学习效率、降低成本,还能推动技术推广与创新,拓展行业应用,挖掘数据价值,并提供安全便捷的服务。随着人们对信息获取和问题解决效率的不断追求,具备智能问答系统的应用助手逐渐成为了满足用户需求的重要工具[1]。
然而,在openEuler [2]操作系统中,用户面临着诸多问题和挑战。openEuler是一个开源的Linux发行版,支持服务器、云计算、边缘计算、嵌入式等多种应用场景,其基本管理单位是rpm包[3]。虽然rpm包为用户提供了丰富的命令和配置文件资源,但每个包中包含的命令和配置文件数量众多,且功能和用法各异,这给用户学习和使用openEuler带来了一定的困难。用户在寻找特定功能对应的命令时可能会遇到障碍,需要一个能够将所需功能与具体命令相连接的工具,以帮助他们更高效地使用openEuler。
本研究旨在解决openEuler操作系统用户在学习和使用过程中面临的复杂性和效率问题。由于openEuler作为基于rpm包管理的Linux发行版,包含大量的配置文件、包和命令,这对初学者造成困难,尤其是在寻找特定功能对应的命令时,用户容易感到困惑。此外,缺乏有效的工具支持以及现有知识库更新滞后,导致用户在使用新功能时的信息不足。因此,本研究将使用AI技术开发一个智能搜索助手工具,通过计算用户需求描述信息与openEuler系统提供的相关命令信息,建立知识库,用户交互获取AI计算后的结果信息,从而降低学习难度,提高操作效率,促进openEuler的广泛应用和用户满意度。
本项目的目标是开发一款智能助手工具,用于提升用户在使用openEuler操作系统时的效率和体验。具体说来,本工具将作为一个主机范围内的搜索引擎,当用户输入几个关键字后,能够智能地返回与这些关键字可能相关的命令以及进一步的帮助信息。通过这种方式,用户可以快速找到实现特定功能所需的命令和配置文件,从而降低学习难度,提高操作效率。这款工具的集成和升级设计也将确保其能够随时更新,保持信息的时效性,为用户提供持续的支持。
为了实现这一目标,本研究将遵循以下技术路线:首先,构建知识库,系统地收集openEuler系统中所有已知的rpm包,从每个rpm包中提取出包含的命令和配置文件,并将收集到的信息整理成一个结构化的知识库。其次,开发关键字搜索功能,实现基于关键字的搜索算法,根据匹配度对搜索结果进行排序,并为每个匹配的命令和配置文件生成简要描述。而后,进行工具集成与分离设计,确保智能助手工具能够高效地访问和使用知识库,同时允许知识库在不影响工具运行的情况下进行升级和维护。此外,设计简洁直观的用户界面和优化用户与工具的交互流程,使用户能够轻松地输入关键字并查看搜索结果。最后,进行测试与优化,对智能助手工具的各个功能进行测试,根据测试结果进行性能优化,并收集用户反馈,根据用户的实际使用体验对工具进行调整和优化。
通过本研究,希望能够为openEuler操作系统用户提供一个更加友好、高效、智能的使用环境,促进openEuler的广泛应用,推动整个开源社区的发展,并为未来数字基础设施的演变做出积极贡献。
2. 系统设计
2.1. 知识库构建
在知识库构建过程中,首先需系统地收集openEuler系统中所有已知的rpm包信息。随后,从每个rpm包中提取出包含的命令和配置文件,最后将收集到的命令和配置文件信息整理成一个结构化的知识库,以便后续的搜索和查询。
2.2. 关键字搜索功能开发
开发基于关键字的搜索算法,能够快速从知识库中检索出与用户输入关键字相关的命令和配置文件。同时,实现一个匹配度排序机制,确保最相关的结果排在前面,并为每个匹配的命令和配置文件生成简要描述,帮助用户快速理解其功能和用途。
2.3. 工具集成与分离设计
在设计智能助手工具与知识库的集成方式,使其能够高效地访问和使用知识库,同时设计知识库的独立更新机制,允许在不影响工具运行的情况下进行升级和维护。
2.4. 用户界面和交互设计
设计一个简洁直观的用户界面,方便用户输入关键字并查看搜索结果。优化用户与工具的交互流程,确保用户能够快速获得所需信息,并提供进一步的操作指引。
2.5. 测试与优化
对智能助手工具的各个功能进行测试,确保其能够准确返回相关命令和帮助信息。根据测试结果对工具进行性能优化,提高搜索速度和准确性,并收集用户反馈,根据用户的实际使用体验对工具进行调整和改进。
3. 系统实现
Figure 1. System framework diagram
图1. 系统框架图
图1展示了应用助手服务器与用户、数据库SQLite之间的交互流程。
3.1. 环境与配置实现
操作系统与Python版本:在openEuler 22.03 (LTS-SP3)和Windows 11双系统环境下,安装Python 3.9.9,确保开发与运行环境的一致性和稳定性,为后续的开发工作提供坚实基础。
依赖库安装:通过Python的包管理工具pip,依次安装click 8.1.7、Colorama 0.4.6、nltk 3.8.1等依赖库,各库版本严格对应,避免版本冲突导致的功能异常,保障系统各功能模块的正常调用与协同工作。
代码编辑与数据配置:利用VSCode远程连接进行代码编辑,借助其强大的代码提示、调试等功能,提高开发效率。数据源方面,以openEuler虚拟机中的rpm包信息为基础,从http://man.he.net/爬取rpm包所包含的指令信息,数据格式采用db和csv,选用SQLite数据库进行存储,实现数据的高效管理和便捷访问。
3.2. 模型实现
3.2.1. 模型概述与组件
通过模型计算文本相似度检索与用户输入相似的软件包指令,采用TF-IDF向量化和余弦相似度度量方法。其中,TF-IDF向量化器负责将文本转换为特征向量,余弦相似度用于计算向量间的相似度,相关文件如tfidf_vectorizer.pickle存储TF-IDF模型,tfidf_matrix.pickle存储软件包指令的TF-IDF向量。
3.2.2. 训练策略
数据预处理:借助Pandas库读取inst_data.csv文件,对数据进行清洗、格式化等预处理操作,确保数据质量。
向量化:利用pickle加载的TF-IDF向量化器,将用户输入文本转换为TF-IDF特征向量,实现文本的数值化表示。
相似度计算:调用cosine_similarity函数,计算用户输入向量与预存的TF-IDF矩阵中所有向量的余弦相似度,量化文本间的相似性。
结果排序:依据相似度分数对搜索结果进行降序排序,将最相关的软件包指令优先展示给用户。
3.2.3. 搜索策略
相似度检索:search函数调用tfidf函数,获取与用户输入相似度最高的软件包指令ID及对应分数,快速定位目标指令。
信息检索:借助access_inst.SelectBriefInfoByIds函数,根据指令ID从数据库中检索软件包的简要信息,丰富搜索结果的内容。
综合排序:结合软件包的版本号和相似度分数,对结果进行综合排序,既考虑指令的相关性,又兼顾软件的新旧程度,为用户提供更合理的搜索结果。
3.3. 性能优化实现
虽未明确提及自动混合精度,但借鉴深度学习模型中的优化思路,可考虑在后续优化中引入,以减少GPU显存使用并提高训练速度。同时,对现有代码进行分析,查找潜在的性能瓶颈,如循环结构、数据库查询等,通过算法优化、索引建立等方式,提升系统的整体运行效率。
3.4. 数据实现
3.4.1. 数据集描述与收集
安装openEuler虚拟机,利用命令行工具获取本地rpm包信息,包括包名、版本号、文件路径等,同时从http://man.he.net/爬取详细指令信息,将收集到的数据保存至数据库,构建完整、准确的数据集,为模型训练和系统运行提供数据支撑。
3.4.2. 数据处理
在数据处理方面,首先,通过执行rpm -qa命令获取已安装的rpm包列表,随后解码并分割结果,以移除空字符串,从而得到有效的包名列表。针对每个rpm包,接着使用rpm -ql instname命令获取其包含的文件路径,筛选出以/bin/和/sbin/开头的路径,从中提取用户指令和管理员指令名称,这为后续的指令信息整合与分析奠定了基础。
3.4.3. 数据库设计
在数据库设计中,构建了一个关系模型,如图2数据ER图所示。rpm表以id作为主键,存储包名、版本号、架构等详细信息,全面描述每个rpm包的属性。同时,inst表也以id为主键,记录安装实例的名称、描述、简介等元数据,并关联相应的rpm包和评分信息,便于用户快速了解指令的基本情况。此外,opt表通过id唯一标识每个选项,并关联inst表的inst_id,存储选项名称和内容,以提供丰富的指令配置信息。这种设计将数据结构化,便于后续查询与操作。
Figure 2. Entity-relationship diagram
图2. 数据ER图
access_rpm:负责与rpm表交互,实现rpm包信息的查询、插入、更新等操作,为系统提供底层的数据支持。
access_inst:专注于inst表的数据访问,支持安装实例的检索、筛选等功能,满足用户对指令信息的多样化查询需求。
access_opt:管理opt表的数据操作,方便用户获取指令的详细配置选项,增强系统的实用性和易用性。
3.5. 搜索排序算法实现
3.5.1. TF-IDF [4]与余弦相似度计算
1) TF-IDF原理与公式
(1)
(2)
(3)
2) 余弦相似度计算
余弦相似度是通过计算两个向量的点积和它们模的乘积的比值来确定的。对于两个向量A和B,余弦相似度的计算公式为:
(4)
其中,A∙B是向量A和B的点积,
和
分别是向量A和B的模。
Figure 3. System search flowchart
图3. 系统搜索流程图
如图3所示为基于TF-IDF的应用助手工具的工作流程图。
3.5.2. BM25 [5]算法实现
1) BM25原理与公式
(5)
N为文档总数,n (qi)为包含词qi的文档数,通过调整公式,使常见词的权重降低,突出稀有词的重要性。
(6)
(7)
fi为qi在文档d中的频率,qfi为qi在输入句子中的频率,dl为文档长度,avgdl为平均长度,通过调节因子k1、k2、b,实现对词频和文档长度的灵活调整,更精准地评估文档与查询的相关性。
(8)
综合考虑各词的相关性得分,得出文档与查询的整体匹配程度。
2) BM25代码实现
读取CSV数据,加载文本数据并转化为词项列表,初始化BM25Okapi对象,将用户输入转化为词项列表,计算用户输入与所有文档的BM25得分,依据得分排序获取相关度高的文档ID及对应分数,实现精准的文档检索与排序。
3.6. UI界面设计实现
设计思路与组件使用遵循简洁性、可用性、灵活性的设计思路,采用基于命令行的交互式界面,利用npyscreen库构建,整合SearchBox、SearchResults、InstructSelect、Detail等组件,分别实现搜索关键字输入、搜索结果展示、指令选项呈现、详细信息查看等功能,通过键盘操作实现界面间的顺畅切换与信息浏览。
具体实现交互过程是用户通过SearchBox中输入搜索关键词。按下回车键后,系统将触发搜索,并展示相关结果。
搜索结果在SearchResults组件中显示,用户可以使用方向键上下移动,选择不同的搜索结果。同时采用MultiLineAction组件使选择过程更加直观,通过简单的键盘操作即可快速定位所需信息。
另外还提供了快捷键操作:
4. 实验分析
上述部分提到的TF-IDF和BM25是信息检索中常用的两种算法,它们在处理词频时有所不同。TF-IDF的词频饱和度是线性的,即词频的增加会直接导致得分的线性增长。然而,这种线性增长方式可能导致高频词对得分的过度影响,尤其是在长文档中,这种问题更为突出。
相比之下BM25采用非线性饱和度,随着词频增加,得分增长逐渐放缓,有助于避免高频词对得分的过度影响,尤其在长文档中更为稳定。BM25通过参数k和b来控制词频饱和度和文档长度归一化,使得评估更准确。参数k(默认1.2)控制饱和度变化速度,参数b(默认0.75)控制归一化程度。这种灵活的参数调节机制使得BM25在处理长文档时表现更为出色,能够提供更稳定的相关性评分。
图4展示了两种模型的词频饱和度对比。TF-IDF得分随词频线性增长,而BM25增长放缓,最终平稳。这表明BM25在处理词频时更为稳健,适合高质量检索场景。
Figure 4. Term frequency saturation of TF-IDF and BM25 models [6]
图4. TF-IDF模型与BM25模型的词频饱和度[6]
对TF-IDF模型与BM25模型在信息检索任务中的表现进行了对比分析,涉及词频处理、文档长度影响、可扩展性、计算复杂度、效果、适用场景和鲁棒性等七个方面。
表1展示了两种模型在这些特性上的表现差异,有助于深入理解每种模型的优势及其适用场景。
Table 1. Comparison of TF-IDF Model and BM25 Model
表1. TF-IDF模型与BM25模型对比
特性/算法 |
TF-IDF |
BM25 |
词频的处理 |
词频越高,重要性越大,可能导致长文档被偏高评分 |
引入非线性词频变换,避免词频过高的词占主导地位 |
文档长度影响 |
不考虑文档的长度,可能导致长文档获得过高的权重 |
引入了文档长度正则化项,减少了文档长度对结果的影响,限制了TF值的极限增长 |
可扩展性 |
可扩展性一般,对于大规模数据集可能需要额外的优化 |
可扩展性好,易于与其他算法和技术结合使用 |
计算复杂度 |
计算较为简单适用于快速计算 |
考虑了词频的平滑和文档长度的正则化,计算稍微复杂 |
效果 |
对文档内容的直观度量,效果有限 |
对文档长度和词频进行平衡,能提供更准确的排名 |
适用场景 |
尤其适合小规模文档集信息检索 |
更加复杂和精确,适用于需要高质量检索结果的场景 |
鲁棒性 |
对于不同长度的文档,鲁棒性较差 |
对于不同长度的文档,鲁棒性较好,能够提供更稳定的相关性评分 |
5. 结论
本文针对国产操作系统openEuler用户在学习和使用过程中面临的挑战,提出了一款基于openEuler的应用助手。通过构建知识库并实现基于TF-IDF和BM25算法的搜索功能,该助手能够有效帮助用户快速搜索到所需的命令和配置文件。实验分析表明,BM25算法在处理词频和文档长度方面表现更优,能够提供更准确的搜索结果和更稳定的相关性评分,尤其适用于需要高质量检索结果的场景。
本研究为openEuler用户提供了一个高效、智能的使用环境,推动了openEuler社区的发展。未来的工作将集中在进一步优化搜索算法,扩展知识库的覆盖范围,并探索更多用户交互方式,以满足不断增长的用户需求。此外,我们也将关注智能助手在其他国产操作系统中的应用潜力,期待为更广泛的用户提供支持。
基金项目
大学生创新创业训练计划课题(2025);北方工业大学教育教学改革项目。