


























这节课就是传说中的 Stanford CS 25 中的一节讲座 < Retrieval Augmented Language Models >。授课人就是 RAG 论文的作者之一 Douwe Kiela,课程中他分享了一个检索增强语言模型的架构图,其实就是关于 LLM (大语言模型) 如何做 RAG (检索增强生成) 的框架。

这张图重要到让我觉得,LLM 做 RAG 只要记住这一张图就够了。所有相关概念和工程实践中的权衡,全都涵盖在这张图的架构和问题中了。
这个架构主要包括 input、prompt、通过 retriever 检索增强生成的 context,然后把这三部分一起输入给 generator 即模型,最终输出 output 作为结果。

input 可理解为既包含 system prompt,又包含用户输入的检索范围的指向,而 prompt 则强调用户输入的指令。
retriever 的作用机制,我理解类似于在图书馆借书的过程,提供书名 (query) - 系统查找图书编号 (query编码) - 对应书架书籍编号 (docs编码) - 找到并借出图书 (context)。
retriever 和 context 之间可加一步 reranker 架构,对检索结果按特定规则进行重新排序。reranking 的机制既可通过模型判断,也可在模型基础上预设特定规则。
目前工程实践上,大家把优化的重点基本都放在了 retrieve 环节里,这里面涉及三个重要的问题:
从传统的相似性检索、文本检索,到目前最常用的依托于 embedding 的语义检索,大家在实践中仍在不断迭代。Kiela 后面也提到有研究希望把整个 retriever 过程做成一个模型,他也在课程中构想未来应该把 retriever 的训练也纳入到 LLM 的训练架构中。
一般就两种思路。一种是在获得检索范围后即 retrieve,另一种是让模型判断何时 retrieve。
如何编码也直接影响了如何检索的过程。
实际上强调就是 input 要包含 system prompt,可设定角色、技能、任务、工作流、限制条件等。
涉及提示词工程的方法论。
可以把 context 作为 prompt 的一部分以文本形式输入,也可通过代码的方式代入。
比如格式化输出的处理,如固定输出 json 格式,或固定在末尾输出 reference 列表等。
指的是如何验证 output 的效果或质量,比如验证 output 与知识库的相关性、准确性等。

最后,还有关于 RAG 整体架构的审视框架:
各环节哪些地方可以优化。架构中已经列出的问题都是思考的重点。
这里的 learn 应该指的是机器学习的 learn,探讨各环节从 software 1.0 的静态架构向机器学习和 software 2.0 的演进。
如何应对规模化的问题。
今天上半年判断过2024年会是 RAG 应用爆发的一年,自己在 2B 业务中也涉及 RAG 工程的落地,所以花了些精力来学习这节课。以上内容夹杂了不少自己的个人理解,欢迎批评指正,一起交流学习。
注:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。