2024-年构建-LLM-应用程序的收获--第二部分
2024 年构建 LLM 应用程序的收获——第二部分

构建 AI 应用程序的示意图(作者提供——使用 DALLE-3 生成)
本系列的第一部分中,我们讨论了用例选择、组建团队以及在基于 LLM 的产品开发旅程中早期创建原型的重要性。让我们从这里继续——如果你对你的原型相当满意并准备向前推进,那么首先从规划开发方法开始。在早期阶段决定你的生产化策略也是至关重要的。
随着新模型和市场上的一些 SDK 的最近进展,很容易在早期阶段就有将酷炫功能,如代理,添加到你的 LLM 应用中的冲动。让我们退一步,根据你的用例决定必须具备和希望拥有的功能。首先,确定对应用程序实现主要商业目标至关重要的核心功能。例如,如果你的应用程序旨在提供客户支持,准确理解和响应用户查询的能力将是一个必须具备的功能。另一方面,像个性化推荐这样的功能可能被视为未来扩展中的希望拥有的功能。
找到你的“合适之处”
如果你想要从概念或原型开始构建你的解决方案,自上而下的设计模型可能效果最佳。在这种方法中,你从一个高层次的概念设计开始,而不深入细节,然后分别开发每个组件。这种设计可能一开始不会产生最佳结果,但它为你设置了一个迭代的方法,你可以改进和评估应用程序的每个组件,并在后续迭代中测试端到端解决方案。
对于这种设计方法的例子,我们可以考虑基于 RAG(检索增强生成)的应用程序。这些应用程序通常有两个高级组件——检索组件(用于搜索和检索与用户查询相关的文档)和生成组件(从检索到的文档中生成有根据的答案)。
场景:构建一个有用的助手机器人,通过提供技术知识库中的故障排除指南来诊断和解决技术问题。
第一步 – 构建概念原型:概述机器人的整体架构,而不深入细节。
-
数据收集: 从知识库中收集一个样本数据集,包含与您领域相关的问答。
-
检索组件: 使用简单的基于关键词的搜索实现一个基本的检索系统,这可以在未来的迭代中演变成更高级的向量搜索。
-
生成组件: 在此组件中集成一个 LLM,并通过提示将检索结果传递给生成组件以生成一个基于事实和上下文的答案。
-
集成: 将检索和生成组件结合,创建一个端到端流程。
-
执行: 确定运行每个组件的资源。例如,检索组件可以使用 Azure AI 搜索构建,它提供基于关键词和高级向量检索机制。Azure AI foundry 中的 LLM 可以用于生成组件。最后,创建一个应用程序来集成这些组件。

第 1 步(作者提供图片)
第 2 步 – 改进检索组件: 开始探索如何进一步改进每个组件。对于基于 RAG 的解决方案,检索质量必须特别出色,以确保检索到最相关和准确的信息,这反过来又使生成组件能够为最终用户提供上下文适当的响应。
-
设置数据摄取: 设置一个数据管道将知识库摄取到您的检索组件中。此步骤还应考虑预处理数据以去除噪声、提取关键信息、图像处理等。
-
使用向量数据库: 升级到向量数据库以增强系统进行更多上下文检索。通过将文本分割成块并使用嵌入模型为每个块生成嵌入来进一步预处理数据。向量数据库应具有添加和删除数据以及使用向量进行查询的功能,以便易于集成。
-
评估: 检索结果中文档的选择和排序至关重要,因为它对解决方案的下一步有重大影响。虽然精确率和召回率可以给出搜索结果准确性的相当好的概念,但您还可以考虑使用MRR(平均倒数排名)或 NDCG(归一化折现累积收益)来评估检索结果中文档的排名。上下文相关性决定了文档块是否与生成用户输入的理想答案相关。

第 2 步(作者提供图片)
第 3 步 – 增强生成组件以产生更相关和更好的输出:
-
意图过滤器: 过滤掉不属于您知识库范围的问答。此步骤还可以用于阻止不受欢迎和冒犯性的提示。
-
修改提示和上下文: 改进你的提示,例如包括少量示例、清晰的指令、响应结构等,以根据你的需求调整 LLM 的输出。在每一轮对话中,将对话历史反馈给 LLM 以保持用户聊天会话的上下文。如果你想让模型调用工具或函数,请在提示中放入清晰的指令和注释。在实验阶段的每次迭代中,对提示进行版本控制以跟踪变化。这也便于在系统发布后行为退化时进行回滚。
-
捕捉模型的推理过程: 一些应用使用额外的步骤来捕捉 LLM 生成的输出背后的理由。当模型产生不可预测的输出时,这有助于检查。
-
评估: 对于基于 RAG 的系统产生的答案,重要的是衡量 a) 答案与检索组件提供的上下文之间的事实一致性,以及 b) 答案与查询的相关性。在 MVP 阶段,我们通常使用少量输入进行测试。然而,在为生产开发时,我们应该在每个实验步骤中与从知识库中创建的广泛的真实或黄金数据集进行评估。如果可能的话,真实数据集应包含尽可能多的现实世界示例(目标消费者经常提出的问题)。如果你正在寻找实施评估框架,请查看这里。

