OCI GenAI Cohere 聊天模型

本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

OCI GenAI Service 提供生成式 AI 聊天功能,支持按需模型调用或专属 AI 集群部署。

OCI 聊天模型页面OCI 生成式 AI 实验平台 提供了在 OCI 上使用和托管聊天模型的详细信息。

前提条件

要使用 OCI GenAI Cohere 聊天客户端,你需要一个活跃 Oracle Cloud Infrastructure (OCI) 账户。该客户端提供四种不同的连接方式,包括使用用户和私钥的简单认证、工作负载身份认证、实例主体认证或 OCI 配置文件认证。

添加仓库与 BOM

Spring AI 构件发布在 Maven Central 和 Spring Snapshot 仓库中。请参阅 构件仓库 章节将这些仓库添加到你的构建系统。

Spring AI 提供 BOM 来统一管理依赖版本,确保整个项目使用一致的 Spring AI 版本。请参考 依赖管理 章节,将 Spring AI BOM 添加到你的构建系统中。

自动配置

Spring AI 的自动配置及 Starter 模块的构件名称发生重大变更。具体变更内容请参阅 升级说明 文档。

Spring AI 为 OCI GenAI Cohere 聊天客户端提供 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 时使用的验证类型。可以是 fileinstance-principalworkload-identitysimple

file

spring.ai.oci.genai.region

OCI 的服务区域

us-chicago-1

spring.ai.oci.genai.tenantId

OCI 租户 OCID,在使用 simple auth 进行身份验证时使用

-

spring.ai.oci.genai.userId

OCI 用户 OCID,使用 simple auth 验证时使用

-

spring.ai.oci.genai.fingerprint

私钥指纹,在使用 simple auth 验证时使用

-

spring.ai.oci.genai.privateKey

私钥内容,在使用 simple auth 验证时使用

-

spring.ai.oci.genai.passPhrase

可选的私钥口令,用于使用 simple auth 和受口令保护的私钥进行身份验证

-

spring.ai.oci.genai.file

OCI 配置文件的路径。使用 file auth 验证时使用

<user’s home directory>/.oci/config

spring.ai.oci.genai.profile

OCI 配置文件名称。使用 file auth 验证时使用

DEFAULT

spring.ai.oci.genai.endpoint

可选的 OCI GenAI 端点

-

配置属性

聊天模型的自动配置启用/禁用现在统一通过顶级属性 spring.ai.model.chat 配置:

  • 启用:spring.ai.model.chat=oci-genai(默认已启用)

  • 禁用:spring.ai.model.chat=none(或任意非 oci-genai 值)

此项变更为支持多模型并行配置。

属性前缀 spring.ai.oci.genai.chat.cohere 用于配置 OCI GenAI Cohere 聊天模型的 ChatModel 实现。

属性 说明 默认值

spring.ai.model.chat

启用 OCI GenAI Cohere 聊天模型

oci-genai

spring.ai.oci.genai.chat.cohere.enabled (no longer valid)

启用 OCI GenAI Cohere 聊天模型

true

spring.ai.oci.genai.chat.cohere.options.model

模型 OCID 或端点

-

spring.ai.oci.genai.chat.cohere.options.compartment

模型 compartment OCID

-

spring.ai.oci.genai.chat.cohere.options.servingMode

使用的模型服务模式。可以是 on-demand,也可以是 dedicated

on-demand

spring.ai.oci.genai.chat.cohere.options.preambleOverride

覆盖聊天模型的提示前缀(prompt preamble)

-

spring.ai.oci.genai.chat.cohere.options.temperature

推理温度

-

spring.ai.oci.genai.chat.cohere.options.topP

Top P 参数

-

spring.ai.oci.genai.chat.cohere.options.topK

Top K 参数

-

spring.ai.oci.genai.chat.cohere.options.frequencyPenalty

较高的值会减少重复标记(Token),输出结果将更具随机性

-

spring.ai.oci.genai.chat.cohere.options.presencePenalty

