目录
前言
随着Al技术的快速发展,越来越多的公司开始利用Al重构传统业务,打造全新的用户体验和善于价值。其中Al知识问答是一个典型应用场景,广泛应用到教育,电商,咨询等含义,比如:
- 教育场景:AI 针对学生的薄弱环节提供个性化辅导
- 电商场景:AI 根据用户肤质推荐适合的护肤方案
- 法律咨询:AI 能解答法律疑问,节省律师时间
- 金融场景:AI 为客户提供个性化理财建议
- 医疗场景:AI 辅助医生进行初步诊断咨询
说白了,就是让 AI 利用特定行业的知识来服务客户,实现降本增效。其中,知识的来源可能来源于网络,也可能是自己公司私有的数据,从而让 AI 提供更精准的服务。
如何让Al获取知识?
在实现这个需求前,我们需要思考一个关键问题:知识从哪里获取呢?
首先 AI 原本就拥有一些通用的知识,对于不会的知识,还可以利用互联网搜索。但是这些都是从网络获取的、公开的知识。对于企业来说,数据是命脉,也是自己独特的价值,随着业务的发展,企业肯定会积累一波自己的知识库,比如往期用户的恋爱咨询和成功案例、以及自家的恋爱课程,如果让 AI 能够利用这些知识库进行问答,效果可能会更好,而且更加个性化。
如果不给 AI 提供特定领域的知识库,AI 可能会面临这些问题:
- 知识有限:AI 不知道你的最新课程和内容
- 编故事:当 AI 不知道答案时,它可能会 “自圆其说” 编造内容
- 无法个性化:不了解你的特色服务和回答风格
- 不会推销:不知道该在什么时候推荐你的付费课程和服务
那么如何让 AI 利用自己的知识库进行问答呢?这就需要用到 AI 主流的技术 —— RAG。
1.RAG
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索技术和Al内容生成的混合架构,可以解决大模型的知识时效性限制和幻觉问题。
通常用于处理非结构化的数据
简单来说,RAG 就像给 AI 配了一个 “小抄本”,让 AI 回答问题前先查一查特定的知识库来获取知识,确保回答是基于真实资料而不是凭空想象。
从技术角度看,RAG 在大语言模型生成回答之前,会先从外部知识库中检索相关信息,然后将这些检索到的内容作为额外上下文提供给模型,引导其生成更准确、更相关的回答。
通过 RAG 技术改造后,AI 就能:
- 准确回答关于特定内容的问题
- 在合适的时机推荐相关课程和服务
- 用特定的语气和用户交流
- 提供更新、更准确的建议
RAG 工作流程
RAG 技术实现主要包含以下 4 个核心步骤:
- 文档收集和切割
- 向量转换和存储
- 文档过滤和检索
- 查询增强和关联
1.2RAG检索增强生成工作流程
建立索引
检索生成
RAG相关技术
Embedding和Embedding模型
1.1RAG实战:SpringAl + 本地知识库
1.文档准备
2.文档读取
首先我们要对自己准备好的知识库文档进行处理,然后保存到向量数据库中。这个过程俗称ETL,SpringAl提供了对ETL的支持。
ETL的3大核心组件,按照顺序执行:
- DocumentReader:读取文档,得到文档列表
- DocumentTransformer:转换文档,得到处理后的文档列表
- DocumentWriter:将文档列表保存到存储中(可以是向量数据库,也可以是其他存储)
1.2RAG实战:SpringAl + 云知识库服务
还可以使用别人提供的云知识库服务来简化RAG的开发。但缺点是额外的费用,以及数据隐私问题。
很多Al大模型应用开发平台都提供了云知识库服务
2.RAG知识库进阶
下面从实现RAG的4大核心步骤,来实战RAG开发的最佳实践和优化技巧。
文档收集和切割
文档的质量决定了 AI 回答能力的上限,其他优化策略只是让 AI 回答能力不断接近上限。
因此,文档处理是 RAG 系统中最基础也最重要的环节。
1,优化原始文档
知识完备性 是文档质量的首要条件。如果知识库缺失相关内容,大模型将无法准确回答对应问题。我们需要通过收集用户反馈或统计知识库检索命中率,不断完善和优化知识库内容。
在知识完整的前提下,我们要注意 3 个方面:
1)内容结构化:
- 原始文档应保持排版清晰、结构合理,如案例编号、项目概述、设计要点等
- 文档的各级标题层次分明,各标题下的内容表达清晰
- 列表中间的某一条之下尽量不要再分级,减少层级嵌套
2)内容规范化:
- 语言统一:确保文档语言与用户提示词一致(比如英语场景采用英文文档),专业术语可进行多语言标注
- 表述统一:同一概念应使用统一表达方式(比如 ML、Machine Learning 规范为“机器学习”),可通过大模型分段处理长文档辅助完成
- 减少噪音:尽量避免水印、表格和图片等可能影响解析的元素
3)格式标准化:
- 优先使用 Markdown、DOC/DOCX 等文本格式(PDF 解析效果可能不佳),可以通过百炼 DashScopeParse 工具将 PDF 转为Markdown,再借助大模型整理格式
- 如果文档包含图片,需链接化处理,确保回答中能正常展示文档中的插图,可以通过在文档中插入可公网访问的 URL 链接实现
这里鱼皮提出了 “AI 原生文档” 的概念,也就是专门为 AI 知识库创作的文档。我们可以将上述规则输入给 AI 大模型,让它对已有文档进行优化。
2、文档切片
合适的文档切片大小和方式对检索效果至关重要。
文档切片尺寸需要根据具体情况灵活调整,避免两个极端:切片过短导致语义缺失,切片过长引入无关信息。具体需结合以下因素:
- 文档类型:对于专业类文献,增加长度通常有助于保留更多上下文信息;而对于社交类帖子,缩短长度则能更准确地捕捉语义
- 提示词复杂度:如果用户的提示词较复杂且具体,则可能需要增加切片长度;反之,缩短长度会更为合适
不当的切片方式可能导致以下问题:
1)文本切片过短:出现语义缺失,导致检索时无法匹配。
2)文本切片过长:包含不相关主题,导致召回时返回无关信息。
3)明显的语义截断:文本切片出现了强制性的语义截断,导致召回时缺失内容。
最佳文档切片策略是 结合智能分块算法和人工二次校验。智能分块算法基于分句标识符先划分为段落,再根据语义相关性动态选择切片点,避免固定长度切分导致的语义断裂。在实际应用中,应尽量让文本切片包含完整信息,同时避免包含过多干扰信息。
向量转换和存储
向量转换和存储是ARG系统的核心环节,直接影响检索的效率和准确性。
向量存储配置
需要根据费用成本、数据规模、性能、开发成本来选择向量存储方案,比如内存 / Redis / MongoDB。
在编程实现中,可以通过以下方式配置向量存储:SimpleVectorStore vectorStore = SimpleVectorStore.builder(embeddingModel) .build();
选择合适的嵌入模型
嵌入模型负责将文本转换为向量,其质量直接影响相似度计算和检索准确性。可以在代码中修改:
SimpleVectorStore vectorStore = SimpleVectorStore.builder(embeddingModel) .build();
文档过滤和检索
这个环节是我们开发者最能大显身手的地方,在技术已经确定的情况下,优化这个环节可以显著提升系统整体效果。
多查询扩展
在多轮会话场景中,用户输入的提示词有时可能不够完整,或者存在歧义。多查询扩展技术可以扩大检索范围,提高相关文档的召回率。
多查询扩展的完整使用流程可以包括三个步骤:
- 使用扩展后的查询召回文档:遍历扩展后的查询列表,对每个查询使用
DocumentRetriever
来召回相关文档。- 整合召回的文档:将每个查询召回的文档进行整合,形成一个包含所有相关信息的文档集合。(也可以使用 文档合并器 去重)
- 使用召回的文档改写 Prompt:将整合后的文档内容添加到原始 Prompt 中,为大语言模型提供更丰富的上下文信息。
💡 需要注意,多查询扩展会增加查询次数和计算成本,效果也不易量化评估,所以个人建议慎用这种优化方式。
检索器配置
检索器配置是影响检索质量的关键因素,主要包括三个方面:相似度阈值、返回文档数量和过滤规则。
查询增强和关联
经过前面的文档检索,系统已经获取了与用户查询相关的文档。此时,大模型需要根据用户提示词和检索内容生成最终回答。然而,返回结果可能仍未达到预期效果,需要进一步优化。
错误处理机制
在实际应用中,可能出现多种异常情况,如找不到相关文档、相似度过低、查询超时等。良好的错误处理机制可以提升用户体验。
异常处理主要包括:
- 允许空上下文查询(即处理边界情况)
- 提供友好的错误提示
- 引导用户提供必要信息