RAG经验论文《FACTS About Building Retrieval Augmented Generation-based Chatbots》笔记

FACTS About Building Retrieval Augmented Generation-based Chatbots》是2024年7月英伟达的团队发表的基于RAG的聊天机器人构建的文章。

这篇论文在待读列表很长时间了,一直没有读,看题目以为FACTS是总结的一些事实经验,阅读过才发现FACTS是论文定义的RAG-based chatbots的五个维度:freshness (F), architectures(A), cost economics of LLMs ©, testing (T), security (S)的缩写。

论文说在英伟达内部用RAG和LLM构建三个chatbot,如论文表1所示。基于这些chatbot构建经验总结了一套方法论。

WeChatWorkScreenshot_1bf27dc6-5e87-4a96-addf-8593ed4dfa88

这两年RAG很火,但是构建好一个基于RAG的聊天机器人并不是件易事,要考虑RAG流程的工程化、微调LLM、prompt engineering、保证召回知识的相关性和准确性、文件访问控制、生成精确的回复并包括参考资料以及保护个人敏感信息等等。因此论文总结了如论文图1和图4所示的15个RAG流程中的控制点(吐槽一下论文中所有的图片都不够清晰)。

WeChatWorkScreenshot_f1c8dca0-c689-4e46-ba88-df89ab7a4676

WeChatWorkScreenshot_df3e2325-9290-4239-8857-59f0fd689f43

为了避免在公司内部重复地开发一些构建chatbot需要的功能如安全、护栏等,开发了如论文图7所示可插拔架构的模块化平台NVbot。平台支持domain-specific, enterprise-wide, copilot三种不同的chatbot变体。

WeChatWorkScreenshot_6eb677ed-10da-4b80-b69c-10c611d2203b

一些论文提到的细节:

  • 为了提高检索相关度:进行了Metadata增强、查询改写、使用grid-search方法来寻找合适chunk大小、测试不同的chunk rerank策略等;使用混合搜索(Lexical search+向量搜索)。
  • 对于一些复杂问题,比如“compare the revenue of NVIDIA from Q1 through Q4 of FY2024 and provide an analytical commentary on the key contributing factors that led to the changes in revenues during this time”,要使用agent或multi-agent架构才能回答出来,论文使用了如图2所示的将一个问题拆成多个问题的agent方式。

fa

  • 微调Llama3-70B后在保持可接受的延迟下可得到挺不错的答案质量

WeChatWorkScreenshot_8c4682ee-175d-47f8-9dfe-5e38b1ce9439

  • Unstructured.io等专门从PDF中提取结构化内容的工具有助于解析和分块非结构文化。如果文档的结构固定比如SEC相关的文档,使用section-level的分割,用section title和subheading来分割并将它们加入到chunk的上下文有助于提升检索相关性。
  • 使用RAGOps/LLMOps监控工具来监控RAG流程,使用如Ragas等评估框架。
  • 用内部LLM Gateway来统一管理使用的商用LLM API,可以简化LLM使用、订阅和数据跟踪的安全审计。
  • 包含安全测试、prompt修改测试、反馈回路等用来测试chatbot的手段。
  • chatbots的数据访问有Access Control Lists (ACLs),用Nemo Guardrail对输入和输出进行处理。

总结:这篇论文介绍了基于RAG的chatbot的五个维度,论文按照这五个维度列举了一些经验,可以对照看看有哪些自己在开发过程中没有考虑过的点,不过总体来讲论文在详细实现上讨论的不够多。

### Retrieval-Augmented Generation (RAG) 介绍 检索增强生成(Retrieval-Augmented Generation, RAG)是一种用于优化大型语言模型输出的技术,使这些模型可以在生成响应前引用其训练数据源之外的权威知识库[^2]。 #### 原理 RAG 的核心原理是在生成文本的过程中引入外部信息。具体来说,在接收到一个问题或提示时,系统首先评估是否有必要执行检索操作。如果有,则会从预先定义的知识库中查找多个相关的文档片段。随后,这些文档被用来辅助生成更精确、更有依据的回答。此过程不仅限于简单的拼接已有的文字;相反,它涉及复杂的自然语言理解和生成机制,确保最终产出既忠实于原始资料又流畅自然[^3]。 #### 实现方式 实现 RAG 主要分为几个阶段: - **预处理**:准备高质量的知识库供后续检索使用。 - **检索模块**:当接收输入后,决定是否启动检索流程,并挑选出若干候选文件片断。 - **多文档理解与摘要提取**:并发解析所选中的各个文档部分,提炼有用信息。 - **排序选择最佳回应**:综合考虑上下文连贯性和准确性等因素,选出最适合的答案返回给用户。 此外,还有一种变体称为KG-RAG,即结合了知识图谱技术的版本,进一步增强了系统的语义理解和关联发现能力。 #### 应用场景 得益于能动态访问最新资讯的特点,RAG 特别适合应用于那些需要持续更新专业知识域的应用场合,比如医疗咨询、法律服务等领域。同时,在教育辅导方面也展现出巨大潜力——可以即时获取教科书级解释说明,帮助学习者更好地掌握知识点[^4]。 ```python def rag_process(query): """ 模拟一个简化版的RAG工作流 参数: query (str): 用户提出的查询请求 返回: str: 经过RAG处理后的回答 """ # 判断是否需要检索 need_retrieve = decide_if_need_retrieval(query) if not need_retrieve: return generate_answer_directly(query) documents = retrieve_documents(query) processed_docs = parallel_process(documents) best_response = select_best_response(processed_docs, query) return best_response def decide_if_need_retrieval(query): """模拟决策逻辑""" pass def retrieve_documents(query): """模拟文档检索功能""" pass def parallel_process(documents): """并行处理多个文档""" pass def select_best_response(candidates, original_query): """基于一定标准筛选最优答案""" pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值