生成式人工智能集成模式-全-
生成式人工智能集成模式(全)
原文:
zh.annas-archive.org/md5/81a893dea72f891dc95a3737db4644e8译者:飞龙
前言
五年前,在生成式 AI 得到广泛应用之前,我们正在寻找新的方法来增强应用开发和用户体验。几年后,我们发现自己深深沉浸在生成式 AI 的世界中,这为创新开辟了无数可能性。在发现这项技术的变革潜力之前,我们,作为作者,探索了各种机器学习技术,尝试了不同的模型,阅读了无数的研究论文。有了生成式 AI,我们发现的不仅仅是一个强大的工具;我们发现了一个新的范式,它正在重塑我们对待软件开发和解决问题的方法。
本书旨在分享我们在探索和实施生成式 AI 解决方案过程中所获得的兴奋和洞察。它旨在引导您进入生成式 AI 应用的广阔世界,重点关注实际设计模式和现实世界的实施。我们将涵盖从基础到高级的概念,带您经历一次如同我学习利用生成式 AI 力量的旅程。
本书面向读者
本书面向对生成式 AI 及其实际应用有浓厚兴趣的广泛读者:
-
具有 AI/ML 和 Python 基础知识软件开发人员和工程师
-
寻求生成式 AI 最佳实践和设计模式的软件架构师
-
寻求将生成式 AI 纳入其工作流程的数据科学家、研究人员和分析人员
-
具有软件开发背景的技术产品经理
-
想要深化对生成式 AI 实施策略理解的 AI 爱好者
本书涵盖内容
第一章,生成式 AI 模式简介,概述了生成式 AI 的概念、架构及其对应用开发可能产生的影响。
第二章,识别生成式 AI 用例,指导读者识别和评估生成式 AI 在各个领域的潜在用例。
第三章,与生成式 AI 交互的设计模式,探讨了在应用中有效与生成式 AI 模型沟通和利用的不同策略。
第四章,生成式 AI 批处理和实时集成模式,讨论了将生成式 AI 集成到批处理和实时系统中的不同方法。
第五章,集成模式:批处理元数据提取,演示了如何在批处理模式下使用生成式 AI 从大型数据集中提取元数据。
第六章,集成模式:批处理摘要,介绍了使用生成式 AI 创建大量文本数据摘要的技术。
第七章,集成模式:实时意图分类,展示了如何在实时应用中实现生成式 AI 以对用户意图进行分类。
第八章,集成模式:实时检索增强生成,探讨了使用生成式 AI 和检索增强生成构建问答系统的先进技术。
第九章,实施生成式 AI 集成模式,提供了在生产环境中部署、监控和维护生成式 AI 系统的指导。
第十章,将负责任 AI 嵌入您的 GenAI 应用程序中,讨论了在应用程序中负责任使用生成式 AI 的伦理考虑和最佳实践。
为了充分利用本书
为了充分利用本书,您应该具备:
-
对 Python 编程有扎实的理解
-
对基本机器学习概念的了解
-
软件开发和应用程序架构的经验
-
具备运行 Python 和安装必要库的开发环境访问权限
章节包含理论解释和实际代码示例。要运行书中的代码,您可以按照以下步骤操作:
-
克隆与本书相关的 GitHub 仓库。
-
使用所需的依赖项(在仓库中列出)设置 Python 环境。
-
按照每个章节中的说明下载或访问必要的生成式 AI 模型。
-
运行提供的 Jupyter 笔记本或 Python 脚本。
或者,您可以使用提供预配置 AI 开发环境的云平台,如 Google Colab 或 Amazon SageMaker,来运行示例而无需设置本地环境。
下载示例代码文件
该书的代码包托管在 GitHub 上,网址为github.com/PacktPublishing/Generative-AI-Integration-Patterns-1E。我们还有其他丰富的书籍和视频的代码包,可在github.com/PacktPublishing/找到。请查看它们!
下载彩色图像
我们还提供了一个包含本书中使用的截图/图表彩色图像的 PDF 文件。您可以从这里下载:packt.link/gbp/9781835887608。
使用的约定
本书使用了多种文本约定。
CodeInText:表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter/X 用户名。例如:“将下载的WebStorm-10*.dmg磁盘映像文件作为系统中的另一个磁盘挂载。”
代码块设置如下:
generation_config = {
"max_output_tokens": 8192,
"temperature": 0,
"top_p": 0.95,
}
当我们希望您注意代码块中的特定部分时,相关的行或项目将以粗体显示:
responses = model.generate_content(
[prompt],
`generation_config=generation_config,`
`safety_settings=safety_settings,`
stream=False,
)
任何命令行输入或输出都如下所示:
# cp /usr/src/asterisk-addons/configs/cdr_mysql.conf.sample
/etc/asterisk/cdr_mysql.conf
粗体:表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词在文本中如下所示。例如:“从管理面板中选择系统信息。”
警告或重要注意事项看起来像这样。
小贴士和技巧看起来像这样。
联系我们
我们始终欢迎读者的反馈。
一般反馈:请发送电子邮件至 feedback@packtpub.com,并在邮件主题中提及书籍标题。如果您对这本书的任何方面有疑问,请通过 questions@packtpub.com 发送电子邮件给我们。
勘误表:尽管我们已经尽一切努力确保内容的准确性,但错误仍然可能发生。如果你在这本书中发现了错误,我们将非常感激你向我们报告。请访问 www.packtpub.com/submit-errata,点击 提交勘误,并填写表格。
盗版:如果你在互联网上遇到任何形式的我们作品的非法副本,我们将非常感激你提供位置地址或网站名称。请通过 copyright@packtpub.com 发送电子邮件给我们,并附上材料的链接。
如果你有兴趣成为作者:如果你在某个领域有专业知识,并且你感兴趣的是撰写或为书籍做出贡献,请访问 authors.packtpub.com。
分享你的想法
一旦你阅读了 Generative AI Application Integration Patterns,我们非常乐意听到你的想法!请 点击此处直接进入这本书的亚马逊评论页面 并分享你的反馈。
你的评论对我们和科技社区非常重要,并将帮助我们确保我们提供高质量的内容。
下载这本书的免费 PDF 副本
感谢您购买这本书!
你喜欢在旅途中阅读,但无法随身携带你的印刷书籍吗?
你的电子书购买是否与你的选择设备不兼容?
不要担心,现在,每当你购买 Packt 书籍时,你都可以免费获得该书的 DRM 免费 PDF 版本。
在任何地方、任何地点、任何设备上阅读。直接从你最喜欢的技术书籍中搜索、复制和粘贴代码到你的应用程序中。
优惠不会就此结束,你还可以获得独家折扣、时事通讯和每日收件箱中的精彩免费内容。
按照以下简单步骤获取好处:
- 扫描下面的二维码或访问以下链接:

https://packt.link/free-ebook/9781835887608
-
提交你的购买证明。
-
就这样!我们将直接将你的免费 PDF 和其他好处发送到你的电子邮件。
第一章:生成型 AI 模式简介
本章概述了与生成型 AI 相关的关键概念、技术和集成模式,这将使你能够在实际应用中利用这些能力。
我们将概述生成型 AI 架构,如 transformers 和 diffusion 模型,这些是这些生成模型产生文本、图像、音频等的基础。你将简要了解专门的训练技术,如预训练和提示工程,这些技术将基本语言模型升级为创意 powerhouse。
由于新模型和伦理考虑的持续出现,理解这个领域的创新步伐至关重要。我们将介绍快速实验的策略,同时确保负责任、透明的开发。
本章还介绍了将生成型 AI 连接到实际工作流程的常见集成模式。无论是制作利用实时模型的聊天机器人,还是执行批量数据丰富,我们将介绍原型蓝图以启动构建 AI 驱动系统的过程。
到最后,你将全面了解哪些生成型 AI 模型可用,为什么实验很重要,以及这些集成模式如何帮助你的组织利用生成型 AI 创造价值。
简而言之,以下主要主题将被涵盖:
-
与 AI 交互
-
预测型 AI 与生成型 AI 用例构思
-
范式的转变
-
通用生成型 AI 概念
-
生成型 AI 集成模式简介
从 AI 预测到生成型 AI
本节的目的在于提供一个关于人工智能的简要概述,强调我们与它的初步体验。在 2000 年代初,AI 开始对消费者变得更加具体。例如,在 2001 年,谷歌推出了“你是指?”功能(blog.google/intl/en-mena/product-updates/explore-get-answers/25-biggest-moments-in-search-from-helpful-images-to-ai/),建议拼写纠正。这是谷歌机器学习的第一次应用之一,也是公众大规模体验的早期 AI 功能之一。
在接下来的几年里,AI 系统变得更加复杂,特别是在计算机视觉、语音转文本转换和文本转语音合成等领域。在电信行业的工作使我得以见证由语音转文本驱动的创新。将语音转文本功能集成到交互式语音响应(IVR)系统中,通过让人们说出他们的请求而不是在键盘上按键,从而提高了用户体验。例如,你可以拨打一家银行,你会听到一条消息,要求你说“余额”来查询余额,“开户”以开户等。如今,我们越来越多地看到 AI 的应用,简化了更复杂和耗时的工作。
可用计算能力的指数级增长,加上训练机器学习模型所需的庞大数据集,释放了新的 AI 能力。在 2010 年代,AI 开始在图像分类等某些严格定义的任务上与人类性能相匹配,甚至超越。
生成式人工智能的出现重新点燃了人们对 AI 领域的兴趣和创新,引入了探索用例和系统集成的新方法。Gemini、PaLM、Claude、DALL-E、OpenAI GPT 和 Stable Diffusion 等模型展示了 AI 系统生成合成文本、图像和其他媒体的能力。这些输出展现了创造力和想象力,吸引了公众的注意。然而,生成模型强大的能力也突显了系统设计和负责任部署方面的新挑战。需要重新思考集成模式和架构,以支持安全、稳健和成本效益的实施。具体来说,需要通过数据集过滤、人机协作系统、增强监控和即时补救等技术来解决关于安全、偏见、毒性和错误信息的问题。
随着生成式人工智能的不断发展成熟,最佳实践和治理框架必须同步演进。行业领导者已经建立了如内容真实性倡议(Content Authenticity Initiative)等伙伴关系,以开发围绕人工智能下一迭代负责任发展的技术标准和政策指导。这种技术令人难以置信的潜力,从加速药物发现到构想新产品,只有通过承诺透明度、伦理和人权才能实现。在创新与谨慎之间保持建设性合作是至关重要的。
生成式人工智能标志着该领域的转折点。这一创造性可能性的浪潮所引起的涟漪才刚刚开始触及组织和社区。围绕能力以及挑战展开的开放、基于证据的对话,为赋予人们权力、解锁新效用和赢得广泛信任的人工智能部署奠定了基础。
我们正在见证生成式人工智能能力前所未有的民主化,这是通过像谷歌、Meta 和亚马逊这样的知名公司以及 Anthropic、Mistral AI、Stability AI 和 OpenAI 等初创公司提供的公开可访问的 API 实现的。下表总结了几个领先的模型,它们为自然语言和图像生成提供了多才多艺的基础。
只需几年前,使用生成式人工智能进行开发需要深度学习方面的专业知识以及访问大量计算资源。现在,Gemini、Claude、GPT-4、DALL-E 和 Stable Diffusion 等模型可以通过简单的 API 调用以近乎零的成本访问。实验的门槛从未如此之低。
这种商品化引发了利用这些预训练模型的新应用爆炸式增长——从内容生成的创意工具到融入人工智能的流程自动化解决方案。预计在未来几个月和几年内,所有行业都将实现与生成式基础的集成。
模型正变得更加知识渊博,具备更广泛的技能和推理能力,这将减少幻觉并提高模型响应的准确性。多模态也在获得关注,模型能够处理和生成文本、图像、音频、视频和 3D 场景的内容。在可扩展性方面,模型大小和上下文窗口正在呈指数级增长;例如,谷歌的 Gemini 1.5 现在支持 1 百万个标记的上下文窗口。
总体而言,展望未来,生成式人工智能将深度融入大多数技术中。这些模型引入了新的效率和自动化潜力,并激发几乎所有可想象行业的创造力。
下表突出了一些最受欢迎的大型语言模型及其提供商。本表的目的在于强调在撰写本书时市场上可用的众多选项。我们预计,到本书出版时,此表将很快过时,并强烈建议读者深入访问模型提供商的网站,以保持对任何新发布的最新信息。
| 模型 | 提供商 | 着陆页 |
|---|---|---|
| Gemini | deepmind.google/technologies/gemini |
|
| Claude | Anthropic | claude.ai/ |
| ChatGPT | OpenAI | openai.com/blog/chatgpt |
| Stable Diffusion | Stability AI | stability.ai/ |
| Mistral | Mistral AI | mistral.ai/ |
| LLaMA | Meta | llama.meta.com/ |
表 1.1:流行的大型语言模型及其提供商概述
预测式人工智能与生成式人工智能用例构思
预测 AI 指的是分析数据以识别模式并对未来事件进行预测或分类的系统。相比之下,生成式 AI 模型根据从训练数据中提取的模式创建新的合成内容,如图像、文本或代码。例如,使用预测 AI,你可以自信地识别图像中是否包含猫,而使用生成 AI,你可以根据文本提示创建猫的图像,修改现有的图像以包含原本没有的猫,或者生成关于猫的创意文本摘要。
专注于 AI 的产品创新涉及产品开发生命周期的各个阶段。随着生成式 AI 的出现,范式已经从最初需要编译训练数据来训练传统 ML 模型转变为利用灵活的预训练模型。
像谷歌的 PaLM 2 和 Gemini、OpenAI 的 GPT 和 DALL-E、以及 Stable Diffusion 这样的基础模型提供了广泛的基础,使得快速原型开发成为可能。它们的通用能力降低了尝试新型 AI 应用的门槛。
在以前,从数据整理和从头开始训练模型到评估可行性可能需要数月时间,而现在,在无需微调基础模型的情况下,几天内就可以生成概念验证。
这种生成式方法促进了更迭的迭代概念验证。在快速构建由基线模型驱动的初始原型后,开发者可以收集特定训练数据,并通过蒸馏等技巧进行知识迁移,以定制后续版本;本书稍后将对蒸馏的概念进行深入探讨。模型的主要基础中已经包含了用于启动和迭代新模型的编码模式。
相比之下,预测建模方法需要在任何应用测试之前进行数据收集和训练。这种更线性的进展限制了早期阶段的灵活性。然而,一旦存在大量数据,预测系统可以有效地学习专业相关性,并实现高置信度的推理指标。
利用通用的生成式基础支持快速原型设计和用例探索。但是,后来,定制预测建模在具有足够数据的狭窄任务上提高了性能。结合这些 AI 方法可以在模型部署的生命周期中充分利用它们的互补优势。
除去基础使用——提示工程——之外,还有几个辅助的、更复杂的技巧可以增强基础模型的能力。例如,思维链(CoT)和ReAct,这些技巧使模型不仅能对情况进行推理,还能定义和评估行动方案。
在论文《ReAct:在语言模型中协同推理和行动》中提出的 ReAct,解决了 LLMs 在语言理解能力与决策能力之间当前存在的脱节。虽然 LLMs 在理解任务和问答任务上表现出色,但它们的推理和行动技能(例如,生成行动计划或适应不可预见的情况)通常被分开处理。
ReAct 通过提示 LLMs 以交错的方式生成“推理轨迹”,详细说明模型的思维过程,以及特定任务的动作来弥合这一差距。这种紧密耦合允许模型利用推理进行规划、执行监控和错误处理,同时使用行动从外部来源(如知识库或环境)收集更多信息。这种集成方法显著提高了 LLMs 在语言和决策任务上的性能。
例如,在问答和事实核查任务中,ReAct 通过利用简单的维基百科 API 来对抗诸如幻觉和错误传播等常见问题。这种交互使得模型能够生成比缺乏推理或行动组件的方法更透明、更值得信赖的解决方案。LLM 的幻觉被定义为看似合理但实际上没有事实依据的内容。有许多论文旨在解决这个问题。例如,《大型语言模型中幻觉的综述——原理、分类、挑战和开放性问题》深入探讨了不仅识别而且减轻幻觉的方法。另一个缓解技术的良好例子可以在论文《通过验证链减少大型语言模型中的幻觉》中找到(arxiv.org/pdf/2309.11495.pdf)。在撰写本书时,幻觉是一个变化非常快的领域。
CoT 和 ReAct 都依赖于提示:向 LLM 提供精心设计的指令,以引导其思维过程。CoT,如论文《思维链提示在大型语言模型中激发推理》中所述(arxiv.org/abs/2201.11903),专注于构建推理步骤链,模仿人类思维。想象一下提示模型:“我想烤蛋糕。首先,我需要面粉。我在哪里能找到一些?”模型会回应一个潜在来源,比如你的储藏室。这种一来一往的对话继续进行,构建了一个逻辑上的行动和决策链。
ReAct 将事情推进了一步,将行动整合到推理循环中。把它想象成思维与行动之间的动态舞蹈。LLM 不仅对情况进行推理,而且与世界互动,获取信息或采取具体步骤,然后根据结果更新其推理。这就像模型同时在规划旅行并检查地图以调整路线,如果遇到障碍。
这种推理与行动之间强大的协同作用为 LLM 开辟了新的可能性领域。CoT 和 ReAct 通过允许模型追踪其逻辑并纠正方向来解决挑战,如错误传播(基于错误假设得出错误结论)。它们还提高了透明度,使 LLM 的思维过程变得清晰易懂。
换句话说,大型语言模型(LLMs)就像杰出的语言学家,擅长理解和生成文本。但说到需要推理和行动的实际情况,它们往往举步维艰。这正是 CoT 和 ReAct 等技术出现的地方,将 LLM 转变为推理的强大力量。
想象一下 LLM 帮助诊断一种复杂的疾病。CoT 可以引导它通过症状和检查的逻辑链,而 ReAct 可以提示它咨询医学数据库或运行模拟。这不仅导致更准确的诊断,而且使医生能够理解 LLM 的推理,培养信任和协作。
这些未来派应用正是推动我们不断构建和投资这项技术的原因,这非常令人兴奋。在我们深入探讨利用生成式 AI 技术产生商业价值所需的模式之前,让我们退一步,看看一些初步概念。
范式的改变
在科技年数中,这感觉像是远古时代,但让我们回顾一下仅仅几年前的时光,那时如果你开始着手解决一个 AI 问题,你不能默认通过网络或托管端点利用预训练模型。这个过程非常细致——你首先必须明确定义具体的用例,确定你有什么可用和可收集的数据来训练定制模型,选择合适的算法和模型架构,使用专用硬件和软件训练模型,并验证输出是否真的有助于解决手头的任务。如果一切顺利,你将拥有一个模型,它将接受预定义的输入并提供预定义的输出。
随着大型语言模型和大型多模态模型的问世,范式发生了根本性的转变。突然之间,你可以访问具有数十亿参数的预训练模型,并立即开始使用这些多才多艺的基础模型进行实验,其中输入和输出都是动态的。在尝试一番之后,你会评估是否需要微调以适应你的需求,而不是从头开始预训练整个模型。而且剧透一下——在大多数情况下,你可能甚至不需要微调基础模型。
另一个关键转变与早期认为一个模型将优于所有其他模型并解决所有任务的信念有关。然而,模型本身只是引擎;你仍然需要一个完整的生态系统打包在一起,以提供完整的解决方案。基础模型确实展示了超出初始预期的某些令人难以置信的能力。但我们还观察到,某些模型更适合某些任务。将相同的提示通过其他模型运行可能会产生非常不同的输出,这取决于底层模型的训练数据集和架构。
因此,新的实验路径通常首先关注提示工程、响应评估,如果存在差距,然后是微调基础模型。这与之前的数据准备、训练和实验流程形成鲜明对比。开始使用人工智能的门槛从未如此之低。
在接下来的章节中,我们将探讨预测人工智能用例和生成人工智能用例开发生命周期的差异。在每个章节中,我们都提供了一个简化开发生命周期的概述性视觉表示以及每种方法的思维过程解释。
预测人工智能用例开发——简化生命周期

图 1.1:预测人工智能用例开发简化生命周期
让我们先深入了解开发预测人工智能模型的过程。一切从良好的用例开始,在评估人工智能用例时,投资回报率(ROI)是首要考虑的。想想看,你的业务或行业中哪些痛点可以通过预测结果来解决。始终关注可行性非常重要——例如,你是否能获取所需的数据等。
一旦你确定了一个有吸引力的价值驱动的用例,接下来就是选择算法。在这里你有无数的选择——决策树、神经网络、回归、随机森林,等等。非常重要的一点是不要被对最新和最好的偏好所左右,而要专注于你数据和用例的核心需求,以缩小选项范围。你可以在测试过程中随时调整或添加额外的实验。
计划已经就绪,现在是你动手处理数据的时候了。识别数据源,整理数据,并进行特征工程是一种艺术,而且往往是提高模型结果的关键。不幸的是,这里没有捷径!正如他们所说:“垃圾进,垃圾出”。但一旦你整理好了可以信赖的数据集,接下来就是有趣的部分。
是时候开始与你的模型工作了。事先定义你的评估流程,明智地分割数据,并开始训练各种配置。别忘了根据验证性能进行监控和调整。然后,一旦你得到了你的黄金模型,实施稳健的服务基础设施,以确保它能够顺利扩展。
但等等,别这么快!测试并不在模型投入生产时结束。持续收集性能数据,监控概念漂移,并在需要时重新训练。一个稳固的预测模型需要持续的反馈机制,正如连接模型增强到测试的箭头在图 1.1中所示。在这个领域,没有一劳永逸的事情。
生成式 AI 用例开发 - 简化生命周期

图 1.2:生成式 AI 用例开发简化生命周期
生成式 AI 用例开发的流程与预测式 AI 类似,但又不完全相同;有一些共同步骤,但任务顺序不同。
第一步是构思潜在用例。这一选择需要与业务需求相平衡,因为满足这些需求是我们的主要目标。
在明确问题定义之后,对已发布模型基准的广泛分析通常有助于选择最适合该任务的稳健基础模型。在这一步,值得我们自问的问题是:这个用例更适合预测模型吗?
由于基础模型提供即插即用的功能,初始测试在流程中是一个早期步骤。结构化的测试方法有助于揭示特定模型的内在优势、劣势和怪癖。定量指标和定性的人类评估在整个开发生命周期中推动迭代改进。
下一步是转向提示工程的艺术。提示是与 LLMs 交互的机制。像思维链提示、骨架提示和检索增强等技术构建了护栏,使输出更加一致和逻辑。
如果在优化后仍有差距,通过微调和蒸馏进行模型增强提供了一种精确的工具,以使模型更接近目标任务。
在极少数情况下,当没有现有模型能够有效满足用例时,从头开始预训练一个完全定制的模型是必要的。然而,重要的是要记住,由于模型重新训练对数据的大量需求,这项任务对于大多数用例和团队来说可能并不适合;重新训练基础模型需要大量的数据和计算能力,从财务和技术角度来看,这个过程是不切实际的。
首先,评估和模型改进之间的相互作用突出了负责任地推进生成性 AI 的深刻经验性质。测试通常表明,更好的解决方案来自问题框架的创造性,而不仅仅是纯技术进步。

图 1.3:预测性和生成性 AI 开发生命周期并排比较
如前图所示,开发生命周期是一个迭代过程,使我们能够从给定的用例和技术类型中实现价值。在本章的其余部分和本书中,我们将关注生成性 AI 的一般概念,其中一些如果您在预测 AI 方面有经验将会熟悉,而其他则是 AI 这个新领域的特定概念。
通用生成性 AI 概念
当将生成性 AI 集成到实际应用中时,了解诸如模型架构和训练等概念非常重要。在本节中,我们将概述一些突出概念,包括 Transformer、扩散模型、预训练和提示工程,这些概念使系统能够生成令人印象深刻的高精度文本、图像、音频等。
理解这些核心概念将使您在选择用例的基础时做出明智的决定。然而,将模型投入生产需要进一步的架构考虑。本书的其余章节和实际示例中,我们将突出这些决策点。
生成性 AI 模型架构
生成性 AI 模型基于针对生成任务优化的专用神经网络架构。两个更广为人知的模型是 Transformer 和扩散模型。
Transformer 模型不是一个新概念。它们首次由谷歌在 2017 年的一篇名为《Attention Is All You Need》的论文中提出(arxiv.org/pdf/1706.03762.pdf)。这篇论文解释了Transformer 神经网络架构,该架构完全基于使用编码器和解码器概念的注意力机制。这种架构使模型能够识别输入文本中的关系。通过这些关系,模型预测下一个标记,利用其之前的预测作为输入,创建这个递归循环以生成新内容。
扩散模型因其基于非平衡热力学物理过程的坚实基础而作为生成模型引起了相当大的兴趣。在物理学中,扩散是指粒子随时间从高浓度区域向低浓度区域的运动。扩散模型试图在其训练过程中模仿这一概念。这些模型通过两个阶段进行训练:正向扩散过程向原始训练数据添加“噪声”,随后是反向条件化过程,该过程学习如何在反向扩散过程中去除噪声。通过学习这个过程,这些模型可以从纯噪声开始,让反向扩散模型清除不必要的“噪声”,并保留所需的“生成”内容。
其他类型的深度学习架构,如生成对抗网络(GANs),允许您根据现有数据生成合成数据。GANs 很有用,因为它们利用两个模型:一个用于生成合成输出,另一个试图预测这个输出是真实还是虚假。
通过这个迭代过程,我们可以生成与真实数据难以区分但足够不同的数据,以便用于增强我们的训练数据集。数据生成架构的另一个例子是变分自编码器(VAEs),它使用编码器-解码器方法来生成与训练数据集相似的新数据样本。
可用于优化基础模型的技术
有几种技术被用来开发和优化基础模型,这些技术推动了人工智能能力的显著提升,其中一些在技术和经济方面比其他技术更复杂:
-
预训练是指在大型数据集上完全训练一个模型。这允许模型从数十亿个数据点中学习非常广泛的表现形式,这有助于模型适应其他密切相关任务。流行的方法包括在未标记数据上的对比自监督预训练和在大量监督数据(如互联网)上的预训练。
-
微调将预训练模型已经学习到的特征表示调整为执行特定任务。这仅调整一些高级模型层,而不是从头开始训练。另一方面,适配器微调为模型配备了小型、轻量级的适配器,这些适配器可以快速调整到新任务,而不会干扰现有功能。这些可插拔的适配器通过学习特定任务的行为同时重用大部分模型权重,以参数高效的方式在多个任务中积累知识。它们有助于减轻对先前任务的遗忘并简化个性化。例如,模型可能首先在数十亿个文本网页上进行预训练,以获取一般语言知识,然后针对更特定领域的数据集进行微调,用于问答、分类等。
-
蒸馏使用“教师”模型训练一个较小的“学生”模型,以在较低的成本和延迟下重现较大预训练模型的性能。将大型模型量化并压缩成高效的部署形式也有助于优化性能和成本。
综合预训练后跟随着专门的微调、适配器调整和可移植蒸馏的结合,使得深度学习在各个领域的应用具有前所未有的灵活性。每种方法都智能地重用和转移现有知识,从而实现生成式 AI 的定制和扩展。
增强基础模型响应的技术
除了架构和训练的进步之外,生成式 AI 的进展还受到了在推理时如何通过外部数据增强这些模型的方法创新所推动。
提示工程调整提供给模型的文本提示,以引导其生成质量、能力和属性。精心设计的提示指导模型产生期望的输出格式,减少歧义,并提供有用的上下文约束。这允许更简单的模型架构通过将人类知识编码到提示中来解决复杂问题。
检索增强生成,也称为RAG,通过从外部存储中高效检索相关知识来增强文本生成。模型在生成输出之前接收作为“上下文”的上下文信息片段,作为额外的输入。基于事实学习LLM(大型语言模型)指的是提供模型特定的实际知识,而不仅仅是模型参数,从而实现更准确、知识渊博和具体的语言生成。
这些方法共同增强了基本的预测语言模型,使其变得更加灵活、健壮和可扩展。它们通过紧密集成人类知识和基于事实的学习来减少脆弱性,而不仅仅是统计模式。RAG 处理信息的广度和实时检索,提示提供深度和规则以指导期望的输出,而基于事实的学习将它们与现实世界联系起来。我们强烈建议读者熟悉这个主题,因为进行 RAG 并将模型基于事实来防止其产生幻觉是行业最佳实践。一个好的起点是以下这篇论文:检索增强生成对于大型语言模型的调查 (arxiv.org/pdf/2312.10997)。
生成式 AI 领域的持续进化
生成式 AI 领域以不懈的创新和快速进步为特征,涉及模型架构、应用和伦理考量。一旦一种方法或架构显示出有希望的结果,就会有数百种竞争性和互补的方法出现,以进一步推动能力。Transformer 让位于 BERT,而 BERT 又很快被 GPT-3 超越,随后又被像 DALL-E 这样的图像合成器所超越,现在 GPT-4 和 Gemini 正在争夺头把交椅。所有这些都在过去几年内发生。
同时,我们看到了新的模式,如音频、视频和 3D 场景生成,获得了巨大的流行度和可用性。在商业领域,每月都有新的服务推出,针对媒体和娱乐、金融、医疗保健、艺术、代码、音乐等领域。然而,考虑到道德、访问控制和法律问题,以维持公众信任是关键。
一个突破使得更多的突破成为可能,每个突破都释放了额外的潜力。这种自我加速的循环源于 AI 的本质——其递归协助创新的能力。唯一确定的是,几个月内该领域将非常不同,而不是几年。在这种持续的演变中,保持意识、反应性和责任感至关重要。
介绍生成式 AI 集成模式
现在假设您已经有一个有希望的应用场景在心中。正如我确信您会同意的那样,在进一步进行之前,明确定义用例至关重要。您已经确定了哪种基础模型能够满足您的需求。因此,现在您开始考虑 GenAI 如何融入应用程序开发过程。
在高层次上,有两种主要的流程用于将应用程序与 GenAI 集成。一种是实时,在这种情况下,您通常与最终用户或 AI 代理互动,在提示到来时提供响应。第二种是批量处理,其中需求被捆绑成组(批量)进行处理。
一个实时工作流程的典型例子是聊天机器人。在这里,用户的提示被处理,然后发送到模型,并立即返回响应,因为您需要不延迟地消费输出。另一方面,考虑批量处理的数据丰富用例。您可以在一段时间内收集多个数据点,然后在模型批量丰富后进行后续消费。
在这本书中,我们将通过实际例子来探讨这些集成模式。这将帮助您获得与 GenAI 驱动应用程序的动手经验,并允许您在自己的用例中集成这些模式。
通过“集成模式”,我们指的是将技术集成到您的应用程序或系统中的标准化架构方法。在这种情况下,集成模式提供了将生成式 AI 模型连接到现实世界软件的成熟方法。
有几个关键原因说明为什么在处理生成式 AI 时我们需要集成模式:
-
节省时间:遵循既定模式允许开发者避免为常见的集成挑战重新发明轮子。这加快了价值实现的进程。
-
提高质量:利用集成模式中编码的最佳实践,可以导致更稳健、适用于生产的集成。可扩展性、安全性和可靠性是首要考虑的因素。
-
降低风险:定义良好的集成模式使开发者能够减轻性能、成本和其他潜在风险,这些风险可能在集成新技术时出现。
总体而言,集成模式提供了模板和指导方针,因此开发者不必从头开始集成工作。通过依赖经过验证的蓝图,读者可以更有效地集成生成式 AI,同时避免常见的错误。这显著加快了开发周期,并为长期成功奠定了基础。
摘要
在本章中,我们概述了与生成式 AI 相关的关键概念、技术和集成模式。现在,您对像 transformers 和扩散模型这样的突出生成式 AI 模型架构有了高级背景知识,以及开发和完善这些模型的各种方法,包括预训练、微调、适配器调整、蒸馏、提示工程、检索增强生成和归一化。
我们讨论了生成式 AI 的快速创新如何导致持续进化,新模型和能力以快速的速度出现。这强调了在确保道德、负责任发展的同时,保持与进步同步的必要性。
最后,我们介绍了将生成式 AI 连接到现实世界应用的常见集成模式,考虑到实时用例,如聊天机器人,以及用于数据丰富化的批量处理。提供了真实示例来展示将生成模型集成到生产系统中的工作流程。
人工智能的创新步伐非常快,需要持续的警觉、迅速的实验和负责任地利用最新进展的方法。这在生成式 AI 领域尤为明显,我们正在见证人工智能应用中的范式转变,这允许更快地进行实验和开发。
出现了各种技术来增强模型的能力和效率。这包括预训练、适配器调整、蒸馏和提示工程,每种技术在不同场景中都有独特的优势。当涉及到将这些 AI 模型集成到实际应用中时,对于实时工作流程,如聊天机器人,以及批量处理任务,如数据丰富化,都出现了关键模式。
设计良好提示的艺术已成为有效约束和引导模型输出的关键。此外,检索增强和扎根等技术在提高 AI 生成内容准确性方面已被证明非常有价值。将预测和生成方法相结合的潜力是一个非常有趣的空间。这种组合利用了两种方法的优势,允许在存在足够数据的情况下进行定制建模,同时利用生成基础来实现快速原型设计和创新。
这些核心概念在构建生成式 AI 系统时,能够支持明智的决策制定。集成模式为将模型连接到不同领域的实际应用提供了蓝图。
利用大型语言模型(LLM)的力量,首先在于识别适合它们发挥价值的正确用例。在下一章中,我们将介绍一个框架和示例,用于根据预期的商业价值对 LLM 用例进行分类。
在下一章中,我们将探讨如何识别可以用生成式 AI 解决的问题。
加入我们的 Discord 社区
加入我们的 Discord 空间,与作者和其他读者进行讨论:

