当前位置: 首页 > news >正文

Azure OpenAI 聊天功能全解析:Java 开发者指南

Azure OpenAI 聊天功能全解析:Java 开发者指南

前言

在当今人工智能飞速发展的时代,AI 驱动的文本生成技术正深刻改变着众多应用场景。Azure OpenAI 作为这一领域的重要参与者,由 ChatGPT 提供支持,不仅具备传统 OpenAI 的功能,更凭借其增强特性以及额外的 AI 安全和负责任的 AI 功能脱颖而出。对于 Java 开发者而言,Azure 提供了将 AI 与一系列 Azure 服务集成的绝佳机会,充分挖掘 AI 的全部潜力。本文将深入探讨 Azure OpenAI 聊天功能,从前提条件到配置、使用方法以及示例代码,为你全面剖析这一强大工具。

Azure OpenAI 概述

Azure 的 OpenAI 产品在传统 OpenAI 功能基础上进行了扩展,提供更强大的 AI 驱动文本生成能力。同时,Azure 注重 AI 安全和负责任的 AI 实践,在其最近的更新中进一步强化了这些特性。通过将 AI 与诸如 Azure 上的 Vector Stores 等一系列服务集成,Java 开发者能够利用 Azure 平台构建更智能、更安全的应用程序。

前提条件

连接选项

Azure OpenAI 客户端提供三种连接方式:

  1. 使用 Azure API 密钥:从 Azure 门户上的 Azure OpenAI 服务部分获取 Azure OpenAI endpoint 和 api - key。
  2. 使用 OpenAI API 密钥:若使用 OpenAI 服务(而非 Azure)进行身份验证,提供 OpenAI API 密钥,此时终端节点会自动设置为 api.openai.com/v1,同时需添加 spring.ai.azure.openai.chat.options.deployment - name 属性来指定要使用的 OpenAI 模型名称。
  3. 使用 Microsoft Entra ID:通过创建一个 TokenCredential bean 的配置,使用 Microsoft Entra ID(以前称为 Azure Active Directory)进行身份验证。

部署名称

要使用 Azure AI 应用程序,需通过 Azure AI 门户创建 Azure AI 部署。在 Azure 中,每个客户端都必须指定一个 Deployment Name 连接到 Azure OpenAI 服务。注意,Deployment Name 与选择部署的模型不同。例如,可以将名为“MyAiDeployment”的部署配置为使用 GPT 3.5 Turbo 模型或 GPT 4.0 模型。若要开始使用默认设置创建部署,可使用 Deployment Name: gpt - 4o 和 Model Name: gpt - 4o,此配置与 Spring Boot Azure AI Starter 及其自动配置功能的默认配置一致。若使用不同的 Deployment Name,需相应更新 configuration 属性:spring.ai.azure.openai.chat.options.deployment - name = 。由于 Azure OpenAI 和 OpenAI 的不同部署结构,Azure OpenAI 客户端库中存在名为 deploymentOrModelName 的情况,因为在 OpenAI 中没有 Deployment Name,只有 Model Name。并且,属性 spring.ai.azure.openai.chat.options.model 已重命名为 spring.ai.azure.openai.chat.options.deployment - name。若决定连接到 OpenAI 而非 Azure OpenAI,通过设置 spring.ai.azure.openai.openai - api - key = 属性,此时 spring.ai.azure.openai.chat.options.deployment - name 被视为 OpenAI 模型名称。

配置步骤

添加存储库和 BOM

Spring AI 工件发布在 Maven Central 和 Spring Snapshot 存储库中。需将这些存储库添加到构建系统中,同时为了更好地进行依赖项管理,Spring AI 提供了一个 BOM(物料清单),以确保整个项目中使用一致的 Spring AI 版本。

自动配置

Spring AI 为 Azure OpenAI 聊天客户端提供 Spring Boot 自动配置。要启用它,需在项目的 Maven pom.xml 或 Gradle build.gradle 文件中添加以下依赖项:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring - ai - starter - model - azure - openai</artifactId>
</dependency>