较高的数值会促使模型生成包含未使用标记(Token)的输出

-

spring.ai.oci.genai.chat.cohere.options.stop

用于终止生成的文本序列列表

-

spring.ai.oci.genai.chat.cohere.options.documents

聊天上下文中使用的文档列表

-

所有以 spring.ai.oci.genai.chat.cohere.options 为前缀的属性,都可通过在 Prompt 调用中添加请求特定的 运行时选项 进行覆盖。

运行时选项

OCICohereChatOptions.java 提供了模型配置参数,例如要使用的模型、温度(temperature)、频率惩罚(frequency penalty)等。

启动时,默认选项可通过 OCICohereChatModel(api, options) 构造函数或 spring.ai.oci.genai.chat.cohere.options.* 属性进行配置。

在运行时,你可以通过向 Prompt 调用中添加新的、请求特定的选项来覆盖默认配置。例如,要为某个特定请求覆盖默认的模型和温度设置,可以这样做:

ChatResponse response = chatModel.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        OCICohereChatOptions.builder()
            .model("my-model-ocid")
            .compartment("my-compartment-ocid")
            .temperature(0.5)
        .build()
    ));

示例 Controller

创建 新的 Spring Boot 项目,并在 pom.xml(或 Gradle)依赖中添加 spring-ai-starter-model-oci-genai

src/main/resources 目录下添加一个 application.properties 文件,用于启用和配置 OCI GenAI Cohere 聊天模型:

spring.ai.oci.genai.authenticationType=file
spring.ai.oci.genai.file=/path/to/oci/config/file
spring.ai.oci.genai.cohere.chat.options.compartment=my-compartment-ocid
spring.ai.oci.genai.cohere.chat.options.servingMode=on-demand
spring.ai.oci.genai.cohere.chat.options.model=my-chat-model-ocid
替换文件中的 compartmentmodel 参数为你的 OCI 账户中的实际值。

这将创建一个 OCICohereChatModel 实现,你可以将其注入到你的类中。以下是一个简单的 @Controller 类示例,它使用该聊天模型进行文本生成。

@RestController
public class ChatController {

    private final OCICohereChatModel chatModel;

    @Autowired
    public ChatController(OCICohereChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
	public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        var prompt = new Prompt(new UserMessage(message));
        return chatModel.stream(prompt);
    }
}

手动配置

OCICohereChatModel 实现了 ChatModel 接口,并通过 OCI Java SDK 连接至 OCI GenAI 服务。

在项目的 Maven pom.xml 文件中添加 spring-ai-oci-genai 依赖:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-oci-genai</artifactId>
</dependency>

或 Gradle build.gradle 构建文件。

dependencies {
    implementation 'org.springframework.ai:spring-ai-oci-genai'
}
请参考 依赖管理 部分,将 Spring AI BOM 添加到构建文件中。

接下来,创建 OCICohereChatModel 并用于文本生成:

var CONFIG_FILE = Paths.get(System.getProperty("user.home"), ".oci", "config").toString();
var COMPARTMENT_ID = System.getenv("OCI_COMPARTMENT_ID");
var MODEL_ID = System.getenv("OCI_CHAT_MODEL_ID");

ConfigFileAuthenticationDetailsProvider authProvider = new ConfigFileAuthenticationDetailsProvider(
        CONFIG_FILE,
        "DEFAULT"
);
var genAi = GenerativeAiInferenceClient.builder()
        .region(Region.valueOf("us-chicago-1"))
        .build(authProvider);

var chatModel = new OCICohereChatModel(genAi, OCICohereChatOptions.builder()
        .model(MODEL_ID)
        .compartment(COMPARTMENT_ID)
        .servingMode("on-demand")
        .build());

ChatResponse response = chatModel.call(
        new Prompt("Generate the names of 5 famous pirates."));

OCICohereChatOptions 为聊天请求提供配置信息,其内置的 OCICohereChatOptions.Builder 是一个 Fluent 式的选项构建器