LLM 探秘:基础知识、应用与未来发展
大型语言模型(LLM)是人工智能领域的核心工具,基于深度学习技术实现自然语言的理解与生成。本文将系统梳理 LLM 的基础概念、发展历史及与 NLP 的关系,重点探讨提示词工程、本地知识库构建(RAG)、LangChain 框架以及智能体(Agent)与工作流的应用实践。
LLM 基础知识
1.1 LLM 是什么
从字面意思来讲,LLM 是 Large Language Model 的缩写,意为大语言模型。它是一种基于深度学习技术的自然语言处理工具,能理解和生成文本。通过大量语料库训练,LLM 在翻译、写作、对话等任务中展现出卓越的能力。常见的应用包括自动问答、生成文本、文本摘要等。由于其多模态特性,LLM 还可用于图像和音频处理,为多领域带来创新可能。
1.2 LLM 与 NLP 的关系
1.2.1 LLM 与 NLP 到底啥关系
自然语言处理(NLP)关注的是对自然语言的理解和处理,而 LLM 则是一种强大的模型范式,用于生成和理解自然语言文本,为各种 NLP 任务提供基础和支持。
从定义上:NLP 是人工智能领域的一个子领域,专注于研究和开发使计算机能够理解、处理、生成自然语言文本的技术和方法。而大型语言模型(LLM)是一类基于深度学习的模型,旨在模拟和生成自然语言文本的模型。
从目标上:NLP 的主要目标是让计算机能够像人类一样理解和处理自然语言,包括语言的语法、语义、语用等方面。而 LLM 的主要目标是通过大规模的训练数据来学习自然语言的规律,并能够生成具有语义和语法正确性的文本。
1.2.2 LLM 对回答准确性的定义
对于 LLM 来说,生成具有语义和语法正确性的文本还不够。生成的文本和问题如何对应上?例如:
问题:2022 年 NBA 总冠军是谁?
回答:'我认为这个意大利面,就应该拌 42 号混凝土,因为这个螺丝钉的长度很容易影响到挖掘机的扭矩'
单纯从语义和语法正确性貌似没有很大的问题,但是确并没有回答我的问题。这段话在语法上是正确的,但在语义上却是显得荒谬和不可理解的。虽然这段话在逻辑上没有意义,但在生成语法正确的文本时,只是做到了语法正确(syntax correctness),还需要做到语义合理(semantic plausibility)。
一个理想的 LLM 模型除了语法和语义正确外,还应该具备的能力是:上下文匹配以及一致性。展开来说,就是回答要能准确对应提问的内容和主题并且回答应该与问题保持一致,不发生语义偏离或者逻辑断裂。
此外,确保信息的准确性也是必不可少的优秀品质。LLM 通过下面几点来保证回答的正确性:数据训练、持续学习、上下文理解、多模态输入、人工审核、领域适应性。
1.3 LLM 的发展历史
如果说,在 LLM 的发展过程中有哪些重要的里程碑事件的话,2017 年 Vaswani 等人提出了 Transformer 架构绝对是能算得上之一。
Transformer 架构是一种基于自注意力机制的神经网络结构,它完全颠覆了之前以循环神经网络(RNN)为主导的序列建模范式。Transformer 架构的出现,实现了并行计算和高效的上下文捕获,极大地提高了自然语言处理的性能。可以说,先有 Transformer,后有 GPT 以及 BERT。
ChatGPT 是 GPT-3.5 的微调版本,本质上是一个通用聊天机器人。在 2022 年 11 月推出,推出后仅仅两个月,就达到月活过亿。ChatGPT 的发布可以说是'横空出世'。
1.4 LLM 的一些基本概念
1.4.1 LLM 中的参数规模
GPT3 在训练时使用了 175B 的参数。这里的 B 是 Billion 的缩写,175B 就是 1750 亿个参数。参数数量,简单来说,就是模型在学习时用来调整自身以适应数据的那部分'旋钮'。每个参数就像是一个可以微调的设置,模型通过调整这些参数来更好地理解和生成语言。
当我们说一个模型有 1750 亿个参数时,这意味着模型内部有 1750 亿个这样的旋钮。这个数字越大,通常意味着模型的表示能力越强,因为它可以捕捉到更复杂的数据模式。但同时,这也意味着模型需要更多的数据和计算资源来训练。
不过,要注意的是,参数多并不总是好事。如果参数过多,而训练数据不足,模型可能会过拟合,也就是说它在训练数据上表现得很好,但在未见过的数据上就不怎么样了。所以,参数数量和训练数据的平衡非常重要。
使用 1000 张 NVIDIA 80GB A100 GPU(理论算力是 312 TFLOPS)显卡需要 22 天,花费 81.6 万美刀才能训练完。ChatGPT 的 token 贵的原因除了训练模型比较耗钱外,我们向 LLM 发起请求时,每个请求都会在 LLM 的内部发起比较复杂的运算,这些运算对硬件的要求也很高,所以每次发起请求时都有不少的运行时成本。
1.4.2 LLM 的离线模型
安全是第一位的,我们在使用在线 LLM 时一定要注意信息安全。其实如果条件允许的话,我们可以考虑使用离线模型来助力我们的工作。
相比于在线模型,除了延迟比较小、资源消耗比较少之外,离线模型最大的特点是比较安全,不用把请求发给不受控制的 LLM。一般来说,在 Mac Book M3 上能跑的模型包括:Tiny-BERT、GPT-NEO 等模型,这些模型的参数从几百万到几千万不等。离线模型的部署方案比较成熟,每个离线模型的部署都有可以参考的文档。
除了这种离线模型外,云厂商也为我们提供了更安全、功能更强大的在线模型的平台。在这个平台上,我们可以进行数据管理、模型训练、模型调试、模型部署以及模型评测等工作。一般来说,根据业务需求可以使用一些通用或者某些垂域的模型进行微调训练,再将训练后的模型进行部署。这种方式进行训练部署的模型兼具了高安全性和高能力的特点。
LLM 应用
2.1 LLM 的主要应用方式
关于 LLM 的基础知识,我们前面已经基本把 LLM 是什么,LLM 应该具备哪些特性,LLM 的主要发展历史给讲清楚了,又介绍了什么是在线 LLM 模型,什么是离线 LLM 模型。接下来我们梳理下在应用层面 LLM 有哪些典型的能力和应用。
据我所知,LLM 具备非常强大的文本处理能力,展开来说,包括文本的摘要、推理、转换以及扩充的能力。
在我整理的思路中,将 LLM 的应用可以被看成两种主要的应用,一种我定义为基础应用,一种定义为工作流的应用。其中基础的应用在我看来基本都可以归纳为:问答系统,即一个向'无所不知'的 LLM 提问,由 LLM 来解答并给出结果的一个系统。
从交互形式来看,问答系统有 API、web 页面对话、app 交互、智能客服和 IDE 插件等类型。从实现路径上看,这里主要讨论知识库系统的构建和提示词工程这两点。
2.2 提示词工程
提示词工程,也称为 Prompt Engineering,是一种致力于优化和提高大型语言模型(LLM)输出质量的技术和方法。它主要关注如何设计、构造和优化提示词(Prompt),以引导 LLM 生成更准确、更有用、更符合用户需求的文本。
2.2.1 提示词工程小技巧
编写清晰而具体的提示:这是确保 LLM 能够准确理解用户需求并作出相应回应的基础。清晰的提示应该明确表达用户想要 LLM 做什么,提供足够的上下文信息,并尽可能具体地描述期望的输出结果。例如,通过使用分隔符来清晰地表示输入的不同部分,要求结构化的输出,以及要求模型检查是否满足特定条件等。一个小 tips:在和 LLM 交互时,要尽量的明确【做什么】,并且尽量避免【不要做】什么,这样能有助于减少 LLM 的幻觉。
给模型思考的时间:尽管 LLM 具有强大的处理能力,但在处理复杂任务时,给予模型一定的时间来思考和生成更准确的回应往往是有益的。LLM 实际上就是在做文字接龙,我们要做的是降低我们不想要的词的概率,同时提高我们想要的词的概率。我们通过描述,生成结果的过程,即通过指定完成任务所需的步骤来提高 LLM 输出结果的可用性。
控制输出结果的长度、格式和内容:根据用户需求,指定输出的词数、字符数、句子数等,以及提取特定的细节,格式化输出为 HTML 等。另外,可以让 LLM 按照指定的格式进行输出。
通过给 LLM 模型参考,解决 LLM 的幻觉:适当的给模型一些参考,也就是通常所属的 one-shot 或者 few-shots,让 LLM 知道输入和输出之间的对应关系。
让 LLM 进行自检自查:由于各种原因,特别是在和 LLM 交互的步骤比较多,提示词比较长的情况下 LLM 的回答有可能是错误的,这时一个可选的选项是在适当的步骤让 LLM 进行自查,自己确定下给出的回答是否正确,是否满足了我们的诉求。类似的方法还有让 LLM 对自己的回答评分,直到回答的结果 LLM 自己认为可以达到满意的分数为止。
设定 LLM 的角色:另外一个非常适用的方法是为 LLM 设定角色,一般来说,在设定角色时可以设定 LLM 的专业领域,回答问题的风格、语气、模版、格式等。一个设定好的格式能让 LLM 回答的内容快速的作为后续操作的输入。
尊重 LLM:除了前面提到的要提供 LLM 足够的信息外,建议要把 LLM 想象成一个和你进行合作的工作伙伴,我们平时怎么和一起协作的伙伴怎么沟通交流,就要怎么和 LLM 一起沟通,好好说话,把话讲明白。尊重也是生产力。
使用框架与 LLM 进行交互:
- ICIO 框架:I 代表 Input(输入),C 代表 Context(上下文),I 代表 Instructions(指令),O 代表 Output(输出)。
- BROKE 框架:B 代表 Background(背景),R 代表 Response(响应),O 代表 Objective(目标),K 代表 Knowledge(知识),E 代表 Evaluation(评估)。
- CRISPIE 框架:C 代表 Clarity(清晰度),R 代表 Relevance(相关性),I 代表 Interactivity(交互性),S 代表 Specificity(具体性),P 代表 Precision(精确性),I 代表 Involvement(参与度),E 代表 Effectiveness(有效性)。
告诉 LLM 方法论:另一个比较有效的建议是,在和 LLM 交互时,可以授之以渔,告诉他如何完成一个任务所需要的方法论,或者告诉他几个可选的方法论,让 LLM 自己去分析当前问题适合使用哪些方法论。
2.2.2 LLM 优化提示词工具
在实际使用的过程中有时只使用其中几个就足以解决我们相对比较简单的问题了。当我们遇到较复杂的问题时,就需要适当的使用上面的一些方法的组合了。
PromptPerfect:这是一个专注于提升 LLM 交互体验的工具,它提供了一系列的模板和策略,帮助用户根据不同的任务需求定制化提示词。
Prompt Studio:这个工具集成了多种分析工具,可以对 LLM 的响应进行深入分析,并据此调整提示词的表述,以获得更精准的输出。
LLM Optimizer:它通过算法自动优化提示词,减少手动调整的负担。用户只需输入原始提示词和任务目标,工具就能自动生成优化后的提示词。
Prompt Tuner:这个工具允许用户对 LLM 的输出进行详细的反馈,然后根据这些反馈微调提示词,以实现更有效的交互。
2.3 本地知识库构建
当你需要针对特定领域的知识进行问答,而且希望得到的答案具有较高的准确性和专业性时,使用本地知识库会比较适合。比如,你是某个行业的专家,你需要快速获取该领域内的专业信息或解决具体问题时,建立一个包含了大量相关领域资料的本地知识库,可以显著提升你获取信息和解决问题的效率。
2.3.1 RAG 基础
这种情况下,比较推荐使用 RAG 以及 LangChain 来构建自己的知识库。RAG(检索增强生成)是一种先进的自然语言处理技术,它通过结合信息检索系统的精确性和语言模型的强大生成能力,为基于自然语言的任务提供了更为灵活和精准的解决方案。
RAG 技术定义
RAG 技术指的是对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。这种技术通过动态接入外部资源,使 LLM 得以即时访问和利用广泛且不断更新的知识库,进而提升模型在问答、对话、文本生成等任务中的表现。
RAG 技术优势
- 外部知识的利用:RAG 模型可以有效地利用外部知识库,提供更深入、准确且有价值的答案。
- 数据更新及时性:具备检索库的更新机制,实现知识的即时更新,无需重新训练模型。
- 答复具有解释性:答案直接来自检索库,具有很强的可解释性,减少大模型的幻觉。
- 高度定制能力:可以根据特定领域的知识库和 prompt 进行定制,快速具备该领域的能力。
- 安全和隐私管理:通过限制知识库的权限来实现安全控制,确保敏感信息不被泄露。
- 减少训练成本:在数据上具有很强的可拓展性,可以将大量数据直接更新到知识库,无需重新训练模型。
2.3.2 使用 RAG 构造本地知识库
使用 RAG 构建本地知识库的步骤主要包括准备文本资料、文本分块、嵌入以及存储到向量数据库,然后通过检索增强生成(RAG)链来生成回答。
构建本地知识库的步骤
- 准备文本资料:收集和整理相关领域的文本资料,确保资料的质量和完整性。
- 文本分块:由于 LLM 的上下文窗口有限,需要将文本资料分割成较小的块,以便 LLM 能够处理。
- 嵌入以及存储块到向量数据库:使用向量嵌入技术(如 Ollama Embeddings)为每个文本块生成向量,并将这些向量存储到向量数据库中,如 Weaviate。
- 检索 & 增强:利用向量数据库作为检索器,通过用户查询和嵌入向量之间的语义相似性获取数据,然后使用一个固定的聊天模板将检索到的上下文与用户的问题结合起来,发送给 LLM 进行回答。
- 生成:LLM 根据接收到的上下文和问题生成回答,RAG 链将检索器、聊天模板以及 LLM 组合起来,完成这一过程。
注意事项和优化建议
- 在构建知识库时,注意文本的质量和多样性,确保覆盖广泛的主题和观点。
- 在文本分块时,合理设置块的大小和重叠部分,以便 LLM 能够有效地处理。
- 在嵌入和存储到向量数据库时,考虑使用不同的嵌入模型和数据库技术,以优化检索性能。
- 在检索增强生成阶段,尝试不同的聊天模板和 LLM 模型,以获得最佳的生成效果。
2.3.3 使用 LangChain 落地 RAG
将 RAG 落地的一个比较成熟的做法是使用 LangChain。
LangChain 是一个开源框架,它连接了外部计算和数据源与 LLM(大型语言模型),使得 LLM 可以实时访问外部数据。使用 LangChain 将 RAG(检索增强生成)落地是一个涉及多个组件和步骤的过程。主要的步骤包括:安装和配置 LangChain、准备知识库、编写 LangChain 脚本、集成 LLM 模型、测试和调试以及部署和监控。
2.4 工作流
2.4.1 Agent
Agent 就是智能体。LLM 中的 Agent 是基于大型语言模型(LLM)的智能体,能够自主理解、规划决策并执行复杂任务。它们通过日常语言与用户交流,并根据用户的需求执行相应的任务,展现出更高的灵活性和效率。
这些 Agent 可以基于 LLM 的推理和生成能力来构建,它们不仅能够理解和生成文本,还能根据上下文进行规划、学习和适应。
目前很多 AI 工具都已经开始支持智能体(Agent)了。从使用步骤上基本都可以概括为以下的过程:
- 确定目标和场景:首先明确你希望 Agent 在什么场景下执行什么任务。
- 选择合适的 LLM 模型:根据任务的复杂性和性能要求,选择一个合适的 LLM 作为 Agent 的基础。
- 设计 Agent 的行为逻辑:定义 Agent 如何感知输入、做出决策和执行动作的逻辑流程。
- 集成外部资源和工具:如果需要,将 Agent 与外部数据库、API 或其他工具集成,以扩展其功能和能力。
- 训练和优化:在实际数据上训练 Agent,并根据反馈进行迭代优化,以提高性能和准确性。
2.4.2 工作流
初步体验了下自定义工作流程编排,我理解工作流就像搭积木一样,只不过这里是搭一个逻辑流程的积木。首先,得选择好需要的各种插件组件和模型组件,这些就像是搭积木的基本块。然后,通过 DAG 图把它们连接起来,就像积木之间的连接一样。
接下来,要定义好每个组件的输入输出,这就像是确定每块积木的接口,确保它们能够正确地拼接在一起。然后,需要构建和运行这个 DAG 图,这个过程就像是按照设计图来搭建积木城堡。
当然,除了这些基本的步骤,还有一些高级的功能,比如可以通过逻辑分流节点来决定流程的不同走向。最后,当完成了所有的设计和配置,就可以发布设计好的应用了,这样其他人就可以通过 API 来调用你的流程编排了。
Agentic Workflow 和工作流的关系
工作流基本可以被理解为:把 Agent 看做积木的组件,通过这些组件来拼搭积木的过程。而 Agentic Workflow 这个概念是在今年的 4 月初,吴恩达老师在美国红杉做了一场演讲,提出了 Agentic Workflow 的概念,并介绍了 4 种主要的 Agentic Workflow 设计模式。
Agentic Workflow 主要包括以下几种设计模式:
- Reflection(反思):一个让 AI Agent 通过自我审视和迭代来提高输出质量的过程。这样的机制不仅能让 Agent 更加精准地完成任务,还能让它从错误中学习,不断优化自己的表现。
- Tool Use(工具):LLM 可以生成代码、调用 API 等工具进行操作。例如,Kimi Chat 使用网页搜索工具来检索相关内容,并基于检索结果进行总结分析,最后给出结论。
- Planning(规划):让 Agent 自行规划任务执行的工作流路径,面向于简单的或一些线性流程的运行。这包括子目标分解、反思与改进,将大型任务分解为较小可管理的子目标处理复杂的任务。
- Multiagent Collaboration(多智能体协同):多个 Agent 扮演不同角色合作完成任务。例如,通过开源项目 ChatDev,一个大语言模型可以扮演公司 CEO、产品经理、设计师、代码工程师或测试人员等不同角色,共同开发一个应用或复杂程序。
Agents 就像是能够独立行动的自主系统,它们可以自己完成任务,做出决策,甚至与其他系统或用户互动。而 Agentic Workflow 则是这些 Agents 行动的一种方式,它强调的是通过迭代和互动的方式来提升 AI 的表现。
LLM 的未来发展方向
随着 LLM 的发展,越来越多的垂域知识问答系统将会被构建出来,在各自的垂域中大家会逐渐探索利用 LLM 现有的能力去做可落地的提效方案,另外工作流可能会是一个不错的突破口,毕竟多个 Agent 按照一定的套路进行交互,还是让我们比较有想象空间的。
再有,随着 LLM 的发展,我们期望 LLM 能够具有更强大的能力,特别是多模态的能力,当 LLM 具备多模态能力之后,围绕着 LLM 多模态能力的应用将成为未来一段时间的重点。当然,如果发展的顺利的话,在我们的有生之年或许能看到 AGI 的实现。
AGI 是 Artificial General Intelligence 的缩写,即通用人工智能,指机器能够完成人类能够完成的任何智力任务的能力。AGI 的实现离不开 LLM 和多模态能力的结合。LLM 通过在计算密集型的自监督和半监督训练过程中,从文本文档中学习统计关系,来获得这些能力。大语言模型也是一种 GenAI,通过输入文本并重复预测下一个标记或单词,来生成新的文本。
尽管 AGI 的潜在影响十分巨大,但也存在着许多挑战和风险,比如安全性、隐私保护、失业风险、道德问题等。期待 LLM 能够得到长足的发展,也期望我们所担心的问题,在 LLM 的发展过程中能够得到解决,我们相信人类的智慧。