为开发人员构建生成 AI 解决方案简介
由大型语言模型(LLM)启用的生成 AI 为软件开发人员和组织带来了令人兴奋的新可能性。 Azure OpenAI 等服务通过提供易于使用的 API 来使 AI 开发实现民主化,使任何技能级别的开发人员能够将高级 AI 功能集成到其应用程序中,而无需具备专业知识或要求组织投资硬件。
作为应用程序开发人员,你可能很难了解你可以扮演什么角色以及你所处的位置。 例如,你可能想知道“AI 堆栈”中的哪个级别应该集中学习? 或者,你可能想知道,鉴于现有技术,你能够生成哪些功能?
若要回答这些问题,必须首先开发一个心理模型,以映射所有新的术语和技术如何适应你已经理解的内容。 开发心理模型有助于在应用程序中设计和生成生成 AI 功能。 为此,本系列文章的目的是说明当前软件开发体验如何应用于生成 AI。 在开始开发第一个生成 AI 解决方案时,这些文章还提供了一个关于关键字和概念的级别集。
企业希望通过生成 AI 实现什么目标?
若要了解当前的软件开发体验如何应用于生成式 AI,必须首先了解企业打算如何从中受益。
企业将生成 AI 视为提高客户参与度、提高运营效率、增强解决问题和创造力的手段。 将生成 AI 集成到现有系统中为企业提供了增强其软件生态系统的机会。 它可以使用高级 AI 功能来补充传统软件功能,例如针对用户或可回答组织或产品特定问题的智能代理的个性化建议。
下面是一些常见方案,其中生成 AI 可以帮助企业:
- 内容生成
- 生成文本、代码、图像和声音。 这对于营销、销售、IT、内部通信等非常有用。
- 自然语言处理
- 通过建议或完整生成消息撰写或改进业务通信。
- “与数据聊天”,或者换句话说,允许用户使用存储在数据库或文档中的数据作为答案的基础,在聊天体验中提问。
- 汇总、组织和简化大型内容主体,使内容更易于访问。
- “语义搜索”,或者更确切地说,允许用户搜索文档和数据,而无需使用确切的关键字匹配项。
- 翻译语言以提高内容的覆盖范围和可访问性。
- 数据分析
- 分析市场并确定数据趋势。
- 建模“假设”方案,以帮助公司规划业务每个领域可能的变化或挑战。
- 分析代码以建议改进、修复 bug 并生成文档。
正如你所看到的,软件开发人员有机会通过将生成 AI 应用程序和功能集成到组织所依赖的软件中来显著增加其影响。
如何生成这些类型的应用程序?
虽然大型语言模型(LLM)执行繁重的工作,但你构建集成、协调和监视结果的系统。 虽然有很多学习知识,但你可以应用你已经知道的技能:
- 使用 REST、JSON 或特定于语言的软件开发工具包(SDK)调用 API
- 协调对 API 的调用和执行业务逻辑
- 存储和从数据存储进行检索
- 将输入和输出集成到用户体验中
- 创建可从 LLM 调用的 API
通过这种方式,开发生成式 AI 解决方案基于现有技能。
有哪些工具和服务可用?
Microsoft投资开发工具、服务、API、示例和学习资源,帮助你开始生成 AI 开发之旅。 每个都强调了构建生成 AI 解决方案所需的一些主要关注或责任。 若要有效地利用给定的服务、API 或资源,质询是确保:
- 了解给定类型的生成 AI 功能中的典型函数、角色和职责? 例如,正如我们在描述基于检索扩充生成(RAG)的聊天系统的概念性文章中讨论的那样,系统中有许多体系结构责任。 在设计解决问题的系统之前,请务必仔细了解问题域和约束。
- 了解给定函数、角色或责任是否存在 API、服务和工具? 了解问题域和约束后,可以选择使用自定义代码自行构建系统的该方面,或使用现有的低代码/无代码工具,或调用现有服务的 API。
- 了解选项,包括以代码为中心的无代码/低代码解决方案。 你可以自己构建一切,但这是一个有效的利用你的时间和技能吗? 根据你的要求,通常可以将技术和方法(代码、无代码、低代码、工具)组合在一起。
此处的要点是,在应用程序中构建生成 AI 功能没有一种正确的方法。 存在许多工具和方法。 评估权衡很重要。
首先关注应用程序层
无需了解生成 AI 的一切工作才能开始并提高效率。 如前所述,你可能已经足够了解,因为可以使用 API 并应用现有技能。
例如,无需从头开始训练自己的 LLM。 培训 LLM 需要大多数公司不愿意承诺的时间和资源。 而是通过在现有预先训练的基础模型(如 GPT-4)的基础上构建,方法是对现有的托管服务(如 Azure OpenAI API)进行 API 调用。 这样,在现有应用程序中添加生成 AI 功能与基于 API 调用添加任何其他功能没有什么不同。
研究 LLM 的训练方式或它们如何工作可能满足你的智力好奇心,但真正了解 LLM 的工作原理需要深入了解数据科学和数学背景才能支持它。 这可能包括统计、概率和信息理论的研究生级课程。
如果你来自计算机科学背景,你可以欣赏大多数应用程序开发发生在研究和技术的“堆栈中的较高层”。 你可能对每个层有一些了解,但你可能专门介绍应用程序开发层,重点介绍特定的编程语言和平台(可用的 API、工具、模式等)。
AI 领域也是如此。 可以理解并欣赏基于 LLM 构建的理论,但可能会将注意力集中在应用程序层上,或者帮助实现模式或流程,以便在公司中实现生成 AI 工作。
下面是在新的或现有应用程序中实现生成 AI 功能所需的知识层的过度简化表示形式:
在最低级别,你拥有数据科学家,他们正在进行数据科学研究,以便基于对统计、概率理论等的深入数学理解来解决或改进 AI。 一层向上,基于最低的基础层,你有数据科学家将理论概念实现到 LLM 中,构建神经网络并训练权重和偏差,以提供一个实际的软件片段,这些软件可以接受输入(提示)并生成结果(完成)。 基于提示撰写完成的计算过程称为 推理。 有一些人负责实现神经网络的神经元如何预测要生成的下一个单词或像素。
给定训练模型并根据输入生成结果所需的处理能力。 模型通常训练并托管在大型数据中心。 可以在本地计算机上训练或托管模型,但结果通常很慢(没有专用的 GPU 视频卡来帮助处理生成结果所需的计算)。
在大型数据中心托管时,通过 REST API 提供对这些模型的编程访问,这些模型有时由 SDK“包装”,可供应用程序开发人员轻松使用。 其他工具可帮助改进开发人员体验,提供可观测性或其他实用工具。 应用程序开发人员可以调用这些 API 来实现业务功能。
除了以编程方式提示模型外,还有一些模式和流程有助于企业基于生成 AI 构建可靠的业务功能。 例如,有一些模式有助于企业确保生成的文本、代码、图像和声音符合道德和安全标准,并承诺客户数据的隐私。
在此问题或层堆栈中,如果你是负责构建业务功能的应用程序开发人员,则可以将应用程序层之外推送到开发和训练自己的 LLM。 但这种理解水平需要一组新的技能,这些技能通常仅在学术上可用。 如果你不能致力于在学术上开发数据科学的能力,以帮助构建“堆栈中的下一层”(因此,如此说来),请专注于应用程序层主题,例如:
- 了解可用的 API 和 SDK、可用的内容、各种终结点生成的内容等。
- 了解相关工具和服务,帮助你构建生产就绪的生成 AI 解决方案所需的所有功能。
- 了解提示工程,例如如何通过提问或重新描述问题来获得最佳结果。
- 了解瓶颈的出现位置以及如何缩放解决方案。 在不违反客户隐私问题的情况下了解日志记录或获取遥测所涉及的内容。
- 了解各种 LLM 的特征(其优势、用例、基准是什么及其衡量方式、每个供应商生产的供应商和模型之间的关键区别等),以便为公司的需求选择合适的模型。
- 了解用于在应用程序中构建有效且可复原的生成 AI 功能的最新模式、工作流和流程。
来自Microsoft的可用服务和工具
Microsoft提供了低代码和无代码生成 AI 工具和服务,可帮助你构建部分或整个解决方案。 各种 Azure 服务可以发挥关键作用,每个服务都有助于解决方案的效率、可伸缩性和稳定性:
以代码为中心的 API 和 SDK 方法
每个生成 AI 解决方案的核心是 LLM 模型,Azure OpenAI 提供对 GPT-4 等模型中提供的所有功能的访问权限。
产品 | 说明 |
---|---|
Azure OpenAI | 提供对强大语言模型(如 GPT-4)的访问权限的托管服务。 可通过多种不同的 API 执行 LLM 的所有典型功能,例如创建嵌入、创建聊天体验等,并完全访问设置和调整,以便根据需要自定义结果。 |
执行环境
由于要构建业务逻辑、演示逻辑或 API,以便将生成 AI 集成到组织的应用程序中,需要一个位置来托管和执行该逻辑。
产品 | 说明 |
---|---|
Azure App 服务(或多个基于容器的云服务之一) | 此平台可以托管用户与 RAG 聊天系统交互的 Web 界面或 API。 它支持快速开发、部署和缩放 Web 应用程序,以便更轻松地管理系统的前端组件。 |
Azure Functions | 使用无服务器计算处理 RAG 聊天系统中的事件驱动任务。 例如,使用它来触发数据检索进程、处理用户查询或处理后台任务,例如数据同步和清理。 它允许采用更模块化、可缩放的方法来构建系统的后端。 |
低代码/无代码
或者,解决方案所需的一些逻辑可以快速生成,并通过低代码或无代码解决方案可靠地托管。
产品 | 说明 |
---|---|
Azure AI Studio | Azure AI Studio 可用于训练、测试和部署可增强 RAG 聊天系统的自定义机器学习模型。 例如,使用 Azure AI Studio 自定义响应生成或改进检索到的信息相关性。 |
矢量数据库
某些生成 AI 解决方案可能需要存储和检索用于增强生成的数据(例如,基于 RAG 的聊天系统,允许用户与组织的数据聊天)。 在此用例中,需要矢量数据存储。
产品 | 说明 |
---|---|
Azure AI 搜索 | 此服务可用于有效地搜索大型数据集,以查找可用于通知语言模型生成的响应的相关信息。 它适用于 RAG 系统的检索组件,确保生成的响应尽可能具有信息性和上下文相关性。 |
Cosmos DB | 这种全球分布式多模型数据库服务可以存储 RAG 聊天系统需要访问的大量结构化和非结构化数据。 其快速读取和写入功能使它非常适合将实时数据传送到语言模型,并存储用户交互以进一步分析。 |
用于 Redis 的 Azure 缓存 | 此完全托管的内存中数据存储可用于缓存经常访问的信息,减少延迟并提高 RAG 聊天系统的性能。 它特别适用于存储会话数据、用户首选项和常见查询。 |
Azure Database for PostgreSQL 灵活服务器 | 此托管数据库服务可以存储应用程序数据,包括日志、用户配置文件和历史聊天数据。 其灵活性和可伸缩性支持 RAG 聊天系统的动态需求,确保数据一致可用且安全。 |
其中每个 Azure 服务都有助于为生成式 AI 解决方案创建全面的、可缩放且高效的体系结构,使开发人员能够充分利用 Azure 的云功能和 AI 技术。
使用 Azure OpenAI API 进行以代码为中心的生成 AI 开发
在本部分中,我们将重点介绍 Azure OpenAI API。 如前所述,可通过 RESTful Web API 以编程方式访问 LLM 功能。 可以使用任何新式编程语言来调用这些 API。 在许多情况下,特定于语言或平台的 SDK 在 REST API 调用周围以“包装器”的形式运行,以使体验更加平庸。
- 适用于 .NET 的 Azure OpenAI 客户端库
- 适用于 Java 的 Azure OpenAI 客户端库
- 适用于 JavaScript 的 Azure OpenAI 客户端库
- 适用于 Go 的 Azure OpenAI 客户端模块
- Python 没有特定于 Azure 的客户端库。 使用 OpenAI Python 包 并更改多个选项。
如果语言或平台 SDK 不可用,最糟糕的情况是必须直接对 Web API 进行 REST 调用。 但是,大多数开发人员都熟悉如何调用 Web API。
Azure OpenAI 提供了一系列 API,旨在促进不同类型的 AI 驱动的任务,使开发人员能够将高级 AI 功能集成到其应用程序中。 下面是 OpenAI 中提供的关键 API 的概述:
- 聊天完成 API:此 API 侧重于文本生成方案,包括聊天功能,从而创建聊天机器人和虚拟助手,这些聊天机器人和虚拟助手可以参与自然的类似人类的对话。 它针对交互式用例(包括客户支持、个人助理和交互式学习环境)进行优化。 但是,它还用于所有文本生成方案,包括摘要、自动完成、编写文档、分析文本、翻译等。 它是目前处于预览状态的视觉功能的入口点(即上传图像并询问其问题)。
- 审查 API:此 API 旨在帮助开发人员识别和筛选出文本中潜在的有害内容,从而提供一种工具,通过自动检测冒犯性、不安全或其他不适当的材料来确保更安全的用户交互。
- 嵌入 API:嵌入 API 生成文本输入的矢量表示形式,将单词、句子或段落转换为高维向量。 这些嵌入可用于语义搜索、聚类分析、内容相似性分析等。 它捕获文本中的基础含义和语义关系。
- 图像生成 API:此 API 允许从文本说明生成原始、高质量的图像和艺术。 它基于 OpenAI 的 DALL·E 模型,它可以根据收到的提示创建与各种样式和主题匹配的图像。
- 音频 API:此 API 提供对 OpenAI 音频模型的访问权限,该模型专为自动语音识别而设计。 它可以将口语转录为文本,也可以将文本转录为语音,支持各种语言和方言。 这对于需要语音命令、音频内容听录等的应用程序非常有用。
虽然生成 AI 可用于处理多种不同的媒体形式,但本文的其余部分侧重于基于文本的生成 AI 解决方案。 这包括聊天、摘要等方案。
如何使用生成式 AI 开始开发应用程序
不熟悉不熟悉语言、API 或技术的软件开发人员通常通过以下教程或培训模块开始学习它,以生成小型应用程序。 一些软件开发人员更喜欢采用自我引导的方法并构建小型实验应用程序。 这两种方法都有效且有用。
开始时,最好从小型、承诺很少、迭代和构建理解和技能入手,因为使用生成式 AI 进行开发带来了独特的挑战。 例如,在传统的软件开发中,可以依赖于确定性输出 – 对于任意一组输入,每次都能得到完全相同的输出。 但是,生成性是不确定的 - 对于给定提示,你永远不会得到两次完全相同的答案,这是许多新挑战的根源。 在入门之前,请考虑以下提示:
提示 #1:明确尝试实现的内容。
- 获取你尝试解决的问题的具体信息:生成 AI 可以解决各种问题,但成功来自明确定义要解决的特定问题。 是否尝试生成文本、图像、代码或其他内容? 更具体,可以更好地定制 AI 以满足你的需求。
- 了解受众:了解受众有助于定制 AI 的输出,使其符合预期,无论是休闲用户还是特定领域的专家。
提示 #2:发挥 LLM 的优势。
- 了解 LLM 的限制和偏见:虽然 LLM 功能强大,但它们具有限制和固有偏见。 了解限制和偏见有助于围绕它们进行设计或合并缓解措施。
- 了解 LLM 的 Excel 位置:LLM 在内容创建、摘要、语言翻译等任务中表现突出。 虽然每个新版本的决策功能和歧视功能越来越强大,但可能还有其他类型的 AI 更适合你的方案或用例。 为作业选择正确的工具。
提示 #3:最佳结果以良好的提示开始。
- 了解提示工程最佳做法:制作有效的提示是一种艺术。 尝试使用不同的提示查看它们如何影响输出。 简洁但具有描述性。
- 提交迭代优化:通常,第一个提示可能不会产生所需的结果。 这是一个试验和错误的过程。 使用输出进一步优化提示。
构建第一个生成 AI 解决方案
如果想要立即开始尝试生成生成 AI 解决方案,建议使用自己的 Python 数据示例来了解聊天入门。 .NET、Java 和 JavaScript 中还提供了本教程的版本。
可能影响应用程序设计决策的最终注意事项
下面是本文中要考虑的事项和其他要点的简短列表,这些内容会影响应用程序设计决策:
- 明确定义问题空间和受众,使 AI 的功能与用户期望保持一致,从而优化解决方案针对预期用例的有效性。
- 如果低代码/无代码平台满足项目要求,请使用低代码/无代码平台进行快速原型制作和开发,评估开发速度和可自定义性之间的权衡。 探索应用程序部分低代码和无代码解决方案的可能性,以加快开发速度,并使非技术团队成员能够参与该项目。