自动配置
Spring AI 为 Azure OpenAI 聊天客户端提供了 Spring Boot 自动配置功能。要启用该功能,请将以下依赖项添加到项目的 Maven pom.xml 或 Gradle build.gradle 构建文件中:
Maven
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-azure-openai</artifactId></dependency>
Gradle
dependencies { implementation 'org.springframework.ai:spring-ai-starter-model-azure-openai'}
Azure OpenAI Chat客户端是使用Azure SDK提供的OpenAIClientBuilder创建的。Spring AI允许通过提供AzureOpenAIClientBuilderCustomizer beans来定制构建器。
例如,可以使用自定义工具来更改默认的响应超时设置:
@Configurationpublic class AzureOpenAiConfig { @Bean public AzureOpenAIClientBuilderCustomizer responseTimeoutCustomizer() { return openAiClientBuilder -> { HttpClientOptions clientOptions = new HttpClientOptions() .setResponseTimeout(Duration.ofMinutes(5)); openAiClientBuilder.httpClient(HttpClient.createDefault(clientOptions)); }; }}
聊天属性
前缀“spring.ai.azure.openai”是用于配置与Azure OpenAI连接的属性前缀。
| 描述 | 默认值 |
|---|
spring.ai.azure.openai.api-key | 来自Azure AI OpenAI Keys and Endpoint部分的密钥,位于Resource Management下
| - |
spring.ai.azure.openai.endpoint | 来自 Keys and Endpoint下Azure AI OpenAI Resource Management部分的端点
| - |
spring.ai.azure.openai.openai-api-key | (非Azure)OpenAI API密钥。用于使用OpenAI服务进行身份验证,而不是Azure 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请求中的自定义标头的映射。映射中的每个条目表示一个头,其中键是头名称,值是头值。 | Empty map |
聊天自动配置的启用和禁用可通过带有前缀spring.ai.model.chat的顶级属性进行配置。
要启用,请设置 spring.ai.model.chat=azure-openai(默认已启用)
要禁用,请将 spring.ai.model.chat 设置为 none(或任何与 azure-openai 不匹配的值)
这一更改是为了支持配置多个模型。
前缀“spring.ai.azure.openai.chat”是用于配置Azure OpenAI的ChatModel实现的属性前缀。
| 描述 | 默认值 |
|---|
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中找到。值得注意的是,在Azure OpenAI部署中,“部署名称”与模型本身不同。围绕这些术语的混淆源于使Azure OpenAI客户端库与原始OpenAI端点兼容的意图。Azure OpenAI和Sam Altman的OpenAI提供的部署结构有很大不同。要作为此完成请求的一部分提供的部署模型名称。 | gpt-4o |
spring.ai.azure.openai.chat.options.maxTokens |
聊天结束时生成的最大令牌数。输入令牌和生成令牌的总长度受到模型上下文长度的限制。用于非推理模型(例如,GPT-40,GPT-3.5-turbo)。不能与maxCompletionTokens一起使用。 | - |
spring.ai.azure.openai.chat.options.maxCompletionTokens |
可以为完成生成的标记数量的上限,包括可见输出标记和推理标记。推理模型所需(例如,o 1、o3、o 4-迷你系列)。不能与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.stream-usage | (仅适用于流式传输)设置为添加一个额外的块,其中包含整个请求的令牌使用统计信息。这个区块的 choices字段是一个空数组,所有其他区块也将包括一个使用字段,但具有空值。
| false |
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.responseFormat.type | 兼容 GPT-4o、GPT-4o mini、GPT-4 Turbo和所有比GPT-3.5 Turbo更新的gpt-3.5-turbo-1106型号。JSON_OBJECT类型启用JSON模式,这保证模型生成的消息是有效的JSON。JSON_SCHEMA类型启用结构化输出,保证模型将匹配您提供的JSON模式。JSON_SCHEMA类型也需要设置responseFormat.schema属性。
| - |
spring.ai.azure.openai.chat.options.responseFormat.schema |
响应格式JSON模式。仅适用于responseFormat.type=JSON_SCHEMA | - |
spring.ai.azure.openai.chat.options.frequencyPenalty | 一个值,该值根据生成的标记在生成的文本中的累积频率来影响生成的标记出现的概率。正值将使令牌不太可能出现,因为它们的频率增加,并降低模型逐字重复相同语句的可能性。 | - |
spring.ai.azure.openai.chat.options.tool-names | 工具列表,由其名称标识,用于在单个提示请求中启用函数调用。ToolCallback注册表中必须存在具有这些名称的工具。 | - |
spring.ai.azure.openai.chat.options.tool-callbacks | 注册ChatModel的工具回调。 | - |
spring.ai.azure.openai.chat.options.internal-tool-execution-enabled | 如果为false,Spring AI不会在内部处理工具调用,而是将它们代理给客户端。然后,客户端负责处理工具调用,将它们分派给适当的函数,并返回结果。如果为true(默认值),Spring AI将在内部处理函数调用。仅适用于支持函数调用的聊天模型 | true |
所有以spring.ai.azure.openai.chat.options为前缀的属性,都可以在运行时通过向Prompt调用添加特定于请求的运行时选项来覆盖。
令牌限制参数:模型特定使用
Azure OpenAI对标记限制参数有特定模型的要求:
| 模型系列 | 必需参数 | 说明 |
|---|
推理模型 (o 1,o3,o 4-mini系列) | maxCompletionTokens
| 这些型号只接受 maxCompletionTokens。使用maxTokens将导致API错误。
|
非推理模型 (gpt-4o、gpt-3.5-turbo等) | maxTokens
| 传统模型使用 maxTokens进行输出限制。使用maxCompletionTokens可能会导致API错误。
|
参数maxTokens和maxCompletionTokens是互斥的。同时设置这两个参数会导致Azure OpenAI返回API错误。当您设置其中一个参数时,Spring AI Azure OpenAI客户端会自动清除之前设置的参数,并显示一条警告消息。
示例:为推理模型使用maxCompletionTokens
var options = AzureOpenAiChatOptions.builder() .deploymentName("o1-preview") .maxCompletionTokens(500) // Required for reasoning models .build();
示例:为非推理模型使用maxTokens
var options = AzureOpenAiChatOptions.builder() .deploymentName("gpt-4o") .maxTokens(500) // Required for non-reasoning models .build();