同时,需将 Spring AI BOM 添加到构建文件中。Azure OpenAI 聊天客户端通过 Azure SDK 提供的 OpenAIClientBuilder 创建,Spring AI 允许通过提供 AzureOpenAIClientBuilderCustomizer bean 来自定义构建器。例如,可使用定制器更改默认响应超时:

@Configuration
public class AzureOpenAiConfig {@Beanpublic AzureOpenAIClientBuilderCustomizer responseTimeoutCustomizer() {return openAiClientBuilder -> {HttpClientOptions clientOptions = new HttpClientOptions().setResponseTimeout(Duration.ofMinutes(5));openAiClientBuilder.httpClient(HttpClient.createDefault(clientOptions));};}
}

聊天属性

  1. 连接属性:前缀 spring.ai.azure.openai 用于配置与 Azure OpenAI 的连接,相关属性如下:
属性描述默认值
spring.ai.azure.openai.api - key来自 Azure AI OpenAI 的密钥(Keys and Endpoint 部分 Resource Management)-
spring.ai.azure.openai.endpointAzure AI OpenAI 中的终结点(Keys and Endpoint 部分 Resource Management)-
spring.ai.azure.openai.openai - api - key(非 Azure)OpenAI API 密钥,用于使用 OpenAI 服务进行身份验证,自动将终端节点设置为 api.openai.com/v1,使用任一 api - key 或 openai - api - key 属性,使用此配置时,spring.ai.azure.openai.chat.options.deployment - name 作为 OpenAi 模型名称-
spring.ai.azure.openai.custom - headers要包含在 API 请求中的自定义标头的映射,映射中的每个条目表示一个标头,key 为标头名称,value 为标头值空地图

现在,启用和禁用聊天自动配置通过带有前缀 spring.ai.model.chat 来实现。启用时,spring.ai.model.chat = azure - openai(默认启用);禁用时,spring.ai.model.chat = none(或任何与 azure - openai 不匹配的值),此更改是为了允许配置多个模型。
2. ChatModel 配置属性:前缀 spring.ai.azure.openai.chat 用于配置 ChatModel 的 Azure OpenAI 实现,相关属性如下:

属性描述默认值
spring.ai.azure.openai.chat.enabled(已删除且不再有效)启用 Azure OpenAI 聊天模型true
spring.ai.model.chat启用 Azure OpenAI 聊天模型azure - openai
spring.ai.azure.openai.chat.options.deployment - name在 Azure 中使用时,指模型的“部署名称”,可在 oai.azure.com/portal 中找到,注意“部署名称”与模型本身不同GPT - 4O 型
spring.ai.azure.openai.chat.options.maxTokens要生成的最大令牌数-
spring.ai.azure.openai.chat.options.temperature采样温度,控制生成的完成项的创造性,较高值使输出更随机,较低值使结果更集中确定,不建议同时修改 temperature 和 top_p0.7
spring.ai.azure.openai.chat.options.topP细胞核采样的替代方法,使模型考虑具有提供概率质量的标记的结果-
spring.ai.azure.openai.chat.options.logitBiasGPT 标记 ID 和偏差分数之间的映射,影响特定标记出现在完成响应中的概率,令牌 ID 由外部分词器工具计算,偏差分数范围为 - 100 到 100-
spring.ai.azure.openai.chat.options.user调用方或最终用户的标识符,用于跟踪或速率限制目的-
spring.ai.azure.openai.chat.options.n应为聊天完成响应生成的聊天完成选项的数量-
spring.ai.azure.openai.chat.options.stop将结束 completions 生成的文本序列的集合-
spring.ai.azure.openai.chat.options.presencePenalty根据生成的标记在生成文本中的现有存在影响生成标记出现概率,正值使标记在已存在时不太可能出现-
spring.ai.azure.openai.chat.options.responseFormat指定模型输出格式的对象,用 AzureOpenAiResponseFormat.JSON 启用 JSON 模式,用 AzureOpenAiResponseFormat.TEXT 启用 TEXT 模式-
spring.ai.azure.openai.chat.options.frequencyPenalty根据生成的标记在生成文本中的累积频率影响生成标记出现概率,正值使令牌随频率增加不太可能出现-
spring.ai.azure.openai.chat.options.proxy - tool - calls若为 true,Spring AI 将不处理内部函数调用,而是代理给客户端,客户端负责处理函数调用、分派给适当函数并返回结果,默认值为 false,仅适用于支持函数调用的聊天模型false

