目前工程实践上,大家把优化的重点基本都放在了retrieve环节里,这里面涉及三个重要的问题:
目前工程实践上,大家把优化的重点基本都放在了retrieve环节里,这里面涉及三个重要的问题:1⃣howandwhatdoIretrieve:从传统的相似性检索、文本检索,到目前最常用的依托于embedding的语义检索,大家在实践中仍在不断迭代。Kiela后面也提到有研究希望把整个retriever过程做成一个模型,他也在课程中构想未来应该把retriever的训练也纳入到LLM的训练架构中。文本的embedding可简化理解为文本的向量化表达,并且可根据不同文本的向量化表达,判断出文本之间语义的远近亲疏关系。目前的文本emebedding也都是通过模型来实现的,这类模型也在不断迭代。OpenAI在今年1月份推出了text-embedding-3(small和large两版),相比其2022年12月推出的ada-002模型,在性能上获得了显著提升。用于多语言检索的常用基准(MIRACL)平均分数已从31.4%(ada-002)增加到44.0%(3-small)和54.9%(3-large)。附图之一是OpenAI对其textemebedding模型作用机制的示意。2⃣Whentoretrieve:一般就两种思路。一种是在获得检索范围后即retrieve,另一种是让模型判断何时retrieve。3⃣Howtoencode:如何编码也直接影响了如何检索的过程。其他问题:1⃣howtopre-process:实际上强调就是input要包含systemprompt,可设定角色、技能、任务、工作流、限制条件等。2⃣howtoprompt:涉及提示词工程的方法论。3⃣howtopasscontext:可以把context作为prompt的一部分以文本形式输入,也可通过代码的方式代入。4⃣howtopost-process:比如格式化输出的处理,如固定输出json格式,或固定在末尾输出reference列表等。5⃣howtoverify:指的是如何验证output的效果或质量,比如验证output与知识库的相关性、准确性等。最后,还有关于RAG整体架构的审视框架:1⃣Howtooptimize:各环节哪些地方可以优化。架构中已经列出的问题都是思考的重点。2⃣Howtolearn:这里的learn应该指的是机器学习的learn,探讨各环节从software1.0的静态架构向机器学习和software2.0的演进。3⃣howtoscale:如何应对规模化的问题。比如关于知识库如何chunk、何时编码,在知识库过大时就不适合提前预处理好chunk和编码。或者大量用户同时prompt该如何应对。前段时间判断过2024年会是RAG应用爆发的一年https://m.okjike.com/originalPosts/6602dca712ed2fda687ec0a3?s=ewoidSI6ICI2M2VlMjQ0NjhhMGY3NzVjODQyMmY1NzEiCn0=,自己在2B业务中也涉及RAG工程的落地,所以花了些精力来学习这节课。以上内容夹杂了不少自己的个人理解,欢迎批评指正,一起交流学习~links:StanfordCS25V42024春季课程(面向公众开放,有人想一起学习搭子么?)https://web.stanford.edu/class/cs25/StanfordCS25V3:RetrievalAugmentedLanguageModelshttps://www.youtube.com/watch?v=mE7IDf2SmJgRAG论文原文https://arxiv.org/abs/2005.11401OpenAItext-embedding-3modelshttps://openai.com/blog/new-embedding-models-and-api-updates?tOpenAItext-embedding-ada-002modelhttps://openai.com/blog/new-and-improved-embedding-model?tSoftware2.0byAndrejKarpathyhttps://karpathy.medium.com/software-2-0-a64152b37c35Kiela在讲这节课几个月后在其创立的ContextualAI正式推出RAG2.0https://contextual.ai/introducing-rag2/