大语言模型(LLMs)已经彻底改变了自然语言处理(NLP)和人工智能(AI)领域,在处理各种任务时展现出卓越的多功能性。然而,要充分发挥它们的潜力,需要解决一些挑战并开发有效的LLM解决方案。在本章中,我们将揭开架构LLM解决方案的过程,重点关注一些关键方面,如内存、问题解决能力、自主代理以及用于提高性能的高级工具。我们将专注于检索增强型语言模型,这些模型能够提供与上下文相关的信息,探讨它们的实际应用,并介绍进一步改进它们的方法。此外,我们还将揭示LLM解决方案面临的挑战、最佳实践和评估方法,以确保LLM解决方案的成功。
基于这些基础概念,本章将为您提供必要的知识和技术,帮助您创建量身定制的强大LLM解决方案。通过掌握LLM解决方案的架构艺术,您将更好地准备应对复杂的挑战、优化性能,并释放这些多功能模型在各种实际应用中的真正潜力。
具体来说,我们将涵盖以下主题:
- LLM解决方案概述
- 处理LLM解决方案的知识
- 评估LLM解决方案
- 识别LLM解决方案的挑战
- 解决LLM解决方案的挑战
- 利用LLM构建自主代理
- 探索LLM解决方案的应用场景
LLM解决方案概述
LLMs在回答问题、机器翻译、语言建模、情感分析和文本摘要等多种任务中表现出色。它们能够生成非结构化文本,但可以引导生成结构化输出。LLM解决方案利用这一能力,并利用来自知识库的定制数据,创造出针对组织和个人的有价值的成果。通过合理地简化流程并客观地提高输出质量,LLM解决方案可以释放LLM生成内容的真正潜力,使其在各种应用中更加强大和实用。
随着预训练世界知识的LLM逐渐变得更加易于获取,这在使这些好处更广泛可得方面发挥了重要作用。由于多家LLM提供商和开源平台的出现,组织和开发人员现在可以更轻松地将LLM纳入到他们的工作流中。知名的LLM提供商如OpenAI(GPT-4或GPT-3.5)、Microsoft Azure、Google和Amazon Bedrock提供了可以无缝集成到各种应用中的预训练模型和API。此外,Hugging Face平台通过提供大量的开源模型使LLM变得更加易于访问。Hugging Face不仅提供了广泛的预训练模型和微调技术,还培养了一个积极的社区,持续推动LLM的提升。
随着组织和个人利用LLM完成常见任务和应用场景,如何有效利用定制知识至关重要。这一问题确保了LLM能够最优化地用于解决具体需求,这将在“处理LLM解决方案的知识”部分进一步探讨。通过利用LLM的更广泛的可访问性和多功能性,组织和个人可以充分挖掘这些强大模型的潜力,推动创新并改善成果。
尽管LLMs具备令人印象深刻的能力,但它们在解决一些更复杂的问题时仍面临一些局限性,尤其是那些它们没有考虑到的问题。这些局限性包括:
- 无法获取关于最近事件的最新信息
- 容易虚构事实或生成模仿的虚假信息
- 难以理解低资源语言
- 缺乏精确计算的数学技能
- 对时间进展缺乏认知
为了克服这些局限性并增强LLM的解决问题能力,可以通过以下组件开发高级解决方案:
- 实时数据集成:通过将LLM连接到实时数据源(如API、数据库或Web服务),模型能够获取最新信息并提供更准确的响应。
- 现有工具集成:将现有的工具和API集成到LLM架构中,可以扩展其能力,使其能够执行单一模型无法或难以完成的任务。
- 多个具有不同人格和上下文的代理:开发一个多代理系统,其中每个代理都有独特的人格和上下文,有助于解决多样化问题场景中的挑战。这些代理可以合作、共享信息,并提供更全面和可靠的解决方案。
图19.1展示了LLM解决方案中可以应用的不同方法和方法论,本章将介绍这些内容。
在接下来的几节中,我们将更全面地探讨LLM解决方案架构中列出的各个组成部分,以及LLM解决方案的总体情况。我们将从如何处理LLM解决方案中的知识开始。
处理LLM解决方案中的知识
领域知识是创建LLM解决方案的关键,因为它提供了解决特定问题所需的背景信息和理解。这最终确保解决方案得出的答案或采取的行动是准确且有帮助的。领域知识需要作为上下文纳入,通常作为参数化内存、非参数化内存,或者两者的结合。参数化内存是指LLM中学到的参数。非参数化内存是指外部知识库,如文档、文章或摘录的列表,这些知识可以根据需要选择并作为LLM上下文的一部分注入。这个过程也被称为上下文学习方法、知识检索或信息检索。
非参数化外部知识可以通过以下两种方式提供给LLM:
- 作为交叉注意力机制中的潜在条件:潜在条件涉及从外部知识中生成潜在特征向量,并将其作为键和值向量的一部分传入注意力机制,原始输入作为查询向量传入。这种方法通常需要对编码器-解码器转换器架构中的解码器部分进行微调。理想情况下,微调过程将构建一个可以泛化到预期外部潜在特征领域的解码器,并能够关注多种信息。这种方法允许将任何数据模式作为外部知识包含进来。值得注意的是,已发布的研究论文中的检索增强生成(RAG)和检索增强转换器(RETRO)方法[1][2]使用了这种方法。
- 作为LLM输入提示的一部分:这是一个直接的过程,不需要任何微调,但仍然可以从微调中受益。此方法为利用任何定制领域知识进入LLM提供了最低的门槛。然而,这种方法仅支持可以有效表示为文本数据的数据模式,如文本、数值、分类数据和日期数据。特别地,已发布研究论文中的检索增强语言模型预训练(REALM)方法[3]采用了这种方法,专门用于预训练,而不是作为最终训练模型的一部分。
这两种方法都需要建立一个知识库,如图19.2所示,并需要一个知识检索组件来从知识库中检索信息,如图19.1所示。
以下是REALM、RETRO和RAG方法的简短表格总结,见表19.1:
方法 | 检索器训练 | 检索集成 |
---|---|---|
RAG | 使用冻结的基础网络微调 | 使用交叉注意力的潜在条件 |
REALM | 全端到端训练 | 仅在提示中预先插入,无模板 |
RETRO | 使用冻结的基础网络微调 | 使用交叉注意力的潜在条件 |
表19.1 – LLM方法中检索集成的简要概述
知识库要求将文本数据预处理成适当的逻辑块或段落。这些段落随后使用训练好的转换器模型转化为嵌入向量。最后,构建一个最近邻索引,使得可以高效地从知识库中检索相关信息。最近邻索引可以是简单的KNN算法,通过计算提示嵌入向量之间的原始距离,或者是近似KNN算法,通过近似计算距离。然后,索引和逻辑文本块将共同构成知识库,可以用于检索。检索的实现方法可以根据不同的策略有所不同,但最简单的形式是从提示中生成嵌入并使用索引返回与知识库中最接近的前k个文本块。这些前k个最接近的文本块可以作为LLM提示的一部分或作为潜在条件被包含进来。
对于将最相关的文本块作为提示的一部分的方法,制作一个可以插入特定位置的提示模板是标准做法,并可以帮助妥善组织提示中的信息。这可以简单到使用如“Context:”之类的前导文本,后跟检索到的相关文本块,并在提示模板的上下文部分前后进行换行。
尽管研究论文通常展示了涵盖检索过程各个方面的已发布方法,但将构建和使用知识库的每个组件视为独立且可互换的部分是有帮助的。这为选择最适合特定情况的组件提供了更大的灵活性。此外,尽管有一种已发布的方法称为RAG,但值得注意的是,在实践中,RAG这个术语通常用于描述将知识检索与LLM集成的一般方法,而不仅仅是指该特定方法。接下来,我们将简要讨论三个关键的基于方法的组件,这些组件可以根据使用场景自由修改。我们还将选择能够帮助简化这些组件实施的协调工具。
探索分块方法
文本分块过程会影响LLM上下文的利用效率以及生成结果的质量。选择适当的分块方法取决于以下因素:
- 用于生成嵌入向量的嵌入模型:不同的预训练嵌入模型在文本分块方面可能有不同的要求或限制。两个这样的要求是支持的上下文大小和在预训练期间使用的典型文本上下文大小。
- 期望提示所需的信息粒度:所需的细节级别或粒度会影响文本分块方法的选择。根据具体的使用场景,该方法应能够将文本分成适当且简洁的段落,以提供LLM生成准确、简洁和相关响应所需的信息。
- 用于构建知识库的文本数据的性质:文本数据本身的特征也会影响文本分块方法的选择。例如,如果文本数据包含长段落或文档,可能更适合使用一种方法将文本分成较小的块或部分。另一方面,如果文本数据已经组织成逻辑段落,可能会更倾向于选择一种保留这些段落的方法。另外,如果文本数据是Python代码,按代码方法进行分块可能更为合适。
有几种分块文本的方法,包括句子、段落、实体、主题和部分分块。这些方法有助于将文本组织成有意义的单位,以便LLM进行处理。一种有用且现成可用的方法是LangChain库中的递归分块方法。该方法允许通过递归拆分文本来调整分块的粒度,使用一个有序的文本分隔符列表、最大分块大小以及分块之间的重叠百分比。最大分块大小应根据嵌入模型支持的上下文大小进行调整,确保生成的分块可以有效地处理。同时,加入重叠百分比有助于最小化遗漏关键性信息的风险,这些信息可能位于分块的边界处。
许多文档特定的分块方法都是基于这个递归分块方法创建的,通过指定适当的有序文本分隔符列表。具体而言,从langchain==0.0.314版本开始,已为Python代码(使用PythonCodeTextSplitter)、markdown文档(使用MarkdownTextSplitter类)以及LaTeX格式的文本(使用LatexTextSplitter类)创建了递归方法。
接下来,让我们深入探讨嵌入模型的选择。
探索嵌入模型
嵌入模型在为LLM解决方案生成知识库中起着至关重要的作用。这些模型负责将文本的语义信息编码为向量表示,然后用于从知识库中检索相关信息。
一个可以提供文本嵌入模型性能见解的基准是大规模文本嵌入基准(MTEB)。MTEB评估了不同嵌入模型在各种嵌入任务中的有效性。通过评估排行榜结果,用户可以识别出最适合其特定使用场景的模型。MTEB排行榜可通过huggingface.co/spaces/mteb…访问。MTEB甚至包括了付费提供商的嵌入模型,如OpenAI的文本嵌入模型text-embedding-ada-002。
在选择用于知识库生成的嵌入模型时,必须考虑诸如模型大小、嵌入维度和序列长度等因素。传统的嵌入模型,如GloVe,提供较高的速度,但可能缺乏上下文感知,导致较低的平均分数。另一方面,像all-mpnet-base-v2和all-MiniLM-L6-v2这样的模型在速度和性能之间取得了平衡,提供令人满意的结果。对于最佳性能,像bge-large-en-v1.5、ember-v1和e5-large-v2等较大的模型在MTEB排行榜中占据主导地位,所有这些模型的大小为1.34 GB。
值得注意的是,嵌入模型的选择取决于所使用的具体任务和数据集。因此,全面查看MTEB排行榜的各个选项,并考虑知识库生成过程的需求,有助于选择最合适的嵌入模型。
MTEB通过其广泛的数据集和评估指标,为NLP领域的研究人员和实践者提供了宝贵的资源。利用MTEB提供的见解,开发人员可以在选择用于LLM解决方案中的知识库生成的嵌入模型时做出明智的决策。
在深入探讨知识库索引类型之前,重要的是要记住,分块方法和嵌入模型的选择会影响知识库的构建。两者在LLM如何有效地检索和利用知识方面发挥着关键作用。现在,让我们更深入地了解知识库索引类型,以及它们如何提升LLM解决方案的效率。
探索知识库索引类型
知识库索引是LLM解决方案中检索机制的核心部分。它是实现高效查找相关信息的组件。虽然有几种方法可以实现这个索引,但它们的目标都是提供一种快速高效的方式,根据输入的提示从知识库中检索最相关的文本块。
构建知识库索引有多种选择,从手动编码实现到使用各种向量数据库库、服务提供商和插件。以下是一些可用的选项:
- 手动代码:您可以使用像faiss这样的库(一个高效的稠密向量相似性搜索库)和scipy(一个用于成对距离计算的库)手动实现一个内存中的向量数据库。这种方法允许定制,但可能需要更多的努力和专业知识,同时需要更大的内存分配。
- 服务提供商:各种云服务提供商提供向量数据库服务,包括Pinecone、Chroma、Vespa和Weaviate。这些服务处理管理向量数据库的复杂性,提供可扩展且可靠的解决方案,可以轻松集成到您的LLM架构和解决方案中。
- 支持向量计算的数据库工具:传统的数据库工具,如MongoDB、Neo4j、Redis和PostgreSQL,通过插件提供向量计算支持。如果您已经在技术堆栈中使用这些工具,并希望利用它们的能力构建知识库,这是一个不错的选择。
- 插件:LLM服务提供商(如ChatGPT)也提供插件,可以帮助构建和维护知识库。
选择合适的知识库索引类型取决于您的具体需求,例如知识库的大小、检索需求的复杂性以及可用资源。在做出选择时,请考虑可扩展性、易于集成、成本和对知识库控制的级别。如果您的知识库足够大,建议只考虑使用实际数据库技术或声称使用该技术的向量数据库。如果您的知识库较小,例如六位数字范围,使用Python进行单次提示时,原始距离计算不到1秒!接下来,我们将简要了解LLM解决方案的协调器库。
探索LLM解决方案的协调器工具
架构LLM解决方案的过程可以通过使用特定的工具来简化。开源协调器库,如LangChain和LlamaIndex,在这方面发挥着重要作用。这两种工具简化了设置知识库、集成LLM和管理检索机制等任务。一般来说,协调器显著减少了LLM解决方案的复杂性和开发时间。
除了开源的协调器工具外,还有一些付费选项提供高级功能和支持。其中一些包括DataRobot、Microsoft Azure、IBM Watson、LangSmith、OpenAI和Google Vertex AI。这些平台提供了广泛的预构建模型、集成和工具,简化了整个流程,从数据摄取到模型部署和监控。
随着您继续探索这些工具和方法,建立健全的评估方法至关重要,这有助于衡量这些组件对您的解决方案的影响,确保其实现预期目标。我们将在接下来的部分中深入探讨这些方法。
评估LLM解决方案
评估LLM解决方案是充分发挥其潜力并确保其在各种应用中的有效性的关键步骤。通过实施全面的评估方法,组织可以更好地评估LLM解决方案的性能、准确性和总体质量,同时考虑相关成本、安全标准遵守情况以及对用户的潜在负面影响。换句话说,进行这样的评估可以为您提供宝贵的见解,帮助做出明智的决策。
为了实现全面评估,我们可以将评估方法分为定量度量和定性度量。接下来,我们将通过这些分类来深入探讨评估方法。
通过定量指标评估LLM解决方案
定量指标可以通过提供的评估数据集进行汇总,并提供一种更快速、全面和客观的方式来比较多个LLM解决方案设置。以下是一些定量指标的示例:
-
理解力和流畅度相关指标:Flesch阅读难易度、Coleman Liau指数和SMOG可读性。
-
基于事实的指标:任何使用知识库提供的事实进行推理的指标:
-
事实一致性:指将生成的文本与知识库中的事实进行比较。需要注意的是,相关事实可能并非总是可以在知识库中找到。此指标也称为提取性指标。为了衡量事实一致性,可以使用语义相似度(专注于文本意义的差异)或词汇相似度(强调匹配文本中的单词)。
-
事实相关性:指提供的事实有多相关,而不考虑LLM生成的内容。此时,您可以根据相关文档标签进行排序。
-
生成文本相关性/准确性指标:评估LLM生成的文本与理想标准答案的相关性和准确性。可以使用相似度指标或自我评估技术来计算。自我评估还可以进一步分为以下几个领域:
- 有访问令牌概率时:使用对数概率的平均值来评估生成文本的质量。较高的对数概率表示模型对输出更有信心,从而表明其相关性和准确性更高。
- 没有访问令牌概率时:SelfCheckGPT是一种可以在不依赖令牌概率的情况下评估生成文本的方法。该方法利用LLM的能力来评估其生成内容的质量,提供一种替代的相关性和准确性评估方法。
-
运行时指标
生成文本所花费的时间、处理的令牌数量等。
成本指标
生成的令牌数量、API调用费用、托管费用等。
守护线违规指标
违反预定义标准的输出百分比。守护线的示例包括毒性水平和仇恨言论程度。
对抗性能指标
处理对抗输入的性能指标。这些指标在第14章《分析对抗性性能》中进行了更全面的介绍。
偏见和公平性指标
评估生成文本中偏见的定量指标。这些指标在第13章《探索偏见和公平性》中进行了更全面的介绍。
任何监督分类或回归指标
可以应用于LLM解决方案的结果或产生的行为。
需要注意的是,像生成文本相关性和事实一致性指标这样的定量方法,它们通过使用相似度指标比较两组文本,并不如监督模型指标(如准确度)那么可靠。这些指标应谨慎使用。此外,定量指标的一个额外好处是,它们可以用于对部署的模型进行程序化监控。接下来,我们将深入探讨定性人工评估。
通过定性评估方法评估LLM解决方案
定性方法通过人工反馈和手动评估来补充定量指标,并提供对LLM性能的全面理解。在某些情况下,当没有参考的标准数据集时,定性评估可能是唯一可行的评估方式。以下是一些定性LLM解决方案评估方法的示例:
- 人工反馈评分:这些是用户对生成的响应进行评分或排名,用于衡量效果和相关性。示例包括文本的语法和连贯性。
- 生成文本相关性评估:通过手动评估生成的文本与给定上下文或提示的相关性。
- 预测解释:评估生成文本或预测背后的推理过程,帮助识别LLM解决方案中的潜在偏见或错误逻辑。
- 伦理和法律合规性:通过人工审核,确保生成的文本遵循伦理和法律指南。
通过结合定量指标和定性手动评估,组织可以更深入地了解LLM的性能,并识别潜在的改进领域。总的来说,应将LLM解决方案视为与任何监督机器学习项目无异,像评估监督机器学习项目一样严格评估它们。这种全面的评估方法不仅确保了LLM解决方案的一致性和合规性,还帮助将这些强大的模型与具体需求和目标对齐,从而推动创新并提高各种应用中的成果。
识别LLM解决方案的挑战
尽管LLM具有令人印象深刻的能力,但在解决复杂的现实世界问题时,仍然面临许多挑战。在本节中,我们将探讨LLM解决方案面临的一些挑战,并讨论可能的解决方法。我们将按高层次的类别来探讨这些挑战,如下所示:
输出和输入的限制:
- LLM仅生成文本:文本输出可以为许多业务提供价值。然而,许多其他用例需要以完全不同的格式提供预测和建议。
- LLM的上下文大小有限:问题在于,当输入大小增加时,需要更多的计算资源来进行训练和预测。因此,上下文大小通常保持在一到三千个令牌的范围内。这个问题通常只出现在需要较长上下文的用例中,因为几千个令牌的上下文大小对大多数用例来说已经足够。
- LLM是文本特定模型:默认情况下,LLM不支持其他数据模式。
- 重复检索信息:从知识库中检索到的信息可能非常相关,但却是重复且数量庞大的。由于LLM的上下文大小有限,多个信息片段作为上下文时,由于重复性占用了大部分上下文限制配额,可能会带来风险。
知识和信息相关的挑战:
-
无法访问最新信息:LLM可能不了解最近的事件或发展,从而导致在回应中提供过时或不准确的信息。
-
处理低资源语言:LLM在理解和处理数据有限的低资源语言时可能遇到困难。
-
对时间进展的无感知:LLM可能无法理解时间的概念,从而在处理时间敏感信息时产生混淆。
-
信息丢失:LLM显示出更关注句子的开始和结束部分,而忽视中间部分,从而丢失了放置在中间的大部分信息。
-
单一索引失败:当LLM因训练数据的限制,缺乏对某个特定主题或领域的足够了解时,可能会遇到此挑战。例如,如果你询问LLM关于一个新开设的本地餐厅,而该餐厅没有包含在训练数据中,LLM可能提供有限或不相关的信息。
-
从文档中检索不完整内容:当检索到一个正确的文档片段,但实际需要的内容位于同一文档中被检索片段下方时,LLM可能无法提供用户所需的完整或准确的信息。
- 示例:在软件安装过程的文档搜索中,LLM检索到提到安装的部分,但实际的逐步说明位于文档的下一部分。结果,用户只收到概述,而没有正确安装所需的详细信息。
-
在上下文中使用无关信息:LLM可能使用上下文中的无关信息作为输出的基础,基本上模仿或重复上下文中的意见,即使它们不适用于当前的情况。这种现象被称为“阿谀奉承”,可能导致误导性或无用的回应。
-
全球知识库总结任务无法准确执行:检索过程无法识别请求的知识库类型,因此无法有效执行全球总结任务。
准确性和可靠性:
- 幻觉:LLM可能生成看似合理但不基于事实的虚假或误导性信息。这种现象被称为“幻觉”。
- 缺乏数学能力:LLM通常无法执行精确的计算或解决复杂的数学问题。这个问题广为人知,根据不同的视角有一定争议。
- 模仿性虚假信息:这些是LLM生成的虚假陈述,因为它们模仿了训练数据中常见的误解。由于模型从其训练数据中学习,它可能无意中再现广泛传播的错误观念。例如,如果许多人认为某种食物会引发某种疾病,LLM可能会生成类似的陈述,尽管它在科学上并不准确。
- 非模仿性虚假信息:这些是由于模型未能完全实现其训练目标而产生的虚假陈述。包括幻觉,这些陈述看起来合理,但实际上是错误的。例如,LLM可能会生成关于某个历史事件的陈述,而这个事件实际上从未发生过,但这句话可能对不了解该事件的某人来说看起来很有说服力。
- 运行时性能问题:LLM的运行时间可能较慢。此外,向其添加知识库后,整个过程可能比原先更慢。
伦理影响和社会影响:
LLM的广泛采用和部署带来了一些伦理和社会影响。由于这些模型从大量数据中学习,它们可能会无意中继承训练数据中存在的偏见,从而导致偏见输出、延续刻板印象或传播错误信息。此外,LLM可能生成可能无意中推动有害行为、仇恨言论或侵犯隐私的问题。以下是使用LLM解决方案时涉及的伦理挑战:
- 偏见和公平性:确保LLM不会表现出偏见行为或基于种族、性别、年龄或其他受保护属性歧视特定用户群体。例如,假设一个银行使用LLM分析贷款申请并确定信用worthiness。如果LLM在历史数据中受到对某些族群的偏见影响,可能会更高的拒绝这些群体的贷款申请,即便这些申请人有很好的信用评分。
- 隐私问题:LLM可能无意中在其输出中生成个人可识别信息(PII)或敏感数据,从而引发隐私问题和潜在的法律问题。例如,假设一个医疗机构使用LLM为客户生成个性化健康建议,LLM可能会无意中在生成的建议中包含特定病人的姓名和病情,并且这些信息公开共享,侵犯了病人的隐私。
- 错误信息和虚假信息:LLM可能会生成误导性或虚假的信息,这可能促使错误信息和虚假信息的传播。例如,假设一个新闻机构使用LLM自动总结和发布新闻文章,模型无意中生成了一个误导性的总结,导致关于重要商业合并的错误信息传播。
- 安全性:确保LLM生成的内容符合伦理准则、法律规定和社区标准,同时避免促进有害或冒犯性内容。例如,假设一个电子商务平台使用LLM为卖家生成产品描述,LLM可能会创建描述,推广一个可能有害的产品,如召回的商品或违反安全规定的商品,从而暴露平台于法律和伦理问题之中。
- 透明度和可解释性:确保LLM做出的决策对用户和利益相关者透明、易于理解并且有据可依。例如,假设一个保险公司使用LLM评估风险并为客户确定保费。客户收到了显著更高的保费,并要求解释为何涨价。LLM的决策过程本身是不透明且难以理解的,这使得公司难以提供清晰和有据可依的解释。
现在我们已经识别了这些挑战,接下来我们将进入下一部分,探讨克服这些限制的潜在解决方案和策略。
解决LLM解决方案的挑战
解决LLM面临的各种挑战是释放其全部潜力并使其成为我们在解决现实问题时可靠工具或助手的关键。只有解决了这些挑战,LLM解决方案才能以客观和有效的方式构建。在本节中,我们将深入探讨可以帮助我们解决这些挑战的各种互补策略,并按高层次问题类型提升LLM性能。我们将首先从输出和输入限制开始。
解决输出和输入限制挑战
解决输出和输入限制的挑战对于释放LLM的全部潜力至关重要,它能够使LLM有效处理不同的数据类型、格式和上下文大小,同时提供准确可靠的结果。解决方案如下:
-
定制的预处理:设计量身定制的预处理技术,将非文本数据转化为LLM可以高效处理的格式。例如,设计一个结构,将结构化的表格数据作为LLM的提示。
-
使用上下文限制扩展神经网络组件:实施先进的神经网络组件,如LongLORA,要求对现有模型进行微调,以扩展上下文窗口大小,从而使LLM能够处理更多的信息。然而,必须注意,这种选项可能不适用于外部LLM提供商,只有在考虑托管自有LLM模型时才可行。
-
LLM上下文优化:任何浪费的空间或重复的内容都会限制我们从中提取和生成答案的深度和广度。这里有三种可能的方法:
- 仅选择最相关且唯一的信息加入LLM的上下文窗口。可以使用最大边际相关性算法,从距离得分中找到相关且独特的信息集。
- 考虑对提供的信息进行压缩和总结,这也可以通过LLM来完成,然后将总结后的信息作为上下文输入LLM主提示。
- 根据需求进行知识检索,而不是默认检索。通过将RAG视为工具并通过微调或上下文学习教LLM如何使用它,可以强制执行这种按需行为。
接下来,我们将解决与知识和信息相关的挑战。
解决知识和信息相关的挑战
解决输出和输入限制挑战对于提升LLM在处理更广泛的现实世界问题中的多功能性和有效性至关重要。解决方案如下:
-
实时数据集成:将LLM与实时数据源(如API、数据库或Web服务)连接,可以帮助它们获取最新的信息并提供更准确的响应。将来自知识库的相关信息并结合RAG方法,是此解决方案的一部分。相比微调模型,RAG还可以减少幻觉现象,特别是如果严格的提示指令让LLM不偏离提示中的上下文。
-
工具集成:通过将现有工具、API和专门的算法集成到LLM架构中,可以显著扩展其能力,使其能够处理独立模型难以完成的任务。工具可用于检索生成过程所需的额外输入上下文。或者,它们可用于执行生成文本中所指示的特定任务。例如,利用外部搜索引擎、领域特定的API和计算库来提供准确的响应、解决复杂的数学问题或处理与实时数据相关的查询。对于像GPT-3.5这样的LLM,可以通过有效的少量示例提示实现这一目标,而像Toolformer和WebGPT等先进模型展示了将外部工具无缝集成到LLM的参数化记忆和框架中的潜力。WebGPT通过检测生成的Bing搜索引擎标识符,可以浏览互联网,并在继续生成之前执行搜索。另一方面,Toolformer是一个LLM,它可以自主选择和利用API,将计算器、问答系统、搜索引擎、翻译器和日历等工具集成进来以改善生成。这是将LLM转变为能够完成现实世界任务的代理的重要功能。
-
调整LLM上下文中的相关上下文位置:该解决方案涉及重新排序输入文本,以便将重要信息更均匀地分布在上下文中。通过遵循特定的模式(例如[1, 3, 5, 7, 9, 10, 8, 6, 4, 2]),可以鼓励LLM平等关注文本的所有部分,从而减少遗漏放在中间的有价值信息的可能性。
-
利用来自同一文档的周围信息:该解决方案通过整合来自源文档的附加信息来增强LLM的理解。扩大检索范围,包含周围文本或元数据,帮助LLM生成更准确和全面的响应,确保其考虑更广泛的上下文。这种方法改善了LLM处理复杂问题和提供充分信息的能力,有效解决了文档搜索中的问题。
-
使用LLM过滤无关上下文:在继续生成任务之前,利用LLM识别并移除任何无关的上下文。此经过筛选的上下文将用于生成响应。这种看似简单且逻辑性强的方法在大多数情况下已证明其有效性,如在论文arxiv.org/abs/2311.11…中介绍的那样。此外,这种技术的黑箱特性使得其易于实现,从而有助于生成更直观、自然的LLM生成内容。
-
定期构建并更新知识库:为了解决单一索引失败的问题,必须定期维护和更新LLM的知识库。这确保LLM能够跟进最新的进展,并在广泛的主题上提供准确的信息,最终提升其在解决现实问题中的可靠性和有效性。
-
将RAG视为LLM可以动态使用的工具:这有助于解决无法在全球知识库级别执行总结任务的问题。类似于Deadpool知道自己是漫画人物的方式,我们需要使检索过程意识到它正在从哪种类型的知识库中检索,并为总结任务提供一个特殊处理程序。一个额外的优势是允许LLM根据需要配置返回多少相关文本行,以便扩展和收缩总结范围。
-
多索引检索:为了解决单一索引失败的问题,可以采用多索引检索方法。这种解决方案涉及将用户的查询分解成多个组件,并从多个来源或知识索引中检索信息。这种多维搜索策略有助于收集更丰富和全面的信息,从而减少由于单一索引的局限性而忽略相关细节的可能性。例如,考虑用户询问关于一种稀有鸟类的问题。使用单一索引可能会获得有限的信息,而使用多索引检索方法,LLM将执行以下操作:
- 将查询分解为多个组件(例如栖息地、饮食和外观)。
- 从各种来源(例如鸟类学数据库、自然网站和社交媒体)检索数据。
- 聚合和综合数据,生成全面的回答。
-
设置有向无环图(DAG)工作流:设置DAG工作流涉及以结构化的非循环顺序组织一系列任务或过程,以高效处理多个信息来源并扩展LLM的功能。在LLM的上下文中,可以手动设计DAG工作流,将各种工具、API和算法连接起来,同时解决实时数据集成、工具集成和多索引检索等挑战。考虑一个用例,用户希望规划一次旅行并需要目的地的各种信息,如天气、景点和当地美食。LLM可以使用DAG工作流高效地处理这个复杂的查询。以下是LLM的DAG工作流示例:
- 将用户的查询分解为子查询或组件,具体包括天气预报、主要景点和美食话题。
- 对每个子查询,确定相关的工具、API或数据来源。对于天气预报,我们将从天气API检索数据。对于主要景点,我们将从旅游网站的知识库中提取信息。对于当地美食,我们将从餐馆评论网站的API中收集数据。
- 对每个事实单独应用总结,然后作为LLM输入上下文的一部分。
- 执行LLM生成过程,处理用户查询和总结的事实。
- 通过API将结果发布到网站上。
这个DAG如图19.3所示:
通过设置手动DAG工作流,LLM可以高效地处理来自多个来源的信息,利用外部工具和API,并为各种现实世界问题提供准确可靠的响应。这个策略帮助LLM提供更准确、更详细的回应,即使信息稀缺或单一索引中未能提供完整信息。这个问题通常被称为多跳问答(multi-hop question answering)。
接下来,我们将解决准确性和可靠性方面的挑战。
解决准确性和可靠性挑战
确保LLM的准确性和可靠性对于建立对其能力的信任,并使其成为有效的解决问题工具至关重要。以下是解决准确性和可靠性挑战的解决方案:
-
将LLM解决方案视为任何建模实验:将LLM与知识库配对,使用相关指标评估其性能,并收集洞察以根据深度学习生命周期迭代地微调其能力。这将帮助您选择至少可以减少幻觉的模型,并帮助您了解其在特定用例中的有效性。
-
微调检索器嵌入模型:这不仅仅依赖于预训练的嵌入模型或嵌入模型提供商。这可以提高检索准确性,从而提升LLM生成响应的质量。
-
提示工程:提示工程是设计有效且有针对性的提示,以指导语言模型的响应,从而提高其准确性、相关性和整体性能。考虑实施以下技术:
- 链式思维(CoT) :该方法鼓励LLM生成逐步推理过程,从而为涉及算术、常识推理和其他问题解决场景的任务提供更准确、结构化的响应。通过引导LLM进行一系列推理步骤,CoT有助于减少幻觉等问题,同时提升生成内容的整体质量和连贯性。
- ReAct:这是一种框架,它将推理过程和任务特定的行动交替进行,使LLM生成更可靠、事实性的回应。通过融入动态推理和与外部源的交互,ReAct有效解决了事实幻觉和错误传播等问题,从而提高了LLM的可解释性和可信度。
- 提示调优:提示调优是通过基于梯度的方法优化输入提示,来细化LLM行为的技术,这使得对模型的响应进行更好的控制,并在各种问题解决任务中提高准确性和相关性。通过微调提示,用户可以有效地引导LLM生成更理想、更具上下文特定性的输出。然而,这仅适用于可以托管的LLM。
- 依赖于精心设计的提示:利用已发布的精心设计的提示,而不是自己设计提示。这是Langchain和Auto-GPT使用的一种技术。AutoGPT是一个基于GPT-4的开源Python应用程序。它通过AI代理自动执行任务,无需多个提示,能够通过访问网络和执行操作来实现最少的指导。与ChatGPT不同,AutoGPT可以执行更大的任务,如创建网站和制定营销策略,无需逐步指令。它具有多种应用,如生成内容、设计标志和开发聊天机器人。
- 拒绝采样(best-of-n)参考:使用拒绝采样技术,从多个尝试中选择最佳响应,从而提高生成响应的质量。可以通过选择的度量标准评估最佳响应。
- 重新排序来自知识检索的相关距离得分:知识检索属于推荐系统领域。常用的技术是实现适当的基于回归的推荐模型,重新排序相关性距离得分。这有助于提供更准确、潜在的个性化相关信息,并结合更多的上下文数据。大多数现实世界的大规模推荐产品(如YouTube)使用这种技术。
- 迭代检索和生成:使用如自问、主动RAG和ITER-RETGEN等技术生成临时响应,评估其质量,并通过检索的知识进行迭代改进。这种方法可以减少幻觉,并提高LLM生成内容的质量。
- 多代理系统:开发由具有独特个性和上下文的代理组成的多代理系统,以应对多样化的问题解决场景。这些代理可以合作、共享信息并提供更全面、更可靠的解决方案。例如,AutoAgents是一个创新的框架,可以根据不同任务自适应地生成和协调多个专门的代理,以建立AI团队。该框架包括两个阶段:草拟阶段和执行阶段。在草拟阶段,基于输入任务生成代理团队和执行计划,而在执行阶段,通过代理之间的协作和反馈优化计划,以生成最终结果。AutoAgents能够动态合成和协调多个专家代理,根据不同任务形成定制的AI团队。关于开放式问题回答和创意写作任务的实验展示了AutoAgents相比现有方法的有效性。AutoAgents为通过为不同任务分配不同角色并促进团队合作,解决复杂任务提供了新的视角。
接下来,我们将深入探讨运行时性能挑战的解决方案。
解决运行时性能挑战
运行时性能挑战是一个关键问题,它可能显著影响语言模型的效率和效果。随着LLM的复杂性和规模不断增长,优化其运行时性能变得比以往任何时候都更加重要。解决这个问题的方案如下:
- 缓存输出:临时存储结果,避免重新计算信息,从而提高响应速度并改善性能。这种方法对于处理重复或相似的查询特别有用。
- GPU和GPU推理加速器:这仅适用于您自行托管的LLM。LLM需要与这些组件一起运行,才能在合理的时间内执行。这些内容在第15章《将深度学习模型部署到生产》中有更详细的介绍。
- 使用近似KNN索引:近似KNN索引的设置时间比基本的KNN索引要长得多。然而,设置完成后,推理时间可以提高1000倍,同时保持合理的检索准确性。访问ann-benchmarks.com/了解不同近似KNN算法的影响。scann算法和faiss IVFPQFS算法在索引构建时间、索引大小、检索召回率和检索运行时之间提供了良好的平衡。然而,近似KNN算法仅在知识库庞大时才需要使用,因为小型知识库的检索速度已经很快,通常不到1秒。通常,适合的数据维度位于三位数的向量列大小和七位数的向量行大小范围内。
解决伦理影响和社会影响挑战
解决LLM解决方案的伦理影响和社会影响对于确保其在各种应用中的负责任和可持续部署至关重要。通过考虑LLM生成内容的伦理和社会后果,开发者可以创建尊重用户价值、遵守法律指南并对社会做出积极贡献的模型。
应对这些挑战的策略如下:
-
偏见和公平性缓解:在第13章《探索偏见和公平性》中介绍的方法的背景下,考虑以下策略:
- 数据收集和准备:确保为LLM模型微调提供多样化和具有代表性的数据集。平衡数据中的敏感属性,消除或控制这些属性可能产生的潜在偏见。此外,可以指示LLM特别不要在自然语言中延续偏见,作为输入上下文的一部分。更好的是,赋予用户定义其偏好、价值观和伦理准则的权利,使LLM能够生成符合用户个人需求和价值观的内容。
- 微调过程中的偏见缓解:在微调过程中,实施如反事实数据增强、对抗训练或重新采样等技术,减少偏见特征的影响,提高公平性。
- 后处理:使用如等化机会后处理等技术修改LLM生成的内容,以确保输出的公平性。这可以在使用如OpenAI GPT-4等LLM提供商或微调的开源模型时应用。
- 监控和评估:持续监控LLM生成的内容,使用偏见和公平性指标评估潜在偏见,并根据需要调整模型,以确保符合伦理指南和公平性要求。
-
隐私保护技术:采用隐私保护方法,如差分隐私、联邦学习和同态加密,保护训练数据和生成内容中的敏感信息。实施政策和指南,以防止LLM生成内容中不小心泄露个人可识别信息(PII)。
-
事实核查和可信度评估:将事实核查和可信度评估机制集成到LLM解决方案中,以减少生成误导性或虚假信息的风险。这可以通过将LLM与外部知识源(如知识库)集成,验证生成内容的准确性。此外,您还可以指示LLM保持谦虚,如果没有事实可以用于验证,就不要返回声明。
-
内容审核和守护线:实施内容审核技术,如关键词过滤、基于机器学习的分类器和人工审核过程,防止生成有害或冒犯性内容。建立守护线,如毒性阈值或伦理指南,确保LLM生成的内容符合社区标准和法律法规。
-
透明度和可解释性:开发增强LLM生成内容透明度和可解释性的方法,例如提供推理痕迹、显著性图或反事实解释。第11章《解释神经网络预测》和第12章《解读神经网络》中介绍的概念可以应用于LLM。
通过实施这些策略,开发者可以创建不仅尊重用户价值、遵守法律指南,而且能对社会做出积极贡献的LLM解决方案。解决LLM的伦理影响和社会影响是建立对该技术信任、确保其负责任和可持续部署的关键步骤。
在全面了解LLM相关的挑战及其潜在解决方案后,我们现在可以关注解决跨组织和行业采用LLM解决方案的总体挑战。
解决LLM解决方案采用的总体挑战
实现LLM解决方案的全部潜力面临的一个总体挑战是它们在组织和行业中的采用。与任何机器学习或深度学习解决方案的采用类似,推动LLM采用的关键因素是信心。对技术能力的信任、其在解决特定用例中的有效性,以及其交付实际成果的能力,是广泛采用的关键。
为了克服这一挑战,必须系统地教育组织了解LLM的强大功能、其多样化的应用场景以及如何根据特定需求定制LLM。这包括通过现实世界的成功案例展示LLM的好处,提供关于实施LLM解决方案的实用指导,并为组织提供支持,帮助他们应对将LLM集成到工作流中的复杂性。
建立对LLM解决方案的信心需要彻底评估其性能,解决本章前面讨论的挑战,并确保这些解决方案能够实现预期目标。通过实施全面的评估方法,包括定量指标和定性手动评估,组织可以更好地评估LLM解决方案的性能、准确性和整体质量。这些评估应进行迭代,允许对LLM解决方案进行持续的优化和改进。
此外,解决本章中提到的挑战,如输出和输入限制、知识和信息相关的挑战、准确性和可靠性问题、以及运行时性能挑战,对于建立对LLM解决方案的信心至关重要。通过利用本章讨论的策略和技术,组织可以优化LLM的性能,确保其在各种应用中的有效性。
建立LLM解决方案信心的另一个重要方面是与利益相关者的有效沟通和协作。这包括分享评估结果,讨论LLM的好处及潜在局限性,并解决利益相关者在采用LLM解决方案时可能存在的任何担忧。
总之,成功地采用LLM解决方案需要结合严格的评估、解决挑战以及与利益相关者的有效沟通。通过以与任何机器学习或深度学习解决方案相同的方式处理LLM解决方案的采用,组织可以建立对LLM能力和性能的信心,释放其在各种实际应用中的全部潜力。至此,我们已详细探讨了LLM面临的挑战及其解决方案。
在接下来的部分,我们将深入探讨如何利用LLM构建自主代理,这可以显著扩展和提升我们的解决问题能力。
利用LLM构建自主代理
LLM可以在开发自主代理方面发挥巨大作用,这些代理能够高效地解决复杂问题并与环境互动。本节将重点讨论如何利用LLM构建这样的代理,并探讨有助于其有效性的关键方面。
自主代理是由AI驱动的实体,能够独立执行任务、做出决策并与环境互动。通过将LLM集成到这些代理中,开发者可以创建出灵活且适应性强的系统,能够应对各种挑战。以下是LLM驱动的自主代理的几个关键组件:
- 规划和决策制定:LLM可以用来生成指导代理行动的计划和策略,考虑上下文和目标。
- 观察和学习环境:LLM可以被训练来观察和解读环境,从过去的经验中学习,并相应调整行为。
- 协作解决问题:可以开发多代理系统,其中每个代理具有独特的个性和上下文。这些代理可以协作、共享信息,并提供更全面和可靠的解决方案。
- 自我优化:自主代理可以利用LLM分析其表现,识别改进的领域,并随着时间的推移优化其策略和行为。
这些代理涵盖了在本章“识别LLM解决方案的挑战”部分中提到的挑战的一部分。此外,这里介绍的解决方案可以结合起来,扩展总体架构的LLM解决方案所能覆盖的问题范围。前文中提到的一些已发布的代理方法,如WebGPT、Toolformer、Auto-GPT和AutoAgents,也被介绍过。利用LLM的自主代理是打造强大LLM解决方案的关键。通过将LLM的优势与代理的适应性和决策能力相结合,开发者可以创建出具有革命性的系统,颠覆各个领域和行业。
在全面了解LLM解决方案及其潜在应用后,接下来我们将探索一些具体的用例,看看LLM解决方案如何被有效地应用。
探索LLM解决方案的用例
在本节中,我们将探索一些令人兴奋的现实世界应用,展示LLM解决方案的真正潜力。这将让您感受到LLM解决方案的革命性。以下是一些用例:
- 旅行行程规划师:LLM可以用于开发先进的旅行行程规划工具,根据用户的偏好和限制生成个性化的旅行计划。通过将LLM与旅行API(如航班、酒店和景点数据库)以及实时数据源(如天气和交通信息)集成,这些规划工具可以提供量身定制的上下文感知推荐,满足个人旅行者的需求。值得注意的是,Booking.com和Expedia等公司已将这一功能集成到其产品中,而Agoda也宣布将开展类似工作。
- 智能辅导系统:LLM可以用于开发智能辅导系统,为学生提供个性化的学习体验。通过将LLM与教育内容、评估工具和学习者数据集成,这些系统可以生成定制的学习材料,提供实时反馈,并根据个人学习需求进行适应。这使学生能够获得更高效、更有趣的学习体验。值得注意的是,Duolingo公司在其游戏化语言学习产品中实现了这样的解决方案。
- 自动化电子邮件回复:LLM解决方案可以用于开发自动化电子邮件回复系统,处理各种类型的查询,如客户支持、销售咨询或一般信息请求。通过将LLM与电子邮件API、CRM系统和相关知识库集成,电子邮件回复可以个性化、准确且具有上下文相关性。这帮助企业简化客户沟通并提供高效支持。Nanonets AI公司在其产品中实现了这一功能。
- 代码生成:LLM可以用于根据用户输入或特定需求生成代码片段、算法或完整的软件程序。GitHub Copilot等解决方案利用LLM帮助开发人员编写代码,建议相关的代码片段,并根据上下文完成代码部分。通过将LLM与代码仓库、编程语言API和领域特定知识库集成,代码生成可以根据特定的编程语言、框架和用例进行定制,从而提高开发者的生产力。
- 客户支持聊天机器人:LLM解决方案可以用于开发高级的上下文感知聊天机器人,更有效地处理客户查询和支持请求。通过将LLM与客户关系管理(CRM)系统和知识库集成,聊天机器人可以为客户查询提供个性化和准确的回答。这帮助企业提升客户支持服务、缩短响应时间并提高客户满意度。forethought.ai、Ada和EBI.AI等公司提供了这种解决方案。
- 医疗诊断和治疗建议:LLM可以用于开发先进的诊断工具,分析病人的症状、病史和相关医学文献,提供潜在的诊断和治疗选项。通过将LLM与电子健康记录(EHR)系统、医疗数据库和领域特定知识库集成,这些工具可以帮助医疗专业人员做出更明智的决策,改善患者的治疗效果。值得注意的是,Harman(三星公司)提供了这种解决方案。
- 个人财务管理:LLM可以用于开发智能的个人财务管理应用,提供定制的财务建议、预算建议和投资推荐,基于用户特定的财务目标和风险承受能力。通过将LLM与银行API、股市数据和金融知识库集成,这些应用可以提供上下文感知的财务规划和指导。虽然这不完全是一个服务或产品,但Bloomberg开发了BloombergGPT,一个专门为金融领域设计的50亿参数的大型语言模型,展示了LLM在金融领域的潜力。
- 创意内容生成:LLM可以用于根据用户输入、偏好或灵感生成创意内容,如故事、诗歌或音乐。通过将LLM与文学作品数据库、音乐库和创意技巧与风格的知识库集成,这些应用可以生成独特且吸引人的内容,满足个人的艺术口味和需求。值得注意的是,Jasper构建了一个平台来应对这一用例。
- 法律文档分析和起草:LLM可以用于开发先进的法律文档分析和起草工具,帮助法律专业人员审查合同、识别潜在问题,并根据特定要求生成法律文档。通过将LLM与法律数据库、合同模板和领域特定知识库集成,这些工具可以帮助简化法律工作,提高法律行业的效率。值得注意的是,netdocuments公司在其产品中实现了这一用例。
- 智能家居自动化:LLM可以用于开发智能家居自动化系统,理解自然语言命令,并根据用户的偏好和习惯进行调整。通过将LLM与智能家居设备、API和用户行为数据集成,这些系统可以提供更直观、更个性化的家居自动化体验,使用户能够轻松方便地控制家庭环境。Amazon Alexa是这一用例的典型示例。
在这些用例中,通过将LLM与相关工具、API和数据源集成,确保生成的内容、推荐和响应准确、与上下文相关并满足特定需求,从而提升用户体验并在各个领域提供有价值的支持。
总结
在本章中,我们探讨了LLM及其在解决现实问题和创造各种应用价值中的潜力。我们讨论了架构LLM解决方案的关键方面,如处理知识、与实时数据和工具的互动、评估LLM解决方案、识别和应对挑战以及利用LLM构建自主代理。我们还强调了检索增强语言模型在提供上下文相关信息方面的重要性,并审视了改善LLM解决方案的各种技术和库。
我们还讨论了LLM的限制,如输出和输入限制、知识和信息相关的挑战、准确性和可靠性问题、运行时性能挑战、伦理影响和社会影响,以及LLM解决方案采用的总体挑战。为了解决这些限制,我们提出了各种互补策略,如实时数据集成、工具集成、提示工程、拒绝采样、多代理系统、运行时优化技术、偏见和公平性缓解、内容审核以及实现LLM透明度和可解释性。最后,我们讨论了利用LLM构建自主代理的方案,这可以显著扩展和提升多种应用中的问题解决能力。
通过了解LLM解决方案的复杂性并应用本章讨论的策略和技术,组织和个人可以充分利用LLM的潜力,推动创新并改善各类应用中的成果。
通过阅读《深度学习架构师手册》,您获得了关于深度学习生命周期各个阶段的宝贵见解,探讨了从规划和数据准备到模型部署和治理的关键方面。通过完成这段启发性的旅程,您现在掌握了设计、开发和部署有效深度学习解决方案的知识和技能。为了在此坚实基础上进一步发展,您可以考虑采取以下下一步措施:
- 将您的新知识应用到实际项目中,无论是在您的专业领域还是通过开源贡献,获取实践经验并深化理解。
- 通过参加会议、关注有影响力的研究人员和阅读研究论文,保持对深度学习最新研究、趋势和突破的关注。
- 探索深度学习中您感兴趣的专门领域,如强化学习、生成对抗网络或少样本学习,以进一步扩展您的专业知识。
- 与其他深度学习爱好者和专业人士合作,加入社区、讨论论坛和社交媒体小组,交流想法、分享经验并相互学习。
- 考虑追求深度学习或相关领域的高级课程、认证或学位,以提升您的教育背景和资格。
- 拥抱未来的挑战和成就,因为通过掌握构建深度学习模型的技巧、深入理解偏见和公平性,以及能够监控和维护模型性能,您已经做好了充分准备,能够释放深度学习的全部潜力,并推动各类应用中的创新。祝您在深度学习领域继续取得成功和成长!
进一步阅读
- RAG: doi.org/10.48550/ar…
- RETRO: arxiv.org/pdf/2112.04…
- REALM: doi.org/10.48550/ar…