引言:
在问答和对话的场景下,通常可以通过检索和生成两种方式得到一个回复。
检索式回复是在外部知识库中检索出满意的回复,较为可靠和可控,但回复缺乏多样性;而生成式回复则依赖于强大的语言模型中储存的内部知识,不可控,解释性差,但能生成更丰富的回复。
把检索和生成结合起来,Facebook AI research 联合 UCL 和纽约大学于 2020 年提出:外部知识检索加持下的生成模型,Retrieval-Augmented Generation (RAG) 检索增强生成。
检索增强方法来克服大型语言模型(Large Language Models, llm)的局限性,比如幻觉问题(胡言乱语)和知识有限问题(常用于补充最新知识、公司内部知识)。随着 RAG 的出现,大家发现在现阶段的很多企业痛点上,使用 RAG 好像是更好的解决方案。
那么 GenAI 具体该如何定义?现阶段 LLM 的限制是什么?RAG 技术在应用中又存在哪些挑战?
RTE 开发者社区 Master、声网合伙人 & 技术VP @冯越 作为 AI 领域资深从业者与实践者,以及一名曾经的游戏黑客(业余时间开发的 Diablo II 游戏外挂 d2hackmap 在全球有上百万用户),在本文中为大家给出了他的思考与答案。
本文为RTE 开发者社区用户投稿内容,期待更多社区小伙伴与我们分享、交流。以下正文:
GenAI 科普
以 ChatGPT 为代表⼤语⾔模型(LLM),属于 GenAI(generative AI,也称⽣成式 AI),是⼀项⾰命性技术。其意义类似于 PC 和互联⽹,将在未来 20 年颠覆各个传统领域。之所以说 Chat GPT 是⼀项⾰命性技术,是因为它在历史上让计算机首次拥有了智力,可以进行分析和逻辑推理,并且掌握了⼀定知识,相当于人类的⼤脑。
当前关于⼤模型应⽤领域的探索,聚焦在两⼤⽅向:RAG(Retrieval Augmented Generation,检索增强⽣成)和 Agent。
LLM、RAG 和 Agent 都属于 GenAI 领域的技术,简单解释⼀下这三者之间的关系。
LLM 相当于人类的大脑,可以进⾏分析和逻辑推理,并且掌握了⼀定知识(从预训练和微调中获得)。在其掌握的知识范畴内,它可以很好的回答各种问题。但是它的知识是有限的,因为训练有截⽌⽇期,私有领域的知识在训练时也⽆法获取。但由于它拥有智⼒,我们可以扩充知识,让它在更⼤的范围或特定的领域内回答原本不能回答的问题。
RAG 相当于图书馆。⼤脑的容量有限,不可能掌握所有知识,但是图书馆可以。通过建设图书馆,在馆内保存⼤量的书籍,并对其分类、建索引。我们就可以在回答问题时,先根据问题检索出合适的书籍,然后把书籍和问题⼀起给 LLM,让它根据给定的书籍回答问题。这就是 RAG 的⼯作原理。
Agent 相当于佣人,负责执⾏指令。佣⼈可以有多种分⼯,类似于司机、清洁⼯、厨师等,作⽤不同,各司其职。LLM 只是⼤脑,可以根据⾃⾝或者外部的知识进⾏推理给出解决⽅案,但是它并不做执⾏。Agent 的作⽤就是能执⾏LLM 给出的解决⽅案。Agent 的⼯作原理⼤概是这样,假设你有多个 Agent,先向 LLM 注册,通过规范的形式说明每个 Agent 的功能,以及下达指令的⽅式。
针对⽤户提问,LLM 进⾏推理,根据已注册的 Agent 信息,它会选择合适的 Agent,并⽣成执⾏指令,然后把指令返还给请求⽅,让请求⽅⾃⼰执⾏。
这样,有了⼤脑(LLM)、图书馆(RAG)和佣⼈(Agent),计算机就是⼀个完全⾃主的智能体,能推理、能获取知识、能⾃主执⾏。这⼀切的关键,都在于 LLM 让计算机拥有了智力。
当前 LLM 的限制
当前 ChatGPT-4 为代表的 LLM 的⽔平,做个类⽐,我觉得相当于 1970 年代末的 8086/8088 CPU,它让 PC 成为可能,但是因为运算速度很慢、物理内存⾮常有限,很多事情还做不了。
为了在极其有限的算⼒和内存上写出有⽤的程序,⼯程师们必须精打细算,仔细编写每⼀条指令和⽤好每⼀字节的内存。随着时间的推移,算⼒和内存在今天都不是问题,⼯程师们就可以把精⼒放在应⽤和业务逻辑上,⽽不是优化性能。
当前 LLM 应⽤领域的开发情况也类似。LLM 就像当年的 CPU,算⼒有限,还有 token 限 制。token 相当于物理内存,LLM 输⼊和输出的内容,不能超过最⼤token 的限制。⼯程师们的⼤部分精⼒,都花在了如何精打细算,充分⽤好有限的 LLM 算⼒和 token 上,⽽不是在应⽤和业务逻辑上。但是类似于 PC 的发展,随着时间的推移,LLM 的算⼒和 token 限制。
问题也都必将解决。另外,也会有更多的基础设施,提供更⾼级的抽象,让应⽤开发更⽅便。⽐如 PC 的操作系统提供了硬件抽象层以及虚拟内存管理,让应⽤开发者不再操⼼底层细节。
GenAI 领域也类似,⽐如 MemGPT 这个项⽬,⽬的是引⼊虚拟 token 机制,类似于虚拟内存,让 GenAI 应⽤开发者不再为物理 token 的限制⽽烦恼。
RAG 技术应用中的挑战
理论上,我们可以建设⼀个⽆所不包的图书馆,让 LLM 拥有⼀切知识,但是由于算⼒和 token 的限制,我们并不能在处理每个问题的时候,把所有书籍都交给 LLM。更合理的做法是,针对每个问题,先在图书馆内进⾏检索,找到正确的书籍,把它作为限定知识交给 LLM 回答问题。
因此检索的正确与否⾄关重要。为了检索的准确和⾼效,需要事先对书籍建⽴索引。这⾥⾯会⽤到⼀个关键技术:语义搜索(Semantic Search),也就是常说的 embedding。
embedding 技术从数学上很好理解,它能把⼀切信息转换为数学上的多维空间⾥的点,判断两条信息在语义上有多相似,在数学上就是计算它们之间的距离有多近, 也就是算点积。
所以根据问题检索书籍,就变成了根据问题对应的点坐标,在图书馆内找到距离它最近的那本书。
原理上虽然简单,但是在具体实践上,有很多⼯程问题需要考虑,⽐如:
问题很短,⼀般就是⼀个句⼦。书籍很⻓,由句⼦、段落、章节组成。因此它们之间的⽐较不在⼀个数量级上,简单地计算相似度可能效果不佳。更好的做法可能是,把书籍拆成很多句⼦和段落,建⽴很多索引,关联到同⼀本书。
另外,不同的书籍可能有⼤量相似的内容,语意搜索⽆法判断哪⼀本书更合适。⽐如,⼀个图书馆⾥保存了世界各国的法律书籍。给定同样的问题:“盗窃罪如何处罚?”由于各个国家的法律规定都不⼀样,单纯靠语义搜索,找到的书很可能不是你想要的。理论上导致检索错误的原因是问题本⾝不够精确,但是在现实世界中,用户的提问往往就是不精确的。
解决这个问题,需要使⽤多种⼿段。⽐如,通过位置服务,我们发现提问的⽤户在新加坡,那我们就可以把问题改进为:“在新加坡,盗窃罪如何处罚?”这就精确多了。为了快速检索出新加坡的法律书籍,就需要事先进⾏分类建档。
当然我们也可以模仿现实世界的常规做法,先和⽤户反复沟通,确保提问⾜够精确再做检索。这需要智⼒,要把问题提交给 LLM 进⾏推理。当前 LLM 算⼒有限、响应也慢,还有成本开销,不太划算。
还有另外的⼿段,⽐如有的公司,致⼒于研发更好的 embedding model,提⾼语义搜索的性能。它的价值在于,即使是对于⾜够精确的问题:“在新加坡,盗窃罪如何处罚?”,图书馆⾥仍然可能有多本关于新加坡盗窃罪的法律书籍,好的模型能更好地对提问建模,匹配到更合适的书籍。
总之,为了提⾼检索的准确性,需要使⽤多种⼿段,⽐如给⼀本书建⽴多个索引、分类建档等等。GenAI 的终局,我⽐较认同 Elon Musk 的观点:“我们能期待的 AI 最好的样⼦,是实现 AI⺠主,意味着没有哪⼀个公司或者哪⼀个⼩团体可以掌控 AI 技术。”AI 民主具体指什么,我觉得有两点很重要:设备端 AI 的普及和开源 LLM。由少数寡头公司控制的云端闭源 AI,对⼈类的未来绝对不是好事。
我相信设备端算⼒⼀定会提升到⾜以运⾏LLM 推理,⽽开源 LLM 的未来就像 Linux,⼀定会在 AI 操作系统之战中占领半壁江⼭。具有理想主义精神的杰出⼯程师们,⼀定会付诸实现的。(正文完)