基于langchain的rag案例(机器人、客服助理、知识库问答、文档问答)已经很多了,例如:
- 基于LangChain+LLM的本地知识库问答
- LangChain + ChatGPT 实战应用:AI销售客服
- 徒手使用LangChain搭建一个ChatPDF
- 基于LangChain+GLM搭建知识本地库
- 基于LangChain + LLama2 打造智能小助手
- 用LangChain和Llama 2打造心灵疗愈机器人
这里就聊点实际的:企业生产落地的LLM+RAG+知识库需要解决那些问题?
RAG = 各类文档预处理 + Query理解+文档召回 + LLM + 全链路评测
插播一下:大家认为LLM+RAG+知识库产品是适合ToC还是ToB场景?如果产品由ToB转向ToC,大家认为有钱途吗?😐
【一】文档预处理
问题描述:
Query1:星源材质成立于哪一年?
Query2:星源材质是怎么样的公司?
如果使用传统的技术标点符号+最大长度切分方法,将文档切分成如下两个片段,那么上面的两个query,RAG系统无法准确、全面回答,因为:缺少关键主体信息、分点内容被切分到不同段落。
参考方案:
整体方案:片段 = 全文关键信息 + 段落关键信息 + 段落内文本片段
推荐几个常见格式处理工具:
1、docx文档推荐开源库docx,可以解析文档的结构:页数、页眉、页脚、段落、章节、图片、表格都能抽取
2、pdf格式推荐开源库pdfplumber、pdfminer、Camelot,不像docx那么好用,毕竟比按纯文本格式处理香
3、txt格式这个不好处理,采用语义切分优化
【二】Query理解
问题描述:
TA们以为的用户Query1:知识库里面有多少文章?
TA们以为的用户Query2:深圳出差住宿标准是多少?
真正的用户Query:住宿
企业生产环境,用户真正的Query往往是不规范、随意性大,关键词式的提问居多,语义完整且表达规范的Query不多,因为大多数用户还是习惯搜索式提问,不想输入太多内容,以为AI就是万能的,规范式提问习惯还没养成。
只有一个关键词“住宿”,它的含义有很多种可能:“住宿是啥”、“住宿标准”、“住宿报销”,即使是人看到了,也很难准确把握用户含义,更别说是机器。
参考方案:
1、Query理解:意图识别,Query改写,Query补全,具体方法可以用BERT来做,类似的案例和博客有很多,比如:"大话搜索query理解”;当然也可以基于LLM训练一个LoRA来解决;
2、类似“知识库里有多少文章”等功能性问答可以考虑Function Call来解决。
【三】文档召回
问题描述:
Query1:公司年假是怎么规定的?
Query2:A股市场行情如何
如果召回的文档是这样的:
Query1召回文档:
xxx公司考勤管理办法2024版
xxx公司考勤管理办法2023版
xxx公司考勤管理办法2022版
Query2召回文档:
A股收评分析20240105
A股收评分析20240104
A股收评分析20240103
A股收评分析20240102
把上面数据喂给LLM,它就变得emo了
参考方案:
方案1:就是召回阶段做好预处理,就是召回策略做一些过滤了,让进入到LLM的数据尽量不出现歧义
方案2:sft阶段加一些类似数据😐
------------------------------------美丽分割线-----------------------------
欢迎留言交流,也可关注公众号交流:PaperAgent