|
最新快照版本请使用Spring AI 1.1.0! |
Azure OpenAI Embeddings
Azure 的 OpenAI 扩展了 OpenAI 的能力,提供安全的文本生成和嵌入计算模型,适用于多种任务:
-
相似嵌入在捕捉两个或多个文本片段之间的语义相似性方面表现良好。
-
文本搜索嵌入有助于衡量长文档是否与短查询相关。
-
代码搜索嵌入适用于嵌入代码片段和嵌入自然语言搜索查询。
Azure OpenAI 嵌入依赖于余弦相似性用于计算文档与查询之间的相似性。
前提条件
Azure OpenAI 客户端提供三种连接选项:使用 Azure API 密钥,或使用 OpenAI API 密钥,或使用 Microsoft Entra ID。
Azure API Key & Endpoint
获取你的Azure OpenAI端点和API密钥来自Azure Portal的Azure OpenAI服务部分。
Spring AI 定义了两个配置属性:
-
Spring.ai.Azure.Openai.API-Key:将此设为API 密钥摘自Azure。 -
Spring.ai.azure.openai.endpoint:将此设置为在Azure中配置模型时获得的端点URL。
你可以在你的application.properties或application.yml文件:
spring.ai.azure.openai.api-key=<your-azure-api-key>
spring.ai.azure.openai.endpoint=<your-azure-endpoint-url>
如果你更喜欢用环境变量处理敏感信息,比如 API 密钥,可以在配置中使用 Spring 表达式语言(SpEL):
# In application.yml
spring:
ai:
azure:
openai:
api-key: ${AZURE_OPENAI_API_KEY}
endpoint: ${AZURE_OPENAI_ENDPOINT}
# In your environment or .env file
export AZURE_OPENAI_API_KEY=<your-azure-openai-api-key>
export AZURE_OPENAI_ENDPOINT=<your-azure-endpoint-url>
OpenAI 密钥
要通过OpenAI服务(非Azure)认证,请提供OpenAI API密钥。 这会自动将端点设置为 api.openai.com/v1。
使用此方法时,设Spring.ai.azure.openai.chat.options.deployment-name属性与你希望使用的OpenAI模型名称相符。
在你的应用配置中:
spring.ai.azure.openai.openai-api-key=<your-azure-openai-key>
spring.ai.azure.openai.chat.options.deployment-name=<openai-model-name>
使用环境变量配合 SpEL:
# In application.yml
spring:
ai:
azure:
openai:
openai-api-key: ${AZURE_OPENAI_API_KEY}
chat:
options:
deployment-name: ${OPENAI_MODEL_NAME}
# In your environment or .env file
export AZURE_OPENAI_API_KEY=<your-openai-key>
export OPENAI_MODEL_NAME=<openai-model-name>
自动配置
|
春季AI自动配置、起始模块的工件名称发生了重大变化。 更多信息请参阅升级说明。 |
Spring AI 为 Azure OpenAI 嵌入模型提供 Spring Boot 自动配置。
要启用它,请在项目的Maven中添加以下依赖pom.xml文件:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-azure-openai</artifactId>
</dependency>
或者去你的Gradlebuild.gradle构建文件。
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-azure-openai'
}
| 请参考依赖管理部分,将Spring AI的物料清单添加到你的构建文件中。 |
嵌入性质
前缀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.openai-api-key |
(非青色)OpenAI API 密钥。用来通过OpenAI服务认证,而不是Azure OpenAI。
这会自动将端点设置为 api.openai.com/v1。使用任一 |
- |
|
嵌入自动配置的启用和禁用现在通过带有前缀的顶层属性配置 启用 spring.ai.model.embedding=azure-openai(默认启用) 要禁用,请选择 spring.ai.model.embedding=none(或任何不匹配 azure-openai 的值) 此改动旨在允许配置多个模型。 |
前缀spring.ai.azure.openai.embedding是配置嵌入模型implementation for Azure OpenAI
| 属性 | 描述 | 默认值 |
|---|---|---|
spring.ai.azure.openai.embedding.enabled(已移除且不再有效) |
启用Azure OpenAI嵌入模型。 |
true |
spring.ai.model.embedding |
启用Azure OpenAI嵌入模型。 |
azure-openai |
Spring.ai.azure.openai.embedding.metadata-mode |
文档内容提取模式 |
嵌入 |
Spring.ai.azure.openai.embedding.options.deployment-name |
这是Azure AI门户中显示的“部署名称”的数值 |
文本嵌入-ada-002 |
spring.ai.azure.openai.embedding.options.user |
作的调用者或终端用户的标识符。这可能用于跟踪或限速目的。 |
- |
运行时选项
这AzureOpenAiEmbeddingOptions提供嵌入请求的配置信息。
这AzureOpenAiEmbeddingOptions提供建造者来创建选项。
开始时使用该AzureOpenAiEmbeddingModel构建器(constructor)来设置所有嵌入请求的默认选项。
运行时你可以通过传递AzureOpenAiEmbeddingOptions实例中,你对嵌入请求请求。
例如,要覆盖特定请求的默认型号名称:
EmbeddingResponse embeddingResponse = embeddingModel.call(
new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
AzureOpenAiEmbeddingOptions.builder()
.model("Different-Embedding-Model-Deployment-Name")
.build()));
示例代码
这将产生嵌入模型你可以把这些实现注入到你的类里。
这里有一个简单的例子@Controller使用嵌入模型实现。
spring.ai.azure.openai.api-key=YOUR_API_KEY
spring.ai.azure.openai.endpoint=YOUR_ENDPOINT
spring.ai.azure.openai.embedding.options.model=text-embedding-ada-002
@RestController
public class EmbeddingController {
private final EmbeddingModel embeddingModel;
@Autowired
public EmbeddingController(EmbeddingModel embeddingModel) {
this.embeddingModel = embeddingModel;
}
@GetMapping("/ai/embedding")
public Map embed(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of(message));
return Map.of("embedding", embeddingResponse);
}
}
手动配置
如果你不想用 Spring Boot 的自动配置,可以手动配置AzureOpenAiEmbeddingModel在你的申请中。
为此添加Spring-ai-azure-openai对你项目Maven的依赖pom.xml文件:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-azure-openai</artifactId>
</dependency>
或者去你的Gradlebuild.gradle构建文件。
dependencies {
implementation 'org.springframework.ai:spring-ai-azure-openai'
}
| 请参考依赖管理部分,将Spring AI的物料清单添加到你的构建文件中。 |
这Spring-ai-azure-openai依赖关系还提供了访问AzureOpenAiEmbeddingModel.欲了解更多关于AzureOpenAiChatModel请参阅Azure OpenAI嵌入部分。 |
接下来,创建一个AzureOpenAiEmbeddingModel实例并用它来计算两个输入文本之间的相似性:
var openAIClient = OpenAIClientBuilder()
.credential(new AzureKeyCredential(System.getenv("AZURE_OPENAI_API_KEY")))
.endpoint(System.getenv("AZURE_OPENAI_ENDPOINT"))
.buildClient();
var embeddingModel = new AzureOpenAiEmbeddingModel(this.openAIClient)
.withDefaultOptions(AzureOpenAiEmbeddingOptions.builder()
.model("text-embedding-ada-002")
.user("user-6")
.build());
EmbeddingResponse embeddingResponse = this.embeddingModel
.embedForResponse(List.of("Hello World", "World is big and salvation is near"));
这文本嵌入-ada-002实际上是部署名称如Azure AI门户所示。 |