所有前缀为 spring.ai.azure.openai.chat.options 的属性,都可通过向 Prompt 调用添加特定于请求的运行时选项来覆盖。

运行时选项

AzureOpenAiChatOptions.java 提供模型配置,如要使用的模型、温度、频率损失等。启动时,可使用 AzureOpenAiChatModel(api, options) constructor 或 spring.ai.azure.openai.chat.options.* 属性进行配置。运行时,可通过向 Prompt 调用添加选项来覆盖默认配置。例如,覆盖特定请求的默认模型和温度:

ChatResponse response = chatModel.call(new Prompt("Generate the names of 5 famous pirates.",AzureOpenAiChatOptions.builder().deploymentName("gpt - 4o").temperature(0.4).build()));

除了特定于模型的 AzureOpenAiChatOptions.java,还可使用通过 ChatOptionsBuilder#builder()创建的可移植 ChatOptions 实例。

函数调用

可以使用 AzureOpenAiChatModel 注册自定义 Java 函数,模型能够智能地选择输出包含参数的 JSON 对象,以调用一个或多个已注册的函数。这是将 LLM 功能与外部工具和 API 连接起来的强大技术,可详细了解 Azure OpenAI 函数调用。

模态

多模态是指模型同时理解和处理来自各种来源信息(包括文本、图像、音频和其他数据格式)的能力。目前,Azure OpenAI 的 gpt - 4o Model 提供多模态支持。Azure OpenAI 可以将 base64 编码的图像列表或图像 URL 与消息合并。Spring AI 的 Message 接口通过引入 Media 类型来支持多模态 AI 模型,此类型包含有关消息中媒体附件的数据和详细信息,使用 Spring 的 org.springframework.util.MimeType 以及 java.lang.Object 来表示原始媒体数据。以下是使用 GPT_4_O 模型的代码示例:

URL url = new URL("https://docs.spring.io/spring - ai/reference/_images/multimodal.test.png");
String response = ChatClient.create(chatModel).prompt().options(AzureOpenAiChatOptions.builder().deploymentName("gpt - 4o").build()).user(u -> u.text("Explain what do you see on this picture?").media(MimeTypeUtils.IMAGE_PNG, this.url)).call().content();

也可传递多个图像,或者传入 Classpath 资源:

Resource resource = new ClassPathResource("multimodality/multimodal.test.png");
String response = ChatClient.create(chatModel).prompt().options(AzureOpenAiChatOptions.builder().deploymentName("gpt - 4o").build()).user(u -> u.text("Explain what do you see on this picture?").media(MimeTypeUtils.IMAGE_PNG, this.resource)).call().content();

Samples 控制器

创建新的 Spring Boot 项目,添加 spring - ai - starter - model - azure - openai 到 POM(或 Gradle)依赖项中。在 src/main/resources 目录下的 application.properties 文件中配置启用和配置 OpenAi 聊天模型:

spring.ai.azure.openai.api - key = YOUR_API_KEY
spring.ai.azure.openai.endpoint = YOUR_ENDPOINT
spring.ai.azure.openai.chat.options.deployment - name = gpt - 4o
spring.ai.azure.openai.chat.options.temperature = 0.7

将 api - key 和 endpoint 替换为自己的 Azure OpenAI 凭据。这将创建一个 AzureOpenAiChatModel 实现,可注入到类中。以下是一个简单的 @Controller 类示例,用于使用 Chat 模型生成文本:

@RestController
public class ChatController {private final AzureOpenAiChatModel chatModel;@Autowiredpublic ChatController(AzureOpenAiChatModel chatModel) {this.chatModel = chatModel;}@GetMapping("/ai/generate")public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return Map.of("generation", this.chatModel.call(message));}@GetMapping("/ai/generateStream")public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {Prompt prompt = new Prompt(new UserMessage(message));return this.chatModel.stream(prompt);}
}

手动配置

