随着ChatGPT的爆发,各行各业开始拥抱AI,2023年12月的zabbix中国大会,自然不能免俗,其中一场演讲就是关于使用ChatGPT结合zabbix官方文档(PDF文件),进行“智能”问答。近期一直尝试AI,查阅关于提高AI问答能力的方法,结合实际,采用RAG方法提升大模型(LLM)的回复专业度,打造专属工具。
大模型LLM提升思路
提升大模型LLM的返回结果的准确率,通常采用三方面的思路:
提示词优化 (Prompt Optimization):
- 精炼指令:使用更清晰、简洁、具体的指令,引导模型输出更精准的答案。
- 示例引导:提供少量高质量的示例,帮助模型理解任务目标和输出格式。
- 上下文增强:提供更丰富的上下文信息,帮助模型更好地理解问题背景。
- 迭代优化:不断测试和调整提示词,找到最优的表达方式。
RAG (Retrieval-Augmented Generation)
- 知识库增强: 将外部知识库与模型结合,利用检索机制获取相关信息,辅助模型生成更准确、全面的答案。
- 领域定制: 针对特定领域构建知识库,提升模型在该领域的专业性。
微调 (Fine-tuning)
- 数据集选择: 选择高质量、与目标任务相关的数据集进行微调。
- 模型架构调整: 根据任务需求,调整模型的架构,例如增加特定任务的层或模块。
- 参数优化: 使用更精细的参数优化方法,例如迁移学习、多任务学习等,提升模型性能。
提示词优化侧重于引导模型,RAG侧重于知识增强,微调侧重于模型优化。从技术角度提示词简单,微调要求最高。
方案
考虑zabbix作为专业领域,需要为LLM提供专业领域的知识,考虑技术、成本等因素,采用RAG方式不失为可行方案。
数据/知识库
RAG首先要解决数据(专业领域知识)问题,需要构建自己的专用知识库,目前最常用直接就是zabbix中文手册pdf文件,也有直接把文件扔给LLM,直接基于会话进行问答,考虑维护等因素,放弃单一pdf构建的方式。初步思考数据如下:
- Zabbix官方文档(多个文件)
- Zabbix相关网页数据
- Zabbix安全信息(漏洞网页)
- 部分Zabbix书籍
- 其他Zabbix问答、调优等
其中书籍建议选择可选择文字的pdf格式(非扫描图片,看文件大小就能简单识别),若为epub格式,建议转为markdown格式,以便进一步处理。
embedding及矢量数据库
RAG中重要一步是将文本、图像等非结构化数据转化为连续的数值向量,从而捕捉数据之间的语义关系。通过embedding模型,设置上下文长度,可将常见格式如文本、PDF、markdown等格式数据,进行语义分块,提取出特征向量,保存在矢量数据库中,便于后续高效查询。通常采用向量之间的距离度量来实现高效的相似性搜索。常见采用欧式距离计算:
$$ d = \sqrt{ \sum_{i=1}^{n} (X_i - Y_i)^2 } $$
embedding模型较多,部分如下:
- bge-large
- mxbai-embed-large
- nomic-embed-text
矢量数据库通常有faiss、milvus、elasticsearch、chroma等,最后选用简单好用的chroma,
RAG流
完成以上准备工作,就可以动手搭建,为简化操作,少写代码(可以使用ai生成),放弃langchain选用flowise,可无代码构建工作流完成,主要分为两部分:
- 将数据进行矢量化存入chroma
- 使用chroma进行RAG问答
效果及改进方向
仅供测试,搭建好的RAG回答zabbix相关问题,专业度确实比之前有大幅提升,效果明显。由于zabbix的版本更新较快,一些涉及版本的问题并不能准确回答,后续还需要进一步强化。改进思路主要在于进一步强化数据,丰富知识库(如增加版本变化内容等信息),增加ranker等模块,提升匹配度。随着CoT(Chain-of-Thought,逻辑链)等技术发展,相信会有更智能的zabbix专家产生。