第 3 步(作者提供的图片)
另一方面, 让我们考虑另一个场景,即你在业务流程中集成 AI。考虑一个在线零售公司的呼叫中心录音,需要生成和添加到周报中的摘要和情感分析。为了开发这个系统,首先理解现有的系统和 AI 试图填补的差距。接下来,开始设计低级组件,同时考虑到系统集成。这可以被视为自下而上的设计,因为每个组件都可以单独开发,然后集成到最终系统中。
-
数据收集和预处理: 考虑到机密性和录音中个人数据的存在,根据需要对数据进行编辑或匿名化。使用语音转文字模型将音频转换为文本。
-
总结: 根据最终报告的需求,在提取式摘要(选择关键句子)和抽象式摘要(传达相同意义的新句子)之间进行实验和选择。从一个简单的提示开始,并收集用户反馈以进一步提高生成摘要的准确性和相关性。
-
情感分析: 使用特定领域的少量示例和提示调整来提高从转录中检测情感准确性。指导 LLM 提供推理可以帮助提高输出质量。
-
报告生成: 使用 Power BI 等报告工具将先前组件的输出整合在一起。
-
评估: 使用与 LLM 相关组件的指标进行迭代评估过程的概念。
此设计也有助于在各个组件级别早期发现并解决问题,而无需改变整体设计。同时,它还促进了现有遗留系统中的 AI 驱动创新。
LLM 应用程序开发不遵循一刀切的方法。大多数时候,有必要快速取得胜利以验证当前方法是否带来了价值或显示出满足期望的潜力。虽然从头开始构建新的 AI 原生系统听起来对未来更有希望,但另一方面,即使在小型容量中,将 AI 集成到现有的业务流程中也能带来很多效率。选择其中任何一个取决于您组织的资源、采用 AI 的准备程度和长期愿景。考虑权衡并制定一个在该领域创造长期价值的现实策略是至关重要的。
通过自动化评估过程确保质量
提高基于 LLM 应用程序的成功因素在于评估应用程序结果的迭代过程。这个过程通常从为您的用例选择相关指标和收集真实世界的示例以形成真实或黄金数据集开始。随着您的应用程序从 MVP 发展到产品,建议制定一个CI/CE/CD(持续集成/持续评估/持续部署)流程,以标准化和自动化评估过程和计算指标分数。这种自动化在最近一段时间也被称作LLMOps,源自 MLOps。像 PromptFlow、Vertex AI Studio、Langsmith 等工具提供了自动化评估过程的平台和 SDK。
评估 LLM 和基于 LLM 的应用程序并不相同
通常在 LLM 发布之前会对其进行标准基准评估。然而,这并不能保证您的基于 LLM 的应用程序始终按预期执行。特别是基于 RAG 的系统,它使用文档检索和提示工程步骤来生成输出,应该针对特定领域、真实世界的数据集进行评估,以衡量其性能。
对于各种类型用例的评估指标进行深入探索,我推荐这篇文章。
如何选择合适的 LLM?

