Azure OpenAI 聊天
由 ChatGPT 提供支持的 Azure OpenAI 产品超越了传统的 OpenAI 功能,实现了具有增强功能的 AI 驱动文本生成。Azure 提供了额外的 AI 安全性和负责任 AI 功能,如其最近更新中所强调的,点击此处查看详情。
Azure 为 Java 开发人员提供了利用 AI 潜力的机会,方法是将其与一系列 Azure 服务集成,其中包括与 AI 相关的资源,例如 Azure 上的矢量存储。
自动配置
Spring AI 提供了 Azure OpenAI 聊天客户端的 Spring Boot 自动配置。要启用它,请将以下依赖项添加到您项目的 Maven pom.xml
文件中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId>
</dependency>
或者添加到您的 Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-azure-openai-spring-boot-starter'
}
请参阅依赖管理部分,将 Spring AI BOM 添加到您的构建文件中。 |
聊天属性
前缀 spring.ai.azure.openai
是配置连接到Azure OpenAI的属性前缀。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.azure.openai.api-key |
来自Azure AI OpenAI |
- |
spring.ai.azure.openai.endpoint |
来自Azure AI OpenAI |
- |
前缀 spring.ai.azure.openai.chat
是配置Azure OpenAI的ChatClient
实现的属性前缀。
属性 | 描述 | 默认 |
---|---|---|
spring.ai.azure.openai.chat.enabled |
启用 Azure OpenAI 聊天客户端。 |
true |
spring.ai.azure.openai.chat.options.deployment-name |
* 在 Azure 中使用时,这指的是您模型的“部署名称”,您可以在 oai.azure.com/portal 找到。重要说明,在 Azure OpenAI 部署中,“部署名称”与模型本身是不同的。围绕这些术语的混淆源于要使 Azure OpenAI 客户端库与原始 OpenAI 端点兼容的意图。Azure OpenAI 和 Sam Altman 的 OpenAI 提供的部署模型结构有很大不同。部署模型名称作为此完成请求的一部分。 |
gpt-35-turbo |
spring.ai.azure.openai.chat.options.maxTokens |
要生成的最大令牌数。 |
- |
spring.ai.azure.openai.chat.options.temperature |
用于控制生成完成的显式创造力的采样温度。更高的值将使输出更随机,而较低的值将使结果更集中和确定性。不建议修改 temperature 和 top_p 用于相同的完成请求,因为这两个设置的相互作用难以预测。 |
0.7 |
spring.ai.azure.openai.chat.options.topP |
一种与温度抽样称为核心抽样的替代方法。此值使模型考虑带有提供的概率质量的令牌的结果。 |
- |
spring.ai.azure.openai.chat.options.logitBias |
GPT 令牌 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 |
将结束完成生成的一系列文本序列。 |
- |
spring.ai.azure.openai.chat.options.presencePenalty |
影响根据生成的文本中的现有出现来生成的令牌出现的概率的值。正值会使已经存在的令牌出现的可能性减少,并增加模型输出新主题的可能性。 |
- |
spring.ai.azure.openai.chat.options.frequencyPenalty |
根据生成的文本中的累积频率影响生成的令牌出现的概率的值。正值会使令牌在频率增加时出现的可能性减少,并降低模型重复完全相同语句的可能性。 |
- |
所有以 spring.ai.azure.openai.chat.options 开头的属性都可以通过将请求特定的 聊天选项 添加到 Prompt 调用来在运行时覆盖。 |
聊天选项
AzureOpenAiChatOptions.java 提供了模型配置,例如要使用的模型、温度、频率惩罚等。
在启动时,可以使用 AzureOpenAiChatClient(api, options)
构造函数或 spring.ai.azure.openai.chat.options.*
属性来配置默认选项。
在运行时,您可以通过将新的、特定于请求的选项添加到 Prompt
调用来覆盖默认选项。例如,要为特定请求覆盖默认模型和温度:
ChatResponse response = chatClient.call(
new Prompt(
"生成5个著名海盗的名字。",
AzureOpenAiChatOptions.builder()
.withModel("gpt-4-32k")
.withTemperature(0.4)
.build()
));
除了模型特定的 AzureOpenAiChatOptions.java,您还可以使用可移植的 ChatOptions 实例,使用 ChatOptionsBuilder#builder() 创建。 |
函数调用
您可以注册自定义的Java函数到 AzureOpenAiChatClient,并让模型智能地选择输出一个包含调用注册函数之一或多个参数的 JSON 对象。这是一种将LLM能力与外部工具和API连接的强大技术。了解更多关于 Azure OpenAI 函数调用。
样本控制器(自动配置)
创建 一个新的Spring Boot项目,并在您的pom(或gradle)依赖中添加 spring-ai-azure-openai-spring-boot-starter
。
添加一个 application.properties
文件,放在 src/main/resources
目录下,以启用和配置 OpenAi 聊天客户端:
spring.ai.azure.openai.api-key=YOUR_API_KEY
spring.ai.azure.openai.endpoint=YOUR_ENDPOINT
spring
手动配置
AzureOpenAiChatClient 实现了 ChatClient
和 StreamingChatClient
并使用 Azure OpenAI Java Client。
要启用它,请将 spring-ai-azure-openai
依赖项添加到您项目的 Maven pom.xml
文件中:
<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。 |
spring-ai-azure-openai 依赖还提供对 AzureOpenAiChatClient 的访问。有关 AzureOpenAiChatClient 的更多信息,请参阅Azure OpenAI Chat 部分。 |
接下来,创建一个 AzureOpenAiChatClient
实例并使用它生成文本响应:
var openAIClient = OpenAIClientBuilder()
.credential(new AzureKeyCredential(System.getenv("AZURE_OPENAI_API_KEY")))
.endpoint(System.getenv("AZURE_OPENAI_ENDPOINT"))
.buildClient();
var chatClient = new AzureOpenAiChatClient(openAIClient).withDefaultOptions(
AzureOpenAiChatOptions.builder()
.withModel("gpt-35-turbo")
.withTemperature(0.4)
.withMaxTokens(200)
.build());
ChatResponse response = chatClient.call(
new Prompt("生成5个著名海盗的名字。"));
// 或使用流式响应
Flux<ChatResponse> response = chatClient.stream(
new Prompt("生成5个著名海盗的名字。"));
实际上,gpt-35-turbo 是在 Azure AI 门户中显示的 部署名称 。 |