生成式预训练转换器(generative pre-trained transformer,简称GPT)聊天机器人是现下的热门话题。在很多方面,GPT展示出了其提高生产力的能力,例如协助编写代码或者寻找各种数据源。目前,对于希望利用人工智能提高运营效率和推动创新的企业来说,如何个性化地和安全地应用GPT已成为一个重要课题。
训练私域GPT是这一课题的重要应用案例。私域GPT会根据设计者提供的知识库作出准确回复,而实现这一技术的最有效方法是应用检索增强生成(retrieval-augmented generation,简称RAG)。与基于通用数据集生成答案的公共GPT不同,私域GPT可以提供关联性更高、更准确、更具可验证性的回复。私域GPT在保险行业也有广泛应用。例如,保险公司可以构建一个内部平台,便于用户检索保险法规、政府报表的填写要求以及其他精算相关出版物中的信息。私域GPT还可以为保险公司的客户服务聊天机器人提供支持,回答有关保单保障范围等基本问题。
这篇文章将探讨构建RAG加持的私域GPT的重要概念和考量要素。
重要概念
什么是RAG?
图1显示了RAG在私域GPT中的作用。如流程1(Flow 1)所示,当使用传统的大语言模型(large language model,简称LLM)时,主要输出步骤如下:
- 用户输入一个指令,这个指令可能是一个问题。
- 指令被传送给LLM。
- LLM生成一个回复。
- 回复被传送给用户。
流程2(Flow 2)显示了当有RAG介入时的输出步骤:
- 用户输入一个指令。
- 指令被传送给LLM。
- LLM在设计者提供的知识库中检索与指令相关的信息。
- LLM结合用户指令和知识库信息生成回复。
- 回复被传送回用户,其中包含的信息比LLM单独生成的相关信息更多。
图1:RAG
为了更好地理解RAG的工作原理,我们需要引入另外两个概念:嵌入和向量搜索。
什么是嵌入(Embedding)?
嵌入是特征学习模型的一种(通常是神经网络模型)。它的目的是将自然语言转换为向量。向量通过捕捉语言数据之间的关系和相似性将自然语言映射到连续性向量空间,使得这些数据更容易被其他模型应用并做出更深层的分析。简单来说,嵌入就是单词或短语的向量表示。一个向量中通常有几十或几百个维度。
图2显示了嵌入的范例。在每个单词(“国王”(King)、“王后”(Queen)、“王子”(Prince)和“女孩”(Girl))下方的向量是其对应的嵌入向量。例如,如果维度一代表“皇室”(Royal),那么“国王”、“王后”和“王子”在这个维度上会有相对较高的数值,而“女孩”在这个维度上会有相对较低的数值。此外,“女孩”在维度三(“女性”(Female))上的数值较高。
图2:嵌入
什么是向量数据库(Vector database)?
与上面的示例不同,嵌入维度在现实中没有具体和易于解释的意义,因为它们是运用嵌入来捕捉词语意义和关联性的复杂模型的结果。在RAG加持的私域GPT中,向量数据库被用来储存私有数据生成的嵌入向量。
当用户在私域GPT中输入一个指令时,RAG会在向量数据库中搜索最邻近的一个或多个向量并生成回复。衡量向量间距离的方法有很多种,比如欧几里得(直线)距离和余弦距离。后者通常更为准确,因此更常被应用。余弦距离衡量的是两个向量之间角度的余弦值,所以它更注重向量的定向(方向)而不是量(长度)。在应用嵌入时,衡量相对位置比绝对量值更为重要,因此余弦距离是更有效的方法。余弦距离在高维度空间中的稳定性是其另一个优势。
在向量数据库中搜索与目标向量最匹配的向量也有多种方法。目标向量由用户输入的指令转换而来。其中一个方法是计算目标向量到数据库中每个其他向量的距离(称为暴力搜索),但这会非常耗时。大多数向量数据库会运用一个更高效的方法:索引(indexing),而这也通常是向量数据库自带的功能,并且这是影响RAG向量数据库性能的一个重要因素。通过索引参考数据,目标向量只会和少量相关的数据进行对比。这会大幅度提高搜索速度,但也可能错过最优解。这通常不是RAG的主要问题,因为目标是生成合理的答案,而不是最优答案。在准确性和最优性是最高优先级的情况下,用户应当检查嵌入模型和向量数据库所使用算法的技术细节。
嵌入维度是影响RAG向量数据库性能的另一个因素1。例如,截至本文发布之日,OpenAI提供了两个嵌入模型,其嵌入向量长度分别为1,536和3,0722。这些嵌入向量很长,是因为OpenAI的模型用途较为广泛。相比而言,如果私域GPT有较为特定的用途,并且开发者能在这个特定领域上训练一个较小的嵌入模型,搜索的速度和质量就有可能提升。
向量数据库还可以保存每个嵌入的元数据(meta data)来标记向量。例如,元数据可以包含数据源(可以在生成的回复中显示为参考文档的来源),或者可以包含学科主题的标签(用于过滤数据)。适当运用元数据可以极大地提高RAG输出的质量。
数据质量
高质量的数据是构建高性能GPT的必要条件。开发人员必须对数据及其在GPT中的应用方式有深入了解,才能最有效地使用它。本节展示了数据质量对私域GPT性能的影响。在这个示例中,超过10个文件被提供为私域GPT的知识库。图3显示的是其中一个PDF格式的源文件3。
示例中的私域GPT使用Nomic GPT4All4作为软件,而其目的是当用户提出与图3中红色FAQ文本框中相同或相似的问题时,私域GPT会作出和文本框中相同的回答。源文件中包含了复杂的排版。这些排版提高了可阅读性,但对机器来说却是一个挑战。例如,Adobe Reader和GPT 3.5尝试使用光学字符识别(OCR)将这个PDF转换为文本格式,但生成的结果不尽如人意。
图3:源文件 – PDF格式
第一次迭代使用了源文件的原始PDF版本。图4显示了生成的答案。红色框中显示的部分是LLM从知识库中检索到的参考资料,但真正的答案不在这四个参考资料中。不出所料,生成的答案不是图3中FAQ的答案。
图4:源文件为PDF时生成的答案
在第二次迭代中,图3中的FAQ被保存为一个单独的文本文件,作为第一轮使用的所有其他源文件的补充。图5显示了新的生成答案。这次,知识库中的唯一参考资料是包含相同问题的新文件。通过这样的数据清理,我们引导模型提供了期望中的答案。
图5:源文件为TXT时生成的答案
上述示例强调了在构建私域GPT的知识库时数据质量的重要性。为了确保源文件与所选工具兼容,并且结果符合预期,由对于源文件熟悉而且了解LLM工作原理的主题专家来进行测试极其重要。
风险管理
因为知识库可能涉及机密信息,所以隐私和数据安全是选择私域GPT平台时的一个主要考虑因素。例如,如果私密数据被用来训练公共GPT,这个公共GPT的用户就有可能通过指令注入(prompt injection)来获取私密信息。私密信息的泄露可能会导致严重后果,包括财产损失、名誉损害或法律问题等。因此,需应用强有力的数据治理政策来确保私人数据的安全并防止意外泄漏。当涉及第三方数据时,私域GPT的开发人员需要遵守权限和许可。这包括彻底审查和第三方数据相关的服务条款和数据使用协议。
开发人员还需要意识到所选LLM中存在的偏见。例如,性别偏见是LLM的一个常见问题,其中医生通常与男性相关联,而护士与女性相关联。这种偏见可能会加深刻板印象,并导致输出不公平或不准确的结果。开发人员需要考虑偏见对结果的影响以及如何限制或减轻这些影响。在模型开发过程中,组建一支多元化的开发团队来提供更多样化的视角,有助于识别和减少偏见。
误用和过度依赖也可能是较为严重的问题。用户必须记住,私域GPT和LLM生成的答案可能并不真实(即看似正确但实际上没有意义或不准确的输出)。它们并不总是正确的,所以用户需要自行判断生成的答案是否恰当和正确。为了帮助用户做出正确的决定,私域GPT可以将知识库中的参考资料与生成的回复一起传送给用户。培训用户如何适当地使用GPT和了解GPT的局限性也可以减少误用和过度依赖的问题。为了进一步地提升系统的可信度,开发者可以添加反馈机制,让用户可以反馈生成内容中不准确的部分和使用中遇到的其他问题。
选择构建私域GPT工具时的考量因素
选择构建私域GPT的工具时,有一些重要的考量因素:
- 本地或云端:本地工具可以保护私域GPT中的数据,而基于云端的工具则需要在传输敏感数据前增加更多的审批环节。
- 生成回复的速度:用户在关闭工具前可以等待多长时间?
- 单用户还是多用户:如果是多用户,构建工具能否确保一致性?工具的可扩展性如何?
- 灵活性:工具是否允许修改影响RAG性能的参数,例如分块(chunking)、解析(parsing)、索引(indexing)和检索算法(retrieval algorithms)?工具的用户界面是否可以定制?
- 用于开发私域GPT的资源:开发人员在LLM、RAG和编写计算机代码方面有多少经验?如果有足够的资源,开发人员可以从头开始定制一个个性化的工具。
图6展示了一些支持开发私域GPT的流行工具及其功能和局限性的比较。
图6:可用工具
工具名称 | 优点 | 局限性 |
---|---|---|
OpenAI GPT Builder | - 不需要写任何代码 - 平台自带监测功能,包括访问量、运营成本等 - 当OpenAI推出新功能和新模型时,基于GPT Builder开发出的私域GPT可以很方便快捷的使用这些新功能和新模型 |
- 公司数据的安全性 - 截止到2024年11月,GPT Builder最多可支持20个文件,每个文件最大512 MB5 |
Microsoft CoPilot Studio | - 不需要写任何代码,但允许通过自定义代码添加功能,例如为每个响应收集反馈6 - 接受多种类型的数据源,包括公共网站、内部SharePoint文件共享和单独上传的文件 - 很容易将私域GPT发布到其他微软平台,包括SharePoint和Teams - 现成的分析工具可用于监控性能,例如放弃率(用户在得到回复前关闭网页的概率)和账单信息(当前私域GPT运行所产生的费用) |
- 灵活性有限:无法调整RAG和LLM参数 |
Nomic GPT4All | - 有电脑桌面程序版本,不需要写代码且使用便捷 - 多个LLM可供选择 - 相对灵活,可以调整部分RAG和LLM的参数 - 向量数据库在信息源文件夹更新时会自动实时更新 |
- 由于RAG和LLM参数在本地指定,很难确保多组用户之间的一致性 - 速度慢(取决于运行电脑的硬件资源) - 因为依赖于运行电脑的硬件资源,所以通常很难大规模使用 |
定制私域GPT的范例: - 主要编程语言:Python - 模型部署:内部 - LLM:OpenAI模型 - 向量数据库:Typesense |
- 完全灵活 | - 对LLM、RAG和编程有很高的知识要求 |
更多工具不再一一列举。很显然,这项快速发展的技术将推动保险行业和其他领域的发展、变革和创新。
结论
私域GPT可以帮助用户基于私有数据找到答案。成功开发私域GPT的关键在于深入理解RAG、嵌入和向量数据库,保证高数据质量,并致力于维护和更新模型。通过仔细考虑这些元素并选择合适的工具,开发人员可以创建强大、可靠且安全的语言模型来满足其特殊需求。随着AI领域的不断发展,新的技术和工具会进一步增强我们构建复杂私域GPT的能力。紧跟技术潮流、积极创新对于希望在各个领域充分利用生成式AI的人来说都至关重要。
1 Tang, Y., & Yang, Y. (2024). Do we need domain-specific embedding models? An empirical investigation. 2024年12月3日摘自 https://arxiv.org/abs/2409.18511v3.
2 OpenAI Platform. Vector Embeddings. 2024年11月8日摘自 https://platform.openai.com/docs/guides/embeddings/what-are-embeddings.
3 American Academy of Actuaries. 2024年11月8日摘自 https://www.actuary.org/sites/default/files/2023-12/casualty-practice-note-saopclossreserves.pdf.
4 GPT4All. Run Large Language Models Locally. 2024年11月8日摘自 https://www.nomic.ai/gpt4all.
5 OpenAI. File Uploads FAQ. 2024年11月8日摘自 https://help.openai.com/en/articles/8555545-file-uploads-faq.
6 Microsoft Copilot Studio (July 2, 2024). Add feedback for every response. 2024年11月8日摘自 https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/adaptive-card-add-feedback-for-every-response.