作者提供的图片 – 使用 DALLE-3 生成
几个因素驱动产品团队做出这个决定。
- 模型能力:根据你在 LLM 产品中解决的问题类型确定你的模型需求。例如,考虑以下两个用例——
#1 在线零售商店的聊天机器人通过文本和图像处理产品咨询。一个具有多模态能力和较低延迟的模型应该能够处理工作量。
#2 另一方面,考虑一个开发者生产力解决方案,它需要一个模型来生成和调试代码片段,你需要一个具有高级推理能力并能产生高度准确输出的模型。
2. 成本和许可:价格取决于多个因素,例如模型复杂性、输入大小、输入类型和延迟要求。流行的 LLM,如 OpenAI 的模型,按每 1M 或 1K 个标记的固定成本收费,这可能会随着使用量的增加而显著扩大。具有高级逻辑推理能力的模型通常成本更高,例如 OpenAI 的 o1 模型每 1M 输入标记收费 15.00 美元,而 GPT-4o 每 1M 输入标记收费 2.50 美元。此外,如果你想销售你的 LLM 产品,请确保检查 LLM 的商业许可条款。某些模型可能对商业使用有限制或需要特定的许可证。
3. 上下文窗口长度:对于模型需要一次性处理大量数据的用例,这变得至关重要。数据可以是文档摘录、对话历史、函数调用结果等。
4. 速度:例如,用于在线零售商店的聊天机器人需要快速生成输出,因此在这种情况下,具有较低延迟的模型至关重要。此外,用户体验改进,例如流式响应按块渲染输出,从而为用户提供更好的体验。
6. 与现有系统的集成:确保 LLM 提供商可以无缝集成到你的现有系统中。这包括与 API、SDK 和其他你正在使用的工具的兼容性。
选择用于生产的模型通常涉及权衡取舍。在开发周期的早期阶段,进行不同模型的实验,并不仅设置特定用例的评估指标,还要将性能和成本作为比较的基准。
负责任的 AI
LLM 的道德使用对于确保这些技术造福社会同时最大限度地减少潜在危害至关重要。产品团队必须优先考虑 LLM 应用中的透明度、公平性和问责制。
例如,考虑一个基于 LLM 的系统在医疗设施中使用,以帮助医生更有效地诊断和治疗患者。该系统不得滥用患者的个人数据,例如病历、症状等。此外,应用程序的结果应具有透明度,并对任何建议背后的推理进行说明。它不应针对任何群体存在偏见或歧视。
在评估每次迭代中由 LLM 驱动的组件输出质量时,务必留意任何潜在的风险,例如有害内容、偏见、仇恨言论等。红队测试,这一来自网络安全的理念,最近已成为揭示任何风险和漏洞的最佳实践。在此过程中,红队人员会尝试通过使用各种提示策略来“欺骗”模型生成有害或不希望的内容。随后是对标记输出的自动和人工审查,以决定缓解策略。随着您的产品不断发展,在每个阶段,您都可以指示红队人员测试您应用程序的不同 LLM 驱动的组件,以及整个应用程序,以确保每个方面都得到覆盖。
为生产做好准备
最后,LLM 应用是一个产品,我们可以在将其部署到生产环境之前,使用常见的原则进一步优化它。
-
日志记录和监控将帮助您捕捉令牌使用情况、延迟、来自 LLM 提供商方面的任何问题以及应用程序性能等。您可以检查您产品的使用趋势,这提供了对 LLM 产品有效性、使用高峰和成本管理的洞察。此外,设置对使用量异常激增的警报可以防止预算超支。通过分析使用模式和重复成本,您可以扩展您的基础设施,并根据需要更改或更新模型配额。
-
缓存可以存储 LLM 输出,减少令牌使用量,最终降低成本。缓存还有助于生成输出的一致性,并减少面向用户的延迟。然而,由于 LLM 应用程序没有特定的输入集,在某些场景下,如聊天机器人,每个用户输入可能都需要缓存,即使预期的答案相同。这可能导致显著的存储开销。为了解决这个问题,引入了语义缓存的概念。在语义缓存中,使用嵌入模型根据其意义将相似的提示输入分组在一起。这种方法有助于更有效地管理缓存存储。
-
收集用户反馈确保了 AI 赋能的应用程序能够以更好的方式实现其目的。如果可能,尝试在每次迭代中从一组试点用户那里收集反馈,以便您可以判断产品是否满足预期,以及哪些领域需要进一步改进。例如,一个由 LLM 驱动的聊天机器人可以被更新以支持更多语言,从而吸引更多多样化的用户。由于 LLMs 的新功能被频繁发布,有大量的潜力快速提高功能和添加新特性。
结论
在构建基于 LLM 的应用之旅中祝您好运!这个领域有无数进步和无限潜力。组织正在采用具有广泛用例的生成式 AI。与任何其他产品一样,在开发具备 AI 功能的应时,请牢记商业目标。对于像聊天机器人这样的产品,最终用户的满意度是至关重要的。接受挑战,如果今天某个特定场景没有成功,不要放弃,明天可能通过不同的方法或新的模型来实现。学习和跟上 AI 的进步是构建有效 AI 产品的关键。
如果您想阅读更多关于新技术和新奇内容,请跟随我。如果您有任何反馈,请留下评论。谢谢 😃

浙公网安备 33010602011771号