大模型应用开发 | RAG在实际落地场景中的优化(二)知识加工,知识检索优化思路

二、知识加工,知识检索优化思路

目前RAG智能问答应用几个痛点:

  • 知识库文档越来越多以后,检索噪音大,召回准确率不高
  • 召回不全,完整性不够
  • 召回和用户问题意图相关性不大
  • 只能回答静态数据,无法动态获取知识,导致答疑应用比较呆,比较笨。

2.1知识处理优化

非结构化/半结构化/结构化数据的处理,准备决定着RAG应用的上限,因此首先需要在知识处理,索引阶段做大量的细粒度的ETL工作,主要优化的思路方向:

  • 非结构化 -> 结构化:有条理地组织知识信息。

  • 提取更加丰富的, 多元化的语义信息。

2.1.1 知识加载

目的:需要对文档进行精确的解析,更多元化的识别到不同类型的数据。

优化建议:

  • 建议将docx、txt或者其他文本事先处理为pdf或者markdown格式,这样可以利用一些识别工具更好的提取文本中的各项内容。

  • 提取文本中的表格信息。

  • 保留markdown和pdf的标题层级信息,为接下来的层级关系树等索引方式准备。

  • 保留图片链接,公式等信息,也统一处理成markdown的格式。

2.1.2 切片Chunk尽量保持完整

目的:保存上下文完整性和相关性,这直接关乎回复准确率。

保持在大模型的上下文限制内,分块保证输入到LLMs的文本不会超过其token限制。

优化建议:

  • 图片 + 表格 单独抽取成Chunk,将表格和图片标题保留到metadata元数据里。

  • 文档内容尽量按照标题层级或者Markdown Header进行拆分,尽可能保留chunk的完整性。

  • 如果有自定义分隔符可以按照自定义分割符切分。

2.1.3 多元化的信息抽取

除了对文档进行Embedding向量抽取外,其他多元化的信息抽取能够对文档进行数据增强,显著提升RAG召回效果。

  • 知识图谱

  • 优点:1. 解决NativeRAG的完整性缺失,依然存在幻觉问题,知识的准确性,包括知识边界的完整性、知识结构和语义的清晰性,是对相似度检索的能力的一种语义补充。

  • 适用场景:适用于严谨的专业领域(医疗,运维等),知识的准备需要受到约束的并且知识之间能够明显建立层级关系的。

  • 如何实现:

  • 1.依赖大模型提取(实体,关系,实体)三元组关系。

  • 2. 依赖前期高质量,结构化的知识准备,清洗,抽取,通过业务规则通过手动或者自定义SOP流程构建知识图谱。

  • Doc Tree

  • 适用场景:解决了上下文完整性不足的问题,也能匹配时完全依据语义和关键词,能够减少噪音

  • 如何实现:以标题层级构建chunk的树形节点,形成一个多叉树结构,每一层级节点只需要存储文档标题,叶子节点存储具体的文本内容。这样利用树的遍历算法,如果用户问题命中相关非叶子标题节点,就可以将相关的子节点数据进行召回。这样就不会存在chunk完整性缺失的问题。

这部分的Feature我们也会在明年年初放到社区里面。

  • 提取QA对,需要前置通过预定义或者模型抽取的方式提取QA对信息

  • 适用场景:

  • 能够在检索中命中问题并直接进行召回,直接检索到用户想要的答案,适用于一些FAQ场景,召回完整性不够的场景。

  • 如何实现:

  • 预定义:预先为每个chunk添加一些问题

  • 模型抽取:通过给定一下上下文,让模型进行QA对抽取

  • 元数据抽取

  • 如何实现:根据自身业务数据特点,提取数据的特征进行保留,比如标签,类别,时间,版本等元数据属性。

  • 适用场景:检索时候能够预先根据元数据属性进行过滤掉大部分噪音。

  • 总结提取

  • 适用场景:解决这篇文章讲了个啥,总结一下等全局问题场景。

  • 如何实现:通过mapreduce等方式分段抽取,通过模型为每段chunk提取摘要信息。

2.1.4 知识处理工作流

目前DB-GPT知识库提供了文档上传 -> 解析 -> 切片 -> Embedding -> 知识图谱三元组抽取 -> 向量数据库存储 -> 图数据库存储等知识加工的能力,但是不具备对文档进行复杂的个性化的信息抽取能力,因此希望通过构建知识加工工作流模版来完成复杂的,可视化的,用户可自定义的知识抽取,转换,加工流程。