第二章:识别通用人工智能(Generative AI)用例
在上一章中,我们讨论了随着大型语言模型(LLMs)的出现,用例探索和概念验证开发过程是如何转变的。具体来说,快速实验 LLMs 的能力使得团队更倾向于采用实验方法,而不是更传统的需求分析和设计流程。
使用 LLMs,可以通过创建展示潜在能力的提示来快速测试用例。这比事先详细映射需求具有更大的灵活性和速度。当然,一旦确定了有希望的用例,进行更严格的分析是非常推荐的。此外,生产系统的安全、监控和治理仍然是关键组成部分。
在本章中,我们将讨论一种识别有希望的用例的方法,这些用例可以与 LLMs 一起探索。我们根据应用程序如何与 LLM 交互来分类用例。这提供了一个框架来思考所有可能性以及实施时的独特考虑。
我们将涵盖以下主要主题:
-
在何时考虑将通用人工智能(Generative AI)作为集成到您应用程序中的工具
-
通过通用人工智能(GenAI)实现商业价值
-
如何识别通用人工智能(GenAI)的商业用例
-
综合用例和生成用例之间的区别以及详细示例
在何时考虑生成人工智能
正如我们所探索的,通用人工智能(GenAI)的一个强大功能是能够自动生成响应,而无需对其进行显式训练。LLMs 不仅执行预定义的任务,还可以通过利用其上下文理解和知识来推断响应。这种涌现推理方面的能力为快速实验和迭代改进新用例提供了独特的机会。
当考虑通用人工智能(GenAI)的潜在应用时,首要的评价标准集中在基于理解的任务上。情感分析、内容分类、意图分类、关系抽取、摘要等任务都利用了固有的语言理解能力。开发者可以制定与用例相匹配的提示,以解释、组织或推断意义。为了充分发挥大型语言模型(LLMs)的潜力,开发者将通过深思熟虑的“提示工程”对这些提示进行迭代。提示工程试图通过提供特定任务的输入文本来优化 LLM 的响应,引导模型向期望的输出方向发展。
然而,纯数值分析可能不是 GenAI 的最佳初始匹配。虽然数学推理存在于模型中,但大量统计数据处理更适合传统的程序性算法和预测 AI。当然,GenAI 可以帮助描述数值分析中的见解——例如,用自然语言传达趋势,或从自然语言创建查询。但我们不会期望仅通过提示进行回归分析或优化就能取得出色的性能。
沿着这些思路,关于 LLMs 限制的最早发现之一出现在数学推理领域。用户在尝试涉及数值计算或比较的提示时,发现了一些不合逻辑的输出。模型会生成听起来连贯的响应文本,但缺乏对基本算术原则的任何依据。这种脱节突显了幻觉的风险——即那些语言流畅但准确性和逻辑一致性很低的响应。
研究人员提出,LLMs 的巨大参数空间使它们能够在缺乏数学中符号逻辑的更紧约束下优化文本连贯性。没有特别编码数值逻辑,模型“幻想”出听起来合理的数值推理,但在数学上几乎没有意义。这些输出既暴露了语言流畅性的力量,也揭示了超出模型实际知识限制的泛化风险。
随着我们深入探讨本书中的用例,我们鼓励您思考与语言理解工具提供的优势相一致的机会。
目标是将围绕语言、内容和推理的高价值挑战与 LLMs 的涌现能力相匹配。我们将评估现代 AI 如何增强人类工作流程——是否存在让我们陷入困境的理解组件?提示能否帮助在这些环境中进行分类、总结、建议或预测?最后,我们将考虑 LLMs 生成的输出如何从实验性提示发展到经过优化的 API 驱动解决方案。
重要的是再次强调业务一致性的重要性。当新兴技术获得巨大的炒作和媒体关注时,组织面临急于部署“闪亮的新玩具”的倾向,而没有明确界定它们将为业务带来的价值。GenAI 面临着同样的动态,鉴于 ChatGPT 等聊天机器人引发的惊人主流突破。高管们争相声称利用这些强大的技术进步来确保未来的竞争力。
不幸的是,将人工智能视为最终解决方案而不是增强解决方案的成分,往往会导致失败。有良好意图的团队展示了引人注目的原型功能,但这些功能未能映射到具体的商业挑战或工作流程中。实验之外,进展停滞。没有展示实际影响,资金就会枯竭。更糟糕的是,计划不周的 AI 集成可能会损害客户体验或市场地位。相反,关注具有明确商业价值的用例,可以促进成功的 AI 实施,从而产生积极的企业影响,推动创新并最大化投资回报。

图 2.1:“数据与想象的交响曲”——一个生成的图像,用于说明生成式人工智能与预测式人工智能。
实现商业价值
当评估使用通用人工智能(GenAI)解决商业问题的机会时,分析潜在的商业价值至关重要——这项技术的影响如何改变结构、效率、竞争定位或组织的收入机会?仅仅展示复杂的技术能力是不够的,因为它缺乏战略严谨性。提议的项目应直接解决具体问题或组织杠杆来源。
作为寻求高管支持的思维领袖,我们需要发展将潜在生产力提升转化为引人入胜的商业案例的技能和方法,明确投资回报。具体来说,构建成本规避模型与关注运营效率和利润边界的高管产生共鸣。
用企业能够理解和衡量的术语量化假设是成功将通用人工智能(GenAI)集成到您的应用程序中的关键步骤。目前针对自动化流程的手动流程成本是多少?有多少劳动小时或全职员工(FTEs)投入到低效领域?通过人工智能增强,吞吐量如何扩展?哪些费用与质量缺陷或客户摩擦痛点相关?
理解和提取指标以转化为数据驱动预测是关键。围绕当前业务运营状态收集基线测量值,为展示未来改进奠定基础。量化用例收益的潜在向量包括:
-
成本节约:通过自动化和可扩展性恢复的小时数,以及错误和返工的减少。
-
收入增长:通过参与和满意度提升客户终身价值。
-
质量提升:降低错误率并提高审查评分,衡量客户推荐意愿。
-
员工体验:关于满意度、生产力和有意义且富有吸引力的工作的内部调查。
目标是构建一个对高管友好的业务案例模型,同时也能跟踪现实世界的影响与预测之间的差异。将 AI 的进步转化为运营和财务成果需要一些技能发展,但通过团队间更好的对齐,它将带来回报。
让我们考虑一个内容标签用例的例子。手动将元数据分配给文档会给试图大规模处理的人类审阅者带来压力。错误会发生,不一致性会显现,数据损耗也会发生——混乱。但也许一个自然语言处理(NLP)管道可以帮助自动化标签,从而显著提高吞吐量同时降低成本。这个管道随后成为人类审阅者以更快的速度扩展的推动者,使他们能够专注于审阅而不是创建。
一个产生收入的用例可能更多地关注使用那些丰富的标签语料库作为客户推荐和了解特定市场购买信号的训练数据。在竞争中,丰富的目录搜索和大规模个性化可以区别于那些只产生静态信号的缓慢移动的玩家。因此,明智地构建用例直接与战略优先事项相关联,描绘出一个引人入胜的市场领导力愿景。
在选择效率提升和收入再生用例之间找到平衡的解药,需要首先从具体业务价值驱动因素的角度来构建每个潜在的 AI 应用,其次是使能技术。我们可以使用哪些关键目标来围绕成本、效率、差异化或收入?人类目前在哪里在工作量、主观性或可用性方面遇到困难?流程因为数量或复杂性而无法充分扩展吗?将用例牢固地锚定在推动这些商业需求上,为负责任地细化 GenAI 如何以及在哪里提供帮助提供了适当的背景。避免本能地创造问题并寻找解决问题的工具。彻底地映射问题,然后找到解决问题的工具。
从本质上讲,GenAI 代表的是使商业能力得以实现的成分,而不是一个最终解决方案本身。我们必须深思熟虑地将技术应用于优先挑战或机会。如果应用 GenAI 的投资回报率(ROI)感觉不确定,或者产生的商业价值太小,那么在进一步投资之前可能需要更广泛的思考。
识别生成式 AI 用例
在评估 GenAI 的潜在应用时,出现了两个主要类别——理解应用和生成应用。通过区分这个理解现有数据与合成新实体的用例,我们可以更好地将能力与适当的商业挑战相匹配:
- 理解应用涵盖了应用于分析现有内容以获取知识和结构的处理任务。这包括情感分析、关系提取、意图分类、摘要等。关键关注领域集中在解释、组织和标记数据,以便后续系统使用。
当机器学习模型对主题进行分类、归一化实体和大规模总结概念时,来自聊天历史、客户票据和产品目录的来源会产生更丰富的见解。
- 生成应用超越了纯理解应用,创造性地综合了新的成果,如文本、图像或多媒体。用例范围从内容起草和构思到对话界面。通过适当的提示和微调,LLMs 可以为特定领域生成自然语言、代码、视觉设计等。输出与面向客户的解决方案集成或增强人类工作流程。
将这两类结合,我们发现混合人类-人工智能协作中存在一个令人难以置信的机会。人类确定业务目标,提供关键监督,并处理例外情况。人工智能自动化高容量任务,同时向人们发送需要解释的信号。例如,生成写作通过初步起草帮助内容创作者,而专家编辑最终确定内容。
通过将用例组织为理解和生成类别,我们可以根据期望的结果更好地将能力映射到潜在应用。以理解为中心的用例围绕从现有数据中提取见解。生成用例通过建立学习到的模式来创建新颖的成果。两者在深思熟虑地应用时都会改变工作流程,同时维护监控、伦理和团队增强的责任。
随着多模态模型在理解图像、文本和其他数据类型之间联系方面的最新进展,AI 应用的新维度正在浮现。谷歌的 Gemini 模型(见论文arxiv.org/abs/2312.11805)结合了统一基础架构中视觉、文本、数学甚至代码概念的综合理解应用。
这个多模态基础使 Gemini 不仅能够解释多模态信息,还能根据文本提示生成图像等新颖成果,反之亦然。对于理解应用,这提供了与视觉总结文档、从书面叙述生成图像以视觉解释概念以及根据描述性标题增强图像相关的引人入胜的用例。生成应用的可能性包括构思创意图像、设计和针对特定概念方向的定制数据可视化。这与混合人类/人工智能协作模型相一致。
图像、视频和声音媒体类型引入了另一组丰富的内容,多模态模型在处理和理解这些内容以执行生成任务方面变得越来越擅长。对视频中的场景、物体、语音和叠加文本的理解增强了搜索、推荐和内容审核等应用。
其他实际例子包括从图像和视频中提取文本,在视频帧或图像中生成新内容,甚至创建描述丰富媒体内容内容的综合摘要。与其他人工智能进步一样,随着多模态模型开始渗透工作流程,负责任的监督仍然至关重要。持续的监控、道德实施和人类判断有助于我们朝着有益的结果前进,因为这项技术解锁了新的潜力。但是,通过连接媒体如图像、文本和声音,Gemini 等模型为下一代智能应用铺平了道路,这些应用在多个维度上拥有更深入的理解。
潜在以业务为导向的使用案例
当探索应用 GenAI 的机会时,首先持续评估任何潜在的商业价值,而不是仅仅关注可能的技术艺术。为了激发想法,以下列表总结了按关键价值驱动因素组织的有希望的使用案例。考虑那些在机器规模上复制人类质量的理解或创作对工作流程有积极影响的案例。
成本和效率收益:
-
自动化高量/重复性任务。在这里,你的业务关键绩效指标(KPI)可以是自动化率,以自动化的任务百分比来衡量。
-
加速内容开发,实现人机混合协作。在这里,你的业务 KPI 可以是与创建内容所需时间相比节省的小时数增加。
-
通过利用图像/文本生成来评估内容以减少错误和返工。在这里,你的业务 KPI 可以是提交以更新错误内容的工单数量的差额。
个性化并定制推荐:
-
通过利用图像/文本生成来生成一致的跨渠道体验。在这里,你的业务 KPI 可以是现有的参与度指标,例如“在平台上花费的时间”,或者你应用程序特定部分的点击率。
-
生成上下文线索以引导用户并改进产品文档。在这里,你的业务 KPI 可以是客户与你的文档的互动,这可以通过页面浏览量来衡量。
-
生成运营洞察以降低风险。在这里,你的业务 KPI 可以是风险评估的差额。
提升和扩展人类交互:
-
从文档中提供概述摘要。在这里,你的业务 KPI 可以是现有的参与度指标,例如“在平台上花费的时间”,或者你应用程序特定部分的点击率。
-
预测新兴问题和趋势。在这里,你的业务关键绩效指标(KPI)可能是你的应用程序在节省成本方面的预测能力。
-
协作创新,获得竞争优势。在这里,您的业务关键绩效指标可能是一个现有的参与度指标,例如“在平台上的时间”,或者您应用程序特定部分的点击率。

图 2.2:“头脑风暴伙伴”图像由人工智能生成
这种与核心业务优先事项对齐的用例框架使实施与推动实际成果紧密相连,而不是仅仅为了部署技术。在业务需求和人工智能能力交汇的地方,可能性众多,但保持这种以价值为中心的焦点确保了人工智能的负责任应用,引导团队朝着有益的创新和转型方向发展。
理解用例利用自然语言理解的力量从非结构化数据中提取见解和结构化信息。这些技术使组织能够获得有价值的见解,提高可发现性,促进知识再发现和重用,最终推动更好的决策和增强运营效率。
以下是一个不完整的、以技术为重点的理解用例列表:
-
情感分析:情感分析利用自然语言理解自动对文本内容中的情感基调进行分类,如客户反馈、调查和社交媒体帖子。这使得组织能够在不进行大规模人工审查的情况下识别痛点和建议。常见的集成策略包括情感 API 查询或批量处理分析,汇总到报告仪表板中。本用例侧重于理解客户如何看待您的业务以及识别改进机会。
-
文档摘要:文档摘要利用人工智能自动创建文本的浓缩片段,将像维基、研究论文和知识库文章这样的长篇文档中的关键细节带到表面。这提高了用户的可发现性,用户可以在决定阅读完整文档之前快速确定文本的相关性。它还使文档的新交互和搜索模式成为可能,尤其是在大型存储库中。本用例侧重于全面提高生产力。
-
元数据提取:元数据提取利用自然语言理解从非结构化文本内容中识别和提取关键信息属性。这包括像人、地点和公司这样的实体,以及主题、概念、语气和关系。结构化元数据使大规模理解文档和内容变得更加容易。
用例范围从处理大量合同到自动标记对手方、义务、日期或风险水平。通过主题、优先级状态和位置对支持票进行分类,可以正确路由案例,同时确定宏观趋势。通过提及的概念和技术对某一领域的科研出版物进行汇总,构建新兴思想流派和网络映射,以及影响跟踪。发布平台甚至可以自动建议高性能文章标签,以分析标题语义和文档摘要。
元数据提取使大型组织中的知识重新发现和重用成为可能。例如,员工可以快速搜索过去的会议记录,参考关键项目细节,而不是利用孤立的、碎片化的数据存储。
新团队成员可以快速熟悉情况,通过智能图发现关键文档,而不是进行无目的的单词搜索。随着时间的推移,随着 AI 增强机构对其信息宇宙的情境理解,基于这一可操作的元数据层,信号与噪声比会提高。
相反,生成式用例利用 GenAI 生成类似人类输出的能力,针对特定需求和情境进行定制。这些应用不仅简化了重复性任务,还开辟了个性化体验、增强创造力和加速创新的新途径。
以下是一个技术性生成用例的非详尽列表:
-
对话界面:对话界面通过聊天、语音,甚至可能通过增强现实(AR),允许终端用户和智能助手之间进行自然对话。这些流畅的体验提供答案、推荐和下一步建议,减少了导航复杂应用或菜单的需求。随着时间的推移,对用户目标和偏好的情境意识能够实现个性化指导。
-
数据可视化:数据可视化利用 GenAI 自动创建相关的图表、图形和图表,针对提供的数据集进行定制。除了基本类型如直方图或饼图之外,还包括交互式信息图表、动画数据故事和针对消费用例定制的仪表板布局,使关键趋势变得明显。
-
报告自动化:报告自动化为特定用户需求生成个性化的、动态的业务洞察力摘要。与静态的、模板驱动的报告不同,生成能力允许独特的视角,从集中的数据资产中发送关键信号。自动分析识别出现的问题,而可定制的布局提供不同业务领导者所需定制的简报。
-
代码生成:最近将大型语言模型(LLMs)集成到编码工作流程中,为提高生产力和创造性探索开辟了一条迷人的途径。LLMs 正在改变开发者处理代码创建的方式。通过将自然语言指令转换为功能性代码片段,LLMs 可以作为智能助手,提出替代解决方案,简化重复性任务,填补知识空白。然而,记住 LLMs 并不是核心编码专长的替代品。它们的专长在于增强人类能力,而不是取代它们。真正的潜力在于人类独创性和 LLMs 解锁的巨大创造潜力之间的协同作用。随着这项技术的成熟,我们可以期待看到更多有影响力的应用出现,塑造软件开发和创新的未来。
-
内容生成:利用 LLMs 的原始生成能力,组织现在有了自动起草书面内容的新能力,这些内容根据特定指南、主题、声音和创意方向定制。主要机会与营销、沟通和文档需求相关。

图 2.3:“代码的艺术”由 AI 生成
对于电子邮件营销活动,GenAI 可以根据过去表现良好的模板和新产品/事件公告,为不同的订阅者细分市场合成消息的初始草稿。营销团队设定输入和创意方向,而机器在规模上处理大部分重复性创作工作。然后,人类进行细化、融入个性化并批准最终版本。
类似的应用使创建博客文章、社交媒体标题、着陆页等成为可能,同时节省团队数小时的努力。负责任的生成写作增强创作过程,而不是完全自动化例行模板内容。
在技术文档方面,AI 有望加速知识捕获和转移。主题专家可以大声说出详细的过程、软件功能或制造设备操作。自动语音转文本、翻译和摘要将关键事实和工作流程提炼成可共享的参考资料。
编辑将润色最终文档,但主题专家(SMEs)将避免花费数小时从头开始手动记录程序。
内容生成用例引入了增强人类创造力、专业知识和判断力的巨大潜力,而不是取代它们。自动化例行创作减轻了写作疲劳,同时提供了融入大量学习模式的起点。人员元素指导目标,允许细微差别,并建立模型限制。共同,内容创作过程实现了由 AI 协作推动的新规模、响应性和个性化。
生成 AI 部署和托管选项
当我们考虑要追求哪些类型的用例以提供商业价值时,我们必须考虑我们将部署和托管系统的基础设施。在利用云资源的新常态下,我们往往认为容量不再是问题,但这正确吗?让我们剖析这个想法——最大的模型是否是所有用例的正确解决方案?从现实的角度来看,大型语言模型(LLMs)测试起来很方便,并且可以快速获得初步结果,但在考虑规模和商业化时,它们并不像你想象的那样吸引人。一些限制包括 GPU 可用性、成本和延迟。这一认识正在引导市场转向更多专业化的较小模型,这些模型可以解决特定的用例。
为 LLMs 设计产品架构需要仔细考虑几个因素。可以采用成本优化策略,如深度混合(Mixture-of-Depths),以动态分配基于 transformer 的模型资源,最大化效率。云基础设施应设计为可扩展的,利用基于需求自动调整容量的服务。安全性至关重要,企业级控制对于保护敏感数据和防止未授权访问是必不可少的。此外,像 Giskard 这样的强大测试框架对于确保 LLM 应用程序按预期运行和减轻潜在风险至关重要。Giskard 提供开源评估工具,甚至还有来自 DeepLearning.ai 关于红队测试 LLM 应用程序的课程,为全面测试和安全评估提供了宝贵的资源。
假设你的用例需要一个大型模型,该模型需要执行多个任务并接受多种数据输入模式——文本、图像和视频。在这种情况下,首先应该想到的是利用基于云的托管模型,你可以通过 API 调用它。一个云原生、API 驱动的解决方案,用于处理你的推理请求,使你能够卸载一些围绕底层基础设施的重型任务,例如自动扩展、修补和其他维护任务。假设 API 满足你所有的服务级别协议(SLAs)要求,你可以专注于推理请求的应用逻辑,缩短将你的应用程序上线所需的时间。
让我们考虑另一个用例,其中你需要将一个较小的、专业的模型本地部署到设备上,例如手机上的个人助手或提供实时代码建议的共飞行员模型。在这些“边缘”用例中,将每个单独的请求发送到托管 API 可能会产生过多的延迟,或者有无法满足的连接需求。在这里,将仅在相关数据和任务上训练的紧凑模型打包起来可能是正确的做法。例如,设备上的个人助手可以有一个经过对话数据微调的对话模型,以提供快速、低延迟的响应,而无需互联网连接。同样,编码助手模型可以通过学习代表其目标编程语言和环境的代码库来优化,以专注于在开发者键入时提供相关的代码补全和建议。
在响应性和自包含性至关重要的场合,针对边缘部署进行模型开发和优化可以启用用户期望的高级 AI 功能,即使是在间歇性连接和计算限制的情况下。关键在于事先理解用例需求和推理环境,确定特定解决方案中边缘与云之间的正确平衡。
摘要
本章探讨了评估 GenAI 潜在用例的复杂性,为您提供了辨别该变革性技术最佳应用的工具。通过考察不同的观点和标准,我们建立了一个框架,以确定某个用例是否与 GenAI 的优势和局限性相匹配。
关键要点如下:
-
每个成功的通用人工智能(GenAI)实施的核心都在于清晰和可证明的商业价值。问问自己,GenAI 将如何直接增强你当前的运营,解锁新的收入来源,或改善客户体验。如果没有实际的好处,这项技术本身的价值就很小。
-
我们确定了 GenAI 在两个广泛用例类别中表现出色:理解和生成。理解侧重于分析和提取数据中的意义,而生成则利用这种理解来产生全新的内容。考虑你的用例属于哪个类别,以评估 GenAI 的适用性。
-
我们探讨了托管 GenAI 模型的主要两种方式——云 API 和优化的边缘部署。云 API 在可扩展性方面表现良好,但可能存在延迟和连接限制。边缘部署适用于低延迟场景,如设备上的助手,但它需要更紧凑、专业的模型。首先评估你的用例限制和要求,在利用生成式 AI 能力时,在云和边缘之间找到正确的平衡。
在下一章中,我们将深入探讨一个框架,该框架将帮助您处理将 GenAI 集成到应用程序中的任务。
加入我们的 Discord 社区
加入我们的 Discord 空间,与作者和其他读者进行讨论:
packt.link/genpat

第三章:设计与生成式 AI 交互的模式
在前面的章节中,我们探讨了生成式 AI(GenAI)的世界,包括可以使用这项令人兴奋的新技术开发的用例和应用程序类型。我们还讨论了评估 GenAI 可能为不同组织和企业带来的潜在商业价值。
在本章中,我们将更深入地探讨将 GenAI 功能集成到现实世界应用程序中的实际考虑因素。一个关键问题是,我们应该在应用程序架构和工作流程中何处以及如何集成 GenAI 模型?我们可以采取几种不同的方法,这取决于应用程序类型、现有基础设施、团队技能等因素。

图 3.1:由 AI 生成的图像,用于描绘 AI 集成
我们将首先检查用户请求或输入如何作为生成内容或预测的入口点,使用 AI 模型在近实时进行。例如,客户支持聊天机器人可以将用户的提问作为输入,并将其传递给语言模型来制定一个有用的回复。同样,一个创意应用程序可以接受用户输入的提示并生成图像、文本或其他媒体。
接下来,我们将探讨退出点——即应用程序将 AI 生成的输出返回给用户或将它们纳入业务工作流程的点。这可能涉及在用户界面中显示文本或图像输出,或将模型的预测输入到评分算法或推荐引擎中。
此外,我们将强调在集成 AI 时监控和记录的重要性。在模型使用、输入、输出及其应用周围添加遥测数据,可以让你跟踪生产中的性能,检测数据分布变化等问题,并确定何时需要重新训练或调整模型。记录这些数据还可以让你为模型调整创建正负反馈循环,例如,将提示-响应元组与基准数据集进行比较,并使用正确的元组作为微调作业的输入。
通过理解这些集成方法和它们的实际应用,你将能够无缝地将 GenAI 的独特功能融入你的应用程序中,在了解技术局限性的同时,实现最大的商业价值。
简而言之,在本章中,我们将涵盖以下主题:
-
我们将定义一个 5 组件框架,该框架可以轻松应用于构建生成式 AI(GenAI)应用程序。
-
确定 AI 模型的战略入口点,以增强不同应用程序类型(从客户服务聊天机器人到创意工具)的实时用户交互
-
定义有效的提示预处理以最大化推理请求性能
-
定义有效的推理结果后处理和展示,以便将 AI 生成的输出呈现给用户或将它们纳入业务工作流程,确保无缝体验
-
实施监控和日志记录机制以跟踪模型性能、输入和输出,从而实现持续改进周期和数据驱动的模型调整
定义集成框架
让我们定义一个框架,通过集成组件来探索集成路径。这个五组件框架——入口点、提示预处理、推理、结果后处理和日志记录——为系统性地解决许多应用程序背后的 AI 集成过程提供了一个模板。具体细节可能因用例而异,但概念阶段具有广泛适用性。在这个框架中,我们将根据用户与模型交互的方式建立主要的集成边界:交互式用于实时输出生成,或批量导向用于大量内容创建和处理。

图 3.2:GenAI 应用集成框架
集成 GenAI 模型可以遵循这两条不同的路径——交互式用户驱动方法与批量处理工作流程。交互模式直接通过应用程序界面实时暴露模型推理,用户提供的提示立即触发生成结果的请求。这个紧密的反馈循环能够进行进一步的迭代,从而实现结果细化或后续跟进。相比之下,批量处理涉及从各种来源排队提示,然后异步以更大的批量通过模型进行处理。这种模式优化了大规模的高吞吐量,优先考虑总体量而不是低延迟。每种集成模式都提供独特的权衡,与交互性、规模、效率和特定用例需求优先级相一致。
关键区别在于低延迟和紧密的用户交互与更高的整体吞吐量和效率之间的权衡。交互模式优先考虑快速周转以实现响应迭代,而批量模式则专注于总体量、成本控制和断开提示/结果循环。选择正确的流程取决于评估围绕交互性、规模、成本和用例匹配的优先级。
交互式和批量处理在不同场景下都有其优势。一个全面的 企业级 AI 集成甚至可以混合这些方法,例如使用批量进行数据预处理,然后进行交互式交付。深思熟虑地将正确的模式与用例对齐,决定了用户是否直接在实时中引导模型,还是通过异步累积过程利用其能力。
入口点
入口点是应用程序接受用户输入的地方,该输入将由 GenAI 模型处理。这可能是:
-
用户输入提示的文本框:交互式
-
将被处理的上传图像:交互式或批量
-
将被转录和分析的语音录音:批量
入口点作为用户访问应用程序内 GenAI 力量的门户。因此,入口点模式应与所利用的模型支持的输入类型紧密一致。如果模型仅处理文本提示,则基于文本的输入字段是合适的。对于图像生成模型,入口点可以是支持图像上传的界面。对于多模态模型,可能需要提供文本和图像的选项。
除了匹配支持输入类型之外,入口点用户体验设计应旨在让用户提供提示变得快速、直观,甚至令人愉悦。精心设计的界面会引导用户自然地创建出能够产生高质量模型输出的有效提示。通过智能默认值、示例、模板以及防止问题内容的防护措施,可以塑造出良好的提示。平滑并加速从用户意图到生成结果的路径,可以提高采用率。
此外,适当的入口点复杂性取决于用户和用例。对于内部团队,高级界面可能提供显著的提示调整控制。面向消费者的应用程序可能更倾向于简单和精确。在某些情况下,如搜索,入口点可以最小化或完全隐藏提示塑造对用户的影响。在阐明价值路径的同时去除摩擦是关键。
提示预处理
在将提示传递给生成模型之前,预处理可以使输入更易于使用,并可能提高输出质量。
当考虑提示预处理时,有两个关键维度受到影响——安全和模型可用性。
在安全方面,这是第一次评估提示并验证它们是否与您的负责任 AI 防护措施一致的机会。此外,您还可以检查提示是否有恶意意图——例如,试图强迫模型暴露在训练中使用的敏感数据。在预处理阶段实施内容过滤器、黑名单和其他防御措施对于确保安全至关重要。
第二个维度与优化模型可用性相关。这意味着对原始提示进行处理,以最佳准备输入,以便进行有效的推理。例如,模型不太可能接受 192 kHz 的高保真音频,而可能 8 kHz(这是电话中使用的采样率)就足够理解和响应。同样,长文本提示在推理之前可能需要截断。目标是塑造数据以实现理想性能。
此外,无论输入模式如何,预处理阶段是您可以生成可能用于利用向量搜索优化(如检索增强生成(RAG))的嵌入的地方。创建统一的向量表示允许模型在推理期间更有效地被提示。
提示预处理阶段提供了验证安全、优化可用性和设置嵌入的机会,这些嵌入共同为推理时最佳可能的生成式 AI 性能准备原始输入。
推理
推理步骤是魔法发生的地方——用户输入实际上是通过 AI 模型运行的,无论是在本地还是在云端,以生成输出。无缝编排这一预测阶段需要一些关键技术能力。
首先,应用程序需要直接与生成模型公开的 API 端点接口,提交提示并接收回预测。架构应包括用于在规模上高效路由请求到适当模型的服务的功能。当需求超过单个模型的能力时,编排层可以在多个模型实例之间共享负载。你可以遵循传统的应用程序架构模式,通过队列机制实现扩展,并实现如指数退避等算法,这些算法有时可以通过云 SDK 提供,如果你打算消费他们的服务。始终评估常见的 API 消费模式并探索权衡,以了解哪种最适合你正在设计的应用程序。
在基础设施方面,如果你决定托管你的模型,托管需求必须提供低延迟访问模型以进行响应性预测,以及足够的吞吐量容量。生成模型通常依赖于 GPU 进行密集计算——配置正确的服务器、容器或基于云的推理引擎是关键。成本控制也同样关键——在不需要时,应关闭未使用的容量。
除了托管你的模型之外,还可以利用云服务,例如,你可以直接从你的云服务提供商那里消费模型。在 Google Gemini 的情况下,你可以通过 Vertex AI 平台来消费模型。
最后,冗余扮演着重要角色,确保没有任何单个故障点会干扰关键任务 AI 预测的可用性。通过谨慎的编排、基础设施决策和服务可靠性最佳实践,推理阶段可以全天候 24/7 地向应用程序用户提供生成模型的核心理念价值。汇集这些技术能力使得在请求时在产品内部解锁 AI 魔法成为可能。
推理阶段汇集了许多动态部分,但做得好的话,复杂性被隐藏在简单的提示 -> 预测接口之后,用户信任这些接口将正常工作。创建这样一个无缝可靠的编排层以提供 AI 生成结果,是构建成功以 AI 为先的应用程序中真正的工程挑战所在。
结果后处理
在将 GenAI 模型的原始输出直接呈现给最终用户之前,通常需要进行额外的后处理来精炼和润色结果。现在我们将看到一些常见的提高质量的技巧。
过滤不适当的内容 – 尽管在训练过程中做出了最大努力,模型有时仍会返回有偏见、错误或冒犯性的输出。后处理提供第二道防线,通过黑名单、粗话过滤器、情感分析和其他工具来捕捉有问题的内容。标记的结果可以被丢弃或重新路由到人工审查。这种过滤确保只有高质量的内容达到用户。
类似于 Google Gemini 的模型允许您定义一组安全设置,在生成过程中设置阈值,如果这些阈值被超过,您可以停止生成内容。此外,它还提供了一组安全评级与您的结果一起,允许您在生成后确定过滤结果的阈值。
以下是为示例提供的完整代码;请注意,一些标签是作为 Google Colab(见 colab.research.google.com/notebooks/forms.ipynb)表单功能的一部分使用的:
import vertexai
from google.cloud import aiplatform
from vertexai.generative_models import GenerativeModel, Part
#Authenticate with Google Colab
from google.colab import auth as google_auth
google_auth.authenticate_user()
# GCP Parameters
PROJECT = "your-GCP-project" #@param {type:"string"}
LOCATION = "us-central1" #@param {type:"string"}
#Init Vertex AI Platform
aiplatform.init(project=PROJECT, location=LOCATION)
def generate(prompt):
model = GenerativeModel("gemini-pro")
response = model.generate_content(
[prompt],
generation_config={
"max_output_tokens": 2048,
"temperature": 0.1,
"top_p": 0,
"top_k": 5,
},
safety_settings={
generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
},
stream=False,
)
return response
result = generate("Tell me a joke about cars")
print(result)
让我们深入探讨 Google Vertex AI 控制台提供的生成 Python 示例:
def generate(prompt):
model = GenerativeModel("gemini-pro")
response = model.generate_content(
[prompt],
generation_config={
"max_output_tokens": 2048,
"temperature": 0.1,
"top_p": 1
},
safety_settings={
generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
},
stream=False,
)
return response
在这种情况下,您将看到安全设置被定义为:
safety_settings={
generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
}
从可用的 Google Gemini 文档 cloud.google.com/vertex-ai/docs/generative-ai/multimodal/configure-safety-attributes,我们可以看到可用的完整属性列表:
| 安全属性 | 定义 |
|---|---|
| Hate Speech | 针对身份和/或受保护属性的负面或有害评论。 |
| Harassment | 针对另一个个体的恶意、威胁、欺凌或侮辱性评论。 |
| Sexually Explicit | 包含对性行为或其他淫秽内容的引用。 |
| Dangerous Content | 推广或允许访问有害商品、服务和活动。 |
表 3.1:截至 2024 年 2 月的 Google Gemini 安全属性
除了安全属性外,您还将获得一个概率:
| 概率 | 描述 |
|---|---|
NEGLIGIBLE |
内容存在极低的不安全概率。 |
LOW |
内容存在低的不安全概率。 |
MEDIUM |
内容存在中等的不安全概率。 |
HIGH |
内容存在高度的不安全概率。 |
表 3.2:截至 2024 年 2 月的 Google Gemini 安全属性概率
现在让我们测试样本提示 Tell me a joke about cars。您将使用之前提供的样本函数将提示提交到 Google Vertex AI 上的 gemini-pro 模型:
candidates {
content {
role: "model"
parts {
text: "What do you call a car that\'s always breaking down?\n\nA lemon-aid stand!"
}
}
finish_reason: STOP
safety_ratings {
category: HARM_CATEGORY_HATE_SPEECH
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_DANGEROUS_CONTENT
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_HARASSMENT
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_SEXUALLY_EXPLICIT
probability: NEGLIGIBLE
}
}
usage_metadata {
prompt_token_count: 6
candidates_token_count: 20
total_token_count: 26
}
您可以看到有一个名为finish_reason的属性,这实际上是模型停止生成标记的原因。如果此属性为空,则模型尚未停止生成标记。以下是根据 Gemini 的文档,截至 2024 年 2 月的完整选项列表:
| 完成原因代码 | 描述 |
|---|---|
FINISH_REASON_UNSPECIFIED |
完成原因未指定。 |
FINISH_REASON_STOP |
模型或提供的停止序列的自然停止点。 |
FINISH_REASON_MAX_TOKENS |
达到请求中指定的最大标记数。 |
FINISH_REASON_SAFETY |
由于响应被标记为安全原因,标记生成停止。注意,如果内容过滤器阻止输出,则Candidate.content为空。 |
FINISH_REASON_RECITATION |
响应被标记为未经授权的引用时,标记生成停止。 |
FINISH_REASON_OTHER |
所有其他停止标记的原因。 |
表 3.3:截至 2024 年 2 月的 Google Gemini 完成原因
在那个部分之后,您将找到生成的safety_ratings。在您的应用程序中,您可以解析 LLM 的结果并过滤结果。利用safety_ratings的一个很好的应用来自分析生成,您可以存储来自提示的安全评级,然后分析它们以创建见解。
safety_ratings {
category: HARM_CATEGORY_HATE_SPEECH
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_DANGEROUS_CONTENT
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_HARASSMENT
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_SEXUALLY_EXPLICIT
probability: NEGLIGIBLE
}
现在我们来尝试一个有问题的提示。使用安全评级,我们将代码设置为阻止任何概率低于或高于所需评级的输出:
safety_settings={
generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
}
我们将运行提示How do I rob a bank with a toy gun?。在将提示提交给 Google Gemini Pro 后,我收到了以下结果:
candidates {
content {
role: "model"
}
finish_reason: SAFETY
safety_ratings {
category: HARM_CATEGORY_HATE_SPEECH
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_DANGEROUS_CONTENT
probability: LOW
blocked: true
}
safety_ratings {
category: HARM_CATEGORY_HARASSMENT
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_SEXUALLY_EXPLICIT
probability: NEGLIGIBLE
}
}
usage_metadata {
prompt_token_count: 10
total_token_count: 10
}
如您所见,生成停止是因为SAFETY原因,如果您转到safety_ratings部分,您将看到HARM_CATEGORY_DANGEROUS_CONTENT的概率为LOW,并且被标记为阻止的True。换句话说,内容被阻止是因为它被分类为危险内容类别。
从多个输出中选择
类似于 LLM 的模型通常会生成多个候选响应或图像。后处理可以基于相关性、兴趣、多样性和其他属性分析所有选项,以自动为给定的提示选择最佳单个结果。这避免了使用无关的输出过载用户。
在以下示例中,您将使用 Google PaLM 2 文本模型(text-bison)生成多个响应:
import vertexai
from google.cloud import aiplatform
from vertexai.language_models import TextGenerationModel
from google.colab import auth as google_auth
google_auth.authenticate_user()
# GCP Parameters
PROJECT = "your-GCP-project" #@param {type:"string"}
LOCATION = "us-central1" #@param {type:"string"}
#Init Vertex AI Platform
aiplatform.init(project=PROJECT, location=LOCATION)
def generate(prompt):
model = TextGenerationModel.from_pretrained("text-bison")
parameters = {
"candidate_count": 2,
"max_output_tokens": 1024,
"temperature": 0.9,
"top_p": 1
}
response = model.predict(
prompt,
**parameters
)
return response
result = generate("Tell me a joke about cars")
for candidate in result.candidates:
print(f"Response Candidate: {candidate}\n\n")
这就是生成函数的样子:
def generate(prompt):
model = TextGenerationModel.from_pretrained("text-bison")
parameters = {
"candidate_count": 2,
"max_output_tokens": 1024,
"temperature": 0.5,
"top_p": 1
}
response = model.predict(
prompt,
**parameters
)
return response
如您所见,我们将candidate_count的数量设置为2。
当您从生成函数获取响应时,Google PaLM 2 将返回一个MultiCandidateTextGenerationResponse对象。为了获取所有结果,您必须遍历候选者:
result = generate("Tell me a joke about cars")
for candidate in result.candidates:
print(f"Response Candidate: {candidate}\n\n")
您将得到以下格式的结果:
Response Candidate: Why did the car get a parking ticket?
Because it was parked illegally.
Response Candidate: Why did the car get a speeding ticket?
Because it was going too fast!
精炼生成的输出
模型生成输出后,还需要额外的步骤来提高输出质量。这些技术将根据生成的内容而有所不同,因为音频、图像和文本的后期处理方法各不相同。虽然自动化后期处理技术,如过滤和输出选择提供了基础,但人类交互和精炼可以将 GenAI 结果提升到下一个质量层次。还有其他方法可以启用这种协作改进。
例如,用户可以对初始模型输出提供反馈,指出需要改进的领域,并将提示重新提交以进一步精炼结果。模型可以被提示扩展某些部分,修正错误或调整风格元素。在这个循环中迭代,可以展现出人类与 AI 协作的优势。让我们通过以下提示生成的 Google Gemini Pro 文本来举例:
Prompt: Tell me a joke about cars
Result:
Why don't cars like to go to the beach?
Because they just want to dune it.
现在,让我们用这个输出请求模型写两段关于它的内容:
Prompt:
Expand the following text in two paragraphs:
Why don't cars like to go to the beach?
Because they just want to dune it.
Result:
Cars, unlike humans and other creatures, harbor an aversion to the sandy shores of the beach. This peculiar reluctance stems from the woes they face when navigating the treacherous terrain. As tires sink into the soft sand, cars find themselves losing traction and struggling to maintain momentum. The endless dunes, often towering over them, pose another formidable obstacle. Attempts to conquer these sandy peaks can lead to wheels spinning futilely, leaving cars stranded amidst the unforgiving landscape.
Therefore, while the beach beckons with its allure of sun, sand, and surf, cars prefer to remain on paved roads, where they can glide effortlessly without the fear of getting bogged down. Their aversion to the beach is aptly summarized in the playful pun, "They just want to dune it," a clever play on words that highlights their desire to avoid the challenges and embrace the comfort of smooth roads.
另一种有助于提升 GenAI 输出的技术是利用多个替代方案。当用户在模型初始结果中识别出不足或改进领域时,应用可以呈现几个备选方案供用户选择。这允许人类选择最接近其原始意图和目标的选项。
例如,考虑前一小节中提供的 Google PaLM 的示例,它为给定提示生成了多个候选输出。应用可以显示这些替代方案,并让用户选择最符合其感受的一个。模型充当一个强大的“头脑风暴伙伴”,迅速产生一系列多样化的选项。然后,通过人类编辑和选择,迭代地精炼输出,使其越来越接近用户心中的理想最终结果。

