前言
“如果我们的时代是下一个工业革命,正如许多人所声称的那样,人工智能无疑是其驱动力之一。” -- 李飞飞《纽约时代周刊》专栏文章
距离 OpenAI 开发的划时代人工智能产品 ChatGPT 于 2022 年末面世,已经过去接近 2 年。这款强大的语言模型不仅激发了公众对人工智能的广泛关注,更点燃了业界对人工智能在各行各业应用潜力的无限想象。从那时起,大语言模型(LLM)以其强大的文本生成、理解和推理能力,迅速成为人工智能领域的焦点,并被视为引领新一轮工业革命的关键技术之一。风险投资数据平台 PitchBook 公布的数据显示,在今年 4-6 月,美国 AI 初创企业获得了 270 多亿融资,占总融资额的一半。
然而,随着人们不断惊讶于人工智能神奇能力的同时,也逐渐意识到 AI 当前存在的一些问题:幻觉(Hallucination)、效率、成本问题等。笔者在过去一段时间在工作和项目中或多或少实践过基于 LLM 的人工智能技术,对其原理及应用场景有一定理解,希望借助本文将目前 LLM 的心得所感分享给读者。
LLM 原理
为了理解为什么 ChatGPT 背后的 LLM 技术能赋予其灵魂,让它看上去几乎无所不能(回答问题、写代码、作诗等),我们得首先理解它背后的原理。限于篇幅我将略过一些技术细节,只将模型背后的基础原理用比较通俗的方式介绍一下。
Transformer
要介绍 LLM 原理,咱们不得不提到 2017 年谷歌研究团队发表的《Attention Is All You Need》这篇论文。这篇论文的主要贡献是提出了 Transformer 架构,它解决了传统序列处理模型(如循环神经网络、卷积神经网络)在处理长距离依赖问题时效率低下的问题,成为后来 LLM 的基础。Transformer 在论文中主要是为了解决语言翻译问题,其效果相较于传统翻译技术来说提升了一个档次。
Transformer 的架构颇为复杂,但其核心本质是将自然语言中的各个单词通过多层的神经网络组合巧妙的联系在一起,让模型能通过计算词与词之间的关联关系,或注意力(Attention),让模型能准确判断输入句子或对话要表达的意思。这为后来的大语言模型 BERT、GPT 提供了理论基础。
GPT
大家都知道如今大红大紫的 ChatGPT,而它字面上的意思是指能聊天的 GPT。这里的 GPT 实际上是指 OpenAI 在 2018 年发表的《Improving Language Understanding by Generative Pre-Training》论文,其中引入了 GPT 模型,全称为 Generative Pre-trained Transformer(翻译为生成式预训练 Transformer)。
可以看到,OpenAI 研究人员在谷歌的 Transformer 架构上更进一步,让其能够完成更复杂的自然语言任务,例如推理、问答、文本分类等。GPT 模型的主要进步点在于:跟基础 Transformer 相比,它不需要大量的标注数据,而主要依赖于非监督学习(Unsupervised Learning),也被称为预训练(Pre-Training)。通过大量语料数据预训练后的预训练模型(Pre-Trained Model),已经能够生成与人类表达高度近似的自然语言了。而为了让其能够完成特定任务,预训练后的模型会在人工标注数据上进一步训练,这个过程称为微调(Fine-Tuning)。微调的人工标注数据相较于未标注数据不会很多,但这个微调过程是持续迭代的,在多轮微调训练后,GPT 模型在各种自然语言任务上表现大幅度提升,同时也具有很强的泛化能力。
生成过程
我们在使用 ChatGPT、Gemini、Claude 这些对话式大语言模型产品的时候,你应该会注意到:当你问一个问题的时候,模型返回结果时,总是一个词一个词的输出的,就像咱们人类说话时一字一字说出来的一样。因此,你如果让 ChatGPT 帮你写一篇文章的时候,由于“说话速度”的限制,它通常会花不少的时间来输出一段完整的回答。LLM 的效率通常受限于其输出单词的速率。这其实是 Transformer 架构的设计原理:它在生成回答(也叫推断,Inference)时,总是根据已经输出的单词去预测并输出下一个单词,同时这个新生成单词也会作为下一轮预测的已输出单词来进一步预测之后的下一个单词,直到预测的单词会停顿词。这个过程被称为自回归(Auto-Regression)。因此,这个输出过程有多轮预测周期,输出的单词数就是预测周期数。例如,输出一篇 500 字的文章,模型就会产生 500 轮预测。从这里我们可以直观理解,目前 LLM 的输出时间正比于输出单词数,而这将限制一些 AI 应用的响应时间。例如,如果一个应用要求输出一个网页的 HTML 代码,用户将不得不等待几分钟的时间让它输出完代码中的所有关键字。
推理过程
大语言模型之所以叫大(Large),主要原因来自于它背后神经网络的参数数量,这通常是上亿级的规模。例如 Meta 发布的最新开源大语言模型,Llama 3.1,其最小规模的模型就有 80 亿个参数,最大的模型有 4,050 亿个参数。这么大的参数规模,主要来自于 Transformer 模型中神经网络层数和每一层包含神经元的个数,参数规模为它们的乘积。
为什么需要这么多参数?咱们可以简单理解为神经网络的规模效应:当神经网络的参数规模增加时,模型对语言的理解和推断能力将随之提升。目前 AI 研究人员还没办法像物理学家一样用几个简洁而优美的理论公式来准确理解这个规模效应,因此咱们目前看到的 LLM 基本上可以当作是“黑箱模型”,以至于研究人员沉思道:“It works. But why...”。
不过,有学者已经在尝试理解大语言模型产生智能背后的原理了。在《Towards Uncovering How Large Language Model Works: An Explainability Perspective》这篇综述论文中,阐述了多种 LLM 智能产生的规律。其中一些有意思的例子:大语言模型的浅层神经网络(靠近输入端)能学习简单概念,而深层神经网络(靠近输出端)能学习更复杂抽象的概念;大语言模型会经历一个“开悟”(Grokking)的过程,即在不断过拟合(Overfitting)过后突然能准确理解大部分含义,从而达到知识泛化(Generization)的结果(这是不是很像咱们的“举一反三”的学习过程?)。
LLM 问题
介绍了大语言模型的一些基础原理,我们可以回顾一下大语言模型目前存在的一些问题,以及如何在 AI 应用中缓解这些问题。
幻觉
LLM 幻觉(Hallucination) 是自 ChatGPT 问世以来大家一直诟病的问题。用通俗的话来讲,LLM 会时常一本正经的胡说八道。其主要的原因在于,LLM 在生成文本时并不是基于真实的理解,而是基于 统计概率 来预测下一个词。因此,当模型在训练数据中没有见过某些特定的上下文或信息时,它可能会生成看似合理但实际上错误的内容。
为了缓解幻觉问题,研究人员提出了多种方法,目前主流的方法是检索增强生成(RAG)、微调(Fine Tuning) 以及 智能体(Agent)。这些方法通过引入外部知识、优化模型参数和引导生成过程,能有效减少幻觉现象的发生。对 RAG 不了解的读者,可以参考笔者之前的博客文章《浅谈生成式 AI 技术:检索增强生成 RAG》和《实战 AI:使用Langchain构建高效的知识问答系统》。
效率问题
LLM 虽然具有强大的理解能力以及举一反三的泛化能力,但由于是基于 Transformer 架构,它的输出是按照 一字一字(Token by Token) 的方式来进行的。因此,LLM 的输出效率很大程度会受限于其实际的 Token 输出速率。此外,模型的计算复杂度随着输入长度的增加呈现平方级增长,这导致在处理长文本时效率显著下降。
尤其是智能体应用,通常需要多次 LLM 交互,其执行效率通常会受限于 LLM 输出效率。如果在提示工程中要求 LLM 输出长段的文字,会大大降低智能体应用的响应时长。因此,对于智能体应用开发者来说,需要严格控制 LLM 输出文本长度,这会有效提升智能体执行效率。
成本问题
虽然随着技术进步,大语言模型的成本在逐渐降低,但是其成本仍然是一个重要考虑因素。对于 LLM AI 应用开发者来说,成本计费模式会决定于其采用什么样的 LLM 服务。以下是当前主流的 LLM 服务模式。
- LLM API 服务:自 ChatGPT 发布以来,OpenAI、Anthropic 等 LLM 服务商都提供了 API 服务以支持 AI 应用开发者自定义开发各种各类的应用。其计费方式主要为令牌(Token)消耗数,即 LLM 输入、输出的文本长度。以 OpenAI GPT-4o 模型为例,如果要用其开发智能爬虫应用,让其分析一个中等长度的网页(20-50k tokens)并抓取结构化数据,其差不多需要消耗 0.2-0.5 美元(约 1-3.5 人民币)。在这种计费模式下,使用量越大,成本越高,因此更适合小规模用户的初创公司。
- 自建 LLM 服务:对于需要大规模使用 LLM 的企业,自建 LLM 可能更具成本效益。自建 LLM 的成本主要来源于显卡(GPU)采购、服务器维护和电力消耗。显卡的高性能需求和长时间运行带来的电费是主要的成本来源。通过模型压缩、量化、知识蒸馏和分布式计算等技术,可以有效降低计算资源的需求和电力消耗,从而减少成本。由于市面上有很多优秀的开源模型,例如 Meta 的 Llama、Mistral AI 的 Mistral 都可以被直接下载部署使用,开发者只需要关注运行 LLM 所需的硬件(显卡和服务器)。
LLM 应用
大语言模型出现之初,主要用于知识问答、文本总结、语言翻译等经典自然语言处理(NLP)应用场景。不过,随着人们的不断深入研究和挖掘,发现 LLM 还可以做更多意想不到的事情,例如编写代码、数据分析、任务规划等。
聊天机器人
在主流 LLM 应用场景中,主要包括各类智能问答的聊天机器人(Chatbot),例如 ChatGPT 最初就是一个综合性的聊天机器人。随后出现的各种 Chat with XXX 的所谓 AI 应用,也是基于大语言模型的增强型聊天机器人。相较于基础 Chat Bot,它们的额外功能在于能够通过 RAG 的形式根据上传的文档(如 Word、Excel、PDF 等)内容进行问答,仿佛帮助你“阅读”长篇文章并提高阅读效率。我之前开发的 思阅(SRead) 就属于这一类应用。
这些聊天机器人在多个领域都有广泛应用:
- 客户服务:自动回答客户常见问题,提供24/7的支持,减少人工客服的工作量。
- 教育:作为虚拟导师,帮助学生解答问题、提供学习建议和资源。
- 医疗:提供健康咨询、症状分析和医疗建议,辅助医生进行诊断。
- 电商:帮助用户查找产品信息、推荐商品和处理订单。
助手应用
助手(Copilot)类应用利用 LLM 的强大自然语言处理能力,帮助用户在各种任务中提高效率和准确性。这类应用可以覆盖多个领域,例如编程、办公、写作等。
- 编程助手:如 GitHub Copilot 和 JetBrains AI Assistant,可以根据用户输入的代码片段或注释,自动补全代码、生成函数和类,甚至帮助调试和优化代码,从而大幅提高开发效率。
- 办公助手:如 Microsoft 365 Copilot,可以在文档编辑、数据分析、日程安排等办公任务中提供智能建议和自动化操作,简化工作流程。
- 写作助手:如 Grammarly,可以帮助用户进行文本润色、语法检查、内容生成和结构优化,提升写作质量和效率。
这些助手应用通过与用户的自然语言交互,提供个性化的建议和自动化的解决方案,显著提升了用户的工作效率和体验。
智能体应用
目前,笔者认为 LLM 最具潜力的应用场景是 自动化(Automation),即利用 LLM 的 推理(Reasoning)、规划(Planning)、判断(Decision) 等 思考(Thinking)能力 配合能对现实世界进行 操作(Action) 的 工具(Tools),来完成自动化任务。而这样的会自我 “思考” 并自动执行任务的系统,我们称作为 智能体(Agent),有些会翻译为 代理。
智能体是当前人工智能领域的热门研究方向。无论是研究机构还是初创企业,都致力于开发能够创造实际商业价值的智能体。相比于大模型的训练和调优,开发智能体具有 成本优势。它不需要大量的硬件和数据资源,并且更容易在实际商业应用中实施和产生价值,因此具有更高的投入产出比(ROI)。
从本质上来看,前面提到了 Chat with XXX 应用和 Copilot 应用,都可以看作智能体应用的简单实现,它们只是将用户输入的文本根据特定的提示词(Prompt)或按照预设的标准流程(例如 RAG),让 LLM 进行一定处理,从而实现了其对应的功能。在这个章节提到的 Agent 泛指能进行一定程度思考从而可以执行复杂任务的智能体。
关于 LLM 智能体的理论,比较经典的文章来自于 OpenAI 研究员 Lilian Weng 的《LLM Powered Autonomous Agents》。作者在文章中提出了 LLM 智能体的基础框架,而一个完整的智能体需要包括 规划(Planning)、记忆(Memory)、工具使用(Tool Use) 这三个组成部分,如下图。
- 规划:智能体可以采用 思维链(Chain of Thought,CoT)、自我反省(Self-Reflection)、ReAct 等方式,分解复杂问题为多个简单问题,然后分而治之。
- 记忆:智能体可以利用对不同类型的记忆采取不同的处理策略。例如,短期记忆(Short-Term Memory) 可以用放入有限大小的 LLM 上下文(Context)中,而 长期记忆(Long-Term Memory) 则储存在更具扩展性的 向量数据库(Vector Database) 中。
- 工具使用:智能体可以调用外部工具或 API 来完成特定任务。例如,智能体可以使用搜索引擎获取最新信息、调用计算器进行复杂计算、访问数据库查询数据,甚至控制机器人执行物理操作。例如,OpenAI 的 Function Calling 就是智能体工具使用的标准框架,开发者可以为智能体定义它可以调用的函数(即工具),让 LLM 决定使用哪个工具、如何使用工具,操作工具返回的数据可以被加入到记忆中,供智能体进一步使用。
在过去一段时间中,笔者在工作项目中利用 LLM 开发了智能爬虫、数据分析的智能体应用,试图根据当前的智能体理论来进行项目实践。不过,在实践过程中,我对 Lilian Weng 文章中提到的基础智能体框架进行了优化,发现思维链等规划过程并不是必要的。LLM 已经足够聪明,能给出准确答案,并不需 “口述” 解释其行为背后的推理。这非常类似丹尼尔·卡尼曼(Daniel Kahneman)《思考,快与慢》中的 系统一,大脑可以根据环境快速做出直觉判断。这背后的原因可能在于,智能体完成特定任务的过程(例如,从网页中提取 XPath、用什么字段来聚合数据),可能并不需要做出非常复杂的思考,它只需要输出必要的信息,而不用做过多说明。这暗示着,智能体应用设计中的工具需要尽可能简单而明确。
限于篇幅限制,在智能体方面笔者仅仅是点到为止。后面有时间会专门撰写博客文章来补充说明 LLM 智能体相关的的内容。
总结
大语言模型(LLM)作为当前人工智能领域的关键技术,展现出了在文本生成、理解和推理方面的强大能力。无论是在办公协作、内容创作、客户服务,还是在更复杂的智能体应用中,LLM 已经逐渐深入到各行各业,开始改变我们的工作方式和生活体验。
然而,尽管 LLM 在一些应用场景中表现出色,但其在效率、成本和模型幻觉等方面的问题仍需进一步解决。同时,如何更好地结合 LLM 的推理能力与实际操作工具,开发出更加智能、自动化的解决方案,也是未来的研究和开发方向之一。
值得一提的是,在撰写本文的过程中,我也使用了写作助手来协助编写此篇文章的部分内容。或许你可以猜一猜,哪些部分是 AI 帮忙创作的呢?
社区
如果您对笔者的文章感兴趣,可以加笔者微信 tikazyq1 并注明 "码之道",笔者会将你拉入 "码之道" 交流群。