知识加工工作流:https://www.yuque.com/eosphoros/dbgpt-docs/vg2gsfyf3x9fuglf

2.2 RAG流程优化

RAG流程的优化我们又分为了静态文档的RAG和动态数据获取的RAG,目前大部分涉及到的RAG只覆盖了非结构化的文档静态资产,但是实际业务很多场景的问答是通过工具获取动态数据 + 静态知识数据共同回答的场景,不仅需要检索到静态的知识,同时需要RAG检索到工具资产库里面工具信息并执行获取动态数据。

2.2.1静态知识RAG优化

2.2.1.1 原始问题处理

目的:澄清用户语义,将用户的原始问题从模糊的,意图不清晰的查询优化为含义更丰富的一个可检索的Query

  • 原始问题分类,通过问题分类可以

  • LLM分类(LLMExtractor)

  • 构建embedding+逻辑回归实现双塔模型,text2nlu DB-GPT-Hub/src/dbgpt-hub-nlu/README.zh.md at main · eosphoros-ai/DB-GPT-Hub

  • tip:需要高质量的Embedding模型,推荐bge-v1.5-large

  • 反问用户,如果语义不清晰将问题再抛给用户进行问题澄清,通过多轮交互
  • 通过热搜词库根据语义相关性给用户推荐他想要的问题候选列表
  • 槽位提取,目的是获取用户问题中的关键slot信息,比如意图,业务属性等等
  • LLM提取(LLMExtractor)
  • 问题改写
  • 热搜词库进行改写
  • 多轮交互
2.2.1.2 元数据过滤

当我们把索引分成许多chunks并且都存储在相同的知识空间里面,检索效率会成为问题。比如用户问"浙江我武科技公司"相关信息时,并不想召回其他公司的信息。因此,如果可以通过公司名称元数据属性先进行过滤,就会大大提升效率和相关度。

async def aretrieve(
    self, query: str, filters: Optional[MetadataFilters] = None
) -> List[Chunk]:
    """Retrieve knowledge chunks.

        Args:
            query (str): async query text.
            filters: (Optional[MetadataFilters]) metadata filters.

        Returns:
            List[Chunk]: list of chunks
        """
    return await self._aretrieve(query, filters)

2.2.1.3 多策略混合召回
  • 按照优先级召回,分别为不同的检索器定义优先级,检索到内容后立即返回

  • 定义不同检索,比如qa_retriever, doc_tree_retriever写入到队列里面, 通过队列的先进先出的特性实现优先级召回。

class RetrieverChain(BaseRetriever):
    """Retriever chain class."""

    def __init__(
        self,
        retrievers: Optional[List[BaseRetriever]] = None,
        executor: Optional[Executor] = None,
    ):
        """Create retriever chain instance."""
        self._retrievers = retrievers or []
        self._executor = executor or ThreadPoolExecutor()
            for retriever in self._retrievers:
            candidates_with_scores = await retriever.aretrieve_with_scores(
                query=query, score_threshold=score_threshold, filters=filters
            )
            if candidates_with_scores:
                return candidates_with_scores
  • 多知识索引/空间并行召回

  • 通过知识的不同索引形式,通过并行召回方式获取候选列表,保证召回完整性。

2.2.1.4 后置过滤

经过粗筛候选列表后,怎么通过精筛过滤噪音呢

  • 无关的候选分片剔除

  • 时效性剔除

  • 业务属性不满足剔除

  • topk去重

  • 重排序 仅仅靠粗筛的召回还不够,这时候我们需要有一些策略来对检索的结果做重排序,比如把组合相关度、匹配度等因素做一些重新调整,得到更符合我们业务场景的排序。因为在这一步之后,我们就会把结果送给LLM进行最终处理了,所以这一部分的结果很重要。

  • 使用相关重排序模型进行精筛,可以使用开源的模型,也可以使用带业务语义微调的模型。

## Rerank model
#RERANK_MODEL=bce-reranker-base
#### If you not set RERANK_MODEL_PATH, DB-GPT will read the model path from EMBEDDING_MODEL_CONFIG based on the RERANK_MODEL.
#RERANK_MODEL_PATH=/Users/chenketing/Desktop/project/DB-GPT-NEW/DB-GPT/models/bce-reranker-base_v1
#### The number of rerank results to return
#RERANK_TOP_K=5
  • 根据不同索引召回的内容进行业务RRF加权综合打分剔除
score = 0.0
for q in queries:
    if d in result(q):
        score += 1.0 / ( k + rank( result(q), d ) )
