Oracle Cloud Infrastructure (OCI) 生成式 AI 嵌入
OCI 生成式 AI 服務 提供文字嵌入,支援按需模型或專用 AI 叢集。
OCI 嵌入模型頁面 和 OCI 文字嵌入頁面 提供了在 OCI 上使用和託管嵌入模型的詳細資訊。
自動配置
Spring AI 自動配置、starter 模組的 artifact 名稱發生了重大變化。請參考 升級說明 獲取更多資訊。 |
Spring AI 為 OCI GenAI 嵌入客戶端提供了 Spring Boot 自動配置。要啟用它,請將以下依賴新增到您的專案 Maven pom.xml
檔案中
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-oci-genai</artifactId>
</dependency>
或新增到您的 Gradle build.gradle
構建檔案中。
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-oci-genai'
}
請參考 依賴管理 部分將 Spring AI BOM 新增到您的構建檔案中。 |
嵌入屬性
字首 spring.ai.oci.genai
是用於配置與 OCI GenAI 連線的屬性字首。
屬性 | 描述 | 預設值 |
---|---|---|
spring.ai.oci.genai.authenticationType |
認證 OCI 時使用的認證型別。可以是 |
file |
spring.ai.oci.genai.region |
OCI 服務區域。 |
us-chicago-1 |
spring.ai.oci.genai.tenantId |
OCI 租戶 OCID,用於使用 |
- |
spring.ai.oci.genai.userId |
OCI 使用者 OCID,用於使用 |
- |
spring.ai.oci.genai.fingerprint |
私鑰指紋,用於使用 |
- |
spring.ai.oci.genai.privateKey |
私鑰內容,用於使用 |
- |
spring.ai.oci.genai.passPhrase |
可選的私鑰密碼短語,用於使用 |
- |
spring.ai.oci.genai.file |
OCI 配置檔案路徑。用於使用 |
<使用者主目錄>/.oci/config |
spring.ai.oci.genai.profile |
OCI profile 名稱。用於使用 |
DEFAULT |
spring.ai.oci.genai.endpoint |
可選的 OCI GenAI 端點。 |
- |
嵌入自動配置的啟用和停用現在透過帶有字首 要啟用,設定 spring.ai.model.embedding=oci-genai (預設啟用) 要停用,設定 spring.ai.model.embedding=none (或任何與 oci-genai 不匹配的值) 進行此更改是為了允許多個模型的配置。 |
字首 spring.ai.oci.genai.embedding
是配置 OCI GenAI 的 EmbeddingModel
實現的屬性字首
屬性 | 描述 | 預設值 |
---|---|---|
spring.ai.oci.genai.embedding.enabled (已移除且不再有效) |
啟用 OCI GenAI 嵌入模型。 |
true |
spring.ai.model.embedding |
啟用 OCI GenAI 嵌入模型。 |
oci-genai |
spring.ai.oci.genai.embedding.compartment |
模型分割槽 OCID。 |
- |
spring.ai.oci.genai.embedding.servingMode |
要使用的模型服務模式。可以是 |
on-demand |
spring.ai.oci.genai.embedding.truncate |
如果文字超出嵌入上下文,如何截斷。可以是 |
END |
spring.ai.oci.genai.embedding.model |
用於嵌入的模型或模型端點。 |
- |
所有帶有字首 spring.ai.oci.genai.embedding.options 的屬性都可以在執行時透過向 EmbeddingRequest 呼叫新增請求特定的 執行時選項 來覆蓋。 |
執行時選項
OCIEmbeddingOptions
提供了嵌入請求的配置資訊。OCIEmbeddingOptions
提供了一個 builder 來建立選項。
啟動時使用 OCIEmbeddingOptions
建構函式設定所有嵌入請求使用的預設選項。執行時,您可以透過向 EmbeddingRequest
請求傳遞一個 OCIEmbeddingOptions
例項來覆蓋預設選項。
例如,為特定請求覆蓋預設的模型名稱
EmbeddingResponse embeddingResponse = embeddingModel.call(
new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
OCIEmbeddingOptions.builder()
.model("my-other-embedding-model")
.build()
));
示例程式碼
這將建立一個 EmbeddingModel
實現,您可以將其注入到您的類中。這是一個使用 EmbeddingModel
實現的簡單 @Controller
類的示例。
spring.ai.oci.genai.embedding.model=<your model>
spring.ai.oci.genai.embedding.compartment=<your model compartment>
@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);
}
}
手動配置
如果您 prefer 不使用 Spring Boot 自動配置,您可以在應用程式中手動配置 OCIEmbeddingModel
。為此,請將 spring-oci-genai-openai
依賴新增到您的專案 Maven pom.xml
檔案中
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-oci-genai-openai</artifactId>
</dependency>
或新增到您的 Gradle build.gradle
構建檔案中。
dependencies {
implementation 'org.springframework.ai:spring-oci-genai-openai'
}
請參考 依賴管理 部分將 Spring AI BOM 新增到您的構建檔案中。 |
接下來,建立一個 OCIEmbeddingModel
例項並使用它計算兩個輸入文字之間的相似度
final String EMBEDDING_MODEL = "cohere.embed-english-light-v2.0";
final String CONFIG_FILE = Paths.get(System.getProperty("user.home"), ".oci", "config").toString();
final String PROFILE = "DEFAULT";
final String REGION = "us-chicago-1";
final String COMPARTMENT_ID = System.getenv("OCI_COMPARTMENT_ID");
var authProvider = new ConfigFileAuthenticationDetailsProvider(
this.CONFIG_FILE, this.PROFILE);
var aiClient = GenerativeAiInferenceClient.builder()
.region(Region.valueOf(this.REGION))
.build(this.authProvider);
var options = OCIEmbeddingOptions.builder()
.model(this.EMBEDDING_MODEL)
.compartment(this.COMPARTMENT_ID)
.servingMode("on-demand")
.build();
var embeddingModel = new OCIEmbeddingModel(this.aiClient, this.options);
List<Double> embedding = this.embeddingModel.embed(new Document("How many provinces are in Canada?"));