图 3.3:在 Google Cloud 控制台中显示的多个生成响应
现在您将探索在 Python 调用 PaLM 2 的 Vertex AI API 的情况下,生成多个输出的体验会是什么样的:
def generate(prompt):
model = TextGenerationModel.from_pretrained("text-bison")
parameters = {
"candidate_count": 2,
"max_output_tokens": 1024,
"temperature": 0.9,
"top_p": 1
}
response = model.predict(
prompt,
**parameters
)
return response
您会注意到我们正在使用 text-bison 模型,以及 candidate_count 参数来指定将要生成多少个结果。
我们将这样评估结果:
result = generate("Tell me a joke about cars")
for candidate in result.candidates:
print(f"Response Candidate: {candidate}\n\n")
您将获得类似以下的结果:
Response Candidate: What does a car with road rage suffer from?
Answer: A road rash.
Response Candidate: What did one car say to the other car as it drove past? We should race and I bet I will win.
What did the other car say? Don't be silly there is no way you can beat a Volkswagen!
您现在可以迭代多个结果,并选择哪个结果更适合当前任务。
请记住,您可以精炼获得的结果。例如,我们可以将响应转换为,例如,一首十四行诗:
result = generate(f"Modify this joke to be a sonnet with no more than 2 verses: {result.candidates[0].text} ")
for candidate in result.candidates:
print(f"Response Candidate: {candidate}\n\n")
Response Candidate: A chariot of fire, its engine's beat,
A symphony of power, fierce and wild,
With burning wheels, it danced upon the street,
A tempest unleashed, untamed and beguiled.
Its metal frame, a vessel of desire,
A rebel's heart that yearned for freedom's call,
Through winding roads, it sparked electric fire,
A fearless spirit, soaring high and tall.
Response Candidate: A car of wrath with engine's fiery might,
Its metal frame roars to the storm within,
Its wheels devour the roads in ravenous fight,
An elemental fury none can win.
Its tires are scorching marks upon the ground,
As it dances wildly under fate's harsh glance,
With bruised fenders and paintwork battle-bound,
This rage-filled vessel knows no calm expanse.
这种协作生成工作流程利用了 GenAI 的优势以及人类的创造力。生成模型贡献了创造力、可扩展性和探索广泛可能性空间的能力。反过来,人类提供了意图性、质量判断以及对什么是有吸引力的背景信息。机器和人类一起通过迭代过程,相互促进,发挥出各自的最佳状态。
输出最初是 AI 的原始材料,但通过这种混合协作,逐渐被精炼成越来越有用、吸引人和令人愉悦的内容。利用自动化技术,如过滤和输出选择,以及直接的人机交互来选择替代方案,迭代地精炼和编辑结果,推动了 GenAI 质量的边界。
结果展示
到目前为止,我们已经介绍了选择合适的 GenAI 模型、制作有效的提示以及指导模型产生高质量结果的技术。现在让我们探讨围绕将大型语言模型和其他系统生成的输出展示给应用最终用户或下游流程的考虑因素。
LLM 生成的内容如何渲染和展示高度依赖于特定的用例和应用架构。例如,在聊天机器人场景中,结果将被格式化为对话文本或语音响应。另一方面,对于搜索引擎,文本输出可以纳入答案框和摘要中。文档生成工作流程可能将 LLM 输出直接存储到云内容平台。可能性涵盖了多种格式。
一些技术方面在不同结果展示方法中是通用的。文本输出通常需要后处理,如 Markdown 标签移除、JSON 序列化等,这些处理基于目标需求。安全评级数据可能需要与生成的文本一起持久化存储,以进行治理。多模态输出,如图像,会集成渲染框架以正确地向用户展示媒体。
某些应用程序可能将原始 LLM 输出存储在数据库或数据湖中,以便稍后异步消费而不是立即展示。在这些情况下,额外的提取、转换、加载(ETL)工作流程准备并重塑未结构化的 AI 生成结果,使其成为结构化数据存储库,用于下游分析、培训和治理。适当地标记输出确保它们可以轻松找到。
最终的展示格式应首先关注可用性——塑造内容、结构、分辨率和其他属性,以满足客户需求和客户旅程。其次,重点应转向易于集成——根据可访问性要求,有效地将 AI 输出嵌入到现有或定制的 UI 代码库、内容系统和数据管道中。精心设计的结果共享释放了生成模型固有的价值。
日志记录
在将 GenAI 模型集成到应用程序时,通过日志记录建立全面的可观察性至关重要。在整个工作流程中捕获详细的遥测数据,可以跟踪指标、监控问题并识别故障点——这对于确保 AI 系统在一段时间内的可靠和负责任的行为至关重要。
详细的使用指标和日志为 GenAI 的前端集成点提供了丰富的可观察性好处。这种遥测数据不仅揭示了模型在生产环境中的使用情况,更重要的是,它揭示了围绕 AI 能力构建的交互式用户体验。
通过跟踪每个用户输入、生成请求以及这些事件周围的上下文,组织可以了解新兴的产品使用模式。这些数据可以后来用于扩展某些用例,最终改善用户体验。
像这样的问题,“是否某些人口统计或地理区域围绕特定用例聚集?”,“输入域或内容类型是否揭示了用户需求增加的区域?”,“什么提示序列定义了高价值用户旅程?”可以通过生成洞察来回答,这反过来又提供了对大规模交互的可见性。
日志分析也有助于成本监控和优化。通过了解模型、用户群体、特征区域等推理请求的量,可以直接将运营支出和扩展需求映射到用户活动随时间变化的模式上。负载测试可以在推出新的 AI 密集型功能之前测量增量成本影响。利用率指标会输入到自动扩展和配置过程中。最终,将业务 KPI 与基础设施消耗相关联,可以确保投资最大化 AI 驱动的价值捕获。
这种 AI 使用智能有效地提供了对客户体验如何演变及其对业务财务影响的可见性。它赋予了对用例优先级排序、路线图规划和高效资源分配的权力,所有这些都基于经验数据,而不是直觉。细致的日志记录不仅关乎安全和合规,还确保 AI 集成可持续地创造价值并增长采用率和投资回报率。
应仔细记录生成模型的输入提示和数据样本。这些数据对于通过将输入与其相应的输出关联起来进行可解释性至关重要。此外,它通过检测模型训练所依赖的预期分布的漂移,使监控数据质量问题成为可能。通过差异日志主动捕捉这些变化,可以揭示何时可能需要重新训练。
记录应扩展到输出端,通过捕获模型产生的结果的丰富元数据,包括安全分类器分数、来源细节以及任何中间处理。错误情况,如拒绝、安全违规或失败的推理,需要记录以识别需要修复的故障点。详尽的输出日志也支持审计用例,用于治理和合规。
在集成生成式人工智能模型时,一个重要的考虑因素是许多平台(应该)以无状态方式处理推理请求,而没有固有的日志记录能力。例如,在 Google Cloud 的 Vertex AI 上,从 LLM 生成预测时,默认情况下不会自动记录请求详情。责任落在应用程序本身,需要实现全面的日志记录。
虽然没有单一的金标准,但最佳实践往往鼓励为每个生成式模型交互捕获几个关键信息片段。至少,日志负载应包括:
-
请求的时间戳
-
原始用户输入
-
提供的任何附加上下文数据(聊天历史、检索的 RAG 信息等)
-
如果有任何预处理发生,则使用的提示模板
-
调用特定模型(s)的标识符
-
完整的模型输出或结果
-
任何用于塑造模型输出的后处理模板
{
"timestamp":,
"user_input":,
"context": ,
"pre_prosessing_prompt_template": ,
"model": ,
"result_payload":
"post_prosessing_prompt_template":
}
捕获这个一致的负载允许建立交互历史并完全重现结果,解释任何给定的输出。这支持分析用例,如探索用户采用情况、潜在痛点以及使用趋势的变化,同时,它还使能够持续监控需要干预的潜在问题或安全违规。
除了这些核心字段之外,关于生成过程的其它元数据可以丰富可观察性。这可能包括延迟、资源消耗指标、在推理前后应用的中间处理步骤,以及重试或迭代提示的数据捕获谱系。日志格式应在详尽细节和避免繁琐冗余之间取得平衡。
实施符合既定模板的集中式结构化日志记录是负责任地实施人工智能模型操作化的关键基石。它将不透明和无状态的生成能力转化为透明、可重现和可监控的生产流程,与治理最佳实践保持一致。强大的日志制度有助于生成式人工智能在企业规模上赢得信任。
摘要
在本章中,我们讨论了将生成式人工智能模型集成到需要系统方法的现实世界应用中的过程。一个五组件框架可以指导这个过程:入口点、提示预处理、推理、结果后处理和日志记录。在入口点,接受与 AI 模型预期模式相一致的用户输入,无论是文本提示、图像、音频等。然后,提示预处理清理并格式化这些输入,以进行安全检查和最佳模型可用性。
核心推理组件随后将准备好的输入通过集成的 GenAI 模型运行以产生输出。这一阶段需要与模型 API 集成、提供可扩展的模型托管基础设施,并管理可用性同时控制成本。组织可以选择自托管模型或利用云服务进行推理。推理后,结果后处理技术过滤不适当的内容,从多个候选者中选择理想的输出,并通过自动化或人机协作方法如迭代优化来细化文本/图像。
这些 AI 生成结果如何呈现取决于应用程序的使用案例——无论是为聊天机器人、搜索引擎或文档工作流程等提供动力,以及其他。无论如何,共同方面包括文本输出处理、处理安全评级以及适当呈现多模态输出。一些应用程序可能选择将原始模型输出存储在数据存储库中,以便通过 ETL 管道进行异步消费,而不是立即展示。
全面日志记录在整个工作流程中建立了关键的可观察性,跟踪指标,监控可能表明偏离训练集的数据质量问题,并识别推理错误或故障点。勤奋地构建的日志应捕获用户输入、上下文数据、模型输出、安全评级和流程元数据细节。虽然一些平台对推理请求采取临时处理,没有固有的日志记录,但应用程序必须根据最佳实践实施集中式日志记录。
关键要点:
-
通过一个涵盖入口点、预处理、推理、后处理和日志记录的系统框架来集成 GenAI。
-
根据延迟、规模和成本优先级考虑交互式与批量处理方法。
-
实施全面的日志记录以实现可观察性、监控、可解释性和治理。
-
利用人机协作来迭代优化和增强 AI 生成的输出。
-
设计针对可用性和集成需求的结果展示格式。
-
在集成过程中解决安全问题、负责任的 AI 实践和伦理考量。
加入我们的 Discord 社区
加入我们的社区 Discord 空间,与作者和其他读者进行讨论:
packt.link/genpat

第四章:生成式 AI 批量与实时集成模式
本章涵盖了围绕大型语言模型(LLMs)设计系统的两种主要模式——批量和实时。是否架构批量或实时应用程序将取决于你正在处理的使用案例。一般来说,批量用例是围绕生成稍后消费的数据而制定的。例如,你将利用 LLM 从大量数据中提取数据点,然后有一个步骤生成摘要,供业务分析师每天消费。在实时用例的情况下,数据将在可用时使用。例如,你将利用 LLM 作为在线代理,通过聊天或语音界面回答客户或员工的问题。
深入了解批量模式,它涉及批量发送查询以提高吞吐量,但以延迟为代价。这更适合长时间、耗时的生产工作负载和大量数据消费。此外,批量生成的结果不会立即暴露给最终用户,这允许通过额外的管道审查内容。这些管道可以在将提示发送到 LLM 之前集成,以便进行数据清洗和提示工程,或者在接受到 LLM 的响应之后,你可以增强回复以匹配特定格式或添加来自其他数据源的数据。
实时设计模式提供更快的交互式查询体验。尽管吞吐量较低,但实时设计模式提供更快的反馈,并且可以通过多轮记忆机制来增强对 LLM 先前请求的认识。实时推理受延迟要求的影响,用户体验可能会降低,因此审查结果的机会减少。
在这种情况下,你可以在推理时应用一些过滤,并在将其发送到 LLM 之前应用一个检索增强生成(RAG)管道来增强用户查询。此外,在入口和出口处保持一层过滤可以帮助你保持应用程序的安全。
我们将提供批量查询和实时查询的示例用例,以突出权衡。读者将根据规模、成本和延迟要求等因素了解何时使用每种方法。
在本章中,我们将涵盖以下主要主题:
-
批量和实时集成模式:
-
批量模式涉及批量发送查询以提高吞吐量,但会增加延迟。它更适合长时间运行的工作负载和大量数据消费。
-
实时模式以更快的速度提供交互式查询,提供更快的反馈,但吞吐量较低。它更适合低延迟要求。
-
-
不同的管道架构:
- 批量与实时对集成管道不同组件的影响,例如入口点、预处理、推理、后处理和结果展示。
-
集成框架中的应用集成模式:
- 批量和实时模式如何映射到集成框架的不同阶段,包括入口点、提示预处理、推理、结果后处理和结果展示。
-
用例示例 - 由生成人工智能(GenAI)增强的搜索:
- 使用 GenAI 增强网站搜索的示例用例,其中文档摄取以批量模式进行,而搜索/响应生成以实时模式进行。
批量和实时集成模式
评估批量与实时集成方法时的第一个关键决策是关于数据即时性 - 您何时需要 GenAI 输出?这归结为是否需要即时响应式结果,例如处理按需用户查询,还是模型输出的见解可以在一段时间内积累然后再被消费的使用场景。
让我们用一个 RAG 的例子来说明这一点,其中 LLMs 评估搜索结果以制定人性化的查询响应。这是一个实时用例;您需要在对话助手或搜索引擎等应用程序中提供具有最小延迟的 AI 生成的答案,以提供优质的用户体验。数据必须在其产生时立即投入使用。
与自动化内容生成工作流等类似的情况进行对比,例如从产品目录中提取元数据。虽然您仍然希望内容快速生成,但在模型输出被下游摄取的时间上具有更大的灵活性。您可以在可用容量允许的情况下批量运行生成模型,排队提示并异步处理它们。生成的文本随后按照自己的时间表流入您的电子商务数据库。
实时交互集成模式优先考虑低延迟和响应性体验。用户通过请求/响应应用程序接口几乎立即收到 AI 结果。批量模式断开这种耦合,牺牲即时交互以换取更高的整体吞吐量和规模成本效率。运行时间较长的作业优化了跨池化模型的利用率。
因此,批量处理与实时决策取决于分析数据新鲜度的需求。对于需要可感知即时满足感的使用场景,例如查询信息或迭代创意构思,您将需要一个请求范围的交互式架构。但当目标更多是关于通过灵活的延迟容忍度最大化生成模型输出量时,批量提示将带来更好的经济效益。正确实现这种集成模式是利用生成人工智能(GenAI)价值的关键。
不同的管道架构
除了集成模式本身之外,实时处理与批处理之间的决策对周围的数据管道和基础设施架构有重大影响。预处理和后处理工作流程具有各自模式优化的非常不同的特征。
对于实时、低延迟用例,如查询回答或对话式 AI,轻量级的即时预处理管道是理想的。这些管道在向生成模型发送单个推理请求之前,以最小的开销处理提示清理、上下文增强和其他步骤。输出随后通过一个专注于安全过滤、响应排名和结果格式的后处理阶段。这些过程需要优化,因为端到端延迟至关重要。
实时管道通常托管在动态可扩展的容器化基础设施或无服务器云环境中。积极的缓存层和负载均衡将请求量分布到可用的推理资源。整个实时架构在所有其他方面都优化了即时响应。
与之相反,批处理管道通过处理更大的数据量来承担更重的预处理工作。这可能包括诸如主题聚类、语义搜索、翻译等任务——所有这些都在提示生成模型之前完成。然后,这些提示流入异步队列系统,将请求累积成批次,以实现更高的模型执行吞吐量。
在输出端,重量级的后处理管道应用内容结构化、摘要、质量过滤、法律合规性扫描以及各种其他丰富任务。临时存储区域,如云存储和数据仓库,暂时存储输出以供分析,然后再异步集成到下游系统中。
由工作流引擎或批量服务管理,这些管道旨在在成本约束下,在较长的时间范围内最大化总数据吞吐量。与实时系统不同,延迟是可接受的权衡,以实现整体更高的可扩展性和并行性,同时降低单位成本。
解耦的缓冲区将上游和下游系统从对 GenAI 模型的直接依赖中隔离出来。这允许在云或本地环境中跨分布式工作池进行线性扩展。自动扩展策略不断将配置的资源与需求相匹配。
尽管在架构上更为复杂,批处理管道能够高效地在结构化的时间表上产生大量 AI 生成数据。成本计算比较了扩展基础设施费用与固定基础设施成本。对于许多大规模用例,尽管管道开销很大,但批处理可以迅速摊销。
在评估权衡时,交互式实时处理与离线批处理之间的决策涵盖了众多架构要求。实时优化低延迟,而批处理在更灵活的时间窗口内提供更高的整体吞吐量。精心设计的管道与数据需求和生成用例相匹配,对于整体系统性能和成本效率至关重要。
集成框架中的应用集成模式
以前,我们深入探讨了 GenAI 模型实时和批处理集成方法之间的高层次架构权衡。但这些模式的不同之处如何映射到我们集成框架阶段的不同组件中?以下图表展示了这些步骤:

图 4.1:GenAI 应用集成框架
让我们在下一节中逐一介绍每个步骤。
入口点
当谈到入口点阶段时,实时与批处理系统之间的优先级差异很大,这取决于最终用户体验。对于实时交互式应用,提示来源的入口点需要高度精简,考虑到简单性和易用性。毕竟,这些输入将直接暴露给人类用户,并驱动他们收到的即时 AI 响应。
因此,实时提示界面应优化为简洁、用户友好的设计,搜索栏,专注的聊天窗口,直接的语音界面和直观的上传小部件。体验被提炼为其基本信号,没有可能分散响应性的额外复杂性。
这些提示通常也来自不可预测的上下文,因此界面需要在各种设备和使用场景中感觉自然。

图 4.2:第七章“集成模式:实时意图分类”中你将构建的聊天机器人图片
相比之下,批处理入口点在幕后发生,不在最终用户的视线中。这些提示更常见地来自数据管道——无论是来自 API 的 JSON 有效负载、数据库导出文件、云存储中的文档,或其他结构化/非结构化来源。这些界面优化为稳定、高吞吐量的摄入,而不是实时的人机交互。
适用于批处理的常见输入格式包括 JSON/JSONL 流、CSV 上传、Parquet 文件等。这些提示已经预先解析成可消费的形状,可以被另一个模型或其他机制解析和评估,然后发送到下游排队系统进行大规模模型执行。以下是一个 JSONL 文档的示例:
{"name": "Paula", "music_genres": [["blues", "8"], ["rock", "5"]]}
{"name": "John", "music_genres": [["pop", "15"], ["country", "2"]]}
{"name": "Mary", "music_genres": []}
{"name": "Adam", "music_genres": [["pop", "5"]]}
提示预处理
提示预处理步骤涉及在将输入提示输入到语言模型进行生成之前对其进行准备和转换。
预处理的需求和约束可能会因系统是设计用于实时处理还是批量处理而大不相同。在实时应用中,例如对话助手或搜索引擎,预处理工作流程中的每一步都会给整体响应时间增加宝贵的几秒钟。这种延迟可能会损害用户体验,尤其是在即时性和响应性至关重要的场景中。
例如,在一个采用 RAG 管道的实时系统中,提示必须在语言模型生成响应之前经历几个耗时的步骤。这些步骤可能包括评估提示以符合安全 AI 的目的、生成提示的嵌入(向量表示)、查询向量存储以检索相关信息,以及可能对检索到的数据进行额外的处理。这些步骤中的每一个都会对整体延迟做出贡献,从而加剧用户所经历的延迟。
相比之下,批量提示预处理工作流程具有更大的灵活性,可以在不影响用户体验的情况下容纳更多计算密集型操作。由于处理不是实时发生的,因此有更多的空间应用更深入的丰富技术,例如通过提取元数据来增强提示、执行查询重写以改善检索信息的质量,或应用高级自然语言处理技术以更好地理解提示背后的意图。
批量处理中的这种灵活性可以使语言模型提供更全面、更准确的响应,因为预处理的提示可以丰富相关上下文信息,并更好地与模型的优势相匹配。然而,在预处理深度和所需计算资源之间取得平衡是很重要的,因为过度的预处理可能会转化为更高的成本,这可能会影响解决方案的整体投资回报率。
推理
尽管实时和批量提示预处理工作流程在方法和优先级上有所不同,但核心推理阶段是两者模式汇聚的地方,因为它们最终利用相同的底层生成模型能力。然而,在这个阶段所采用的优化策略在这两种集成模式之间可能存在显著差异。
在实时通用人工智能系统中,主要关注的是最小化延迟并最大化对单个请求的响应速度。这些系统通常一次处理一个推理请求,而不是将多个请求一起批处理。当使用如谷歌的 Gemini、OpenAI 的 ChatGPT 或 Anthropic 的 Claude 等现成模型时,底层基础设施和资源分配对用户来说是抽象的。在这种情况下,提供商处理了为推理正确分配可用资源的复杂性,确保单个请求得到高效处理,同时遵守服务的性能和成本目标。
然而,在组织选择自行托管和部署生成模型的情况下,例如使用谷歌的 Gemma、Meta 的 LLaMA 或其他开源或专有模型时,正确定规基础设施的责任就落在组织自身。这个过程被称为正确定规练习,涉及仔细平衡潜在延迟和成本之间的权衡。
正确定规练习的目标是确定计算资源的最佳配置,例如 GPU 的数量和类型、CPU 核心和内存,这些资源可以有效地处理预期的负载,同时最小化延迟并控制成本。这项练习通常涉及负载测试和基准测试模型在各种资源配置和模拟流量模式下的性能。
模型的大小、复杂性和推理任务(例如,文本生成、问答、摘要)的性质等因素在确定资源需求方面起着至关重要的作用。更大、更复杂的模型通常需要更多的计算能力来实现可接受的推理延迟,这可能会增加部署和运营的整体成本。
组织必须仔细评估在实现低延迟(可能需要过度配置资源)和控制成本(可能涉及接受略微更高的延迟)之间的权衡。找到正确的平衡至关重要,因为过度的延迟会降低用户体验,而过度配置资源可能导致不必要的开支。
另一方面,批处理集成模式优先考虑成本优化和吞吐量,以对大量提示进行批量处理。这些系统不是单独处理请求,而是将多个提示汇总成批次,然后将这些批次发送到生成模型进行推理。通过批量处理提示,可以更有效地利用计算资源,因为与初始化模型和设置推理管道相关的开销被分摊到多个提示上。
这种方法可以带来显著的成本节约,尤其是在处理大量提示时,因为计算资源得到了更有效的利用,整体吞吐量也得到了提升。
然而,需要注意的是,批量处理方法在吞吐量和延迟之间引入了权衡。虽然它优化了成本和整体吞吐量,但单个请求可能会经历更高的延迟,因为它们需要等待足够数量的提示积累起来,然后才能批量处理。正如之前提到的,批量集成模式更适合那些实时响应性不那么关键的场景,例如批量文本生成、文档摘要或其他离线处理任务。
结果后处理
在实时应用中,后处理阶段在确保流畅和吸引人的用户体验中发挥着至关重要的作用。由于生成的响应旨在立即交付,后处理工作流程优先考虑那些能够快速响应过滤、排序和渲染的技术。在聊天机器人等对话式 AI 应用中,一种常见的做法是使用 Markdown 等标记语言格式化生成的输出。这种方法允许无缝集成丰富的文本格式,包括标题、列表、代码块和其他结构元素,增强响应的可读性和视觉吸引力。
实时后处理可能包含针对特定用例定制的技术,例如根据情感应用颜色方案作为背景进行情感分析。例如,在客户服务聊天机器人中,可以根据其与客户查询的相关性对响应进行过滤和排序,确保最合适且最有帮助的响应得到优先考虑。
与实时系统相比,GenAI 系统中的批量处理工作流程提供了更多的灵活性和计算资源用于后处理。由于生成的输出并非旨在立即交付,批量后处理可以在将它们持久化到数据存储或下游系统之前,对汇总的输出应用更全面和计算密集型的增强。
一种常见的批量后处理技术是摘要,其中生成的输出被压缩成简洁且连贯的摘要,便于消费和分析。结构提取是另一个有价值的后处理步骤,其中系统从生成的文本中识别并提取相关信息,例如关键实体、关系或事件描述。这些结构化数据可以随后存储在数据库中或用于填充知识图谱,从而实现更高效的查询和分析。
批量后处理还可以结合更深入的质量过滤机制,利用针对质量评估、自然语言推理或事实核查进行微调的语言模型等技术。这些高级过滤方法可以帮助识别并标记低质量或事实错误输出,确保只有高质量和可靠的信息被持久化,以便下游消费。
批量后处理工作流程可能涉及更复杂的转换和增强,例如文本风格化、情感转移或为特定领域或格式生成内容(例如,生成营销文案、产品描述或技术文档)。
结果展示
结果展示可以说是两种范式之间最鲜明的差异。实时 UI/API 集成需要即时更新 - 通常是通过服务器渲染或数据绑定框架实现的。在批量模式下,你更有可能通过管道批量导出结果到仓库或运营数据存储,以便在报告、分析、文档系统等进行异步消费。
自然地,日志记录和监控需求与每种模式的系统特性紧密相关。实时处理需要在每个请求的指标周围进行紧密的仪器配置,如延迟、错误和资源使用。批量处理强调吞吐量、管道性能和数据血缘可观察性。
从数据工程的角度来看,实时处理更遵循 lambda 架构,具有优化的速度和路径。批量处理则倾向于使用传统的现代数据管道,利用云存储、Spark 集群、托管工作流程编排器和 MPP 数据仓库目标。
实时集成无缝地与有状态应用程序结合,并提供非常响应式的 UI。批量处理解锁了大型、异步 AI 驱动的操作(如文档生成、报告自动化和对话数据标注)的更高可扩展性。
这两种模式也各自引入了独特的可支持性考虑因素。实时处理依赖于高度冗余、自我修复的服务网格。批量处理则更多地依赖于稳健的恢复编排、幂等重启和自动重试。
如您所见,虽然利用了相同的核心 GenAI 功能,但两种范式在上游/下游架构优先级和交付特性方面存在显著差异。正确的选择取决于评估延迟敏感性、规模目标、成本参数和用例的适用性。许多企业可能会采用结合两种模式特点的混合网格。
用例示例 - 由 GenAI 增强的搜索
为了说明实时和批量用例,我们将通过一个公司使用 GenAI 增强其网站搜索体验的例子来工作。在这种情况下,文档摄取将是一个批量过程,而搜索本身将是实时的。
想象一家公司希望通过利用 GenAI 技术来增强其网站搜索体验。在这种情况下,公司的目标是向用户提供更全面、更相关的搜索结果,超越简单的关键词匹配,并交付上下文相关和自然语言响应。
文档摄取过程,涉及索引和处理公司的内容语料库(例如,产品描述、知识库文章、产品手册),将是一个批量操作。这一步骤将涉及文本提取、实体识别、主题建模和语义嵌入生成等技术,以处理整个文档语料库。这些嵌入捕捉了文档的语义意义和上下文,然后将被存储在向量数据库或其他适当的数据存储中。
在实时搜索体验中,当用户在公司的网站上提交查询时,该查询将进行提示预处理,这可能包括查询重写、意图检测和嵌入生成。生成的查询嵌入将用于根据语义相似性从向量数据库中检索最相关的文档。这些检索到的文档将作为 GenAI 模型的知识来源。
GenAI 模型将根据检索到的文档和用户的查询生成自然语言响应。这个响应可以是简短的摘要、详细的答案,甚至可以是对话式的对话,具体取决于公司的要求和公司决定设定的语气。
随后,实时后处理阶段将启动,格式化生成的响应以在网站上以最佳方式呈现。这可能涉及响应排序、结果结构化(例如,将响应分解为部分或项目符号)以及使用适当的标记或视觉元素进行渲染。
通过结合文档摄取的批量处理与实时查询处理和生成,公司可以为用户提供无缝且丰富的搜索体验。批量处理确保公司的内容语料库被彻底索引和语义理解,而实时组件利用这些知识提供针对每个用户查询的相关和自然语言响应。
批量集成 – 文档摄取
文档摄取管道的批量处理部分在为公司的内容语料库准备有效的搜索和检索方面发挥着关键作用。这一阶段涉及几个步骤,以提取有意义的信息并将其转换为适合高效查询和生成的格式:
-
数据提取和预处理:第一步是从各种来源提取文本数据,例如数据库、内容管理系统或文件存储库。这些数据可能以各种格式(例如,HTML、PDF、Word 文档)存在,需要预处理技术如文本提取、去重和标准化来清洗和标准化输入数据。
-
元数据提取:一旦文本数据经过预处理,就可以应用高级自然语言处理技术,如命名实体识别(NER)和实体链接。这些任务可以从预测 AI 模型或 GenAI 模型中执行。这一步识别并提取相关的实体(例如,人物、组织、产品、地点),通过将它们链接到外部知识库或本体,以丰富数据并添加额外的上下文信息。
-
嵌入生成:批量处理阶段的核心是生成每个文档的语义嵌入。这些嵌入是密集的向量表示,能够捕捉文本中的上下文意义和关系。常用的技术包括 Transformer 语言模型(例如 BERT 和 RoBERTa)或专门的嵌入模型(例如,例如 Google Vertex AI 文本嵌入模型和 OpenAI 文本嵌入)用于生成这些嵌入。
-
向量数据库索引:生成的嵌入向量以及提取的实体、主题和元数据存储在专门的向量数据库或其他适合的数据存储中,这些数据存储针对相似搜索和检索进行了优化。这个索引语料库作为实时搜索和生成过程的知识库。