return score

# where
# k is a ranking constant
# q is a query in the set of queries
# d is a document in the result set of q
# result(q) is the result set of q
# rank( result(q), d ) is d's rank within the result(q) starting from 1
2.2.1.5 显示优化+兜底话术/话题引导
  • 让模型使用markdown的格式进行输出
基于以下给出的已知信息, 准守规范约束,专业、简要回答用户的问题.
规范约束:
    1.如果已知信息包含的图片、链接、表格、代码块等特殊markdown标签格式的信息,确保在答案中包含原文这些图片、链接、表格和代码标签,不要丢弃不要修改,
如:图片格式:![image.png](xxx), 链接格式:[xxx](xxx), 表格格式:|xxx|xxx|xxx|, 代码格式:```xxx```.
    2.如果无法从提供的内容中获取答案, 请说: "知识库中提供的内容不足以回答此问题" 禁止胡乱编造.
    3.回答的时候最好按照1.2.3.点进行总结, 并以markdwon格式显示.

2.2.2 动态知识RAG优化

文档类知识是相对静态的,无法回答个性化以及动态的信息, 需要依赖一些第三方平台工具才可以回答,基于这种情况,我们需要一些动态RAG的方法,通过工具资产定义 -> 工具选择 -> 工具校验 -> 工具执行获取动态数据

2.2.2.1 工具资产库

构建企业领域工具资产库,将散落到各个平台的工具API,工具脚本进行整合,进而提供智能体端到端的使用能力。比如,除了静态知识库以外,我们可以通过导入工具库的方式进行工具的处理。

2.2.2.2 工具召回

工具召回沿用静态知识的RAG召回的思路,再通过完整的工具执行生命周期来获取工具执行结果。

  • 槽位提取:通过传统nlp获取LLM将用户问题进行解析,包括常用的业务类型,标签,领域模型参数等等。

  • 工具选择:沿用静态RAG的思路召回,主要有两层,工具名召回和工具参数召回。

  • 工具参数召回,和TableRAG思路类似,先召回表名,再召回字段名。

  • 参数填充:需要根据召回的工具参数定义,和槽位提取出来的参数进行match

  • 可以代码进行填充,也可以让模型进行填充。

  • 优化思路:由于各个平台工具的同样的参数的参数名没有统一,也不方便去治理,建议可以先进行一轮领域模型数据扩充,拿到整个领域模型后,需要的参数都会存在。

  • 参数校验

  • 完整性校验:进行参数个数完整性校验

  • 参数规则校验:进行参数名类型,参数值,枚举等等规则校验。

  • 参数纠正/对齐,这部分主要是为了减少和用户的交互次数,自动化完成用户参数错误纠正,包括大小写规则,枚举规则等等。eg:

2.2.3 RAG评测

在评估智能问答流程时,需要单独对召回相关性准确率以及模型问答的相关性进行评估,然后再综合考虑,以判断RAG流程在哪些方面仍需改进。

评价指标:

EvaluationMetric
├── LLMEvaluationMetric
│   ├── AnswerRelevancyMetric
├── RetrieverEvaluationMetric
│   ├── RetrieverSimilarityMetric
│   ├── RetrieverMRRMetric
│   └── RetrieverHitRateMetric
  • RAG召回指标(RetrieverEvaluationMetric):

  • RetrieverHitRateMetric:命中率衡量的是RAG retriever召回出现在检索结果前top-k个文档中的比例。

  • RetrieverMRRMetric: Mean Reciprocal Rank通过分析最相关文档在检索结果里的排名来计算每个查询的准确性。更具体地说,它是所有查询的相关文档排名倒数的平均值。例如,若最相关的文档排在第一位,其倒数排名为 1;排在第二位时,为 1/2;以此类推。

  • RetrieverSimilarityMetric: 相似度指标计算,计算召回内容与预测内容的相似度。

  • 模型生成答案指标:

  • AnswerRelevancyMetric:智能体答案相关性指标,通过智能体答案与用户提问的匹配程度。高相关性的答案不仅要求模型能够理解用户的问题,还要求其能够生成与问题密切相关的答案。这直接影响到用户的满意度和模型的实用性。

RAG评测教程参考:
评估(Evaluation)https://www.yuque.com/eosphoros/dbgpt-docs/czgl7bsfclc1xsmh


如何系统学习掌握AI大模型?

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。

在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 2024行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

在这里插入图片描述

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方优快云官方认证二维码,免费领取【保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值