若要手动配置,AzureOpenAiChatModel 实现 ChatModel 和 StreamingChatModel 并使用 Azure OpenAI Java 客户端。要启用它,需在项目的 Maven pom.xml 文件中添加 spring - ai - azure - openai 依赖项:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring - ai - azure - openai</artifactId>
</dependency>

或添加到 Gradle build.gradle 文件中:

dependencies {implementation 'org.springframework.ai:spring - ai - azure - openai'
}

同时将 Spring AI BOM 添加到构建文件中。添加依赖项后,创建 AzureOpenAiChatModel 实例并使用它生成文本响应:

var openAIClientBuilder = new OpenAIClientBuilder().credential(new AzureKeyCredential(System.getenv("AZURE_OPENAI_API_KEY"))).endpoint(System.getenv("AZURE_OPENAI_ENDPOINT"));
var openAIChatOptions = AzureOpenAiChatOptions.builder().deploymentName("gpt - 4o").temperature(0.4).maxTokens(200).build();
var chatModel = AzureOpenAiChatModel.builder().openAIClientBuilder(openAIClientBuilder).defaultOptions(openAIChatOptions).build();
ChatResponse response = chatModel.call(new Prompt("Generate the names of 5 famous pirates."));
// Or with streaming responses
Flux<ChatResponse> streamingResponses = chatModel.stream(new Prompt("Generate the names of 5 famous pirates."));

这里的 gpt - 4o 实际上是 Azure AI 门户中显示的 Deployment Name。

总结

Azure OpenAI 聊天功能为 Java 开发者提供了丰富且强大的工具,通过多种连接选项、灵活的配置方式以及对多模态和函数调用的支持,能够满足不同场景下的开发需求。从简单的文本生成到复杂的多模态应用,Azure OpenAI 都展现出了巨大的潜力。通过本文的介绍,希望开发者能够快速上手,利用 Azure OpenAI 构建出更具创新性和竞争力的应用程序,在人工智能驱动的未来中抢占先机。无论是选择自动配置还是手动配置,都能根据项目的实际情况灵活调整,充分发挥 Azure OpenAI 的优势。

http://www.xdnf.cn/news/319141.html

相关文章:

  • 本地部署 MySQL + Qwen3-1.5B + Flask + Dify 工作流
  • 滑动窗口——长度最小子数组
  • var、let、const的区别
  • 高并发内存池(一):项目简介+定长内存池的实现
  • ACE-Step - 20秒生成4分钟完整歌曲,音乐界的Stable Diffusion,支持50系显卡 本地一键整合包下载
  • MySQL 8.0 OCP(1Z0-908)英文题库(1-10)
  • PyTorch常用命令(可快速上手PyTorch的核心功能,涵盖从数据预处理到模型训练的全流程)
  • 【RabbitMQ可靠性原理】
  • 亚远景-ASPICE vs ISO 21434:汽车软件开发标准的深度对比
  • YOLOv8的Python基础--函数篇2
  • WordPress:Locoy.php火车头采集
  • 【HTTP】《HTTP 全原理解析:从请求到响应的奇妙之旅》
  • 【MongoDB篇】MongoDB的副本集操作!
  • 数据清洗-电商双11美妆数据分析(二)
  • 5G赋能农业物联网:智能化种植的新纪元
  • JavaWeb:MySQL进阶
  • 趣味编程:梦幻万花筒
  • DBa作业
  • MCP认证全解析:从零到微软认证专家
  • (eNSP)策略路由实验配置
  • Selenium Web自动化测试学习笔记(二)--八大元素定位
  • 详细剖析传输层协议(TCP和UDP)
  • Baumer工业相机堡盟工业相机如何通过BGAPI SDK在Linux系统下设置多个USB相机(C++)
  • 3、食品包装控制系统 - /自动化与控制组件/food-packaging-control
  • 如何在Ubuntu上安装NVIDIA显卡驱动?
  • leetcode 141. Linked List Cycle
  • AtCoder Regular Contest 197 Div2 A,B题解
  • 实验六 基于Python的数字图像压缩算法
  • 全自动舆情监控系统实现方案
  • 在地震资料柯希霍夫积分法深度偏移大规模成像中,五维旅行时表高效处理策略