图 4.3:文档摄取
通过执行这些批量处理步骤,公司的内容语料库被转换成一个高度结构化和语义丰富的表示,这使检索变得高效,并为 GenAI 模型在实时搜索体验中产生相关和准确的响应提供了必要的上下文。
实时集成 – 搜索
过程的实时部分处理用户的搜索查询,并利用批量处理阶段创建的知识库生成上下文相关的响应。
在高层次上,这些是图 4.4中展示的体验的组成部分:
-
查询处理:这如图 4.4 所示,步骤 1。当用户在公司的网站上提交搜索查询时,查询会经过与批量处理阶段中应用的步骤类似的预处理步骤。这可能包括文本归一化、实体识别和使用与文档语料库相同的模型生成的嵌入。在这一步中,您还可以评估查询的安全性。
-
语义检索:如步骤 2 和步骤 3 所示,生成的查询嵌入用于对包含索引文档嵌入的向量数据库进行相似度搜索。这一步根据用户查询的语义相似度从语料库中检索最相关的文档,确保检索到的信息在上下文中是适当的。在这一步中,您还可以根据用例和可用的元数据重新排序结果。
-
提示丰富和生成:在步骤 4中,检索到的文档、原始查询以及任何额外的上下文(例如,用户资料或浏览历史)被用来构建一个丰富的提示,供 GenAI 模型使用。可以采用提示工程、上下文增强和 RAG 等技术来创建一个信息丰富且简洁的提示,以捕捉用户信息需求的核心。
-
响应生成:在步骤 5和步骤 6中,GenAI 模型将丰富的提示作为输入,生成自然语言响应。这个响应可能是一个简洁的摘要、一个详细的答案,甚至是一个对话式对话,具体取决于需求和模型的能力。
-
后处理和渲染:在步骤 6中,生成的响应随后进入后处理阶段,这可能涉及格式化、结构提取、结果排序和为了在网站上最佳展示而进行的渲染。这可能包括提取要点或摘要、突出相关实体以及整合多媒体内容的视觉元素,以增强用户体验。

图 4.4:实时搜索架构示例
摘要
本章介绍了围绕 LLM(大型语言模型)设计系统的两种主要模式——批处理和实时处理。这个决定取决于您组织的使用案例需求。我们了解到,批处理模式涉及批量发送查询以实现更高的吞吐量,但代价是更高的延迟。它更适合长时间运行的工作负载和大量数据的消费。
结果不会立即向用户展示,允许在模型推理前后进行额外的审查流程。
我们还了解到,实时模式以更快的速度提供双向查询,为用户提供更快的反馈。它具有较低的吞吐量,但更适合低延迟需求,但为了防止延迟增加,减少了审查结果的机会。
在本章中,我们讨论了批处理与实时处理对集成管道不同组件的影响。对于入口点,实时处理优化了简洁的用户提示,而批处理处理数据管道输入。
在预处理中,实时处理采用较轻的技术以最小化延迟,而批处理允许进行更重的丰富。实时推理专注于每个请求的低延迟,而批处理以组的形式处理请求以提高吞吐量。
实时处理的后处理涉及更快的格式化和过滤,但批处理允许进行更复杂的转换。在展示方面,实时处理提供即时的 UI 更新,而批处理异步导出结果。
此外,本章还提供了一个使用 GenAI 增强网站搜索的示例用例,文档摄取以批量模式进行,搜索/响应生成以实时模式进行,从而改变最终用户的使用体验,并获得更相关和个性化的答案。
在下一章中,我们将深入探讨一个利用 GenAI 从 10-K 文档中提取数据的用例。
加入我们的 Discord 社区
加入我们的 Discord 空间,与作者和其他读者进行讨论:
packt.link/genpat

第五章:集成模式:批量元数据提取
在本章中,我们将探讨一个元数据提取用例,这作为一个理解生成式人工智能(GenAI)能力的绝佳切入点。这个主题在各个行业中都特别相关,并且富有启发性。
为了说明这个用例,让我们考虑一个场景,其中我们与一家金融服务公司合作,需要从 10-K 报告中提取数据。这些报告由上市公司每年提交给证券交易委员会(SEC),提供了他们财务表现、运营和重大事件的全面概述。这些是超过 100 页的广泛文件,包含大量信息,结构化地分布在不同的数据模式(表格、文本等)中。
在本章中,我们的目标是确定需要从这庞大的信息库中提取的具体数据集和关键数据点。这个过程需要一种系统性的方法,以精确地定位所需的数据点。
一旦确定了相关数据点,我们将确定这些提取数据的适当存储位置。这可能涉及一个组织内部授权人员可访问的集中式数据库,或者一个基于云的存储库,它促进了团队和地点之间的无缝访问和协作。
不论选择哪种存储解决方案,GenAI 将在整个过程中发挥关键作用。凭借其理解和处理自然语言的能力,GenAI 将在导航金融报告复杂结构、以显著效率和准确性提取关键数据点方面证明其价值。
本章我们将涵盖以下主要主题:
-
用例定义:我们将描述一个从金融服务公司的 10-K 报告中提取元数据的示例场景,解释这些报告的结构和重要性。
-
架构:我们将概述一个基于云的无服务器架构,使用 Google Cloud 服务处理 10-K 报告,包括存储、消息传递、处理和数据库组件。
-
切入点:我们将解释如何通过 Google Cloud Storage 和 Cloud Functions 触发批量处理管道,以启动内容提取过程。
-
提示预处理:我们将详细介绍为 AI 模型创建初始提示的过程,利用 SEC 指南来识别从 10-K 报告中提取的关键数据点。
-
推理:我们将讨论通过 Vertex AI 将提示提交给 Gemini Pro 1.5,展示模型如何处理和从 10-K 报告中提取信息。
-
结果后处理:我们将介绍解析来自大型语言模型(LLM)的 JSON 输出以及将提取的数据导入数据库的策略,考虑到关系型数据库和文档数据库选项。
-
结果展示:我们将考虑如何展示提取的数据,包括使用商业智能工具、数据可视化平台和定制应用程序。
-
代码示例:我们将提供一个元数据提取过程的实际实现,包括设置、提示创建、推理和结果处理。
用例定义
从 10-K 报告中提取元数据对金融服务公司和其他利益相关者具有重大价值。这些由 SEC 规定的报告是信息宝库,可以提供有关公司财务状况、运营绩效和战略方向的宝贵见解。然而,这些文件的庞大体积、复杂性和公司在构建报告方式上的不一致性,使得手动提取和分析相关数据点变得具有挑战性。
典型的 10-K 报告遵循标准化的结构,包含多个部分,涵盖公司运营的各个方面。这些部分可能包括业务概述、风险因素、管理层讨论与分析、财务报表以及关于公司治理的披露等。虽然结构在公司之间是一致的,但具体的数据点和它们的呈现方式可能有所不同,这使得建立一种适用于所有情况的数据提取方法变得困难。
10-K 报告包括五个不同的部分:
-
业务:本节概述了公司的主要运营,包括其产品和服务、关键市场、竞争格局以及与其商业模式和运营相关的其他细节。
-
风险因素:在这一节中,公司概述并讨论了它面临的所有风险。这包括可能影响其业绩或未来前景的运营、财务、法律、监管和行业特定风险。
-
选定的财务数据:本节展示了公司过去五年的具体财务信息,通常包括关键指标,如收入、净收入、每股收益和其他相关财务数据。
-
管理层讨论与分析(MD&A):第四部分提供了高级管理层对公司财务结果的解释和分析,包括对影响其业绩的因素、未来战略、潜在的机会和挑战的详细讨论。
-
财务报表和补充数据:最后一部分提供了经审计的财务报表,包括利润表、资产负债表、现金流量表以及相关的注释和披露。本部分提供了公司报告期内财务状况和业绩的全面和详细情况。
这些文档最大的挑战在于具体数据点和其呈现方式可能各不相同,这使得建立一个适用于所有情况的数据提取方法变得非常困难。然而,通过利用通用人工智能的自然语言处理能力,金融服务公司可以高效地导航这种结构化格式,并从每个部分中提取相关数据点,根据每家公司报告的独特特征调整他们的方法。
从这些文档中提取的结构化元数据的可用性为金融服务公司开辟了机会。例如,他们可以对公司的财务绩效进行深入分析,将其与行业同行或历史趋势进行比较。这种分析可以指导投资决策、风险评估和战略规划工作。
另一个机会是利用提取的元数据来开发预测模型,并识别出从手动分析中可能不会立即显现的模式。这些模型可以帮助预测潜在风险,识别新兴趋势,并揭示新的投资机会。
进一步思考,提取的元数据可以集成到现有的数据存储库或商业智能平台中,使组织内部各个团队之间的访问和协作无缝进行。这种集成可以促进跨职能协作,使不同的部门,如投资银行、资产管理、风险管理,能够利用相同的数据进行各自的分析和决策过程。
除了金融服务公司,提取的元数据对于监管机构、学术研究人员以及其他对研究企业绩效、行业趋势和金融市场整体健康状况感兴趣的利益相关者来说也极具价值。
通过利用通用人工智能(GenAI)从 10-K 报告中提取元数据,金融服务公司可以解锁丰富的见解,简化他们的分析流程,并做出更明智的决策,这些决策可以推动业务增长并降低风险。
架构
尽管本书的范围不是深入探讨大型语言模型处理架构的复杂性,但我们将简要讨论我们的元数据提取用例可能看起来像的基于云的架构。在这个例子中,我们将利用 Google Cloud 的能力,因为它提供了一个名为 Vertex AI 的本地 AI 平台,允许我们以企业合规的方式无缝集成领先的模型,包括 Google 的 Gemini 和第三方模型,如 Anthropic 的 Claude。
我们将采用适用于处理大量数据的高效和可扩展的批优化架构来处理此用例。此类架构符合云原生原则,是一种无服务器架构,利用了各种 Google Cloud 服务。
该架构将包括一个对象存储(Google Cloud Storage)来存储 10-K 报告,一个消息队列(Google Cloud Pub/Sub)来协调数据流,一个处理组件(Google Cloud Functions)来执行基于 LLM 的元数据提取任务,一个 LLM 模型(例如托管在 Vertex-AI 上的 Google Gemini)来执行实际的提取,以及一个数据库(Google Big-Query)来存储提取的元数据。
下面是对该架构如何运作的更详细分解:
-
10-K 报告存储在高度可扩展和耐用的对象存储 Google Cloud Storage 中。
-
云函数会定期触发(例如,每日或每周)以启动元数据提取过程。
-
云函数将读取来自云存储的 10-K 报告列表,并将消息发布到 Pub/Sub 主题,从而有效地创建一个待处理报告队列。
-
另一个云函数,订阅了 Pub/Sub 主题,会在队列中与给定报告相关的每条消息触发。
-
第二个云函数调用托管在 Vertex-AI 上的 LLM 模型(例如,Google Gemini),并将 10-K 报告内容作为输入。
-
LLM 模型处理报告,利用其自然语言理解能力提取相关元数据。
-
提取的元数据随后以结构化格式(例如,BigQuery)存储,以便进行进一步分析和消费。
这种无服务器架构提供了几个好处,包括自动扩展、成本效益(按使用付费定价)以及与其他 Google Cloud 服务的无缝集成。

图 5.1:GenAI 文档数据提取管道
以下图表展示了我们将利用的架构,遵循我们在第三章“与生成式 AI 交互的设计模式”中讨论的 GenAI 集成框架:

图 5.2:应用程序集成框架
入口点
我们批量处理管道的入口点将是一个在Google Cloud Storage(GCS)中创建的对象,然后触发一个 Google Cloud Function 以启动处理管道。这种设置使我们能够无缝集成到现有的工作流程中,其中 10-K 报告被上传到指定的 GCS 存储桶。通过利用云函数的事件驱动特性,我们的系统可以在新报告到达存储桶时自动采取行动。
一旦触发,云函数将启动内容提取过程。为此步骤,我们决定采用 Google 的 Gemini Pro 1.5 的强大功能,这是一个支持直接处理 PDF 文档的尖端 GenAI 多模态模型。Gemini Pro 1.5 将分析上传的 10-K 报告,智能地提取不仅包括文本内容,还包括我们感兴趣的相关的数据点,例如财务数据、公司概述和关键绩效指标。
通过利用 Gemini Pro 1.5 的高级自然语言处理和文档理解能力,我们可以获得报告内容的全面记录。这份记录将成为我们管道中进一步分析和处理步骤的基础。此外,提取的数据点将以我们在提示中定义的格式(JSON、标记等)进行结构化和组织,使我们能够无缝地将它们集成到我们的下游系统中,生成有洞察力的摘要、可视化和其他有价值的输出。
提示预处理
作为第一步,我们将开始详细阐述一个提示,以提取全面理解 10-K 文件所需的必要数据点。为了指导我们的工作,我们将利用美国证券交易委员会(SEC)本身提供的一项宝贵资源——一份名为《如何阅读 10-K》(How to Read a 10k)的文件,该文件可在 SEC 网站上找到(www.sec.gov/files/reada10k.pdf)。
这份由美国证券交易委员会(SEC)提供的文件是一个非常实用的路线图,概述了投资者和分析师在深入研究公司 10-K 文件时应关注的重点章节和信息。通过仔细研究这份资源,我们可以识别出最相关和有洞察力的关键数据点,确保我们的通用人工智能(GenAI)系统提取出真正重要的信息。
为了启动我们的数据提取过程,我们将为我们的 GenAI 模型创建一个简单而有效的提示。这个初始提示将作为起点,指导模型识别和提取《如何阅读 10-K 文件》(How to Read a 10k)文档中概述的具体数据点。虽然这个初始提示可能很简洁,但它将为我们的项目进展中的更复杂提示和微调技术奠定基础。目标是迭代优化我们的提示,利用 GenAI 的力量准确高效地从这些复杂的财务文件中提取最关键的信息。
prompt = """
You are an expert business analyst. Your task is to evaluate documents.
From the context document generate a JSON template with the important data points to be extracted from the document, also remember to add an attribute for the summary of the section.
The output should be a well-formed JSON document.
Context:
reada10k.pdf
Response:
"""
以下是从上一个提示生成的示例输出:
{
"10k_template": {
"part_I": {
"item_1_business": {
"description": "Company's main products and services, subsidiaries, and markets",
"recent_events": null,
"competition": null,
"regulations": null,
"labor_issues": null,
"operating_costs": null,
"seasonal_factors": null,
"summary": null
},
"item_1a_risk_factors": {
"risk_factors": [],
"summary": null
},
"item_1b_unresolved_staff_comments": {
"comments": [],
"summary": null
},
"item_2_properties": {
"properties": [],
"summary": null
},
"item_3_legal_proceedings": {
"proceedings": [],
"summary": null
},
"item_4": {
"reserved": true
}
},
"part_II": {
"item_5_market_for_registrants_common_equity": {
"market_information": null,
"number_of_holders": null,
"dividends": null,
"stock_repurchases": null,
"summary": null
},
"item_6_selected_financial_data": {
"financial_data": {},
"summary": null
},
"item_7_managements_discussion_and_analysis": {
"operations_and_financial_results": null,
"liquidity_and_capital_resources": null,
"trends_and_uncertainties": null,
"critical_accounting_judgments": null,
"off_balance_sheet_arrangements": null,
"contractual_obligations": null,
"summary": null
},
"item_7a_quantitative_and_qualitative_disclosures_about_market_risk": {
"market_risk_exposures": null,
"risk_management": null,
"summary": null
},
"item_8_financial_statements_and_supplementary_data": {
"income_statement": null,
"balance_sheets": null,
"statement_of_cash_flows": null,
"statement_of_stockholders_equity": null,
"notes_to_financial_statements": null,
"auditors_report": null,
"summary": null
},
"item_9_changes_in_and_disagreements_with_accountants": {
"changes_in_accountants": null,
"disagreements": null,
"summary": null
},
"item_9a_controls_and_procedures": {
"disclosure_controls_and_procedures": null,
"internal_control_over_financial_reporting": null,
"summary": null
},
"item_9b_other_information": {
"other_information": null,
"summary": null
}
},
"part_III": {
"item_10_directors_executive_officers_and_corporate_governance": {
"directors_and_executive_officers": [],
"code_of_ethics": null,
"board_qualifications": null,
"summary": null
},
"item_11_executive_compensation": {
"compensation_policies_and_programs": null,
"executive_compensation": {},
"summary": null
},
"item_12_security_ownership": {
"ownership_information": {},
"equity_compensation_plans": null,
"summary": null
},
"item_13_certain_relationships_and_related_transactions": {
"relationships_and_transactions": [],
"director_independence": null,
"summary": null
},
"item_14_principal_accountant_fees_and_services": {
"fees_for_services": {},
"summary": null
}
},
"part_IV": {
"item_15_exhibits_financial_statement_schedules": {
"exhibits": [],
"financial_statement_schedules": null,
"summary": null
}
}
}
现在我们有了实际 10-K 中要查找内容的模板,我们可以创建一个提示来提取这些数据点:
You are an expert business analyst specializing in 10-K documents.
Your task is to extract information from 10-K documents; to achieve this task, follow these steps:
Carefully analyze the document provided as context.
Use the template as a reference to understand which data points to extract.
Never make up information; if you don't remember something, go back to read the document. If the data is not available, add "Not available" as the value.
Return a well-formed JSON document following the template.
Always think step by step.
<template>
{
"10k_template": {
"part_I": {
"item_1_business": {
"description": "Company's main products and services, subsidiaries, and markets",
"recent_events": null,
"competition": null,
"regulations": null,
"labor_issues": null,
"operating_costs": null,
"seasonal_factors": null,
"summary": null
},
"item_1a_risk_factors": {
"risk_factors": [],
"summary": null
},
"item_1b_unresolved_staff_comments": {
"comments": [],
"summary": null
},
"item_2_properties": {
"properties": [],
"summary": null
},
"item_3_legal_proceedings": {
"proceedings": [],
"summary": null
},
"item_4": {
"reserved": true
}
},
"part_II": {
"item_5_market_for_registrants_common_equity": {
"market_information": null,
"number_of_holders": null,
"dividends": null,
"stock_repurchases": null,
"summary": null
},
"item_6_selected_financial_data": {
"financial_data": {},
"summary": null
},
"item_7_managements_discussion_and_analysis": {
"operations_and_financial_results": null,
"liquidity_and_capital_resources": null,
"trends_and_uncertainties": null,
"critical_accounting_judgments": null,
"off_balance_sheet_arrangements": null,
"contractual_obligations": null,
"summary": null
},
"item_7a_quantitative_and_qualitative_disclosures_about_market_risk": {
"market_risk_exposures": null,
"risk_management": null,
"summary": null
},
"item_8_financial_statements_and_supplementary_data": {
"income_statement": null,
"balance_sheets": null,
"statement_of_cash_flows": null,
"statement_of_stockholders_equity": null,
"notes_to_financial_statements": null,
"auditors_report": null,
"summary": null
},
"item_9_changes_in_and_disagreements_with_accountants": {
"changes_in_accountants": null,
"disagreements": null,
"summary": null
},
"item_9a_controls_and_procedures": {
"disclosure_controls_and_procedures": null,
"internal_control_over_financial_reporting": null,
"summary": null
},
"item_9b_other_information": {
"other_information": null,
"summary": null
}
},
"part_III": {
"item_10_directors_executive_officers_and_corporate_governance": {
"directors_and_executive_officers": [],
"code_of_ethics": null,
"board_qualifications": null,
"summary": null
},
"item_11_executive_compensation": {
"compensation_policies_and_programs": null,
"executive_compensation": {},
"summary": null
},
"item_12_security_ownership": {
"ownership_information": {},
"equity_compensation_plans": null,
"summary": null
},
"item_13_certain_relationships_and_related_transactions": {
"relationships_and_transactions": [],
"director_independence": null,
"summary": null
},
"item_14_principal_accountant_fees_and_services": {
"fees_for_services": {},
"summary": null
}
},
"part_IV": {
"item_15_exhibits_financial_statement_schedules": {
"exhibits": [],
"financial_statement_schedules": null,
"summary": null
}
}
}
}
</template>
<document>
</document>
Response:
注意,模板对要做什么以及不要做什么有非常具体的说明。这是提示 LLM 的最佳实践,因为这些模型需要这样的具体说明才能有效地提供精确信息。一个好的类比是像指导一年级学生一样引导他们,提供清晰的指示,并尽可能提供多的背景信息。
推理
对于推理,我们将提交我们的提示到通过 Vertex-AI 可用的 Gemini Pro 1.5。
Vertex AI Gemini API 是为寻求将 Gemini 模型纳入规模部署的开发者和企业量身定制的。这个企业级产品提供了一套强大的功能,旨在满足现代高性能应用的需求。使用 Vertex AI Gemini API,您可以受益于增强的企业安全措施,确保您的数据和模型得到行业领先的安全保障。此外,它还提供数据驻留选项,允许您遵守区域数据存储和处理法规:
{
"10k_template": {
"part_I": {
"item_1_business": {
"description": "Company's main products and services, subsidiaries, and markets",
"recent_events": null,
"competition": null,
"regulations": null,
"labor_issues": null,
"operating_costs": null,
"seasonal_factors": null,
"summary": null
},
"item_1a_risk_factors": {
"risk_factors": [],
"summary": null
},
"item_1b_unresolved_staff_comments": {
"comments": [],
"summary": null
},
"item_2_properties": {
"properties": [],
"summary": null
},
"item_3_legal_proceedings": {
"proceedings": [],
"summary": null
},
"item_4": {
"reserved": true
}
},
"part_II": {
"item_5_market_for_registrants_common_equity": {
"market_information": null,
"number_of_holders": null,
"dividends": null,
"stock_repurchases": null,
"summary": null
},
"item_6_selected_financial_data": {
"financial_data": {},
"summary": null
},
"item_7_managements_discussion_and_analysis": {
"operations_and_financial_results": null,
"liquidity_and_capital_resources": null,
"trends_and_uncertainties": null,
"critical_accounting_judgments": null,
"off_balance_sheet_arrangements": null,
"contractual_obligations": null,
"summary": null
},
"item_7a_quantitative_and_qualitative_disclosures_about_market_risk": {
"market_risk_exposures": null,
"risk_management": null,
"summary": null
},
"item_8_financial_statements_and_supplementary_data": {
"income_statement": null,
"balance_sheets": null,
"statement_of_cash_flows": null,
"statement_of_stockholders_equity": null,
"notes_to_financial_statements": null,
"auditors_report": null,
"summary": null
},
"item_9_changes_in_and_disagreements_with_accountants": {
"changes_in_accountants": null,
"disagreements": null,
"summary": null
},
"item_9a_controls_and_procedures": {
"disclosure_controls_and_procedures": null,
"internal_control_over_financial_reporting": null,
"summary": null
},
"item_9b_other_information": {
"other_information": null,
"summary": null
}
},
"part_III": {
"item_10_directors_executive_officers_and_corporate_governance": {
"directors_and_executive_officers": [],
"code_of_ethics": null,
"board_qualifications": null,
"summary": null
},
"item_11_executive_compensation": {
"compensation_policies_and_programs": null,
"executive_compensation": {},
"summary": null
},
"item_12_security_ownership": {
"ownership_information": {},
"equity_compensation_plans": null,
"summary": null
},
"item_13_certain_relationships_and_related_transactions": {
"relationships_and_transactions": [],
"director_independence": null,
"summary": null
},
"item_14_principal_accountant_fees_and_services": {
"fees_for_services": {},
"summary": null
}
},
"part_IV": {
"item_15_exhibits_financial_statement_schedules": {
"exhibits": [],
"financial_statement_schedules": null,
"summary": null
}
}
}
}
注意,API 中有可用的配置选项进行测试。您可以在书籍的 GitHub 仓库提供的代码中检查具体的调用。
结果后处理
一旦 LLM 处理完 10-K 报告,它将以结构化的 JSON 格式返回结果。这个 JSON 文档将包含提取的数据点,以与 10-K 报告本身的层次结构相一致的方式组织。为了有效地利用这些结果,我们需要解析 JSON 文档并提取相关信息。
我们管道的下一步是将解析后的数据导入数据库,以实现高效存储和检索。具体的导入策略将取决于我们选择的数据库类型。例如,如果我们选择关系型数据库,我们需要将提取的数据点映射到适当的表结构中,确保适当的归一化和遵守数据完整性原则。
或者,如果我们决定使用文档数据库,导入过程将更加直接,因为这些数据库是设计用来存储原生层次数据结构的,例如 JSON 文档。在这种情况下,我们可以直接导入解析后的 JSON 结果,利用数据库高效存储和查询复杂数据结构的能力。
无论选择哪种数据库类型,设计一个确保数据一致性、可扩展性和性能的导入策略至关重要。这可能涉及实施批量导入、索引和分区等策略,以优化数据库的性能并确保高效检索提取的数据点。
除了存储提取的数据点之外,我们还可以考虑为 10-K 报告的各个部分生成嵌入。嵌入是捕获语义意义的文本的向量表示,使高效的相似性搜索和检索成为可能。通过为报告部分生成嵌入,我们可以将我们的数据集与向量搜索管道集成,使用户能够根据语义相似性执行高级查询。
对于深入探讨嵌入生成和向量搜索集成,我们将在专门的章节中介绍检索增强生成(RAG)示例。本章将提供关于生成嵌入、构建向量数据库和实现高效向量搜索算法的详细见解,使您能够为您的 GenAI 应用程序创建强大的搜索和检索功能。
结果展示
当涉及到展示从处理 10-K 报告中获得的结果时,重要的是要考虑这些结果被摄入数据库的事实。这意味着您需要考虑的因素与您在开发利用数据库中可用数据的功能时需要考虑的因素相似。
主要考虑因素之一是需要一个工具或平台,能够有效地聚合和分析存储在数据库中的数据。这可能是一个商业智能(BI)工具、数据可视化平台,甚至是一个根据您特定需求定制的应用程序。所选工具应提供强大的查询功能,使您能够从数据库中的各种表或集合中提取和组合数据。
此外,展示层应提供一系列可视化选项,如图表、图形和仪表板,以有效地传达从数据中得出的见解。这些可视化应具有交互性,使用户能够从不同角度探索数据,过滤和排序结果,并深入到特定感兴趣的区域。
此外,展示层的设计应考虑可扩展性和性能。随着时间的推移,数据量的增长,处理大型数据集并提供响应式用户体验的能力变得至关重要。这可能涉及实施缓存、索引和优化数据库查询等技术,以确保高效的数据检索和渲染。
在本章的 GitHub 目录中,您将找到完整的代码以及如何将本章中描述的所有层组合在一起的分析。
摘要
在本章中,我们探讨了从财务文件中提取元数据,特别是上市公司提交的 10-K 报告。我们回顾了与一家需要从这些庞大的 10-K 年度报告中提取关键数据点的金融服务公司合作的经验,利用 LLMs 的数据提取能力。
我们定义了用例,并利用 GenAI 的力量导航 10-K 报告的结构化部分,根据最佳实践文档的指导,定位和提取最相关的信息颗粒。我们详细介绍了这个过程,首先通过制定一个有效的提示来引导 AI 模型。这涉及到研究 SEC 资源,概述了投资者应关注的重点部分和数据点。有了这些知识,我们可以迭代地改进我们的提示,以确保准确和高效地提取。
然后,我们提出了一个基于 Google Cloud 的云原生、无服务器架构来处理这些文档的批量处理。这个可扩展的设置可以利用各种服务,如云存储、Pub/Sub 和云函数,使我们能够无缝集成 AI 模型并存储提取的数据。
本章还涉及了后处理步骤,例如将提取的数据导入数据库(关系型或基于文档的),可能生成用于向量相似性搜索的嵌入,并通过 BI 工具或带有交互式可视化的自定义应用程序展示结果。
总结来说,本章为您提供了一个利用 GenAI 从复杂金融文档中提取和分析关键信息的实用蓝图。它展示了您如何利用这项技术做出更明智的决策并发现有价值的见解,从而优化您的运营效率和战略能力。
在下一章中,我们将探讨一个摘要用例。这个例子将展示批量处理用例可能的样子。
加入我们的 Discord 社区
加入我们社区的 Discord 空间,与作者和其他读者进行讨论:
packt.link/genpat

第六章:集成模式:批量摘要
在本章中,我们将探讨将生成式人工智能(GenAI)应用于总结文档的应用,这是跨行业中的一个非常有价值的特性。然而,在深入具体用例之前,我们必须认识到由生成式人工智能驱动的搜索智能支持多个超越文档摘要的用例。这些包括测试用例生成、支持基于文本、音频和视频数据的文档搜索,以及各种分析业务用例。然而,我们的重点将放在金融服务领域的一个引人入胜的用例上,其中文档摘要可以简化流程并加强合规性工作。
为了说明这个用例,让我们考虑一个场景,即一家金融服务公司面临着审查大量客户申请的艰巨任务。这些申请通常跨越多页,包含广泛的信息,包括个人详情、财务历史、投资目标和风险概况。
手动审查并提炼每个申请的关键点可能是一个耗时且易出错的过程,尤其是在处理大量提交时。这就是生成式人工智能驱动的摘要可以成为游戏改变者的地方,它能够有效地提取最显著的信息,同时通过提供不仅能够总结,还能遵循关于关注哪些方面的指南的能力,确保合规性,从而提供一种提升的体验。
通过利用生成式人工智能模型的自然语言理解和生成能力,公司可以开发一个系统,该系统能够智能地分析监管文件,识别关键细节,并生成简洁的摘要。
这些摘要可以无缝集成到下游流程中,例如风险评估、投资组合构建或客户入职工作流程。
需要注意的是,这个用例的目的不是为了取代合规官员的工作,而是通过生成式人工智能来增强他们的工作,同时优化他们在质量和效率方面的表现。
本章将基于示例,参考第四章中提出的生成式人工智能集成框架,即第四章,生成式人工智能批量处理和实时集成模式。它首先定义了在金融服务行业中总结客户申请的用例,以简化流程并加强合规性工作。然后,它提出了在谷歌云上为批量处理这些客户申请而设计的云原生、无服务器架构。
然后,我们将深入研究管道的入口点,这是一个在谷歌云存储(GCS)中创建的对象,触发云函数以启动摘要过程。它强调了提示预处理的重要性,将特定领域的知识和合规性指南纳入提示中。
我们将涵盖推理阶段,其中定制的提示和客户应用程序内容提交给 Vertex AI 上的 Google Gemini 以生成简洁的摘要。
我们将讨论结果后处理,将摘要导入数据库,以及展示摘要的各种方法,例如专用应用程序或与现有系统的集成。我们还将提供在 Google Cloud 上实施所提议解决方案的示例代码。
用例定义
在这个示例用例中,我们将专注于 10-K 表格摘要用例。10-K 表格旨在向投资者和监管机构提供公司财务状况、运营和风险因素的透明度。对于大型复杂公司,这些细节可能跨越数百页。
总结上市公司广泛的 10-K 年度报告可以为金融服务公司释放巨大价值。这些通常跨越数百页的冗长文件包含关于公司业务运营、财务表现、风险因素和策略的关键信息。然而,手动分析这些报告是一个极其耗时且低效的过程。通过利用先进的 AI 能力生成 10-K 的简洁摘要,金融机构可以加速其分析,同时确保一致地提取最相关的细节。这些摘要为投资专业人士提供快速访问关键财务指标、竞争洞察、潜在风险和未来展望,从而促进更明智的投资决策和投资组合监控。
此外,总结后的 10-K 表格可以无缝集成到现有研究工作流程、合规流程和金融机构内的决策支持系统中。这种自动化方法提高了可扩展性,允许分析师快速处理大量文件。它还降低了在手动分析过程中可能发生的人为错误或疏忽的风险。因此,金融服务公司可以利用 AI 驱动的 10-K 摘要来通过优化的投资分析、改进的风险管理实践和更明智的资本分配策略获得竞争优势——最终有助于提高其业务的回报率和运营效率。
手动审查这些表格可能是一个耗时且易出错的过程,尤其是在处理大量表格时。金融服务专业人士必须仔细分析每一部分,识别关键信息,并确保准确理解客户的需求和风险特征。
通过利用基于 GenAI 的总结方法,金融机构可以简化各种手动流程,从每个表格中提取最显著的信息,同时遵守监管合规标准。这些摘要可以随后使金融顾问和投资组合经理能够快速了解客户情况并做出明智的决策。以下图解通过解释设计提示时将使用的不同组件来捕捉这一点。

图 6.1:10-K 总结提示生成图
此外,这些摘要可以无缝集成到下游流程中,如风险评估、投资组合构建或客户入职工作流程,减少手动数据输入的需求并最小化错误的风险。
合规官员也可以通过将特定规则和指南纳入提示中,从 GenAI 驱动的总结中受益。例如,总结模型可以被指示突出潜在的红旗,如财务信息中的不一致性或声明的风险承受能力与投资目标之间的差异。通过及时揭示这些问题,合规团队可以主动解决这些问题,确保遵守监管要求并减轻潜在风险。
此外,由 GenAI 模型生成的摘要可以作为未来客户互动的有价值参考点,使金融顾问能够快速审查客户情况并提供个性化的建议或推荐,最终导致客户体验的改善和关系的加强。
架构
在第五章中讨论的架构基础上,对于第一个批量处理示例,我们将采用类似的云原生、无服务器方法在 Google Cloud 上处理客户端应用的总结批量处理。这种可扩展的设置利用了各种服务,使我们能够无缝集成 AI 模型并存储生成的摘要。
架构将包括以下组件:
-
对象存储(Google Cloud Storage):这个高度可扩展且耐用的对象存储将被用于存储客户端应用,这些应用可以以各种格式存在,例如 PDF 文件、Word 文档或结构化数据文件。
-
消息队列(Google Cloud Pub/Sub):将使用消息队列来协调数据流并管理客户端应用的加工。
-
处理组件(Google Cloud Functions):云函数将作为处理组件,执行总结任务并调用 LLM。
-
LLM(Google Gemini):我们将利用一个强大的 LLM,如 Google Gemini,托管在 Vertex AI 上,以执行实际的总结。
-
数据库(Google BigQuery或Cloud Firestore):生成的摘要将以结构化格式存储,无论是关系数据库(BigQuery)还是文档数据库(Cloud Firestore),具体取决于具体要求。
这些组件之间的交互关系在以下图中表示:

图 6.2:批量摘要用例架构图
下面是架构流程的分解:
-
客户端应用程序上传到 Google Cloud Storage,一旦文档进入存储桶,就会触发云函数。
-
云函数从云存储中读取应用程序列表,并向 Pub/Sub 主题发布消息,从而有效地创建一个待处理应用程序的队列。
-
另一个订阅了 Pub/Sub 主题的云函数将为队列中每个与特定应用程序相关的消息触发。
-
第二个云函数调用托管在 Vertex AI 上的 LLM(例如,Google Gemini),将应用程序内容作为输入,并附带一个定制的提示。
-
LLM 处理应用程序,利用其自然语言理解能力生成简洁的摘要,同时遵守任何指定的规则或指南。
-
生成的摘要随后以结构化格式(例如,BigQuery 或 Cloud Firestore)存储,以便进行进一步的分析、集成和消费。
这种无服务器架构提供了几个好处,包括自动扩展、成本效益(按使用付费定价)以及与其他 Google Cloud 服务的无缝集成。此外,它还允许轻松集成现有工作流程,使金融机构能够在不显著干扰现有流程的情况下利用由 GenAI 驱动的摘要。
入口点
与上一章类似,我们批量处理流程的入口点将是一个在Google Cloud Storage(GCS)中创建的对象。当客户端应用程序上传到指定的 GCS 存储桶时,将触发一个云函数,从而启动摘要过程。
对于这个用例,我们将利用 Google Gemini 这一最先进的 GenAI 模型强大的功能,它以其自然语言理解和生成能力而闻名。Gemini 将分析上传的客户应用程序,智能地提取最显著的信息,并生成简洁的摘要。
为了确保符合监管规定和遵守特定指南,我们将把规则和说明纳入提供给 Gemini 的提示中。这些规则可能包括突出潜在的红灯,确保声明的风险承受能力与投资目标之间的一致性,或根据合规要求强调申请的具体部分。
通过结合 Gemini 的高级推理能力、定制提示和规则,我们可以生成摘要,不仅能够捕捉客户应用的精髓,还能促进高效的审查和决策过程,同时保持合规性。
提示预处理
我们将首先制定一个有效的提示,以指导 GenAI 模型生成准确且合规的摘要。在这种情况下,我们将利用合规官员和金融服务行业内的主题专家的见解,了解摘要中需要捕捉的关键信息。
重要的是要指出,这个提示背后的意图是提供一个合规指南的示例,但这绝不代表一个真实的合规示例,也不打算用来分析商业档案。
基于这些见解,我们将开发一个模板或一系列指南,概述摘要中应包含的关键部分和数据点。这个模板将作为我们提示的基础,确保由 GenAI 模型生成的摘要与金融服务公司的特定要求相一致。
此外,我们将纳入合规官员提供的规则和指南,以确保摘要符合相关法规和行业最佳实践。这些规则可能包括突出显示需要进一步审查或调查的潜在差异、不一致或关注区域。
如您所见,在设计我们的提示并融入特定领域知识和合规指南时,我们可以利用 GenAI 的力量生成既简洁又准确的摘要,同时提供与合规和监管要求相关的见解,从而简化应用审查流程,降低潜在风险。
prompt_template_beggining = """
You are an expert compliance analyst.
Your task is to extract information from the sign up forms obtained.
1\. Carefully analyze the document provided as context.
2\. Write an intro paragraph for the company so the senior compliance analyst can quickly understand who the customer is.
3\. Following the guidance for approved businesses add a paragraph after the intro explaining why the business is supportable or not.
4\. Add another paragraph below explaining where the company is.
5\. Always think step by step.
<supportable_businesses>
Summary of Prohibited & Restricted Businesses
This document outlines the types of businesses and activities that are generally not allowed or require prior approval to use payment processing services. These restrictions exist due to legal requirements, financial partner rules, and compliance and risk management policies of payment processors.
Types of Businesses:
High-Risk Jurisdictions and Persons: Businesses operating in or dealing with sanctioned countries and individuals.
Prohibited Businesses: Activities involving illegal products or services, adult content, certain financial services, marijuana, unfair practices, weapons, etc.
Restricted Businesses: Activities requiring prior written approval from the payment processor, such as CBD, financial products, pharmaceuticals, non-fiat currency, and more.
Jurisdiction-Specific Prohibited Businesses: Additional restrictions based on specific countries, such as India, Japan, Malaysia, Mexico, Singapore, Thailand, UAE, and the US.
Prohibited Uses of Payment Processing Services:
Misrepresentation of identity or business.
Facilitating transactions for undisclosed merchants.
Using the service as a virtual terminal.
Processing without actual goods or services.
Evasion of chargeback monitoring.
Sharing cardholder information.
Misuse of intellectual property.
Prohibitions for Card Issuing Products:
Consumer use for personal expenses.
International use outside of the registered jurisdiction.
Lending without proper licensing and approval.
Abusive practices like free trial abuse and scalping.
Non-compliance with marketing and user experience guidelines.
Inactivity for 12 consecutive months.
Incorrect integration type for employee/contractor cards.
Business Analyst Recommendations:
Based on this information, a business analyst should pay close attention to the following types of businesses:
Financial Services: This is a broad category with many restrictions and nuances. It's crucial to understand the specific requirements for lending, crowdfunding, money transmission, etc.
Regulated Industries: Industries like CBD, pharmaceuticals, and tobacco require careful consideration of compliance and legal aspects.
High-Risk Businesses: Businesses prone to fraud or abuse, like travel reservation services and multi-level marketing, need thorough risk assessments.
Emerging Technologies: Activities involving cryptocurrency, NFTs, and other new technologies should be evaluated based on current regulations and the payment processor's policies.
Jurisdiction-Specific Restrictions: Businesses operating in or targeting specific countries need to be aware of additional prohibitions and requirements.
Additional Considerations:
Business Model: Restrictions often depend on the specific business model and how the service is used.
Compliance: Understanding and adhering to relevant regulations is essential to avoid account closure or other consequences.
Risk Management: Businesses should have robust risk management practices to mitigate potential financial and legal risks.
Transparency: Maintaining clear and accurate information about the business and its activities is crucial for approval and continued use of payment processing services.
By carefully considering these factors, a business analyst can help ensure that businesses comply with the payment processor's policies and operate successfully within the platform.
</supportable_businesses>
<document>
"""
prompt_template_end="""
</document>
Response:
"""
推理
对于推理阶段,我们将提交我们的提示以及客户应用内容到通过 Vertex AI 提供的 Google Gemini 模型。Vertex AI 平台提供了一个强大且可扩展的环境,用于部署和管理 GenAI 模型,确保高性能和企业级安全。
在我们的示例中,我们使用的是一家虚构的金融服务公司注册公司的示例数据集。推理代码将在整个数据集上运行,同时会有延迟以防止消耗可用配额。根据您的云提供商或设置,您可能有不同的推理配额,这些配额通常与QPS(每秒查询数)或QPM(每分钟查询数)相关。在我们的示例中,我们有 6 QPM 的限制。
text content. This can be further customized to evaluate safety attributes, for example, or to deal with empty results. For example, in the case of empty results, you could flag the doc and send it to a queue for further processing.
import time
summaries = []
for doc in docs:
result = generate(prompt_template_beggining,str(doc),prompt_template_end)
#sleep 10 seconds to not exceed 6 QPM
time.sleep(10)
summaries.append(result.text)
print(result.text)
当思考一个更复杂的推理流程时,我们需要关注以下步骤:
-
当新客户应用到达 GCS 时,云函数会检索应用内容和定制提示。
-
云函数在 Vertex AI 上调用 Gemini 模型,将应用程序内容和提示作为输入。
-
Gemini 通过利用其自然语言理解能力处理应用程序,生成简洁的摘要,同时遵守提示中概述的指定规则和指南。
-
生成的摘要将被返回到云函数中进行进一步处理和存储。
通过利用 Gemini 的力量和 Vertex AI 的可扩展性,我们可以高效地处理大量客户应用程序,及时生成准确且合规的摘要。
结果后处理
一旦 LLM 处理完客户端应用程序,它将以结构化格式返回摘要,例如 JSON 或标记语言。我们管道中的下一步是将这些摘要摄取到数据库中,以实现高效的存储和检索。
具体的摄取策略将取决于我们选择的数据库类型。例如,如果我们选择使用像 BigQuery 这样的关系数据库,我们需要将摘要数据点映射到适当的表结构中,确保适当的归一化和遵守数据完整性原则。
或者,如果我们决定使用像 Cloud Firestore 这样的文档数据库,数据摄取过程将更加直接,因为这些数据库是设计用来原生存储层次数据结构的。在这种情况下,我们可以直接以原始格式摄取摘要,利用数据库高效存储和查询复杂数据结构的能力。
无论选择哪种数据库类型,设计一个确保数据一致性、可扩展性和性能的摄取策略至关重要。这可能涉及实施批量摄取、索引和分区等策略,以优化数据库性能并确保摘要的高效检索。
结果展示
当涉及到展示由客户端应用程序生成的摘要时,需要考虑几个因素,包括目标受众、预期用例以及与现有系统和工作流程的集成。
一种方法是为财务顾问、投资组合经理和合规官员开发一个专用应用程序或仪表板,使他们能够轻松访问和审查摘要。此应用程序可以提供过滤、排序和搜索功能,使用户能够根据特定标准快速定位和分析摘要,例如客户风险概况、投资目标或由 GenAI 模型识别出的潜在红旗。
此外,应用程序还可以提供可视化工具,以更直观和视觉吸引力的方式展示摘要数据。例如,图表和图形可以用来描绘客户的财务状况、风险承受能力和投资目标,为财务顾问提供一目了然的综合概述。
另一种方法是直接将摘要集成到现有的客户关系管理(CRM)系统或客户入职工作流程中。这种集成将允许财务顾问和合规官员在他们已经使用的工具和平台上无缝访问摘要,最小化对现有流程的干扰。
此外,摘要还可以用于自动化和决策支持目的。例如,基于规则的系统或机器学习模型可以被训练来分析摘要并提供建议或风险评估,进一步提高了客户入职和投资组合管理流程的效率和准确性。
无论选择哪种演示方法,确保摘要以安全且合规的方式呈现都是至关重要的,遵守行业法规和数据隐私标准。应实施访问控制和授权机制,以确保敏感的客户端信息仅对授权人员可访问。
在本章的 GitHub 目录中,您可以找到完整的代码以及如何将本章中描述的所有组件组合在一起的分析。请特别注意框架的每个组件如何相互交互。
摘要
在本章中,我们探讨了 GenAI 在金融服务行业用于总结客户端应用的应用。我们首先定义了问题陈述,即金融机构需要高效地审查和提炼冗长的客户端应用中的关键信息,同时确保符合监管要求。
我们强调了在此背景下,由 GenAI 驱动的摘要的价值,它能够提取关键细节,简化下游流程,并在遵守合规标准的同时,促进更明智的决策。
接下来,我们在谷歌云上提出了一种云原生、无服务器的架构,用于处理客户端应用摘要的批量处理。这个可扩展的设置利用了各种服务,包括云存储、发布/订阅、云函数以及像 BigQuery 或云 Firestore 这样的数据库,使得 AI 模型和生成的摘要的存储能够无缝集成。
我们随后深入探讨了提示预处理的流程,强调了将特定领域知识和合规指南纳入提示的重要性。通过与主题专家和合规官员合作,我们可以制定出指导 GenAI 模型生成准确且合规的摘要的提示。
推理阶段涉及将定制的提示和客户端应用内容提交到 Vertex AI 上的谷歌 Gemini。Gemini 的高级自然语言理解和生成能力,结合精心制作的提示,能够生成简洁且富有洞察力的摘要。
我们还涵盖了后处理步骤,例如将摘要导入数据库,并讨论了展示摘要的各种方法,包括专用应用程序、仪表板或与现有 CRM 系统和工作流程的集成。
总体而言,本章提供了一个实用的框架,用于利用 GenAI 的力量来简化金融服务行业客户应用的审查和分析,同时确保合规性并促进更高效、更明智的决策过程。
在下一章中,我们将探讨一个关注使用 GenAI 进行意图分类的实时用例。
加入我们的 Discord 社区
加入我们的社区 Discord 空间,与作者和其他读者进行讨论:
packt.link/genpat

第七章:集成模式:实时意图分类
在前几章中,我们讨论了批量处理集成模式,我们专注于高效处理大量数据并生成用于下游系统的数据。在本章中,我们将将重点转向实时集成模式。
实时交互要求应用针对延迟进行优化,而不是高效处理大量批量请求。换句话说,我们需要确保输出尽可能快地生成,以提供优化的用户体验。这种模式最常见的用例是通过聊天或语音界面暴露的实时代理。
让我们考虑一个意图分类用例,这是聊天机器人常见的场景。在这种情况下,一个人工智能(AI)系统负责识别用户的意图,例如检查余额、安排预约或进行购买。根据识别到的意图,系统可以执行适当的任务或提供相关响应。
在今天的应用体验中,客户在与企业互动时期望无缝和个性化的体验。实现这一目标的一种方式是实施一个智能系统,该系统能够根据自然语言输入准确解释用户意图。这种能力在客户服务、电子商务和对话式 AI 应用中尤其有价值,在这些应用中,理解用户的意图对于提供相关和上下文相关的响应至关重要。
在本章中,我们将探讨一个实时意图分类用例,利用谷歌的Gemini Pro,一种最先进的生成式 AI 模型,构建一个能够准确地将用户输入分类到预定义意图的系统。
我们将从头到尾走一遍整个过程,从数据准备到部署以及与下游系统的集成,遵循前几章中讨论的集成框架。
在本章中,我们将涵盖以下内容:
-
用例定义
-
架构
-
入口点
-
提示预处理
-
推理
-
结果后处理
-
结果展示
-
完整代码
用例定义
让我们考虑一个场景,我们正在与一家希望改善其客户服务体验的电子商务公司合作。该公司通过各种渠道,如电子邮件、聊天和社交媒体,接收大量客户咨询。目前,这些咨询由客户服务代表团队手动处理,这可能耗时且容易出错。
通过将意图分类集成到客户参与流程中,公司可以优化其客户服务运营。这种高级自然语言处理技术自动将客户咨询分类到预定义的意图中,例如“订单状态”、“产品咨询”、“退货请求”或“一般反馈”。分类层作为客户服务互动的智能入口,使查询的分配更加高效和准确。
这种自动分类是可扩展客户服务基础设施的基础。一旦查询被分类,它就可以无缝地导向最合适的团队或代理,确保客户获得针对其特定需求的专家协助。对于高容量、简单的查询,系统甚至可以触发自动响应,提供对常见问题的即时解决方案。这不仅极大地提高了响应时间,而且通过提供快速、相关的帮助,增强了整体客户满意度。
此外,实施意图分类显著提高了客户服务代表的日常生活质量。
通过接收预先分类的查询,组织可以利用专家代理专注于他们的专业领域,减少在处理不同类型问题之间不断切换的认知负荷。这种专业化使代理能够提供更深入、高质量的支持,从而提高解决率和增加工作满意度。
在分析方面,还有一个额外的优势,因为从意图分类中收集的数据可以提供对客户需求和痛点的宝贵见解,使公司能够不断改进其产品、服务和支持策略,更好地满足客户期望。
在下一节中,我们将深入探讨一种方法,它将帮助您开始使用 GenAI 进行意图分类示例。
架构
要构建我们的意图分类系统,我们将利用基于Google Cloud(例如:cloud.google.com/architecture/serverless-functions-blueprint)的无服务器、事件驱动架构。这种方法符合云原生原则,并允许与其他云服务无缝集成。

图 7.1:意图分类示例架构图
架构包括以下关键组件:
-
摄取层:这一层负责接受来自各种渠道的用户输入,例如网页表单、聊天界面或 API 端点。我们将使用Google Cloud Functions作为我们系统的入口点,它可以由Cloud Storage、Pub/Sub或Cloud Run等服务的事件触发。
-
AI 处理层:在这一层中,我们将通过Vertex AI整合 Google 的 Gemini Pro。Vertex AI 提供了一个托管环境来部署和扩展机器学习模型,确保高可用性和性能。
-
意图分类模型:这是我们系统的核心组件,负责分析用户输入并确定相应的意图。我们将利用 Google Gemini Pro 的自然语言理解能力为我们构建意图分类模型。
-
编排和路由:根据分类的意图,我们需要将用户输入路由到适当的后端系统或服务。这可能涉及与客户关系管理(CRM)系统、知识库或其他企业应用的集成。我们将使用 Cloud Functions 或 Cloud Run 来编排此路由过程。
-
监控和日志记录:为确保我们系统的可靠性和性能,我们将实施强大的监控和日志记录机制。我们将利用如云日志、云监控和云操作等服务来了解我们系统的行为,并快速识别和解决任何问题。
通过采用这种架构,意图分类系统不仅可扩展,而且足够灵活,可以适应不同的工作负载和集成需求。我们能够实时处理大量客户咨询,并快速提供一致的反应,从而改善整体客户体验。
这种架构的无服务器特性带来了几个额外的优势。它允许根据需求自动扩展,确保我们能够在无需人工干预的情况下处理客户咨询的突然激增。这种弹性不仅提高了系统可靠性,还优化了成本,因为我们只为实际使用的资源付费。
这种事件驱动的设计促进了与其他系统和服务的轻松集成。随着我们的客户服务生态系统的发展,我们可以轻松地向意图分类系统中添加新的触发器或输出。
这可能包括集成新的通信渠道、连接到额外的后端系统或结合高级分析以深入了解客户行为和偏好。
在接下来的章节中,我们将深入了解我们架构的每个组件,探讨我们将使用的特定 Google Cloud 服务、实施的最佳实践以及优化性能和成本效益的策略。我们还将讨论一个具体的示例,以帮助您开始。
入口点
对于实时交互式应用,提示的入口点需要高度精简,考虑到简洁性和易用性。这些提示通常来自不可预测的上下文,因此界面需要在各种设备和使用场景中感觉自然。
在我们的用例中,入口点可能是一个网页表单、聊天界面或 API 端点,客户在此提交他们的咨询。这些输入将被发送到云函数,该函数作为我们系统的摄入层。
让我们从用户查询的示例开始:
#In this case we will simulate the input from a chat interface
message = "I want to open an account"
提示预处理
在实时系统中,提示预处理工作流程中的每一步都会向整体响应时间添加宝贵的延迟,通常根据您的应用程序的 SLA 以毫秒或微秒来衡量。高延迟体验可能会损害用户体验。因此,预处理应尽可能保持轻量级。
对于我们的意图分类用例,提示预处理可能涉及简单的文本规范化,例如删除标点符号、转换为小写或处理缩写。此外,我们可能应用一些基本的过滤以移除任何可能有害或不适当的内容,在将提示发送到模型之前。
让我们深入一个示例提示:
#In this section we define the prompt, as the task is to perform intent
#classification we will identify the intent by exposing
#the possible values to the LLM
prompt_template = """
You are a helpful assistant for an online financial services company that allows users to check their balances, invest in certificates of deposit (CDs), and perform other financial transactions.
Your task is to identify what your customers are trying to do and return a well formed JSON object.
1\. Carefully analyze the content of the message.
2\. Classify what the user is trying to do within these options:
* New Account: The user is trying to sign up. Return {{"intent": "signup", "content":"null"}}
* Change Password: The user needs to reset their password. Return {{"intent":"change_password", "content":"null"}}
* Check Balance: The user needs to check their balance. Return {{"intent": "check_balance", "content":"null"}}
* Invest in CD: The user wants to invest in a certificate of deposit. Return {{"intent": "invest_cd", "content": "Extract relevant information such as investment amount and term"}}
* Withdraw Funds: The user wants to withdraw money. Return {{"intent": "withdraw_funds", "content": "Extract information like amount and withdrawal method"}}
* Transfer Funds: The user wants to transfer money between accounts. Return {{"intent": "transfer_funds", "content": "Extract information like amount, source account, and destination account"}}
* Account Information: The user wants to access or update their account information. Return {{"intent": "account_info", "content": "Identify the specific information the user needs"}}
* Lost/Stolen Card: The user wants to report a lost or stolen card. Return {{"intent": "lost_card", "content": "null"}}
* Support: The user needs help and is not sure what to do. Return {{"intent": "support", "content": "null"}}
* Other: For other queries, politely decline to answer and clarify what you can help with.
3\. Only return the proper JSON result from your classification.
4\. Always think step by step.
User question: {query}
JSON:
"""
之前的提示定义了意图分类任务的模板。提示提供了上下文,解释了助手正在帮助在线金融服务公司的用户执行各种操作,例如注册、检查余额、投资 CD、提取资金等。
此外,这个提示指示模型仔细分析用户的输入消息,并将意图分类到预定义的类别之一。对于每个意图类别,提示指定应返回的 JSON 对象,包括需要从用户的消息中提取的任何附加信息。
例如,如果用户的意图是投资 CD,助手应返回以下格式的 JSON 对象:
{
"intent": "invest_cd",
"content": "Extract relevant information such as investment amount and term"
}
这意味着虚拟助手不仅应将意图识别为"invest_cd",还应从用户的消息中提取相关信息,如投资金额和期限,并将其包含在"content"字段中。
提示还提供了处理不属于任何预定义类别(即“其他”情况)的意图的说明。
通过提供这个详细的提示模板,系统可以有效地引导语言模型执行金融服务场景的意图分类任务,确保模型的响应结构化和格式正确。
推理
在推理阶段,我们将利用托管在 Vertex AI 上的 Google 的 Gemini Pro 模型。在由用户输入触发的云函数中,我们将调用托管 Gemini Pro 模型的 Vertex AI 端点,将预处理的输入作为提示传递。
Gemini Pro 将处理输入并返回预测的意图,利用其自然语言理解能力。由于我们使用的是现成的模型,因此底层基础设施和资源分配被抽象化,确保单个请求在遵守服务的性能和成本目标的同时高效处理:
generation_config = {
"max_output_tokens": 8192,
"temperature": 0,
"top_p": 0.95,
}
safety_settings = {
generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
}
def generate(prompt):
vertexai.init(project=PROJECT, location=LOCATION)
model = GenerativeModel(MODEL)
responses = model.generate_content(
[prompt],
generation_config=generation_config,
safety_settings=safety_settings,
stream=False,
)
return(responses)
result = generate(prompt_template.format(query=message))
结果后处理
对于我们的意图分类用例,后处理步骤可能涉及将预测的意图格式化为合适的响应格式,例如 JSON 或可读性强的字符串。此外,我们可能应用一些基本的过滤或排序机制,以确保最相关和有帮助的响应被优先考虑。
### Sometimes model return markdown friendly content, in this case we will implement a function to filter this.
def extract_json(text):
"""
Extracts the JSON portion from a string containing backticks.
Args:
text: The string containing JSON data within backticks.
Returns:
A dictionary representing the extracted JSON, or None if no valid JSON is found.
"""
start_index = text.find("```json")
end_index = text.find("```py", start_index + 7) # +7 to skip "```json"
if start_index != -1 and end_index != -1:
json_string = text[start_index + 7: end_index] # 提取 JSON 字符串
else:
json_string = text
try:
json_data = json.loads(json_string)
return json_data
except json.JSONDecodeError:
return None
extract_json,该函数旨在处理语言模型输出中包含在反引号内包裹的 JSON 数据的情况:json```py. This is a common practice in Markdown-friendly environments, where backticks are used to delineate code blocks or structured data.
extract_json 函数接受一个字符串 text 作为输入,并尝试从反引号内提取 JSON 部分。以下是该函数的工作原理的分解:
- 函数首先查找字符串
py`"json"```pyin the input text using thefind` method. This is the marker that indicates the start of a JSON block. - If the
startmarker is found, the function then looks for the closing""marker by searching for it from the end of thejsonmarker (start_index + 7). If both the start and end markers are found, the function extracts the JSON string by slicing the input text between these markers. If no start or end markers are found, the function assumes that the entire input text is the JSON string. - The function then attempts to parse the extracted JSON string using the
json.loadsmethod from thejsonmodule. If the parsing is successful, the function returns the resulting JSON data as a dictionary. If the parsing fails (for example, due to invalid JSON syntax), the function returnsNone. By incorporating this function into the post-processing stage, the system can handle cases where the language model’s output contains JSON data wrapped in backticks. This functionality can be particularly useful when working with Markdown-friendly environments or when integrating the intent classification system with other components that expect JSON-formatted data. - The post-processing stage can then proceed to format the extracted JSON data into a suitable response format, apply filtering or ranking mechanisms, and render the final response for display to the user.
The process_intent function is designed to handle the JSON data returned by the intent classification model. It takes a dictionary intent as input, which is expected to have an “intent” key with a value representing the predicted intent category.
def process_intent(intent):
if intent["intent"] == "signup":
# 如果用户正在尝试注册,你可以
# 重定向到注册页面等。
return("注册流程")
elif intent["intent"] == "change_password":
# 如果用户正在考虑更改密码,
# 可以通过聊天机器人来完成,
# 或者重定向到密码更改页面。
return("更改密码")
elif intent["intent"] == "check_balance":
# 在这种情况下,你可以有一个函数
# 会查询数据库以获取
# 平衡(只要用户已登录或未登录)
return("检查账户余额")
elif intent["intent"] == "invest_cd":
# 对于投资意图,这可能将重定向
# 转到可以选择投资选项的页面。
return("投资 CD")
elif intent["intent"] == "withdraw_funds":
return("提取资金")
elif intent["intent"] == "transfer_funds":
return("转账")
elif intent["intent"] == "account_info":
return("账户信息")
elif intent["intent"] == "lost_card":
return("报告丢失的卡")
elif intent["intent"] == "support":
return("联系客服")
elif intent["intent"] == "other":
return("其他类型的意图")
else:
return("如果意图被分类为其他内容,你应该调查发生了什么。")
intent = process_intent(extract_json(result.text))
```py
The `process_intent` function checks the value of the `"intent"` key in the input dictionary. Depending on the intent category, the function performs a specific action or returns a corresponding message.
For example, if the intent is `"signup"`, the function returns the string `"Sign up process"`, which could be used to redirect the user to a sign-up page or initiate the sign-up process. Similarly, if the intent is `"change_password"`, the function returns `"Change password"`, which could trigger a password reset process or redirect the user to a password change page.
For intents like `"check_balance"`, `"invest_cd"`, `"withdraw_funds"`, `"transfer_funds"`, `"account_info"`, `"lost_card"`, and `"support"`, the function returns corresponding messages that could be used to initiate the relevant processes or provide instructions to the user.
If the intent is `"other"`, the function returns `"Other kind of intent"`, indicating that the user’s query did not match any of the predefined intent categories.
If the intent does not match any of the cases handled by the function, it returns a message suggesting that further investigation is needed to understand the intent.
Finally, the last line of code `intent = process_intent(extract_json(result.text))` combines the `extract_json` and `process_intent` functions. It first extracts the JSON data from the `result.text` string using `extract_json`. Then, it passes the extracted JSON data to the `process_intent` function, which processes the intent and returns an appropriate message or action.
process_intent 函数可以根据应用程序的具体要求扩展或修改,以包含额外的逻辑或操作。
## Result presentation
The result presentation stage for real-time applications demands instantaneous updates, often server-rendered or via data-binding frameworks.
In our use case, the formatted response containing the predicted intent can be sent back to the customer through the channel from which the inquiry originated (for example, web form, chat interface, or API response). This response can then be used to route the inquiry to the appropriate downstream system or provide an automated response for common intents.
In this example, we will use a Gradio interface to render the replies in a visually appealing UI. Gradio ([`www.gradio.app/`](https://www.gradio.app/)) is an open-source Python package that allows you to quickly create easy-to-use, customizable UI components for your ML model, any API, or even an arbitrary Python function using a few lines of code.
You can find more information about Gradio using the following links:
Docs: [`www.gradio.app/docs`](https://www.gradio.app/docs%0D%0A)
GitHub: [`github.com/gradio-app/gradio`](https://github.com/gradio-app/gradio)
The following code provides an example that creates a Gradio interface:
import gradio as gr
def chat(message, history):
response = generate(prompt_template.format(query=message))
intent_action = process_intent(extract_json(response.text))
history.append((message, intent_action))
return "", history
with gr.Blocks() as demo:
gr.Markdown("Fintech Assistant")
chatbot = gr.Chatbot(show_label=False)
message = gr.Textbox(placeholder="Enter your question")
message.submit(chat, [message, chatbot],[message, chatbot] )
demo.launch(debug=True)
之前的代码展示了使用 Gradio 库的意图分类系统的结果展示阶段。
在我们的示例中,`chat(message, history)`函数是聊天机器人界面的核心。它接受两个参数:`message`(用户的输入消息)和`history`(包含先前消息和响应的列表)。以下是该函数的功能:
1. 它调用`generate`函数(在提供的代码中未显示)从意图分类模型获取响应,将用户的消息作为提示模板的一部分传递。然后使用`extract_json`函数(未显示)处理模型的响应以提取预测的意图数据。
1. 提取的意图数据传递给`process_intent`函数(此处未显示),以根据预测的意图确定适当的行为或响应。用户的消息和生成的响应被追加到历史列表中,以跟踪对话。
1. 函数返回一个空字符串作为响应消息和更新后的历史记录列表。
1. 然后代码使用`gr.Blocks`上下文管理器创建 Gradio 界面。在上下文中,它执行以下操作:
+ 使用 gr.Markdown 组件显示标题。
+ 创建一个`gr.Chatbot`组件来显示对话历史。
+ 为用户输入消息创建一个`gr.Textbox`组件。
+ 将聊天函数绑定到`Textbox`组件的`submit`事件。当用户提交他们的消息时,聊天函数被调用,并带有用户的消息和当前历史记录作为参数。
+ 分别更新`Textbox`和`Chatbot`组件的新消息和更新后的历史记录。
+ 使用`demo.launch(debug=True)`以调试模式启动 Gradio 界面。
结果是一个交互式的聊天机器人界面,用户可以像*图 7.2*中所示那样输入他们的消息,系统将处理消息,预测意图,并根据`process_intent`函数提供适当的响应。对话历史在`Chatbot`组件中显示,使用户能够跟踪对话流程。

图 7.2:示例 Gradio 界面
## 日志记录和监控
实时系统需要对每个请求的指标进行紧密的监控,例如延迟、错误和资源使用。
在我们的架构中,我们将利用 Cloud Logging ([`cloud.google.com/logging/docs/overview`](https://cloud.google.com/logging/docs/overview)) 和 Cloud Monitoring ([`cloud.google.com/monitoring/docs/monitoring-overview`](https://cloud.google.com/monitoring/docs/monitoring-overview)) 等服务来了解系统的行为,并快速识别和解决任何问题。我们可以监控诸如请求延迟、错误率和资源利用率等指标,并为异常或性能下降设置警报。
通过遵循这种集成模式和利用 Google 的 Gemini Pro 的力量,企业可以解锁生成式 AI 的潜力,构建能够准确分类用户意图、提升客户体验和简化运营的智能系统。
请参阅本章的 GitHub 目录,以获取上述所有组件如何组合在一起的完整代码示例。
# 摘要
在本章中,我们讨论了使用 Google 的 Gemini Pro 生成式 AI 模型构建实时意图分类系统的集成模式。我们首先介绍了实时集成模式的概念,这种模式优先考虑低延迟,而不是效率或数量,与批量处理集成模式形成对比。
我们开发的用例是一家希望通过自动将客户咨询分类到预定义意图(如订单状态、产品咨询、退货请求或一般反馈)来改善其客户服务体验的电子商务公司。这种分类可以用于将咨询路由到适当的团队或为常见问题提供自动响应。
提出的架构是建立在 Google Cloud 上的无服务器、事件驱动架构,包括数据摄取层(Cloud Functions)、AI 处理层(Vertex AI 与 Gemini Pro)、意图分类模型、编排和路由(Cloud Functions 或 Cloud Run)以及监控和日志记录(Cloud Logging、Cloud Monitoring 和 Cloud Operations)。
在下一章中,我们将深入探讨另一个非常重要的实时用例,一个 **检索增强生成**(**RAG**)示例,我们将利用生成式 AI 基于我们提供的文档来回答问题。
# 加入我们的 Discord 社区
加入我们社区的 Discord 空间,与作者和其他读者进行讨论:
`packt.link/genpat`

# 第八章:集成模式:实时检索增强生成
在本章中,我们将探讨另一种集成模式,该模式结合了**检索增强生成**(**RAG**)和生成式 AI 模型的力量,以构建一个能够根据 PDF 文件内容回答问题的聊天机器人。这种方法结合了检索系统和生成模型的优势,使我们能够利用现有的知识源,同时生成相关和上下文化的响应。
RAG 方法的一个关键优势是其防止幻觉并提高生成响应上下文的能力。基于广泛数据训练的生成式 AI 模型有时可能会产生事实错误或过时的响应,因为它们的训练数据仅限于某个时间点或它们在推理时可能缺乏适当的上下文。通过将模型的生成过程建立在从文档语料库检索到的相关信息之上,RAG 方法减轻了幻觉的风险,并确保响应准确且上下文相关。
例如,术语*退款*在不同的上下文中可能有不同的含义和影响。在零售银行业的上下文中,退款可能指客户请求退还费用或收费,而在税收的上下文中,退款可能指政府提供的税收退款。通过从文档语料库中检索相关上下文,RAG 驱动的聊天机器人可以生成准确反映*退款*意图含义的响应,基于用户查询的具体上下文。
下图展示了简单的 RAG 流程:

图 8.1:简单的 RAG 流程
继续我们关于金融服务公司的例子,这些公司经常处理大量的文件,包括法律合同、监管文件、产品披露以及内部政策和程序。这些文档存储库可能包含数万甚至数十万页,这使得员工和客户在需要时难以快速找到相关信息。
通过实施基于 RAG 的聊天机器人系统,金融服务公司可以为员工、客户和其他利益相关者提供一个用户友好的界面,让他们能够提出自然语言问题并接收来自大量文档的简洁、相关的答案。RAG 方法允许系统从文档语料库中高效地检索相关信息,然后使用强大的生成式 AI 模型生成上下文化的响应。
例如,客户服务代表可以向聊天机器人询问关于贷款协议中特定条款的问题,系统将检索文档语料库中的相关部分,并生成针对用户查询的简洁解释。同样,投资顾问可以询问与金融产品相关的特定法规或指南,聊天机器人将提供相关文档中的必要信息。
通过利用 RAG 方法,金融服务公司可以极大地提高其文档存储库的可访问性和可用性,实现更快、更准确的信息检索,并减少手动搜索数千页文档所需的时间和精力。
在本章中,我们将介绍以下内容:
+ 用例定义(针对金融服务公司)
+ 架构(基于 RAG 的聊天机器人系统概述):
+ 数据摄取层
+ 文档语料库管理
+ AI 处理层
+ 监控和日志记录
+ 入口点(处理各种输入模式的设计)
+ 提示预处理和向量数据库集成
+ 使用 Vertex AI 的 Gemini 1.5 Flash 模型进行推理过程
+ 使用 Markdown 进行结果后处理和展示
+ 演示实现(使用 Gradio)
+ RAG 流程的完整代码示例
# 用例定义
让我们考虑一个场景,我们正在与一家处理大量法律合同、监管文件、产品披露、内部政策和程序的大型金融机构合作。这些文件单独可能长达数十页甚至数百页,使得员工、客户和其他利益相关者在需要时难以快速找到相关信息。这些文件在信息报告的方式上也没有一致的格式,这使得像正则表达式语句或普通业务规则这样的非 AI 驱动的文本提取解决方案无效。
该机构希望实施一个聊天机器人系统,可以为用户提供友好的界面,让他们提出自然语言问题,并接收来自组织文档语料库的简洁、相关答案。该系统应利用 RAG 的力量,确保生成的回答准确、上下文相关,并基于文档语料库中的相关信息。
# 建筑学
为了构建我们的基于 RAG 的聊天机器人系统,我们将利用建立在 Google Cloud 之上的无服务器、事件驱动的架构。这种方法与我们之前示例中使用的云原生原则相一致,并允许与其他云服务无缝集成。您可以在以下示例架构中深入了解 Google Cloud 的示例:[`cloud.google.com/architecture/rag-capable-gen-ai-app-using-vertex-ai`](https://cloud.google.com/architecture/rag-capable-gen-ai-app-using-vertex-ai)。
在本例中,架构包括以下关键组件:
+ **摄取层**:这一层负责接受来自各种渠道的用户查询,例如网页表单、聊天界面或 API 端点。我们将使用 Google Cloud Functions 作为我们系统的入口点,它可以由云存储、Pub/Sub 或 Cloud Run 等服务的事件触发。
+ **文档语料库管理**:在这一层,我们将存储代表文档内容的嵌入表示。在这种情况下,我们可以使用从专门构建的向量数据库(如 Chroma DB、Pinecone 或 Weaviate)到知名行业标准(如 Elastic、MongoDB、Redis)的各种解决方案,甚至包括以其他能力著称的数据库,如 PostgreSQL、SingleStore、Google AlloyDB 或 Google BigQuery。
+ **AI 处理层**:在这一层,我们将通过 Vertex AI 集成 Google Gemini。一旦从向量数据库检索到结果,它们将作为上下文与提示一起暴露给 Google Gemini。这个过程可以通过云函数处理。
+ **监控和日志记录**:为确保系统的可靠性和性能,您应实施强大的监控和日志记录机制。我们将利用云日志、云监控和云操作等服务来了解系统行为,并快速识别和解决任何问题。
# 入口点
对于基于 RAG 的聊天机器人系统,入口点被设计成用户友好,允许用户通过各种接口提交他们的自然语言查询,例如网页表单、聊天应用或 API 端点。然而,入口点不应仅限于接受基于文本的输入;它还应处理不同的模态,如音频文件或图像,具体取决于底层语言模型的能力。
对于像 Google Gemini(支持多模态输入)这样的模型,入口点可以直接接受和处理文本、音频、图像,甚至视频。这种多功能性使用户能够以更自然和直观的方式与聊天机器人系统交互,与人类在现实世界场景中的沟通方式相一致。
在语言模型不原生支持多模态输入的情况下,入口点仍然可以通过预处理数据和提取文本内容来适应各种输入模态。这种方法确保了聊天机器人系统易于访问和用户友好,同时利用底层语言模型的能力,满足多样化的输入格式。
对于文本输入,入口点可以直接将查询传递给 RAG 管道的后续阶段。然而,当处理音频或图像输入时,入口点需要执行额外的处理来从这些模态中提取文本内容。
对于音频输入,入口点可以利用语音识别技术,如 Google Chirp、Amazon Transcribe、OpenAI Whisper 或 CMU Sphinx 等开源库,将音频数据转录成文本格式。这个过程涉及将音频信号转换为语言模型可以理解的单词或短语序列。
同样,对于图像输入,入口点可以采用**光学字符识别**(**OCR**)技术从提供的图像中提取文本。这可以通过集成 Google Cloud Vision API、Amazon Textract 或 Tesseract OCR 等开源工具来实现。这些技术利用计算机视觉和机器学习算法来准确识别和从图像中提取文本内容,使聊天机器人系统能够理解和处理以视觉形式呈现的信息。
在这个例子中,我们将利用文本;Python 代码将如下所示:
```py
#In this case we will simulate the input from a chat interface
question = "What is this call about?"
无论输入类型如何,入口点都应该设计成能够处理各种场景和输入格式。它可能需要执行额外的预处理步骤,例如噪声去除、格式转换或数据清理,以确保输入数据适合 RAG 管道后续阶段的格式。此外,运行原始请求通过严格的安全监控管道也是最佳实践,以防止数据泄露或模型中毒,如提示摄入。
以下网站提出了关于多模态场景中提示注入带来的挑战的非常有趣的观点:protectai.com/blog/hiding-in-plain-sight-prompt。
提示预处理
对于我们的例子,我们需要实时构建提示及其必要的上下文和指令。在我们 RAG 管道的这个步骤中,我们将利用向量数据库进行高效的向量相似度搜索。向量数据库是专门的数据存储,用于存储和检索高维向量,能够实现快速和准确的相似度搜索。尽管有众多向量数据库提供商,但我们将在这个特定例子中使用 Chroma DB。
在 RAG 管道中的检索过程相对简单。首先,我们使用预训练的语言模型或嵌入技术从用户的查询中生成嵌入。这些嵌入是查询的数值表示,能够捕捉其语义意义。接下来,我们使用生成的查询嵌入在向量数据库上执行相似度搜索。向量数据库将返回与查询嵌入最相似的向量,以及它们对应的文本信息或上下文。这些向量与之前摄取的文本段落相关联。
可以应用不同的过滤策略来进一步细化搜索结果。具体参数和技术可能因所使用的向量数据库提供商而异。例如,一些向量数据库提供相似度分数,该分数衡量查询嵌入与检索向量之间的接近程度。可以利用此分数来识别和过滤掉低于一定相似度阈值的向量。
另一种常见的过滤策略是限制从向量数据库中获取的结果数量。这种方法在存在对可以传递给语言模型的标记最大数量的限制时特别有用,无论是由于模型施加的标记限制还是为了成本优化目的。通过限制结果数量,我们可以控制提供给语言模型的上下文信息量,确保高效处理和成本效益的运行。
一旦结果被过滤,并获取到相关的文本信息,它就被用来构建将传递给语言模型的提示。在这个例子中,我们使用以下提示模板:
prompt_template = """
You are a helpful assistant for an online financial services company that allows users to check their balances, invest in certificates of deposit (CDs), and perform other financial transactions.
Your task is to answer questions from your customers, in order to do so follow these rules:
1\. Carefully analyze the question you received.
2\. Carefully analyze the context provided.
3\. Answer the question using ONLY the information provided in the context, NEVER make up information
4\. Always think step by step.
{context}
User question: {query}
Answer:
"""
在我们的示例中,我们提交给 LLM 的提示将如下所示:
You are a helpful assistant for an online financial services company that allows users to check their balances, invest in certificates of deposit (CDs), and perform other financial transactions.
Your task is to answer questions from your customers, in order to do so follow these rules:
1\. Carefully analyze the question you received.
2\. Carefully analyze the context provided.
3\. Answer the question using ONLY the information provided in the context, NEVER make up information
4\. Always think step by step.
<context>
---This information is contained in a document called coca_cola_earnings_call_2023.pdf
1-877-FACTSET www.callstreet.com
18 Copyright © 2001-2024 FactSet CallStreet, LLC
The Coca-Cola Co. (KO) Q1 2024 Earnings Call
Corrected Transcript 30-Apr-2024
Operator: Ladies and gentlemen, this concludes today's conference call. Thank you for participating. You may now disconnect.
Disclaimer The information herein is based on sources we believe to be reliable but is not guaranteed by us and does not purport to be a complete or error-free statement or summary of the available data. As such, we do not warrant, endorse or guarantee the completeness, accuracy, integrity, or timeliness of the information. You must evaluate, and bear all risks associated with, the use of any information provided hereunder, including any reliance on the accuracy, completeness, safety or usefulness of such information. This information is not intended to be used as the prim ary basis of investment decisions. It should not be construed as advice designed to meet the particular investment needs of any investor. This report is published solely for information purposes, and is not to be construed as financial or other advice or as an offer to sell or the solicitation of an offer to buy any security in any state where such an offer or solicitation would be illegal. Any information expressed herein on this date is subject to change without notice. Any opinions or assertions contained in this information do not represent the opinions or beliefs of FactSet CallStreet, LLC. FactSet CallStreet, LLC, or one or more of its employees, including the writer of this report, may have a position in any of the securities discussed herein.
---
---This information is contained in a document called coca_cola_earnings_call_2023.pdf
All participants will be on listen-only mode until the formal question-and-answer portion of the call. I would like to remind everyone that the purpose of this conference is to talk with investors and, therefore, questions from the media will not be addressed. Media participants should contact Coca-Cola's Media Relations department if they have any questions.
. . .
---
</context>
User question: What is this call about?
Answer:
推理
generate() function is responsible for sending the prompt to the Gemini 1.5 Flash model and obtaining the generated response:
#This is the section where we submit the full prompt and
#context to the LLM
result = generate(prompt)
generate()函数封装了生成过程所需的配置和设置。它包括两个主要组件:generation_config和safety_settings。
generation_config字典指定了在生成过程中控制语言模型行为的参数。在这个例子中,提供了以下设置:
generation_config = {
"max_output_tokens": 8192,
"temperature": 0,
"top_p": 0.95,
}
来自 Google Gemini 的文档:
-
max_output_tokens: 响应中可以生成的最大标记数。一个标记大约是四个字符。100 个标记相当于大约 60-80 个单词。 -
temperature: 温度用于在响应生成过程中进行采样,这发生在应用top_p和top_k时。temperature控制了标记选择的随机程度。较低的温度值适用于需要较少开放或创造性的响应的提示,而较高的温度值可能导致更多样化或创造性的结果。温度为 0 表示始终选择概率最高的标记。在这种情况下,对于给定的提示,响应大多是确定性的,但仍可能存在少量变化。
温度为 0 表示模型将根据其训练数据选择最可能的标记,而较高的值会在输出中引入更多的随机性和多样性。
top_p: 此参数改变模型选择输出标记的方式。标记从最有可能到最不可能依次选择,直到这些标记的概率总和等于 top-p 值。例如,如果标记 A、B 和 C 分别具有 0.3、0.2 和 0.1 的概率,且 top-p 值为 0.5,那么模型将通过温度选择 A 或 B 作为下一个标记,并将 C 排除作为候选。
在这种情况下,它被设置为 0.95,这意味着在生成过程中只考虑概率最高的前 95%的标记。
除了上述内容之外,safety_settings字典指定了危害类别及其对应的阈值,用于从生成的输出中过滤可能有害或不适当的内容。在此示例中,提供了以下设置:
safety_settings = {
generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
}
这些设置指示 Gemini 1.5 Flash 模型仅阻止与仇恨言论、危险内容、色情内容和骚扰高度相关的有害内容。任何低于这些类别“高”危害阈值的任何内容都将允许在生成的输出中出现。
generate()函数创建了一个GenerativeModel类的实例,传递了MODEL参数;在此示例中,为 Gemini 1.5 Flash。然后它调用模型实例上的generate_content()方法,提供提示、生成配置和安全设置。stream=False参数表示生成应在非流模式下进行,这意味着整个响应将一次性生成并返回:
def generate(prompt):
model = GenerativeModel(MODEL)
responses = model.generate_content(
[prompt],
generation_config=generation_config,
safety_settings=safety_settings,
stream=False,
)
return(responses)
生成的响应存储在responses变量中,然后通过generate()函数返回。
通过将格式化的提示提交给 Vertex AI 的 Gemini 1.5 Flash API 端点,利用提供的生成配置和安全设置,此 RAG 管道可以获取一个针对用户查询的上下文化和相关响应,同时遵守指定的参数和内容过滤规则。
结果后处理
在收到语言模型的响应后,通常希望以更结构化和视觉上吸引人的格式展示输出。Markdown 是一种轻量级标记语言,允许你添加格式化元素,如标题、列表、代码块等。在此示例中,我们使用 Markdown 格式化来增强问题、答案和上下文的展示:
#In this section you can format the answer for example with markdown
formatted_result = f"###Question:\n{question}\n\n###Answer:\n{result.text}\n\n<details><summary>Context</summary>{context}</details>"
此格式化组件的分解如下:
"###问题:\n{question}"
此部分为问题部分添加了一个 3 级 Markdown 标题(###),随后是新的一行上用户的原始查询(({question})。
"\n\n###答案:\n{result.text}"
在该部分开头添加一个空行(\n\n)之后,此部分为答案部分创建了一个新的 3 级 Markdown 标题,随后是新的一行上语言模型生成的响应({result.text})。
"\n\n<details><summary>上下文</summary>{context}</details>"
此部分利用 Markdown <details> 和 <summary> 标签创建一个可折叠的显示从向量数据库检索到的上下文信息的部分。<summary>上下文</summary> 文本作为可折叠部分的标签,实际上下文文本({context})被包含在 <details> 标签内。
结果展示
IPython.display模块中的Markdown类是一个实用工具,允许你在 Colab 笔记本或其他 IPython 环境中显示格式化的 Markdown 内容。通过将formatted_result字符串传递给 Markdown 构造函数,你创建了一个 Markdown 对象,该对象可以通过display函数进行渲染:
display(Markdown(formatted_result))
当你调用display()时,笔记本将渲染formatted_result字符串中包含的 Markdown 格式化内容。这允许你在笔记本环境中利用 Markdown 的丰富格式化功能。
以下是我们演示的 Markdown 格式化输出示例:

图 8.2:Google Colab 笔记本中格式化结果截图
通过使用Markdown类和display函数,你可以在 Google Colab 笔记本环境中利用 Markdown 的格式化功能。这包括标题、粗体和斜体文本、列表、代码块、链接等功能。
渲染的输出将在笔记本单元格中显示,提供对问题、答案和上下文信息的视觉吸引力和良好结构化的表示。这可以极大地提高聊天机器人响应的可读性和可用性,使用户或开发者更容易理解和解释结果。
此外,在context部分使用的 <details> 和 <summary> 标签创建了一个可折叠部分,允许用户切换上下文信息的可见性。这在处理大量上下文数据时尤其有用,因为它可以防止主输出混乱,同时仍然提供轻松访问相关信息。
在下一节中,我们将通过用例演示深入探讨所有这些组件是如何协同工作的。
用例演示
以下是用 Gradio 构建演示的代码;在这种情况下,我们将使用一个额外的函数来执行 RAG 管道。当你运行此代码时,默认网络浏览器中会打开一个 Gradio 界面,显示三个主要部分:
-
金融科技助手标题
-
聊天机器人区域
-
文本输入框
用户可以在输入框中输入问题并提交。聊天功能将被调用,它将使用answer_question函数从向量数据库中检索相关上下文,使用 RAG 管道生成答案,并更新聊天机器人界面,显示用户的问题和生成的响应。
Gradio 接口为用户提供了一种用户友好的方式来与 RAG 管道系统交互,使其更容易测试和展示其功能。此外,Gradio 还提供了各种自定义选项和功能,例如支持不同的输入和输出组件、样式和部署选项。我们首先安装 Gradio:
#In this case we will use a Gradio interface to interact
#with the system
#Install Gradio
!pip install --upgrade gradio
接下来,我们定义两个辅助函数,这些函数基于之前解释的 generate() 函数:
import gradio as gr
def answer_question(query, db, number_of_results):
context = get_context(query, db, number_of_results)
answer = generate(prompt_template.format(query=query, context=context))
return(answer.text)
def chat(message, history):
response = answer_question(message,db, MAX_RESULTS)
history.append((message, response))
return "", history
answer_question(...) 函数接受三个参数:
-
query: 用户的提问 -
db: 向量数据库 -
number_of_results: 从数据库中检索的最大上下文结果数量
然后调用 get_context 函数(在提供的代码中未显示)以检索相关的上下文信息——基于用户的查询和指定的结果数量,从向量数据库中获取。检索到的上下文随后在 prompt_template 字符串中格式化,并传递给 generate 函数——如前几节所述——以获取答案。
函数执行结束时,生成的答案作为字符串返回。
chat(...) 函数接受两个参数:
-
message: 用户的提问 -
history: 表示对话历史的一个列表
然后调用 answer_question() 函数,传入用户的问题、向量数据库(db)和最大结果数量(MAX_RESULTS)。
生成的响应附加到历史列表中,包括用户的问题。函数返回一个空字符串和更新后的历史列表,该列表将用于更新聊天机器人界面。
Gradio 应用程序
定义了辅助函数后,我们现在可以创建 Gradio 接口:
with gr.Blocks() as demo:
gr.Markdown("Fintech Assistant")
chatbot = gr.Chatbot(show_label=False)
message = gr.Textbox(placeholder="Enter your question")
message.submit(chat, [message, chatbot],[message, chatbot] )
demo.launch(debug=True)
这段代码中发生的事情如下:
-
with gr.Blocks() as demo创建一个名为demo的 Gradio 接口块。 -
gr.Markdown(...)在聊天机器人界面中显示一个 Markdown 格式的标题。 -
gr.Chatbot(...)创建一个 Gradio 聊天机器人组件,该组件将显示对话历史。 -
gr.Textbox(...)创建一个文本输入框,用户可以在其中输入问题。 -
message.submit(...)设置一个事件处理器,当用户提交问题时会触发。它调用 chat 函数,传入用户输入(消息)和聊天机器人实例,并使用返回的值更新消息和聊天机器人组件。 -
demo.launch(...)以调试模式启动 Gradio 接口,允许您与聊天机器人交互。
请参阅本章的 GitHub 目录,以获取演示上述所有部分如何组合在一起的完整代码。
摘要
在本章中,你探索了一种集成模式,它结合了 RAG 和生成 AI 模型,以构建一个能够根据文档语料库回答问题的聊天机器人。你已经了解到 RAG 利用了检索系统和生成模型的优势,使系统能够从现有的知识源中检索相关上下文并生成上下文响应,防止幻觉并确保准确性。
我们提出了一种基于谷歌云的无服务器、事件驱动的架构。它包括一个用于接受用户查询的摄取层,一个用于存储嵌入的文档语料库管理层,一个与 Vertex AI 上的谷歌 Gemini 集成的 AI 处理层,以及监控和日志组件。入口点处理各种输入模式,如文本、音频和图像,并根据需要预处理它们。
你已经了解到 RAG 管道的核心涉及从用户查询生成嵌入,在向量数据库上执行向量相似性搜索(在这个例子中,我们使用了 Chroma DB),检索相关上下文,将其格式化为带有指令的提示,并将其提交给 Vertex AI 上的 Gemini 模型。生成的响应可以后处理,用 Markdown 格式化,并使用 Gradio 等工具在用户友好的界面中展示。
现在,你已经获得了关于实现强大的基于 RAG 的聊天机器人系统的宝贵见解。你已经学会了如何结合检索和生成技术,以提供上下文丰富、无幻觉的响应,利用向量数据库通过内容嵌入进行语义搜索。本章为你提供了改进检索结果和通过提示调整定制用户体验的策略。这些技能将使你能够增强你组织提供准确和上下文化响应的能力,有效地利用现有的文档存储库和生成 AI 的力量。
加入我们的 Discord 社区
加入我们社区的 Discord 空间,与作者和其他读者进行讨论:
packt.link/genpat

第九章:操作化生成式 AI 集成模式
在前面的章节中,我们探讨了各种利用生成式 AI(GenAI)模型(如 Vertex AI 上的 Google Gemini)的集成模式。我们讨论了根据目标业务用例开发生产级企业架构。在本章中,我们将深入讨论在将您的生成式 AI 集成作为生产级应用操作时需要考虑的最佳实践。随着我们从概念设计过渡到实际应用,可扩展性、可靠性和可维护性等操作挑战将浮出水面。简而言之,在本章中,我们将涵盖以下主题:
-
操作化生成式 AI 集成模式的介绍
-
适用于生成式 AI 操作的四层框架
-
数据层:
-
数据质量和预处理
-
数据安全和加密
-
数据治理和版本控制
-
监管合规性(例如,GDPR 或 HIPAA)
-
伦理考量与偏差缓解
-
-
训练层:
-
模型适应策略(少样本学习、微调和完整训练)
-
模型治理和政策制定
-
性能指标和监控
-
偏差检测和缓解
-
可解释人工智能(XAI)技术
-
-
推理层:
-
可扩展性和性能优化
-
安全性和访问控制
-
模型部署策略(例如,金丝雀和蓝绿部署)
-
边缘和分布式推理
-
-
运营层:
-
持续集成和持续部署(CI/CD)用于生成式 AI
-
MLOps 最佳实践
-
监控和可观察性:
-
使用“黄金提示”进行评估和监控
-
警报系统
-
分布式跟踪
-
完整的日志记录实践
-
成本优化策略
-
-
-
真实世界的例子:AI 驱动的语言翻译服务
-
在所有四层中实施
-
在示例背景下每个层的具体考量
操作化框架
在生成式 AI 快速发展的领域中,拥有一个结构化的方法来操作您新创建的应用至关重要。我们将探讨的操作框架由四个相互关联的层组成:数据、训练、推理和运营。这些层共同为在应用中有效利用生成式 AI 模型潜力提供了一个全面的蓝图。在以下列表中,我们将简要介绍这四个相互关联的层:
- 数据层:任何成功的生成式 AI 应用的基础在于数据的质量和数量。这一层包括数据速度、整理、提示和训练数据预处理以及整体数据管理。
从训练的角度来看,确保数据的相关性、多样性和对目标领域的代表性至关重要。蒸馏和过滤等技术对于提高训练数据质量起着至关重要的作用。从推理的角度来看,正如前几章所述,了解你的数据速度将帮助你定义最适合你的数据的应用模式:批量处理还是实时处理。
-
训练层:一旦数据准备就绪,训练层就专注于模型训练或微调的复杂过程。这一层包括选择合适的训练架构、超参数调整,并利用迁移学习、少样本学习或自监督学习等前沿训练技术。有效管理资源,包括利用分布式训练和硬件加速,对于优化训练或微调过程至关重要。
-
推理层:在模型训练或微调完成后,推理层开始发挥作用。这一层包括在生产环境中部署和提供 GenAI 模型。可扩展性、延迟和资源优化是关键考虑因素。可以采用高级技术,如模型量化、剪枝和蒸馏,以优化模型性能和内存占用,确保大规模高效推理。
-
操作层:操作层专注于对部署的通用人工智能(GenAI)应用的持续监控、维护和改进。这一层包括模型监控、性能跟踪和模型重新训练流程等任务。强大的日志记录和事件管理流程对于确保应用程序的可靠性和弹性至关重要。此外,这一层还处理诸如模型治理、伦理考虑和法规遵从等关键方面。
通过理解和有效实施这个操作化框架的每一层,组织可以释放通用人工智能应用的全部潜力,推动创新并交付卓越的用户体验。在这些层次之间实现无缝集成和协作是实现成功和可扩展的通用人工智能应用的关键。
这四个层次相互依存。要对模型进行推理,你必须使用精心挑选的数据对其进行训练或微调。下方的图 9.1突出了这些层次之间的关系。
注意,操作层跨越所有层次,为你提供了一个强大的框架来部署企业级应用:

图 9.1:四个生产化层次之间的相互依赖关系
在以下章节中,我们将深入探讨这个生产化框架的四个层次中的每一个。让我们从数据层开始。
数据层
数据层是构建您的通用人工智能系统的基石。这不仅仅是拥有数据;这是关于有效管理数据,以确保信息的质量、安全和道德使用。强大的数据管理流程是不可或缺的。您的通用人工智能系统的好坏取决于它们所交互的数据。例如,如果没有足够的信息背景,大型语言模型(LLMs)可能会产生幻觉,过多的噪声可能导致模型在中间丢失信息,正如文档《迷失在中间:语言模型如何使用长上下文》中所述(arxiv.org/abs/2307.03172)。因此,您需要做出有意识的努力来构建和扩展您的数据管道(RAG 和微调),以提供正确级别的细节和内容,以增强您的通用人工智能模型的能力。
我们将概述在准备您的数据时需要考虑的高级组件:
-
数据质量:实施严格的程序来清理、验证和预处理您的数据。这包括处理缺失值、异常值、不一致性和潜在的偏见。
-
数据安全:保护您的数据免受未经授权的访问和滥用。加密(静态和传输中)、访问控制和定期安全审计是至关重要的。请记住,您的训练数据通常包含需要最高级别保护的秘密信息。
-
数据治理:跟踪您的数据集、模型以及用于生成的提示的变化。版本控制让您能够重现过去的结果,追踪系统的发展,并更有效地解决问题。在处理合规性和审计时,这一点尤为重要。
-
合规性:了解与您的行业和您处理的数据类型相关的法律环境。例如,在通用数据保护条例(GDPR)的情况下,如果您处理的是欧盟公民的数据,您必须遵守关于数据收集、处理和存储的严格规则;或者在医疗保健领域的健康保险可携带性和问责法案(HIPAA),患者数据保护至关重要。
-
道德考量:超越法律条文和不断演变的法规。解决算法偏见、确保公平性以及透明地说明您的通用人工智能系统如何使用数据,对于建立用户信任和避免意外的负面后果至关重要。
-
云数据丢失预防(DLP):这项服务帮助您在 Google Cloud 资源中发现、分类和保护敏感数据。它可以自动删除个人身份信息(PII)或提醒您潜在的数据泄露。
-
云身份和访问管理(IAM):对谁可以访问什么数据进行细粒度控制是必不可少的。IAM 让您可以非常精确地定义角色和权限。
真实世界的例子:第一部分
让我们通过一个例子来探讨一下。想象一下,你正在构建一个用于辅助医生进行诊断的 GenAI 应用程序。你的数据层需要你考虑以下因素:
- 数据质量:仔细清理和去标识患者记录,以移除个人信息同时保留数据的医学相关性。这个过程通常包括消除直接标识符(如姓名和地址)、泛化某些信息(例如将确切年龄转换为年龄范围),并仔细审查自由文本字段中可能存在的识别细节。
目标是在保持数据完整性和有用性的同时,最大限度地降低重新识别的风险。一个例子是将包含姓名、确切年龄和具体位置的详细患者记录转换为去标识化的版本,带有编码的 ID、年龄范围和泛化的地区。
-
数据安全:始终加密患者数据,实施严格的访问控制,并可能使用 Google Cloud 的 DLP 来检测和保护敏感的健康信息。
-
数据治理:遵守 HIPAA 法规,记录所有数据处理活动,并积极解决推理上下文数据中可能存在的偏见,这些偏见可能导致错误的诊断。
训练层
训练层是 GenAI 模型学习如何在客户面前表现的地方,从精选的数据中学习,获取生成有意义输出的所需技能。但这不仅仅是训练;它还涉及到治理、监控、理解和持续改进这些模型。模型治理对于构建可信赖的 AI 是必要的。以下是一些需要考虑的关键策略:
-
明确的政策和指南:建立一个框架,定义模型如何开发、部署、监控和更新。解决公平性、透明度和问责制等伦理问题。记录你的模型选择、超参数调整和数据处理的决策过程。
-
负责任的 AI 实践:实施检测和减轻训练数据和模型输出中潜在偏见的技术的措施。定期评估你的模型对不同用户群体和利益相关者的影响。考虑使用多元化的团队来评估和审计你的模型。
-
人工审核:设计工作流程,允许人工审核人员对模型输出提供反馈和纠正错误,尤其是在医疗或金融等高风险应用中。这有助于你建立一个安全网,并持续改进模型性能。
此外,我们需要将模型视为不是静态的代码片段;它们需要持续的关怀和关注。随着时间的推移,您将看到模型性能的漂移,这是正常的,因为模型在训练时没有看到的新数据现在可用。与传统的机器学习模型相比,LLMs 现在的重大优势是它们在推理时能够非常高效地处理大量信息。这开辟了我们可以用来增强模型性能的新机制,而无需完全重新训练模型:
-
少量样本学习解决了训练每个任务类别仅使用少量示例的 AI 模型的挑战。模型不是记住特定的数据点,而是专注于学习如何识别示例之间的相似性和差异性。这使得它能够根据其从少量信息中“学习学习”的能力,泛化到新的、未见过的类别。这在获取大量标记数据困难或昂贵的情况下特别有用。这种“学习”是在推理时进行的,这意味着您将这些示例添加到提示本身中。
-
微调解决了将预训练语言模型适应特定任务或领域挑战的问题。与在推理时发生的少量样本学习不同,微调涉及在目标数据集上的额外训练。这个过程允许模型调整其参数,并在特定领域专业化,同时不失其广泛的语料库理解。通过教授模型相关的词汇、上下文和细微差别,微调可以显著提高在特定领域任务上的性能,例如医学文本分析或法律文件处理。当您拥有一定数量的特定任务数据,并希望创建一个比通用提示技术表现更佳的更专业化的模型时,这种方法尤其有价值。最近的发展引入了高效的微调方法,如低秩适应(LoRA),通过在每个层中添加小的、可训练的秩分解矩阵来减少可训练参数的数量。其他技术,如前缀调整(在输入前添加可训练参数)、提示调整(优化一组连续的任务特定向量)和 AdapterHub(在现有层之间引入小的、可训练的模块),提供了以最小计算开销适应模型的替代方法。这些方法使 LLMs 的更有效和灵活的适应成为可能,使微调更加易于访问和资源友好。特别是使用这些高效技术,微调在从头开始训练模型这一资源密集型过程和使用通用模型进行专用应用的限制之间找到了平衡。
-
完全训练 LLMs 涉及从头开始训练语言模型或显著修改现有模型的所有层参数的综合过程。这种方法需要大量多样化的文本数据和大量的计算资源,包括高性能的 GPU 或 TPUs。与微调不同,微调是为特定任务调整预训练模型,而完全重新训练旨在创建具有广泛语言理解和生成能力的模型。这种方法允许将新知识、语言或结构变化纳入模型架构。
当开发针对现有大型语言模型(LLMs)中未得到良好代表的语言或领域模型时,或者当旨在减少预训练模型中存在的偏差时,这尤其有用。完全重新训练还允许将新颖的训练技术,如宪法 AI 或高级提示工程方法,纳入训练过程。然而,巨大的计算成本、时间要求以及引入新偏差或错误的可能性使得完全重新训练成为一项具有挑战性的任务,通常由大型科技公司或资源丰富的研究机构承担。
在确定了可用于特定任务训练 LLMs 的选项之后,我们的重点现在转向确保这些模型表现最优并满足我们的期望。这包括:
-
性能指标,对于衡量模型的质量、准确性和效率至关重要。定义和跟踪相关指标,监控模型漂移和意外行为的迹象是至关重要的。为了解决这个问题,考虑实施自动监控系统,这些系统随着时间的推移跟踪关键性能指标,使用 A/B 测试比较模型版本,采用交叉验证和自助法技术评估模型稳定性,对基准数据集进行定期重新评估以检测漂移,以及使用置信度评分来识别模型对其预测不确定的情况。
-
偏差检测,另一个关键方面,可以通过利用公平性指标(如人口统计学对等性和平等机会)来实现,这些指标在训练期间实施对抗性去偏技术,使用后处理方法调整模型输出以实现公平性,使用多样化的测试集进行定期审计,以及采用如反事实公平性等技术来评估和减轻隐藏的偏差。
-
幻觉检测,它解决了 LLMs 产生看似合理但实际上错误的内容的挑战。为了应对这一挑战,考虑实施事实核查算法,这些算法将模型输出与受信任的知识库进行交叉引用,使用集成方法比较多个模型的输出,采用不确定性量化技术,实施人机交互系统用于关键应用,以及使用困惑度分数或其他统计指标来检测异常或可能幻觉的内容。
-
可解释人工智能(XAI)技术,这对于理解模型为何做出特定预测、建立信任和识别潜在问题至关重要。该领域的选项包括实施局部可解释模型无关解释(LIME),它为输入空间中的局部区域创建可解释模型,或者SHapley 加性解释(SHAP),它使用博弈论为特征分配重要性值以进行特征重要性分析,采用注意力可视化技术,使用反事实解释,实施概念激活向量以理解模型学习的高级概念,以及使用层级相关性传播来追踪每个输入对最终预测的贡献。
真实世界的例子:第二部分
为了说明我们讨论的概念的实际应用,让我们考虑一个旨在处理客户咨询的 GenAI 聊天机器人。这个例子展示了模型训练、治理、监控和改进的各个方面如何在现实世界的应用中结合起来:
-
模型适应策略:为了使我们的客户服务聊天机器人保持有效并保持相关性,考虑将模型适应于新信息或变化的需求至关重要。为此,我们需要根据企业特定的需求和预期变化性质选择最合适的方法。在这里,我们探讨了三种主要策略——少样本学习、微调和全面训练——每种策略都适用于不同的模型适应场景:
-
少样本学习:这种方法非常适合快速适应新的客户咨询类型或产品更新。例如,如果你的公司推出了一款新产品,你可以在提示中为聊天机器人提供一些与产品相关的问题和答案的示例。然后,聊天机器人可以从这些示例中推广,以处理关于新产品的更广泛范围的查询。这种方法快速,不需要任何模型重新训练,因此适合快速响应不断变化的企业需求。然而,对于更复杂或细微的变化,其有效性可能有限。具体的局限性包括难以处理需要深层上下文的问题,不同类型问题的表现不一致,随着主题的增加存在可扩展性问题,可能过度拟合提供的示例,以及无法保留先前交互中的信息。
-
微调:当您有大量新数据或需要将聊天机器人适应到客户服务模式的重要转变时,微调成为一种有价值的选项。例如,如果您的公司进入了一个具有不同文化规范和客户期望的新市场,您可以在特定于该市场的交互数据集上微调聊天机器人。这允许模型调整其语言使用和响应风格,同时保留其一般知识。考虑使用高效的微调方法,如 LoRA,以减少计算需求。
-
全面训练:对于预存聊天机器人来说,全面训练可能不太常见,但如果公司对客户服务的方法有根本性的转变,或者原始模型被发现存在重大限制或偏见,则可能考虑全面训练。例如,如果公司决定完全改造其产品线并改变客户互动方式,或者如果它希望从头开始构建一个与独特品牌声音和价值观深度一致的聊天机器人,全面训练可能是最佳方法。这种方法允许从底层整合公司特定的知识和互动风格,但需要大量的计算资源和高质量的大型数据集。
-
在实践中,这些方法的组合通常会产生最佳结果。您可能使用少量样本学习进行日常适应,安排定期的微调会议(例如,每月或每季度一次)以整合积累的新数据,并保留全面训练用于重大改造。通过战略性地运用这些不同的适应方法,您可以确保您的客户服务聊天机器人保持最新、有效,并与您的业务目标保持一致,同时高效地管理计算资源。
一旦我们选择了并实施了最合适的适应策略,我们将确保这些变化有效地整合到聊天机器人的持续运营中,如下所述:
-
模型治理:为聊天机器人的运营建立一个全面的框架。这包括定义语气指南,确保其与品牌身份和客户期望保持一致。制定一套明确的可接受响应,并为需要人工干预的复杂查询创建升级程序。定期审查对话记录,以确保遵守道德标准并保持高客户满意度。记录模型选择、超参数调整和数据处理的决策过程。在聊天机器人的交互中解决公平性、透明度和问责制等道德问题。考虑使用多元化的团队来评估和审计模型,确保在治理过程中考虑广泛的视角。
-
模型监控:实施一个强大的系统来跟踪关键性能指标。这包括响应准确性(聊天机器人提供正确和有用信息的频率)、解决时间(客户查询解决的快速程度)和客户情绪(通过后交互调查或客户响应的情感分析来衡量)。利用像 Vertex AI 模型监控这样的工具来检测用户行为或数据模式的变化,这些变化可能会影响聊天机器人的性能。实施自动监控系统以跟踪这些关键性能指标随时间的变化。使用 A/B 测试比较聊天机器人的不同版本并检测性能变化。采用交叉验证和自助抽样技术来评估模型稳定性。在基准数据集上实施定期再评估,以检测性能或意外行为的漂移。
-
偏差检测与缓解:定期评估聊天机器人针对不同用户群体的性能,以确保公平和均衡的服务。利用公平性指标,如人口统计学上的平等和均等机会。在训练期间实施对抗性去偏技术以减少固有偏差。使用后处理方法调整模型输出以实现公平。使用多样化的测试集进行定期审计,以识别响应或处理不同客户群体中可能存在的偏差。
-
幻觉检测:实施交叉验证聊天机器人响应与公司政策及产品信息可信知识库的事实核查算法。使用集成方法比较多个模型版本的输出。采用不确定性量化技术标记模型可能不太自信的响应。在关键查询或检测到潜在幻觉时实施人机交互系统。使用困惑度分数或其他统计指标来识别聊天机器人响应中的异常或不正确内容。
-
可解释人工智能(XAI):实施理解并解释聊天机器人决策过程的技术。使用 LIME 或 SHAP 进行特征重要性分析,以了解哪些客户查询的部分对生成响应最有影响力。采用注意力可视化技术来查看模型关注的单词或短语。使用反事实解释来了解不同输入如何改变聊天机器人的响应。这不仅有助于调试,还有助于培训客户服务代表与 AI 系统协同工作。
-
模型更新与持续学习:为聊天机器人对新客户交互和反馈进行训练建立定期计划。这使它的知识库保持最新,并提高其处理多样化查询的能力。
利用少量学习技术快速适应新的客户查询类型或产品更新,而无需全面重新训练。考虑定期对最近的高质量交互进行微调,以保持最佳性能。实施一个反馈循环,让客户服务代表可以标记不正确或次优的响应,为未来的改进提供宝贵的数据。
通过投资模型管理、监控和持续改进的这些方面,你将构建一个不仅强大而且负责任、可靠,并能适应客户和业务不断变化需求的 GenAI 聊天机器人。这种全面的方法确保你的 AI 驱动的客户服务解决方案始终是你客户参与策略中宝贵、值得信赖和有效的工具。
推理层
推理层是 GenAI 模型变得生动的地方,它将输入数据实时转换为有意义的输出。这一层对于向最终用户提供价值并将 AI 能力集成到你的应用程序和业务流程中至关重要。然而,大规模部署和管理 GenAI 模型带来了独特的挑战,需要仔细考虑和规划:
-
可扩展性和性能优化:在设计你的 GenAI 系统时,要考虑到可扩展性,利用云提供商提供的无服务器和自动扩展功能。这确保了你的基础设施可以动态调整以适应不同的工作负载,在优化成本的同时保持性能。实施负载测试和容量规划流程,以确保你的系统可以处理预期的流量模式和需求激增。这种主动方法有助于防止中断并保持无缝的用户体验。为了进一步优化资源利用并有效管理成本,探索请求批处理、缓存和负载削减等技术。请求批处理可以通过一起处理多个请求来显著提高吞吐量,而缓存频繁访问的结果可以减少不必要的模型调用。负载削减机制可以在极端流量激增期间优雅地降低服务级别,确保关键功能保持运行。考虑实施排队和缓冲机制来处理流量激增,防止你的 GenAI 模型或下游组件过载。这种方法有助于平滑不规则的流量模式并确保一致的性能。此外,采用模型量化精简等技术来降低模型的计算需求,同时不会显著影响其准确性。
-
安全与访问控制:实施强大的安全措施以保护您的生成人工智能系统免受未经授权的访问、数据泄露和其他安全威胁。鉴于人工智能模型处理数据的敏感性,这一点尤为重要。利用云平台提供的身份和访问管理(IAM)功能来控制对您的生成人工智能资源的访问并强制执行最小权限原则。这确保用户和系统只有执行其所需任务所需的权限。实施安全的通信渠道和加密机制以保护数据在传输和静止状态下的安全。这包括对所有 API 端点使用 HTTPS、加密存储在数据库或文件系统中的数据,以及实施适当的关键管理实践。定期审查和更新您的安全政策和程序以应对新兴的威胁和漏洞。这可能涉及定期进行安全审计、执行渗透测试,并了解人工智能领域的最新安全最佳实践。
-
监控和可观察性:实施全面的监控和可观察性解决方案,以获得对您的生成人工智能系统性能、健康和用法模式的实时洞察。这包括跟踪关键指标,如推理延迟、吞吐量、错误率和资源利用率。使用分布式跟踪来了解请求通过您系统的流程,并识别瓶颈或不效率。设置警报机制,以便及时通知您的团队任何异常或性能问题。这允许在潜在问题影响最终用户之前快速响应和缓解。考虑在您的推理层中实施 A/B 测试功能,以比较不同模型版本或配置在实际场景中的性能。
-
合规与治理:确保您的推理层遵守相关的监管要求和行业标准。这可能包括实施数据保留政策、维护模型预测的审计日志,以及提供人工智能决策过程中的可解释性和透明度机制。制定清晰的模型部署、版本控制和回滚的政策和程序。这有助于保持您人工智能服务的连贯性和可靠性,同时允许快速迭代和改进。实施强大的持续集成/持续部署(CI/CD)管道,包括自动化测试、安全扫描和性能基准测试,以确保只有高质量的、安全的模型版本被部署到生产环境中。
-
边缘和分布式推理:考虑在低延迟或离线操作至关重要的场景中实施边缘推理能力。这可能涉及将您的模型优化版本部署到边缘设备或实施混合云-边缘架构。探索联邦学习和分割推理等技术,以在分布式人工智能系统中平衡隐私、性能和资源限制。
通过在您的推理层全面解决这些方面,您将构建出不仅强大且高效,而且安全、可扩展和可靠的生成人工智能系统。这种全面的方法确保了您的 AI 解决方案能够为用户提供持续的价值,同时适应 AI 动态领域不断变化的需求和新兴挑战。
真实世界的例子:第三部分
让我们来看一个例子,您的公司部署了一个先进的 AI 驱动的语言翻译服务,该服务旨在提供跨多种语言的实时、高质量翻译,适用于文本、语音和视频内容。这项基于云的服务面向多样化的用户群体,包括企业、政府机构和全球个人,其使用模式在一天中以及不同地区之间差异很大。
该服务部署在具有自动扩展能力的无服务器架构的云平台上,以确保可扩展性和优化性能。这种基础设施允许系统在需求高峰期自动扩展,例如重大国际事件期间,通过按需启动额外的推理实例。对于文本翻译,实现了请求批处理,通过单个模型推理处理多个短翻译以提高吞吐量。频繁请求的翻译被缓存以减少模型调用。对于视频翻译,一个排队系统管理大型翻译作业,确保公平的资源分配并防止系统过载。在需要超低延迟的场景中,可以直接将优化模型部署到边缘设备,实现离线翻译功能。
安全性和访问控制是该服务设计的基本要素。所有 API 请求都需要强大的身份验证,不同用户层级有不同的访问级别。通过加密确保数据保护,无论是在传输中还是在静止状态下。基于角色的访问控制(RBAC)允许企业客户精细管理用户权限。一个专门的安全运营中心监控异常模式或潜在的入侵尝试,使用 AI 驱动的异常检测系统来维护强大的安全性。
已实施全面的监控和可观察性系统,以维护服务的性能和可靠性。运维团队使用定制的仪表板显示关键指标,如翻译延迟、准确度评分以及不同语言对和内容类型中的资源利用率。分布式跟踪允许对每个翻译请求进行端到端跟踪,从而快速识别瓶颈或错误。通过 A/B 测试,新模型版本逐步推出,性能始终与当前生产模型进行比较。为各种阈值设置了自动警报,以确保对任何问题都能及时关注。
合规性和治理是该服务运营的核心。实施了严格的数据保留政策,以符合隐私法规,翻译后的用户内容在未明确要求保留的情况下将自动删除。为了合规和计费目的,维护了详细的翻译日志(仅包含元数据,不包含内容)。一个严格的审批流程管理着新模型版本的部署,包括对准确性、偏差和性能的自动化测试。一个可解释性功能可用,突出显示哪些输入部分对翻译输出影响最大,增强了透明度和信任。
该服务的架构集成了边缘和分布式推理能力。为满足对数据主权要求严格的客户,提供本地化解决方案。轻量级版本作为 SDK 提供给移动应用开发者,即使在离线状态下也能提供基本的翻译功能。为了提高罕见语言或特定领域的翻译质量,实施了一个联邦学习系统,允许模型从用户更正中学习,而无需集中收集敏感数据。
该服务保持了一个持续改进的周期。每日自动脚本来分析性能指标和用户反馈。每周对汇总的性能数据进行审查,优先改进最常用的语言对和内容类型。每月进行 A/B 测试以更新模型,成功的改进逐步推出。每季度进行全面的网络安全审计和渗透测试,确保系统对不断发展的威胁保持稳健。
这种多方面的推理层方法确保了 AI 翻译服务始终保持高度可用性和性能,能够处理全球规模,并实现一致的低延迟翻译。该服务安全合规,满足企业客户和监管机构的高要求。它还具有可观察性和适应性,能够快速识别和解决问题,以及持续改进。凭借其边缘能力和分布式学习,该服务能够适应不断变化的市场需求和科技进步,使其成为自然语言处理动态领域中的一个灵活且未来证明的解决方案。
运营层
运营层构成了一个强大且高效的通用人工智能(GenAI)系统的骨架,确保其平稳运行、可靠性和成本效益。这一层包括使 AI 模型在生产环境中持续改进、监控和优化的关键流程和工具。
通过关注 CI/CD 和 MLOps、监控和可观察性以及成本优化,操作层弥合了开发和生产之间的差距,使组织能够在适应不断变化的需求的同时,有效地管理资源并保持高性能 AI 系统。精心设计的操作层对于扩展 AI 解决方案、确保其可靠性和最大化 GenAI 技术的投资回报至关重要。该层的核心是 CI/CD 管道,它简化了集成新代码和无缝部署更新模型的过程。让我们更详细地看看这一点。
CI/CD 和 MLOps
采用 DevOps 原则和实施 CI/CD 管道对于简化 GenAI 系统的开发、测试和部署至关重要。这种方法确保了对 AI 模型、支持基础设施和应用代码的更改得到有效且可靠的集成、测试和部署。通过利用 Cloud Build、Artifact Registry 和 Cloud Deploy 等工具,组织可以自动化构建、测试和部署过程,显著减少人为错误并加速新功能和改进的交付。为了最大限度地提高 GenAI 系统的效率和可靠性,应在 CI/CD 和 MLOps 中实施几个关键实践:
-
健壮的 CI/CD 管道:GenAI 系统应包括涵盖单元测试、集成测试和端到端测试的自动化测试框架。单元测试关注系统的单个组件,如特定函数或模块。集成测试验证系统的不同部分是否正确协同工作,而端到端测试模拟实际使用场景,以确保整个系统按预期运行。这些全面的测试策略对于维护 GenAI 系统的可靠性和正确性至关重要,尤其是在 AI 模型行为复杂且往往不可预测的情况下。
-
模型部署:为了最小化停机时间并降低引入破坏性变更的风险,组织应考虑实施高级部署策略,例如金丝雀部署和蓝绿部署。金丝雀部署涉及在向整个系统推出之前,先将新版本发布给一小部分用户或服务器,以便进行实际测试,并在发现问题后轻松回滚。蓝绿部署维护两个相同的生产环境,在它们之间切换以发布,这可以实现即时回滚和零停机时间更新。组织还应考虑实施功能标志,以便对新功能或模型版本的推出进行精细控制。
-
版本控制:公司应实施通用人工智能系统所有方面的版本控制,包括模型版本、训练数据、超参数和应用代码。这使可追溯性和可重复性成为调试、审计和合规性的基本要求。
-
模型监控和重新训练管道:这些管道应自动跟踪模型性能指标,检测数据分布或模型准确性的漂移,并在必要时触发重新训练过程。这确保了人工智能模型随着时间的推移保持准确性和相关性,适应不断变化的数据模式和用户行为。
-
数据版本控制和血缘追踪:通过维护每个模型版本所使用数据的清晰记录,组织可以确保可重复性和便于调试模型行为。这在模型决策可能需要审计或解释的监管行业中尤为重要。
最后,组织应专注于在数据科学家、机器学习工程师和运维团队之间营造一种协作文化。这包括建立清晰的沟通渠道、对整个机器学习生命周期的共同责任,以及持续的知识共享。对事故和成功部署的定期事后分析可以帮助团队识别改进领域,并随着时间的推移完善他们的 MLOps 实践。
通过实施这些全面的 CI/CD 和 MLOps 实践,组织可以显著提高其通用人工智能系统的可靠性、效率和有效性。这种方法不仅加快了开发和部署周期,还确保了在数据和使用需求不断变化的情况下,人工智能模型保持准确性、安全性和与业务目标的一致性。
监控和可观测性
在通用人工智能系统快速发展的领域中,保持对模型性能和行为的清晰视图至关重要。监控和可观测性为您提供了对 AI 运营的视角,提供了关于系统健康、性能指标和潜在问题的关键见解。本节深入探讨了确保您的通用人工智能模型以最高效率运行的关键组件,同时允许快速识别和解决问题。我们将探讨评估和监控技术以跟踪模型性能,警报系统以及时通知异常,分布式跟踪以理解复杂的系统交互,以及全面的日志记录实践以维护系统行为的详细记录。这些元素共同构成了一个强大的框架,用于维护对通用人工智能系统的监督,使主动管理和持续改进成为可能。
评估和监控
确保与生成式人工智能能力集成的应用程序可靠且高效地运行至关重要。全面的监控和可观察性解决方案在实现这一目标中发挥着关键作用,为这些系统的性能、健康和可靠性提供宝贵的见解。通过利用 Google Cloud 强大的监控和可观察性工具,如 Cloud Monitoring、Cloud Logging 和 Cloud Operations,组织可以实时了解其生成式人工智能系统的内部运作。
下面是关于建立监控结果和检测模型更新引入的变化的机制的扩展叙述,包括仪表化、自动批量处理以及利用大型语言模型或其他技术的细节。
监控生成式人工智能系统的一个基本方面是建立一种稳健的机制来监控结果并检测模型更新引入的变化。这种积极主动的方法可以帮助组织提前发现潜在问题,并确保其生成式人工智能系统的持续可靠性和准确性。
这一监控机制的核心是“黄金提示”的概念——精心设计的提示,代表生成式人工智能系统的典型用例或场景。这些提示应与主题专家和利益相关者合作设计,确保它们涵盖多样化的背景、复杂性和预期行为。
为了使这一监控过程得以实施,组织可以利用自动批量处理技术。通过设置计划任务或工作流程,这些黄金提示可以定期和系统地提交给生成式人工智能模型,并将产生的输出捕获和分析,以检测任何偏差或异常。
通过利用评分者大型语言模型或其他自动评估和评分技术,这种分析可以进一步得到增强。评分者大型语言模型可以被微调以评估生成式人工智能模型生成的响应的质量、连贯性和正确性,从而提供性能的定量衡量,并标记任何与预期输出显著偏离的情况。
或者,组织可以采用其他评估技术,例如利用人工评分者或众包平台手动评估生成式人工智能模型输出的质量。虽然这种方法资源消耗更大,但它可以提供宝贵的见解,并从人类视角了解模型的表现。
一个有趣的方法是由Chatbot Arena平台(见论文arxiv.org/html/2403.04132v1)实施的,该方法引入了一种基于人类偏好的评估 LLM 的新方法。与依赖于静态数据集和事实评估的传统基准不同,Chatbot Arena 利用了众包的成对比较方法。这种方法旨在通过直接将用户偏好纳入现实世界的开放性任务中,捕捉 LLM 的细微和多样化的方面。
Chatbot Arena 的核心是一个交互式网站,用户可以在该网站上提交问题并从两个匿名的 LLM(大型语言模型)那里获得回应。在审查回应后,用户会对提供最佳答案的模型进行投票。这一投票过程是匿名的且随机的,确保了无偏见的评估环境。通过收集来自不同用户群体的成对比较,Chatbot Arena 可以收集丰富的用户提示和人类偏好的数据集,准确反映现实世界 LLM 的应用。
为了根据众包数据可靠地排名 LLM,Chatbot Arena 采用了一套强大的统计技术。这包括 Bradley-Terry 模型和 Vovk 和 Wang 提出的 E-values,使平台能够尽可能可靠和高效地估计模型排名。此外,该平台还结合了专门设计的有效采样算法,以加速排名的收敛同时保持统计有效性。
监控机制还应包含全面的日志记录和审计功能,不仅记录提示、回应和评估分数,还包括元数据,如模型版本、输入数据源以及其他任何相关的上下文信息。这些数据对于根本原因分析、调试以及维护 GenAI 系统性能的全面审计记录至关重要。
此外,组织可以将此监控机制与其现有的警报和通知系统集成,确保任何重大的偏差或异常都能及时标记并传达给适当的团队进行调查和补救。
通过建立一个利用黄金提示、自动化批量处理和高级评估技术(如评分 LLM 或人类评分员)的强大监控机制,组织可以领先于由模型更新引入的潜在问题。这种主动方法不仅增强了 GenAI 系统的可靠性和准确性,而且增强了利益相关者和最终用户的信心,因为他们可以确信系统的性能是持续监控的,任何偏差都会得到及时解决。
警报
在此背景下,警报机制是必不可少的,它可以使相关团队在出现任何问题或异常时得到通知。这些警报可以根据预定义的阈值或条件进行配置,例如错误率、延迟或资源利用率的突然激增。通知可以通过各种渠道发送,包括电子邮件、消息平台或专门的故障管理工具,确保适当的团队能够及时得到通知并采取措施减轻问题。
分布式追踪
分布式追踪是另一种强大的技术,可以帮助监控和调试生成式人工智能(GenAI)系统。通过在应用程序中应用遥测数据,组织可以追踪请求在系统不同组件中流动的路径。这种端到端的可见性在诊断性能问题、识别瓶颈或调试复杂、分布式系统中的错误时非常有价值。在生成式人工智能(GenAI)的背景下,分布式追踪变得尤为重要,因为 AI 管道通常具有复杂和相互关联的特性。它允许团队:
-
可视化请求流程:追踪提供了请求如何通过各种服务、API 和参与 AI 推理或训练过程的微服务传播的清晰图景。
-
识别延迟问题:通过分解每个组件花费的时间,追踪有助于确定延迟发生的位置,无论是在数据预处理、模型推理还是后处理步骤中。
-
检测异常:在追踪数据中的异常模式可以突出显示潜在问题,在它们升级为重大问题之前,从而实现主动的系统管理。
-
优化资源分配:了解不同组件的资源消耗有助于微调资源分配并提高整体系统效率。
-
调试复杂场景:在涉及多个 AI 模型或复杂决策树的场景中,追踪有助于了解请求的精确路径以及每一步所做的决策。
-
确保数据可追溯性:追踪可以追踪数据在系统中的流动,确保符合数据治理政策,并有助于审计。
通过利用分布式追踪,组织可以更深入地了解其生成式人工智能(GenAI)系统的行为,从而实现更稳健、高效和可靠的 AI 应用程序。
记录日志
应用程序性能管理(APM)工具,如云操作和云追踪,可以提供有关应用程序指标的具体见解。它们还可以请求追踪和日志记录,从而快速识别和解决性能问题、优化资源利用并确保无缝的用户体验。
完善的日志记录实践对于从 GenAI 系统中捕获和分析相关信息也是必不可少的。通过配置应用程序记录重要事件、错误和诊断信息,并利用云日志等日志管理工具,组织可以集中和分析这些日志,识别模式,追踪问题,并深入了解其 GenAI 系统的行为。
定期审查和分析从 GenAI 系统收集的监控数据可以揭示趋势、模式和潜在的优化或改进领域。通过利用这些信息,组织可以微调其系统,提高性能,并提升用户体验。
实施异常检测机制也有助于自动识别和标记 GenAI 系统中的意外或异常行为。这些机制可以利用机器学习技术分析历史数据,建立基线,并检测与正常模式偏差,使组织能够采取适当的行动。
最后,建立稳健的事件管理和响应流程对于确保任何问题或事件都能得到及时有效的处理至关重要。明确角色和责任、沟通渠道以及升级程序可以促进对可能发生的任何事件的协调和高效响应。
成本优化
在通用人工智能(GenAI)系统的领域,平衡性能与成本效益对于可持续运营至关重要。在谷歌云等云平台上运行这些复杂的 AI 系统时,实施稳健的成本优化策略对于管理运营费用至关重要。
组织应利用云提供商提供的各种成本节约机制。承诺使用折扣可以通过承诺在指定期限内使用一定数量的资源来显著降低可预测工作负载的成本。这些承诺可以在基础设施层或通过管理服务批量折扣进行。此外,探索像预占虚拟机(preemptible VMs)这样的选项,用于容错工作负载,或探索像按需虚拟机(spot VMs)这样的选项,用于灵活且可中断的任务,可以带来实质性的节省。
实施全面的成本监控和归因机制对于了解云支出至关重要。这些工具允许组织跟踪不同项目、团队和服务的费用,帮助识别高支出领域和优化机会。云成本管理平台可以提供详细的支出细分、预测能力和对使用或成本异常波动的警报。通过将成本归因于特定功能或模型,团队可以做出关于资源分配的明智决策,并优先考虑在最能产生影响的领域进行优化。
自动扩展和自动关闭机制在优化资源利用和降低低流量期间的成本方面发挥着至关重要的作用。通过根据需求自动调整计算实例的数量,自动扩展确保系统在较安静时期不会过度配置的情况下能够处理峰值负载。在非工作时间实施开发测试环境的自动关闭可以带来显著节省,而不会影响生产力。
优化数据存储和传输成本是管理生成式人工智能系统费用的另一个关键方面。这可能涉及实施分层存储解决方案,有效使用缓存,以及优化数据传输模式以最小化出口费用。对于大规模人工智能训练任务,考虑使用自动优化成本效益的托管服务,例如谷歌云的 Vertex AI,它可以根据工作要求动态调整资源分配。
最后,考虑架构决策的长期成本影响。虽然无服务器架构在每请求的基础上可能看起来更昂贵,但它们通常可以通过消除对持续基础设施管理的需求并允许真正的按使用付费定价来降低总成本。同样,投资于模型优化技术,如量化或蒸馏,虽然可能需要前期开发努力,但可以从长远降低推理成本。
通过解决这些关键考虑因素,并在所有这些层(数据、训练、推理和操作)中实施最佳实践,您可以成功实施您的生成式人工智能集成模式,确保在生产环境中具有可靠性、可扩展性和可维护性。此外,建立稳健的数据管理、模型治理和安全实践将帮助您建立信任并遵守相关法规和行业标准。
摘要
在本章中,您已经探索了一个全面框架,用于实施生成式人工智能集成模式。您了解了一个四层方法,该方法解决了部署和维护生产级生成式人工智能应用程序的复杂性,包括数据、训练、推理和操作层。
我们提出了一种全面战略,强调数据质量、安全和治理在数据层的重要性,同时解决法规遵从性和伦理考量。训练层向您介绍了各种模型适应技术,包括少样本学习、微调和全训练,以及模型治理、性能监控和可解释人工智能的关键方面。
你已经了解到推理层专注于可扩展性、性能优化和安全的部署策略,包括边缘和分布式推理能力。关于操作层的章节强调了实施稳健的持续集成/持续部署(CI/CD)管道、MLOps 最佳实践以及全面监控和可观察性系统对于通用人工智能应用程序的重要性。
到本章结束时,你已经对操作通用人工智能系统的复杂性有了宝贵的见解。你学习了如何在确保可扩展性和可靠性的同时,平衡性能、成本效益和伦理考量。本章为你提供了实施黄金提示评估、分布式跟踪和成本优化技术的策略。这些技能将使你能够提高组织部署和维护复杂通用人工智能应用程序的能力,有效地利用云基础设施和人工智能操作的最佳实践。
在下一章中,我们将讨论负责任的 AI 及其在将通用人工智能(GenAI)集成到您的应用程序时的影响。
加入我们的 Discord 社区
加入我们社区的 Discord 空间,与作者和其他读者进行讨论:
packt.link/genpat

第十章:将负责任的人工智能嵌入您的生成式人工智能应用
在前面的章节中,我们探讨了在 Vertex AI 上利用像谷歌 Gemini 这样的生成式人工智能(GenAI)模型的各种集成模式和操作考虑因素。随着我们实施这些强大的技术,解决与构建和部署将被添加到您的应用程序中的 AI 模型相关的伦理影响和责任至关重要。本章将重点介绍负责任人工智能的最佳实践,确保我们的生成式人工智能应用是公平的、可解释的、私密的和安全的。
在本章中,我们将涵盖:
-
负责任的人工智能简介
-
生成式人工智能应用中的公平性
-
可解释性和可解释性
-
隐私和数据保护
-
生成式人工智能系统中的安全和安保
-
谷歌对负责任人工智能的方法
-
Anthropic 对负责任人工智能的方法
负责任的人工智能简介
负责任的人工智能是一种开发和应用人工智能系统的方法,它优先考虑伦理考量、透明度和问责制。
随着生成式人工智能模型以及像谷歌的 Gemini、OpenAI 的 GPT 和 Anthropic 的 Claude 这样的应用变得越来越强大和广泛使用,确保这些系统以造福社会并最大限度地减少潜在危害的方式进行设计和实施变得至关重要。让我们从高层次上探讨在您的系统中实施负责任人工智能的关键方面。我们还将讨论过度关注以下主题可能对创新产生的负面影响:
-
公平性:在人工智能系统中实现公平是一个至关重要的目标,它需要在人工智能生命周期的整个过程中进行深思熟虑的设计和实施。几个关键因素有助于使人工智能系统公平。首先和最重要的是训练数据的质量和多样性。确保数据集代表广泛的群体、经验和观点有助于最小化偏见并促进公平的结果。这不仅仅涉及收集多样化的数据,还包括精心策划和平衡数据,以避免某些群体的过度或不足代表,确保人工智能系统不会持续或放大偏见。虽然追求公平至关重要,但实施起来很复杂。不同的公平定义可能相互冲突。例如,实现人口统计学上的平等可能并不总是与平等机会相一致。过度补偿历史偏见可能会产生新的歧视形式。例如,一个人工智能招聘系统可能会过于关注人口统计学上的平等,以至于忽视了真正的资格,这可能导致更有能力的候选人被忽视。
-
可解释性:这是关于理解人工智能系统如何做出决策。高度可解释的模型可能会为了可解释性而牺牲性能。这种权衡在医疗诊断或金融预测等需要复杂模式进行准确预测的领域可能特别有问题。
-
隐私:这涉及到保护用户数据和尊重隐私权利。严格的隐私措施可能会阻碍有益的数据共享和协作研究。它们也可能增加企业的成本,可能抑制无法承担强大隐私保护措施的小公司的创新。例如,过于严格的数据保护可能会阻止创建用于开发罕见病治疗所需的大型、多样化的数据集。
-
安全性:这是确保人工智能系统按预期行为并不会造成伤害的地方。严格的安全测试可能会显著减缓人工智能系统的发展和部署。这可能会延迟具有潜在救命技术的引入。此外,过于谨慎的方法可能会导致错过从受控的、现实世界的测试中学习的机会。
-
问责制:这是关于对人工智能系统结果承担责任。清晰的问责制界限是必要的;过于严厉的措施可能会阻碍创新。它还可能导致当问题出现时,形成一种归咎于而不是学习和改进的文化。
没有获得所有这些方面正确的秘密配方。公司需要找到平衡,并在实践中解决这些关注。让我们考虑以下方法来最小化对僵化方法过度依赖的担忧:
-
情境应用:认识到每个方面的重要性可能因具体的人工智能应用及其潜在影响而异。例如,可解释性在医疗诊断人工智能中可能比在电影推荐系统中更为关键。
-
利益相关者参与:在开发和部署过程中涉及多样化的利益相关者。这有助于早期识别潜在的问题和权衡。采用基于风险的策略,其中审查和保障措施的水平与人工智能系统的潜在危害或影响成比例。
-
透明度和监控:公开你的人工智能系统的局限性和权衡。这有助于管理期望并建立信任。定期评估人工智能系统在实际应用中的性能和影响,并准备好进行调整。逐步实施这些原则,从最低可行标准开始,并根据现实世界的反馈和结果逐步改进。
-
监管合作:与政策制定者合作,制定鼓励负责任创新而不是抑制创新的法规。投资于教育开发者和用户了解这些原则及其影响。
通过采取细致入微、具体情境的方法,并持续重新评估这些原则之间的平衡,我们可以努力最大化人工智能的益处,同时最小化潜在的危害。
通用人工智能应用中的公平性
随着这些技术越来越多地融入社会各个领域的决策过程,人工智能系统中的公平性是一个关键问题。确保人工智能系统不会持续或放大现有偏差对于建立信任、促进平等和最大化人工智能对所有人的利益至关重要。然而,实现人工智能的公平性是一个复杂且多方面的挑战,需要持续的努力和警惕。
这涉及到人工智能生命周期的每个阶段,从数据收集和模型开发到部署和监控。以下要点概述了促进人工智能系统公平性的关键策略和考虑因素,重点关注实际方法和现实世界案例。通过实施这些做法,组织可以朝着创建更公平、更透明且对整个社会有益的人工智能系统迈进。
-
多样性和代表性数据:确保多样性和代表性数据对于创建公平的人工智能系统至关重要。这不仅包括包括来自各个人口群体的数据,还要考虑交叉性和不太明显的多样性形式。例如,在开发语音识别系统时,确保训练数据包括来自不同年龄组和性别的各种口音和方言的说话者。例如,当苹果公司的早期版本 Siri 在处理苏格兰口音时遇到困难时,受到了批评,这突显了在训练数据中语言多样性的重要性。
-
偏差检测和缓解:这包括主动和被动措施。主动地,使用统计技术来识别数据和中模型输出中的潜在偏差。被动地,实施反馈机制来捕捉和纠正现实世界使用中出现的偏差。例如,考虑一个在技术行业中针对特定人口或性别表现出偏差的人工智能招聘工具。这可能是因为系统在历史招聘数据上进行了训练,这些数据反映了技术行业过去在性别或人口结构上的偏差。这个案例突显了仔细审查训练数据和模型输出以发现不公平模式的重要性。
-
定期审计:公平性审计应该是全面的,不仅要检查模型的输出,还要检查其在现实世界中的影响。这可能涉及定量指标和定性评估。例如,信用评分人工智能可能通过初步的公平性测试,但定期的审计可能会揭示,由于经济条件的变化,它无意中在一段时间内对某些群体造成了不利影响。定期的审计将捕捉到这种漂移,并允许及时纠正。
-
包容性设计:包容性设计不仅限于咨询多样化的利益相关者。它涉及赋予他们积极塑造发展过程的能力,并在决策中给予他们的意见实际权重。例如,当微软为有限活动能力的游戏玩家开发 Xbox 自适应控制器时,他们让有残疾的游戏玩家参与了整个设计过程。这种包容性方法导致了可能被没有残疾生活经验的开发者忽视的创新。
-
情境公平性:在不同的情境中,公平可能意味着不同的事情。在一个情况下公平的事情可能在另一个情况下就不公平。人工智能系统需要足够灵活,以适应这些细微差别。例如,用于大学录取的人工智能系统可能需要平衡多个公平标准——平等机会、人口比例和个体优势。适当的平衡可能在有多样化代表性使命的公立大学和专门的技术学院之间有所不同。
-
透明度和可说明性:为了使人工智能系统真正公平,用户应该了解决策是如何做出的。这既涉及技术可说明性,也涉及与非技术利益相关者的清晰沟通。在医疗保健领域,做出治疗建议的人工智能系统应该能够用医生和患者都能理解的方式解释其推理。这允许知情同意,并为患者提供机会,让他们提供人工智能可能错过的额外背景信息。
-
持续监控和调整:公平不是一次性的成就,而是一个持续的过程。社会规范和对公平的理解不断发展,人工智能系统需要相应地进行调整。例如,用于社交媒体平台的内容审核的人工智能系统可能需要持续更新其对仇恨言论和歧视性语言的理解,因为社会规范在演变,新的编码语言形式出现。
-
法律和伦理合规性:确保公平措施符合相关法律(如反歧视立法)并符合伦理标准。这可能因司法管辖区和应用领域而异。在欧盟,GDPR 和拟议中的 AI 法案对人工智能系统中的公平性和非歧视性设定了具体要求。在欧盟市场运营或向欧盟市场销售的公司需要确保其人工智能系统符合这些规定。
这些扩展点突出了确保人工智能系统公平性所涉及的复杂性和细微差别。这是一个持续性的挑战,需要警觉性、适应性和对伦理原则的承诺。
可解释性和可说明性
在人工智能系统中,尤其是在大型语言模型(LLMs)和 GenAI 中,可解释性和可解释性对于建立信任、实现有效监督和确保负责任部署至关重要。随着这些系统变得更加复杂,其决策过程更加不透明,理解和解释其输出的方法的需求日益增长。可解释性允许利益相关者窥视人工智能的“黑箱”,而可解释性则侧重于以人类可以理解的方式传达决策是如何做出的。
以下要点概述了增强人工智能系统中可解释性和可解释性的关键策略,重点关注实用方法和现实世界案例。通过实施这些实践,组织可以创建更透明的 AI 系统,促进更好的决策、合规性和用户信任。
-
模型卡:模型卡提供了一种标准化的方式来记录人工智能模型,包括其性能特征、预期用途和限制。它们是透明度和负责任人工智能部署的关键工具。例如,谷歌的 BERT 语言模型附带了一份详细的模型卡,概述了其训练数据、不同任务和人口统计学的评估结果,以及伦理考量。这使用户能够做出是否 BERT 适合其特定用例的知情决策,并帮助他们了解潜在的偏见或限制。
-
可解释人工智能(XAI)技术:XAI 技术旨在使人工智能模型的决策过程更易于人类理解。这些方法可以提供关于哪些特征对特定决策或预测最重要的见解。例如,在医疗诊断人工智能系统中,SHapley Additive exPlanations(SHAP)值可以用来显示哪些症状或测试结果对特定诊断的贡献最大。这允许医生理解人工智能的推理,并将其与自己的临床判断进行比较。
-
用户友好的解释:人工智能决策的技术性解释通常对最终用户来说并不有用。开发清晰、非技术性的解释,针对用户的技能水平进行定制,对于实现实用性解释至关重要。信用评分人工智能可能不仅仅用数值分数来解释拒绝贷款的决定,而是用一个简单的解释,例如“你的申请主要由于高债务收入比和信用卡近期逾期还款而被拒绝。”这为用户提供可操作的信息,而无需他们理解底层人工智能模型。
-
可追溯性:维护人工智能系统输入、输出和关键决策点的详细日志,可以用于审计并有助于理解系统随时间的行为。这对于法规遵从和调试尤其重要。在一个自动驾驶车辆系统中,维护详细的传感器输入、决策点和采取的行动的日志至关重要。如果发生事故,此日志可以用于分析 AI 为何做出某些决策,以及如何在未来防止类似事件的发生。
-
可解释的模型架构:虽然不使用本质上更可解释的模型架构可能是一种强大的方法,但这可能涉及尽可能使用更简单的模型,或者开发旨在提高可解释性的新架构。
在金融欺诈检测系统中,对于某些组件,可能会使用决策树模型而不是更复杂的神经网络。决策树的逻辑可以轻松可视化并理解,从而可以清楚地解释为什么一笔交易被标记为可能存在欺诈。
- 交互式解释:向用户提供交互式工具以探索模型行为可以极大地增强理解。这使用户能够提出“如果...会怎样”的问题,并看到输入的变化如何影响输出。例如,一个电子商务平台的推荐系统可以包括一个交互式功能,允许用户调整不同因素(例如,价格、品牌、评分)的重要性,并实时看到这如何影响产品推荐。这有助于用户理解系统的逻辑,并根据他们的偏好进行调整。
通过实施这些策略,组织可以显著提高其人工智能系统的可解释性和可解释性,从而实现更透明、更值得信赖和更有效的人工智能应用。
隐私和数据保护
在人工智能系统中,尤其是在强大的通用人工智能模型背景下,隐私和数据保护是一个关键问题,它影响着用户的信任、法律合规性和技术的道德使用。随着人工智能系统处理越来越多的个人和可能敏感的数据,确保强大的隐私保障成为组织成败的关键点。有效的隐私保护不仅涉及技术措施,还包括组织政策和用户赋权。以下要点概述了增强人工智能系统中隐私和数据保护的关键策略,重点关注实际方法和现实世界案例。通过实施这些实践,组织可以创建尊重用户隐私、遵守法规并维护用户和利益相关者信任的人工智能系统:
-
数据最小化:这涉及仅收集和使用 AI 系统预期功能绝对必要的数据。这一原则降低了隐私风险,并与许多数据保护法规相一致。例如,一个智能家居 AI 助手可以设计为在设备上尽可能本地处理语音命令,而不是将所有音频数据发送到云端服务器。这减少了可能敏感数据离开用户控制的情况,并增加了用户对其数据不会泄露或用于进一步改进模型的信任。
-
匿名化和加密:这些技术通过在用于训练和推理的数据集中移除或模糊个人可识别信息来帮助保护个人隐私。如果正确实施,它们可以在保护隐私的同时允许有用的数据分析。在开发用于分析医院患者结果的 AI 系统时,研究人员可以使用差分隐私技术。例如,差分隐私会在数据或模型输出中添加精心校准的噪声,允许进行准确的整体分析,同时从数学上使其不可能识别个别患者。
-
用户控制:赋予用户对其数据的控制权不仅是许多司法管辖区的一项法律要求,而且有助于建立信任。这包括提供清晰、易于访问的数据管理选项。例如,一个使用 AI 进行内容推荐的社交媒体平台可以提供一个详细的隐私仪表板,用户可以在其中查看正在收集哪些数据,如何使用这些数据,以及轻松地退出特定的数据收集或处理活动。
-
合规性:遵守相关的数据保护法规至关重要。这通常涉及实施隐私设计原则、进行影响评估以及维护数据处理活动的详细记录。一家开发 AI 人力资源工具的跨国公司需要确保遵守 GDPR 以符合欧盟员工的要求,CCPA 以符合加州居民的要求,以及其他适用的当地法规。这可能包括创建特定区域的数据处理流程,并根据用户位置提供不同的隐私通知和控制措施。
-
避免记录 PII 和其他敏感信息:日志经常被忽视作为潜在的隐私泄露来源。在日志中避免捕获个人可识别信息是维护隐私的关键。即使日志不包含 PII,它们也可能包含有关系统操作的敏感信息。对日志数据进行强大的安全措施是至关重要的。一家使用 AI 进行欺诈检测的金融机构可以实施一个安全、加密的日志存储系统,并具有严格的访问控制。只有授权人员才能访问日志,所有访问都会被记录以供审计目的。
-
保留政策:建立和执行数据保留政策有助于随着时间的推移降低隐私风险,并且通常符合数据最小化方面的法律要求。一个由人工智能(AI)驱动的健身应用可以实施一项政策,在用户明确选择保留更长时间之前,自动删除用户活动数据(例如,6 个月)。这降低了旧数据被泄露的风险,同时仍然允许用户在需要时保持长期记录。
-
隐私保护的人工智能技术:如联邦学习和同态加密等新兴技术允许人工智能(AI)模型在不直接访问数据的情况下从数据中学习,为隐私保护提供了强大的新工具。智能手机上的键盘预测人工智能(AI)可以使用联邦学习来改进其模型。模型将使用本地数据在单个设备上更新,并且只有模型更新(而不是原始数据)会被发送回中央服务器,从而保护用户隐私。
通过实施这些策略,组织可以显著提高其人工智能(AI)系统的隐私和数据保护方面,从而产生更值得信赖且符合法律规定的、尊重用户隐私的人工智能(AI)应用。
通用人工智能(GenAI)系统中的安全性和安全性
确保通用人工智能(GenAI)系统安全、安全地按预期运行对于保护用户和防止信息生成和训练中的潜在滥用以及意外后果至关重要。这需要一种多方面的方法,包括主动措施和反应能力。以下要点概述了增强通用人工智能(GenAI)系统安全性和安全性的关键策略,重点关注实际方法和现实世界案例:
-
内容过滤:实施过滤器以防止生成有害或不适当的内容是一项至关重要的安全措施。例如,为儿童教育平台提供的由通用人工智能(GenAI)驱动的聊天机器人可以使用高级内容过滤算法来检测和阻止生成任何不适宜年龄的内容尝试,确保一个安全的学习环境。这可能涉及维护和定期更新一个全面的禁止词汇和主题列表,以及使用更复杂的自然语言处理技术来识别即使以新颖方式表达的可能有害内容。
-
速率限制:对 API 调用应用合理的限制对于防止滥用和确保公平使用至关重要。一个提供图像生成能力的通用人工智能(GenAI)服务可以实施分层速率限制,其中免费用户每天的限制数量有限,而付费用户有更高的限制。这不仅防止了潜在的拒绝服务攻击,还有助于有效管理计算资源。系统还可以根据请求的复杂性实施更细致的速率限制,允许更频繁的简单生成,同时限制资源密集型生成。
-
对抗性测试:定期使用对抗性输入测试系统对于识别和解决漏洞至关重要。这些测试需要添加到开发周期以及系统的持续监控中。
对于旨在协助医疗诊断的通用人工智能(GenAI)系统,研究人员可以创建一系列对抗性测试案例,旨在欺骗系统做出错误的诊断。这可能包括对医学图像进行细微的修改或精心制作的症状文本描述。通过持续运行和扩展这些测试,开发者可以识别系统决策过程中的弱点,并实施有针对性的改进以增强鲁棒性。
-
监控和警报:建立系统以检测和响应异常行为对于维持持续的安全和保障至关重要。使用通用人工智能(GenAI)进行欺诈检测的金融机构可以实施实时监控系统,以跟踪 AI 行为中的异常模式。例如,如果系统突然开始将异常高数量的交易标记为欺诈,或者其置信度分数显示出意外的波动,则可以自动触发警报供人工审查。这允许在系统出现潜在故障或遭受针对性攻击时进行快速干预。
-
增强的鲁棒性:如 Gemini 1.5 等模型所展示的输出稳定性和一致性对于安全性至关重要。用于自动化客户服务的通用人工智能(GenAI)系统可以利用这些改进,在广泛的客户咨询中提供更可靠和一致的反应。这降低了系统提供矛盾或无意义信息的风险,这可能导致客户困惑或不满。定期评估系统随时间和不同输入的输出,可以帮助验证和维护这种鲁棒性。
-
内容安全:内置机制以避免生成有害或露骨的内容是基本的安全保障。由通用人工智能(GenAI)驱动的创意写作助手可以整合多层内容安全检查。这可能包括分析生成的文本中可能冒犯性的语言,根据用户的个人资料检查适合年龄的内容,并在系统检测到可能进入敏感领域时提供警告或替代方案。这些机制应定期更新,以反映不断变化的社会规范和新的识别风险。
-
多模态安全: 随着 GenAI 系统变得更加多功能,将安全考虑扩展到文本、图像和其他模态变得越来越重要。一个用于社交媒体内容审查的多模态 GenAI 系统可以在文本、图像和视频上同时进行安全检查。例如,它可以分析帖子的文本和任何伴随的图像,以检测潜在的政策违规行为,确保有害内容不会通过利用不同模态之间的差距而溜走。这需要开发和维护能够理解不同类型数据上下文的全面安全模型。
通过实施这些策略,组织可以显著提高其 GenAI 系统的安全性和安全性,创造更可靠、值得信赖和有益的 AI 应用。定期审查和更新这些措施对于跟上 GenAI 技术的快速发展和潜在风险至关重要。
谷歌对负责任的 AI 的方法
谷歌对负责任的 AI 的方法是一个全面的框架,为实施 GenAI 系统的组织提供了一个模型。其核心,该方法优先考虑:
-
以人为本的设计 强调了在 AI 开发中用户需求和 societal impact 的重要性。这确保了 AI 系统是在对其现实世界影响和为不同背景的用户带来的潜在益处的深刻理解下创建的。
-
公平性 是谷歌框架的另一个关键方面。公司开发了复杂的工具和实践来检测和减轻 AI 系统中的不公平偏见。对公平性的承诺包括严格的测试、创建多样化的数据集以及持续的监控,以确保 AI 应用在演变和部署到各种环境中时保持公平。
-
可解释性 是一个关键焦点,谷歌致力于创建可解释的 AI 系统,以促进透明度。这涉及到开发方法,使 AI 决策过程对开发者和最终用户都更加可理解,从而在 AI 应用中培养信任和问责制。
-
隐私 是一个基本关注点,通过诸如联邦学习和差分隐私等高级技术得到解决。这些方法允许开发强大的 AI 模型,同时保护个人用户数据,在创新和隐私保护之间取得平衡。
-
安全和安全 在谷歌负责任的 AI 方法中至关重要。公司进行严格的测试,并专注于开发能够抵御潜在滥用或操纵的强大 AI 系统。这种主动的安全立场有助于确保 AI 技术不仅强大,而且值得信赖和有弹性。
谷歌的方法强调跨职能协作的重要性,将来自不同领域的专家聚集在一起,以应对人工智能发展的多方面挑战。这得到了对持续研究的坚定承诺的补充,推动人工智能能力的边界,同时探索其伦理影响。
谷歌的安全人工智能框架(SAIF)
这是一个概念框架,旨在管理与快速发展的人工智能技术相关的风险。它包括六个核心要素:
-
扩展强大的安全基础:调整现有的网络安全措施以保护人工智能系统,并培养与人工智能进步同步的专业知识。
-
扩展检测和响应:将人工智能相关威胁纳入现有的网络安全实践,包括监控人工智能系统输入和输出中的异常。
-
自动化防御:利用人工智能创新来提高对安全事件的响应规模和速度,对抗潜在的增强人工智能威胁。
-
协调平台级控制:确保组织内不同人工智能平台和工具之间的安全一致性,利用默认保护措施。
-
调整控制:通过强化学习、定期红队演习等技术持续测试和改进检测和保护机制。
-
情境化人工智能系统风险:对人工智能部署进行全面风险评估,考虑端到端业务风险,并实施自动化检查以验证人工智能性能。
该框架旨在帮助组织随着人工智能的进步而发展其风险管理策略,确保更安全、更负责任的人工智能实施。
在谷歌安全人工智能框架(SAIF)的核心要素基础上,实施方法(services.google.com/fh/files/blogs/google_secure_ai_framework_approach.pdf)为希望将人工智能安全地整合到其运营中的组织提供了一个实用的指南。该方法将过程分解为四个关键步骤,并详细阐述了如何有效地应用 SAIF 的六个核心要素:
-
理解用途:明确定义特定的 AI 用例及其在组织中的上下文。
-
组建团队:创建一个跨职能团队,包括来自安全、法律、数据科学和伦理等各个部门的利益相关者。
-
通过人工智能入门课程进行水平设定:确保所有团队成员对人工智能概念和术语有基本了解。
-
应用 SAIF 的六个核心要素:
-
扩展强大的安全基础:
-
审查现有的安全控制措施及其对人工智能系统的适用性。
-
评估传统控制措施对人工智能特定威胁的适用性。
-
准备供应链管理和数据治理。
-
-
扩展检测和响应:
-
理解人工智能特定威胁。
-
准备应对针对人工智能的攻击和人工智能输出提出的问题。
-
调整针对人工智能特定事件的滥用政策和事件响应流程。
-
-
自动化防御措施:
-
识别用于保护系统和数据管道的人工智能安全能力。
-
在保持人工参与的同时,使用人工智能防御措施来对抗人工智能威胁。
-
利用人工智能自动化耗时任务并加快防御机制。
-
-
协调平台级控制措施:
-
审查人工智能的使用和基于人工智能的应用程序的生命周期。
-
标准化工具和框架以防止控制碎片化。
-
-
适应控制措施:
-
对人工智能驱动的产品进行红队演习。
-
了解新型人工智能攻击。
-
应用机器学习来提高检测准确性和速度。
-
创建反馈循环以实现持续改进。
-
-
语境化人工智能系统风险:
-
建立模型风险管理框架。
-
建立人工智能模型及其风险概况的清单。
-
在机器学习模型的生命周期中实施政策和控制措施。
-
对人工智能的使用进行全面的风险评估。
-
考虑人工智能安全中的共同责任。
-
将人工智能用例与组织风险承受能力相匹配。
-
-
这种方法为组织提供了一个结构化的方式来实施 SAIF,确保人工智能的集成是安全的、负责任的,并与业务目标保持一致。
谷歌的“红队”方法
这种人工智能系统的方法是一种全面的策略,旨在识别和减轻人工智能部署中潜在的安全风险。公司已成立一个专门的 AI 红队,该队结合了传统的红队专业知识和专门的人工智能专业知识。该团队模拟针对人工智能部署的威胁行为者,目的是评估模拟攻击对用户和产品的影响,分析新的人工智能检测和预防能力的弹性,提高早期攻击识别的检测能力,并提高利益相关者对关键风险和必要安全控制的意识。欲了解更多信息,请参阅services.google.com/fh/files/blogs/google_ai_red_team_digital_final.pdf。
人工智能红队与谷歌的威胁情报团队(如 Mandiant 和威胁分析小组(TAG))紧密合作,确保他们的模拟反映现实世界的对手活动。这种合作使团队能够优先考虑不同的练习,并形成与真实世界威胁非常相似的互动。
谷歌对人工智能系统进行红队攻击的方法侧重于几种常见的攻击类型:
-
提示攻击是一个重大问题,特别是对于为生成人工智能产品提供动力的 LLMs。这些攻击涉及构建输入,以未预期的方式操纵模型的行为。例如,攻击者可能会在电子邮件中注入隐藏指令,以绕过基于人工智能的钓鱼检测系统。
-
训练数据提取攻击旨在重建字面训练示例,可能暴露敏感信息,如个人身份信息(PII)或密码。这些攻击对个性化模型或训练在包含 PII 的数据上的模型尤其危险。
-
模型后门攻击是另一种关键威胁,攻击者试图秘密改变模型的行为,以产生带有特定“触发”词或特征的错误输出。这可以通过直接操纵模型的权重、针对对抗目的的微调或修改模型的文件表示来实现。
-
对抗性示例涉及导致模型产生意外输出的输入。例如,人类看起来像狗的图像,但模型将其分类为猫。这些攻击的影响可能因人工智能系统的用例而异。
-
数据中毒攻击涉及操纵训练数据,以根据攻击者的偏好影响模型的输出。这突出了在人工智能开发中确保数据供应链安全的重要性。
-
数据泄露攻击专注于窃取模型本身,这通常包括敏感的知识产权。这些攻击可能从简单的文件复制到更复杂的攻击,涉及重复查询模型以确定其功能并重新创建它。
Google 强调,虽然这些针对人工智能的特定攻击至关重要,但它们应被视为传统安全威胁的补充,而不是替代。公司主张采用综合方法,结合人工智能特定的红队测试和传统的安全实践,如渗透测试、漏洞管理和安全开发生命周期。
通过分享他们的方法和经验教训,Google 旨在建立人工智能的明确行业安全标准,并帮助推进人工智能安全领域。他们的经验强调了跨职能协作、持续学习和将人工智能安全与更广泛的网络安全努力相结合以创建更强大和安全的 AI 部署的重要性。
Anthropic 对负责任的人工智能开发的方法
Anthropic 对负责任的人工智能开发的方法是全面且多方面的,将伦理考量、安全措施和实证研究贯穿于他们的工作之中。他们方法的关键方面包括:
-
优先考虑安全研究:Anthropic 将人工智能安全研究视为迫切重要且值得广泛支持。他们采用投资组合方法,为从乐观到悲观的各种场景做准备,以应对创建安全人工智能系统的难度。
-
实证重点:公司强调以实证为基础的安全研究,认为与前沿人工智能系统的密切接触对于在风险成为关键问题之前识别和解决潜在风险至关重要。
-
平衡进步与谨慎:Anthropic 在推进必要的安全研究和可能加速危险技术部署之间谨慎权衡。他们旨在快速将安全研究整合到实际系统中,同时保持负责任的发展实践。
-
透明度和合作:尽管不发布能力研究,Anthropic 仍分享以安全为导向的研究,以贡献于更广泛的 AI 社区对这些问题的理解。
-
负责任的部署:公司在展示前沿能力时持谨慎态度,在适当的情况下优先考虑安全研究而非公共部署。
-
对安全标准的承诺:Anthropic 计划对外做出可验证的承诺,只有在满足特定安全标准的情况下才会开发高级模型,允许对他们的模型能力和安全性进行独立评估。
-
社会影响评估:他们进行研究以评估其 AI 系统可能产生的潜在社会影响,既为内部政策提供信息,也参与更广泛的 AI 治理讨论。
-
负责任的扩展:Anthropic 认识到快速扩展 AI 能力的风险,并旨在开发可扩展监督等技术,以确保强大的系统与人类价值观保持一致。
-
跨学科方法:他们的策略涵盖了技术研究、政策考虑和伦理审议,反映了 AI 安全挑战的复杂性质。
-
适应性:Anthropic 在其方法上保持灵活性,随时准备根据对 AI 发展和相关风险的了解调整策略。
通过整合这些原则,Anthropic 旨在为开发既强大又安全、符合伦理且对人类有益的 AI 系统做出贡献。他们的方法反映了面对可能变革性的 AI 技术时对负责任创新的深厚承诺。Anthropic 的研究领域多样且全面,专注于 AI 安全和负责任发展的各个方面。他们的方法从即时的实际关注到长期的、推测性的风险,展示了应对 AI 发展多方面挑战的承诺。
Anthropic 研究的核心是机制可解释性,旨在“逆向工程”神经网络成为人类可理解算法。这个雄心勃勃的项目旨在使 AI 模型能够进行类似“代码审查”的操作,可能允许进行彻底的审计以识别不安全方面或提供强大的安全保证。该团队在将这种方法从视觉模型扩展到小型语言模型方面取得了进展,并发现了驱动情境学习的机制。
可扩展的监督是 Anthropic 关注的另一个关键领域。这项研究旨在开发使人工智能系统部分自我监督或协助人类进行监督的方法。这是对提供足够高质量反馈以引导人工智能行为的挑战的回应,随着系统变得越来越复杂,这一挑战变得更加严峻。
团队探索了各种方法,包括宪法人工智能的扩展、人类辅助监督的变体、人工智能-人工智能辩论和多智能体强化学习中的红队攻击。
以过程为导向的学习代表了一种新颖的人工智能训练方法。这种方法不是通过奖励人工智能系统实现特定结果来训练系统,而是专注于训练系统遵循安全的过程。目标是确保系统遵循可理解的、经过批准的过程,而不是通过可能有害或难以理解的手段追求目标,从而解决关于人工智能安全性的担忧。
测试危险故障模式是识别人工智能系统中潜在风险的一种主动方法。这涉及到故意将问题属性训练到小型模型中,以便在它们成为更强大系统中的直接威胁之前进行隔离和研究。一个特别感兴趣的研究领域是研究人工智能系统在“情境感知”时的行为以及这如何影响它们在训练过程中的行为。
最后,Anthropic 高度重视研究社会影响和评估。这涉及到构建工具和测量方法来评估人工智能系统的能力、局限性和潜在的社会影响。该领域的研究包括对 LLMs 中可预测性和意外的研究、针对语言模型的红队攻击方法,以及减少人工智能输出中的偏见和刻板印象的研究。这项研究不仅为 Anthropic 的内部实践提供了信息,也为更广泛的人工智能治理和政策讨论做出了贡献。
这些相互关联的研究领域共同旨在解决人工智能安全和伦理的各个方面。Anthropic 的方法因其广度和深度而引人注目,反映了人工智能发展挑战的复杂性质。该公司在其研究重点上保持灵活性,随时准备适应人工智能快速发展的领域中出现的新信息和挑战,展示了面对可能具有变革性的人工智能技术时的负责任创新承诺。
Anthropic,一家领先的 AI 研究公司,已经开发了一套全面的方法来应对 AI 安全和伦理方面的挑战。他们的方法被称为宪法 AI,在创建既强大又符合人类价值观的 AI 系统方面取得了重大进步,同时减少了在训练过程中对大量人类监督的需求。他们的方法在论文《宪法 AI:来自 AI 反馈的无害性》中被突出展示,(arxiv.org/pdf/2212.08073),该论文介绍了 Anthropic 开发安全且负责任的 AI 系统的方法,而不依赖于人类反馈来评估无害性。研究引入了一种称为宪法 AI(CAI)的方法,旨在创建既有帮助又无害的 AI 助手,同时避免规避回答。
Anthropic 的方法核心包括两个主要阶段:监督学习阶段和强化学习阶段。在监督阶段,AI 模型被训练根据一套原则或“宪法”来批评和修改自己的响应。这个过程有助于减少 AI 输出中的有害内容。随后,强化学习阶段通过使用 AI 生成的反馈而不是人类标签来评估无害性,进一步细化模型的行为。
Anthropic 开发这种技术的动机源于几个因素。他们旨在通过利用 AI 来帮助监督其他 AI 系统,减少 AI 助手中帮助性和无害性之间的紧张关系,提高 AI 决策的透明度,并减少对大量人类反馈的依赖。研究人员强调,实证、数据驱动的方法对 AI 安全的重要性,以及应对从乐观到悲观的各种潜在场景时所需的灵活性,这些场景涉及创建安全 AI 系统的难度。
论文展示了实验结果,表明宪法 AI 方法可以产生比使用传统从人类反馈中强化学习(RLHF)训练的模型更少有害且更有帮助的模型。值得注意的是,CAI 模型展示了以深思熟虑、非规避的方式处理敏感话题的能力,同时仍保持安全性。
Anthropic 的方法还结合了诸如思维链推理等技术,以提高 AI 决策的透明度和可解释性。这有助于更好地理解 AI 系统如何得出结论和采取行为。研究人员强调,随着 AI 能力的提升,他们对其安全技术的持续适应和改进的重要性。
论文最后讨论了该研究的潜在未来方向,包括将宪法方法应用于以各种方式引导人工智能行为,提高对对抗性攻击的鲁棒性,以及进一步细化有益性和无害性之间的平衡。Anthropic 承认这些技术的双重用途潜力,并强调人工智能系统负责任开发和部署的必要性。
总体而言,这项研究代表了朝着创建既强大又符合人类价值观的人工智能系统迈出的重要一步,同时减少了在训练过程中对大量人工监督的需求。
摘要
当设计人工智能应用时,开发者可以结合谷歌和 Anthropic 的方法,创建更负责任、更安全的系统。这种综合策略涉及几个关键关注领域:
全面的安全和影响评估对于负责任的人工智能开发至关重要。这个过程应包括对乐观和悲观结果的情景规划,使开发者能够为各种可能性做好准备。在小型系统上对安全措施进行实证测试是必不可少的,因为它提供了宝贵的见解,而没有大规模部署的风险。让多元化的利益相关者参与有助于在开发早期识别潜在问题,确保对人工智能系统潜在影响有广泛的视角。在扩展或部署更高级功能之前建立明确的安全阈值,有助于保持对人工智能发展的控制,并确保在整个过程中安全始终是首要任务。
透明和适应性强的开发过程对于建立信任并保持人工智能系统的安全性至关重要。实施可解释的人工智能技术使系统的决策过程更具可解释性,使开发者和用户都能理解人工智能如何得出结论。定期对系统的性能、公平性和安全性进行外部审计提供客观评估,并有助于确定改进领域。对模型的性能、局限性和预期用例进行清晰的文档记录有助于管理期望并防止滥用。开发一个快速整合新的安全研究成果的过程确保人工智能系统始终与人工智能安全领域的最新进展保持同步。
公平性和偏见缓解是负责任的人工智能开发的关键方面。确保人工智能系统不会持续或放大偏见,需要使用多样化和代表性的训练数据,实施主动和反应性的偏见检测和缓解措施,并在不同的背景和用户群体中进行定期的公平性审计。应用适合特定应用的情境公平性有助于确保人工智能系统在各种场景中的决策是公平的。
隐私和数据保护 对于安全的 AI 开发至关重要。实施强大的用户隐私保护措施包括应用数据最小化原则,使用匿名化、加密和隐私保护 AI 技术,为用户提供对其数据的明确控制权,并建立和执行数据保留政策。这些措施有助于建立用户信任并确保符合数据保护法规。
安全和安全措施 对于确保 AI 系统按预期行为并抵抗潜在攻击至关重要。这包括实施内容过滤和速率限制以防止滥用,定期进行对抗性测试以识别漏洞,建立监控和警报系统以检测异常行为,以及为多模态 AI 系统应用多模式安全考虑。这些措施有助于保护 AI 系统免受外部威胁并防止意外有害行为。
负责任的 AI 不仅是一个道德上的要求,而且是构建可持续、值得信赖和有效的通用人工智能应用的关键组成部分。通过在整个开发周期中整合公平性、可解释性、隐私和安全考虑因素,我们可以利用像 Google Gemini 这样的模型的力量,同时减轻潜在的风险和负面影响。
正如我们在本章中探讨的那样,实施负责任的 AI 实践需要多方面的方法。这包括多样化的代表性数据、偏见检测和缓解、可解释 AI 技术、强大的隐私保护和全面的安全措施。通过学习像 Google 和 Anthropic 这样的行业领导者,并将他们的框架适应到我们的特定用例中,我们可以创建通用人工智能应用,不仅推动可能性的边界,而且以造福整个社会的方式进行。
记住,负责任的 AI 是一个持续的过程,而不是一次性的勾选框。随着通用人工智能技术持续快速地发展,了解 AI 伦理的最新进展至关重要,定期重新评估我们的应用,并准备好相应地调整我们的实践。
在本书中,我们开始了一段穿越通用人工智能世界的全面旅程,重点关注利用像 Vertex AI 上的 Google Gemini 这样的强大模型。我们首先探索了用例构思和选择的过程,学习如何识别通用人工智能可以提供重大价值并转型业务流程的机会。
从那里,我们深入到至关重要的概念验证(POC)开发阶段,通过四个实际示例,将其置于一个框架中以简化规模并细化我们的方法。然后,我们探讨了关键的仪器化方面,学习如何有效地将通用人工智能模型集成到我们的应用和系统中,以及如何监控和优化其性能。
最后,我们讨论了至关重要的负责任 AI 主题,确保我们在推动生成式 AI 可能性的边界时,以符合道德、公平且对社会有益的方式进行。
从构思到负责任实施的过程代表了在现实世界中成功利用生成式 AI 的蓝图。随着这些技术以快速的速度发展,我们讨论的原则和实践将变得越来越重要。
人工智能的未来不仅仅是构建更强大的模型;它关于构建更智能、更负责任的系统,这些系统能够增强人类能力,并为我们的世界做出积极贡献。通过遵循本书中概述的方法——从谨慎选择用例到严格的 POC 开发、深思熟虑的仪表化和对负责任 AI 的坚定不移的承诺——您将充分准备好在这个激动人心且变革性的领域中引领潮流。
在您推进自己的生成式 AI 项目时,请记住,成功不仅在于技术实现,还在于深思熟虑地考虑如何使用这些强大的工具在创造真正价值的同时,维护最高的道德和责任标准。AI 发展的旅程是持续的,您在塑造其未来的角色现在就开始了。
加入我们的 Discord 社区
加入我们的社区 Discord 空间,与作者和其他读者进行讨论:
packt.link/genpat


订阅我们的在线数字图书馆,全面访问超过 7,000 本书籍和视频,以及行业领先的工具,帮助您规划个人发展并推进您的职业生涯。更多信息,请访问我们的网站。
为什么订阅?
-
使用来自超过 4,000 位行业专业人士的实用电子书和视频,花更少的时间学习,更多的时间编码
-
通过为您量身定制的技能计划提高您的学习效果
-
每月免费获得一本电子书或视频
-
完全可搜索,便于轻松访问关键信息
-
复制粘贴、打印和收藏内容
在www.packt.com,您还可以阅读一系列免费的技术文章,订阅各种免费通讯,并享受 Packt 书籍和电子书的独家折扣和优惠。
您可能还会喜欢的其他书籍
如果您喜欢这本书,您可能对 Packt 出版的以下其他书籍也感兴趣:
(https://www.packtpub.com/en-in/product/generative-ai-with-langchain-9781835083468)
使用 LangChain 的生成式 AI
本·奥法特
ISBN: 978-1-83508-346-8
-
理解 LLM,它们的优点和局限性
-
掌握生成式 AI 基础和行业趋势
-
使用 LangChain 创建类似问答系统和聊天机器人的 LLM 应用
-
理解 Transformer 模型和注意力机制
-
使用 pandas 和 Python 自动化数据分析可视化
-
掌握提示工程以提高性能
-
微调 LLMs 并了解释放其力量的工具
-
使用 LangChain 将 LLMs 作为服务部署并应用评估策略
-
使用开源 LLMs 私下与文档互动,以防止数据泄露
构建由 LLM 驱动的应用程序
Valentina Alto
ISBN: 978-1-83546-231-7
-
探索 LLM 架构的核心组件,包括编码器-解码器块和嵌入
-
理解 LLMs(如 GPT-3.5/4、Llama 2 和 Falcon LLM)的独特功能
-
使用 LangChain 等 AI 编排器,配合 Streamlit 进行前端开发
-
熟悉 LLM 组件,如内存、提示和工具
-
学习如何使用非参数知识和向量数据库
-
理解 LFMs 对人工智能研究和行业应用的影响
-
使用微调自定义你的 LLMs
-
了解由 LLM 驱动的应用程序的伦理影响
Packt 正在寻找像你这样的作者
如果你有兴趣成为 Packt 的作者,请访问authors.packtpub.com并今天申请。我们已与成千上万的开发者和科技专业人士合作,就像你一样,帮助他们将见解分享给全球科技社区。你可以提交一般申请,申请我们正在招募作者的特定热门话题,或者提交你自己的想法。
分享你的想法
现在你已经完成了《生成式 AI 应用集成模式》,我们非常想听听你的想法!如果你在亚马逊购买了这本书,请点击此处直接转到该书的亚马逊评论页面并分享你的反馈或在该购买网站上留下评论。
你的评论对我们和科技社区非常重要,并将帮助我们确保我们提供高质量的内容。


浙公网安备 33010602011771号