面向开发人员的生成 AI 解决方案
由大型语言模型(LLM)启用的生成 AI 为软件开发人员和组织带来了令人兴奋的新可能性。 Azure OpenAI 服务等服务使 AI 开发可通过易于使用的 API 进行访问。 所有技能级别的开发人员都可以将高级 AI 功能集成到其应用程序中,而无需专业知识或硬件投资。
作为应用程序开发人员,你可能想要了解可以扮演的角色以及适合的位置。 例如,也许你想知道应该把学习重点放在“AI 堆栈”中的哪个级别。 或者,你可能想知道在现有技术下你能够建造什么。
若要回答这些问题,请务必首先开发一个心理模型,以将新术语和技术如何融入你已经理解的内容。 开发心理模型有助于在应用程序中设计和生成生成 AI 功能。
在一系列文章中,我们将向你展示当前软件开发体验如何应用于生成 AI。 这些文章还为您开始开发第一个生成式 AI 解决方案奠定了关键字和概念的基础。
企业如何受益于使用生成式人工智能
若要了解当前的软件开发体验如何应用于生成式 AI,请务必了解企业打算如何从生成式 AI 中受益。
企业将生成 AI 视为提高客户参与度、提高运营效率、增强解决问题和创造力的手段。 将生成 AI 集成到现有系统中为企业提供了增强其软件生态系统的机会。 它可以为传统软件功能补充高级 AI 功能,例如针对用户或智能代理的个性化建议,可以回答有关组织或其产品或服务的特定问题。
下面是一些常见方案,其中生成 AI 可以帮助企业:
内容生成:
- 生成文本、代码、图像和声音。 此方案可用于营销、销售、IT、内部通信等。
自然语言处理:
- 通过建议或完整生成消息撰写或改进业务通信。
- 使用“与数据聊天”。也就是说,允许用户通过使用存储在组织数据库或文档中的数据作为答案的基础,在聊天体验中提问。
- 汇总、组织和简化大型内容主体,使内容更易于访问。
- 使用语义搜索。 也就是说,允许用户搜索文档和数据,而无需使用确切的关键字匹配项。
- 翻译语言以提高内容的覆盖范围和可访问性。
数据分析:
- 分析市场并确定数据趋势。
- 建模“假设”方案,以帮助公司规划业务每个领域可能的变化或挑战。
- 分析代码以建议改进、修复 bug 并生成文档。
软件开发人员有机会通过将生成 AI 应用程序和功能集成到组织所依赖的软件中来大幅提高其影响。
如何构建生成式 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 中实现理论概念,构建神经网络并训练权重和偏差,以提供可以接受输入(提示)并产生结果(竞争)的实用软件。 根据提示组成完成的计算过程称为i推理。 数据科学家确定 神经网络的神经元如何预测要生成的下一个单词或像素。
鉴于训练模型和基于输入生成结果所需的处理能力,模型通常会在大型数据中心进行训练和托管。 可以在本地计算机上训练或托管模型,但结果通常很慢。 速度和效率得益于独立的 GPU 显卡,这些显卡有助于处理生成结果所需的计算。
托管在大型数据中心时,将通过 REST API 提供对这些模型的编程访问。 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 聊天系统中的事件驱动任务。 例如,使用它来触发数据检索进程、处理用户查询或处理后台任务,例如数据同步和清理。 它允许一种更模块化、可缩放的方法来构建系统的后端。 |
低代码和无代码解决方案
您可以使用低代码或无代码解决方案快速构建实现生成AI愿景所需的一些逻辑,并可靠地托管这些逻辑。
产品 | 说明 |
---|---|
Azure AI Foundry | 可以使用 Azure AI Foundry 来训练、测试和部署自定义机器学习模型,以增强 RAG 聊天系统。 例如,使用 Azure AI Foundry 自定义响应生成或改进检索到的信息的相关性。 |
矢量数据库
某些生成 AI 解决方案可能需要存储和检索用于扩充生成的数据。 例如,基于 RAG 的聊天系统允许用户与组织的数据聊天。 在此用例中,需要矢量数据存储。
产品 | 说明 |
---|---|
Azure AI 搜索 | 可以使用此服务有效地搜索大型数据集,以查找相关信息,以通知语言模型生成的响应。 这对于 RAG 系统的检索组件非常有用,因此生成的响应尽可能具有信息性和上下文相关。 |
Azure 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 调用的包装器运行,以使体验更加惯用。
下面是 Azure OpenAI REST API 包装器的列表:
- 适用于 .NET 的 Azure OpenAI 客户端库
- 适用于 Java 的 Azure OpenAI 客户端库
- 适用于 JavaScript 的 Azure OpenAI 客户端库
- 适用于 Go 的 Azure OpenAI 客户端模块
- 使用 OpenAI Python 包 并更改多个选项。 Python 不提供特定于 Azure 的客户端库。
如果语言或平台 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 开发应用程序具有独特的挑战。 例如,在传统的软件开发中,可以依赖于确定性输出。 也就是说,对于任何一组输入,每次都能得到完全相同的输出。 但生成式 AI 是非确定性的。 对于给定的提示,你永远不会得到完全相同的答案两次,这是许多新挑战的根源。
开始时,请考虑以下提示。
提示 1:明确要实现的目标
- 具体说明你要解决的问题:生成 AI 可以解决各种问题,但成功来自明确定义要解决的特定问题。 是否尝试生成文本、图像、代码或其他内容? 更具体,可以更好地定制 AI 以满足你的需求。
- 了解受众:了解受众有助于定制 AI 的输出,使其符合预期,无论是休闲用户还是特定领域的专家。
提示 2:使用 LLM 的优势
- 了解 LLM 的限制和偏见:尽管 LLM 功能强大,但它们具有限制和固有偏见。 了解限制和偏见有助于围绕它们进行设计或合并缓解措施。
- 了解大型语言模型的优势:大型语言模型擅长内容创建、摘要和语言翻译等任务。 尽管每个新版本的决策功能和歧视功能越来越强,但可能还有其他类型的 AI 更适合你的方案或用例。 为作业选择正确的工具。
提示 3:为获得良好结果,请使用良好的提示
- 了解提示工程最佳做法:制作有效的提示是一种艺术。 尝试使用不同的提示查看它们如何影响输出。 简洁但具有描述性。
- 提交迭代优化:通常,第一个提示可能不会产生所需的结果。 这是一个试验和错误的过程。 使用输出来进一步完善您的提示。
构建第一个生成 AI 解决方案
如果您想立即开始尝试构建生成式 AI 解决方案,我们建议您查看使用您自己的 Python 数据样本开始聊天。 本教程还可用于 .NET、Java和 JavaScript。
应用程序设计的最终注意事项
下面是本文要考虑的事项和其他要点的简短列表,这些内容可能会影响应用程序设计决策:
- 明确定义问题空间和受众,使 AI 的功能与用户期望保持一致。 针对预期用例优化解决方案的有效性。
- 如果低代码/无代码平台满足项目要求,则使用低代码/无代码平台进行快速原型制作和开发。 评估开发速度和可自定义性之间的权衡。 探索应用程序部分低代码和无代码解决方案的可能性,以加快开发速度,并使非技术团队成员能够参与该项目。