AI 文摘

大模型RAG问答研发真实图鉴:一周出Demo,半年用不好,缝补之路漫漫





作者: 老刘说NLP 来源: 老刘说NLP

今天是2024年1月24日,星期三,我们来继续看看RAG的一些有趣的事儿,从社区一早的讨论开始。

image

一是AI大课中一周出Demo,半年用不好的RAG观点,这个比较现实。

二是讲的比较好的技术分享以及一些现实反馈,这个大家实际实践中所遇到的问题。

都很有趣,供大家一起参考。

一、从一周周出Demo、半年用不好说起

最近读了读2024-傅盛开年AI大课,其中有讲到RAG环节,三张片子比较有趣。

首先,用检索的方法配合大模型进行任务处理,可以很好的使用企业数据进行知识问答

这是继是当前为大家所熟知的RAG问答范式了。

image

其次,RAG开源框架很多,可现实很骨感

片子里的那句话说的很现实,一周出Demo,半年用不好

image

例如,目前已经开源的RAG框架包括12种【还不全面】,其中,排在前5的为大家所熟知:

1)LangChain: https://github.com/langchain-ai/langchain/

2)QAnythinghttps://github.com/netease-youdao/QAnything/tree/master

3)LlamaIndex: https://github.com/run-llama/llama_index/

4)langchainchat: https://github.com/chatchat-space/Langchain-Chatchat/releases/tag/v0.2.8

5) FastGPT :https://github.com/labring/FastGPT

6)langchain4j :https://github.com/langchain4j/langchain4j

7)Unstructured :https://github.com/Unstructured-IO/unstructured

8)GPT-RAG :https://github.com/Azure/GPT-RAG

9)Quivr :https://github.com/StanGirard/quivr

10)Dify :https://github.com/langgenius/dify

11)Verba :https://github.com/weaviate/Verba

12)danswer :https://github.com/danswer-ai/danswer

image

最后,给出的高级套件,其中涉及到知识预处理、语义理解和改写、混合检索引擎、自动化质量评估体系、微调效果校准等多个例子。

image

二、再看现实实践优化探索与真实反馈

最近社区分享了个工作《RAG探索之路的血泪史及曙光》(地址:https://zhuanlan.zhihu.com/p/664921095),读了一下,讲的也很不错,也有现场回放视频,推荐给大家读一读。

agent的技术发展流程:

image

朴素RAG的实现方式:

image

针对文本切割的一些经验:

image

此外,在chatglm金融问答比赛中的一些方案,地址:(https://pan.baidu.com/s/1VkC7OoAxMBWwDrIvHWrDyQ?pwd=adzd)

image

在总结侧,可以同时结合正则、关键词抽取、文档问答、ICL、分块文本信息加入标题等,提升效果。

image

当然,方案是方案,其中一些有趣的讨论:

Q:我对于RAG相当没有信心。两个问题实在让我跪了:1)Retrieval明明是对的。但是LLM根据Retrieval结果回答问题出错。睁眼说瞎话的几率还是明显大于用户可以接收的概率(用户一般只能接受0.1%的错误率);2)多跳逻辑无法通过Retrieval来做。比如查询Elon musk的兄弟叫什么名字,可能资料里只有Elon的妈妈是谁,Elon妈妈生了几个孩子。需要合成这个逻辑。优化prompt template+使用GPT4+使用CoT+使用reference generation+使用NLI,都没办法让错误率到1%以下。还是会偶尔胡编……

A: reasoning 还是有存在价值的,用 llm 推理是一条路径。不过也不唯一。好问题。第一个我们遇到过,最后通过优化 prompt template 和自定义答复模板解决;第二个建议试试用graph database 用来召回,特别适合解决多度和多跳关系。rag 使用 embedding 我只能说局限太大。

Q:第二个问题,不是graph能解决的。我刚才举的例子能用graph。实际上没法用Graph的例子海量。比如一些客服机器人在回答优惠券的组合使用的问题。

image

Q:提到的普通文本上下文检索优化中转为html方式后优化检索的方式我非常感兴趣,请问您知道是否有这方面的论文或者公开数据集吗?

A: 数据源有以下几种形式:Markdown。直接使用 Python-Markdown转化到 Html。pdf。可以找相关库转化为 Markdown,再转化为 Html,有些包也支持直接转。Html。拿来用即可。关于 Html 检索,是我自己实现的逻辑,主要阶段有两个:分片入库。

主要思路是,识别 html 中的 header,paragraph和 ol,ul 等标记。并将其转化为元数据,连同 embedding 的结果一同保存到vector store 中。

元数据应该包含:分片来自的源文件分片 id,应该符合源文件中出现的原始顺序递增。这个挺重要,会用于后面上下文检索。分片的 html tag,特别是需要通过 header 体现自己隶属于哪个层级。

检索。如果命中某个分片,则获取分片的元数据。然后根据所属的层级信息进行处理上下文补全:vector store 中当前层级的所有分片都找到。这里就不是基于 vector similarity 检索了,一个小技巧是将层级直接体现在字段中,按字段直接索引。如果发送给 llm context 还有剩余,可以再找兄弟平行层级;如果还有剩余可以找父层级。

总结

本文主要介绍了RAG现有的一些开源框架以及后续实践环节中大家真实的感受。实际上,RAG作为一个技术方案,目前已经有很多,大家都大差不差。

目前,大模型和RAG等技术方案的开源,极大地拉开了大家的门槛,这是好事情,对推动技术和业务发展。但这个有不是好事情,这加剧了公司的竞争。

丢掉幻想,打磨细节。

参考文献

1、傅盛2024开年AI大课PPT

2、https://zhuanlan.zhihu.com/p/664921095

关于我们

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。

对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。

更多AI工具,参考Github-AiBard123国内AiBard123

可关注我们的公众号:每天AI新工具