以下是关于 RAG、Agent 与小模型的相关知识:
Agent:
RAG:
小模型:文中未提及小模型的相关具体内容。
其实只要看过官方文档的应该都能知道,大模型请求中,最大的两个变量:Messages和Tools。Messages里面放的是sys prompt,memory,user query;Tools里面放的是一些能力的Json Scheme;而这两者组合在一起,就形成整个完全的Prompt。所以Agent应用开发的本质是什么?动态Prompt拼接。通过工程化的手段,不断把业务需求转述成新的prompt。短期记忆:messages里的历史QA对;长期记忆:summary之后的本文,再塞回system prompt;RAG是啥?向量相似性检索,然后放在system prompt里或者通过tools触发检索Action:触发tool_calls标记,进入请求循环,拿模型生成的请求参数进行API request,再把结果返回给大模型进行交互;没有tool_calls标记了,循环结束。对应页面上就是对话一轮对话结束。Multi Agents是啥?把system prompt和tools换一换,A就变成B了。还有啥?没了呀,本质就是这些东西。当然,这也就是最基本的原理,想做深,做好,肯定还有很多坑需要踩。
agent算是从年前到现在,比较火的一个概念了,也被很多人认为是大模型的未来的一个主要发展方向。首先我们看这个很经典的一张图看起来还是蛮复杂的,然后市面上的很多描述agent的文章写的也比较复杂,说智能体是啥智能的最小单元,相较于copilot,是可以给他设定一个目标后主动完成任务的等等。当然这些说法都没错,但是我觉得还是有些不好理解的。所以我们依然先从原理着手去理解下,agent是个什么东西。首先这张图里,中间的“智能体”,其实就是llm,或者说大模型。四个箭头,分别是我们为llm增加的四个能力。工具、记忆、行动、规划。那么这个是怎么新增的呢?目前行业里主要用到的是一个叫langchain的框架,这个框架可以简单理解为,他把llm和llm之间,以及llm和工具之间,通过代码或prompt的形式,进行了串接。这个其实也像是在rag的基础上再进了一步。因为我们知道rag其实是给了大模型一个浏览器工具来使用嘛,那agent,其实就是给了大模型更多的工具。比如像是长期记忆,其实就是给了大模型一个数据库工具让其往里记录重要信息。规划和行动,其实就是在大模型的prompt层做的些逻辑,比如让其将目标进行每一步的拆解,拆解完成后,每一步去输出不同的固定格式action指令,给到工具作为输入。当然langchain或者说agent还不止这些,也会有很多其他的代码逻辑体现在其中,不过其主要的主干逻辑,其实还是在prompt层和工具层,完成的设计。
大语言模型技术的本质导致了大模型的输出结果具有不可预测性,此外,静态的训练数据导致了大模型所掌握的知识存在截止日期,无法即时掌握最新信息。因此,当我们将大模型应用于实际业务场景时会发现,通用的基础大模型无法满足我们的实际业务需求。主要存在以下原因:知识的局限性:模型自身的知识完全源于它的训练数据,而现有的主流大模型(ChatGPT、文心一言、通义千问…)的训练集基本都是抓取网络公开的数据用于训练,对于一些实时性的、非公开的或离线的数据是无法获取到的,这部分知识也就无从具备。幻觉问题:大模型的底层原理是基于数学概率的文字预测,即文字接龙。因此大模型存在幻觉问题,会在没有答案的情况下提供虚假信息,提供过时或通用的信息,从可信度低非权威来源的资料中提供结果等。数据安全性:对于企业来说,数据安全至关重要,没有企业愿意承担数据泄露的风险,将自身的私域数据上传第三方平台进行训练。因此如何大模型落地应用时如何保障企业内部数据安全是一个重要问题。而RAG是解决上述问题的一套有效方案。它可以让大模型从权威的、预先确定的知识来源中检索、组织相关信息,更好地控制大模型生成的文本输出,并且用户可以深入了解LLM如何生成最终的结果。并且,RAG可以和微调结合使用,两者并不冲突。RAG类似于为模型提供教科书,允许它基于特定查询检索信息。这该方法适用于模型需要回答特定的询问或解决特定的信息检索任务。然而,RAG不适合教模型来理解广泛的领域或学习新的语言,格式或样式。微调类似于让学生通过广泛的学习内化知识。这种方法当模型需要复制特定的结构、样式或格式时非常有用。以下是RAG与微调从维度方面的比较:参考资料:《Retrieval-Augmented Generation for Large Language Models:A Survey》(https://arxiv.org/pdf/2312.10997.pdf)