OCI GenAI Cohere Chat

OCI GenAI 服务提供按需模型或专用 AI 集群的生成 AI 聊天。

OCI 聊天模型页面 和 OCI生成 AI 游乐场提供了有关在 OCI 上使用和托管聊天模型的详细信息。

前提条件(Prerequisites)

您需要一个有效的Oracle 云基础设施 (OCI)账户才能使用 OCI GenAI Cohere Chat 客户端。该客户端提供四种不同的连接方式,包括使用用户和私钥的简单身份验证、工作负载身份、实例主体以及 OCI 配置文件身份验证。

添加存储库和 BOM

Spring AI 工件发布在 Spring MilestoneSnapshot 存储库中。请参阅存储库部分将这些存储库添加到您的构建系统中。

为了帮助进行依赖管理,Spring AI 提供了 BOM(物料清单),以确保在整个项目中使用一致的 Spring AI 版本。请参阅依赖管理部分将 Spring AI BOM 添加到您的构建系统。

自动配置(Auto-configuration)

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'
}

聊天属性(Chat Properties)

Retry 属性(Retry Properties)

前缀 spring.ai.retry 用作属性前缀,允许您为 Mistral AI 模型配置 retry 机制。

属性 描述 默认值
spring.ai.retry.max-attempts 最大重试次数。 10
spring.ai.retry.backoff.initial-interval 指数退避策略的初始睡眠持续时间。 2 sec.
spring.ai.retry.backoff.multiplier 退避间隔乘数。 5
spring.ai.retry.backoff.max-interval 最大退避持续时间。 3 min.
spring.ai.retry.on-client-errors 如果为false,抛出NonTransientAiException,并且不会对4xx客户端错误码进行重试。 false
spring.ai.retry.exclude-on-http-codes 不应触发重试的HTTP状态码列表(例如抛出NonTransientAiException)。 empty
spring.ai.retry.on-http-codes 应触发重试的HTTP状态码列表(例如抛出TransientAiException)。 empty
连接属性(Connection Properties)

前缀是 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认证 -
spring.ai.oci.genai.userId OCI用户OCID,用于simple认证 -
spring.ai.oci.genai.fingerprint 私钥指纹,用于simple认证 -
spring.ai.oci.genai.privateKey 私钥内容,用于simple认证 -
spring.ai.oci.genai.passPhrase 私钥密码(可选),用于带密码保护的simple认证 -
spring.ai.oci.genai.file OCI配置文件路径,用于file认证 <用户主目录>/.oci/config
spring.ai.oci.genai.profile OCI配置文件名,用于file认证 DEFAULT
spring.ai.oci.genai.endpoint 可选OCI GenAI端点 -
配置属性(Configuration Properties)

前缀是 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 (已无效) 启用OCI GenAI Cohere聊天模型 true
spring.ai.oci.genai.chat.cohere.options.model 模型OCID或端点 -
spring.ai.oci.genai.chat.cohere.options.compartment 模型分区OCID -
spring.ai.oci.genai.chat.cohere.options.servingMode 使用的模型服务模式,可选on-demanddedicated on-demand
spring.ai.oci.genai.chat.cohere.options.preambleOverride 覆盖聊天模型的提示前缀 -
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 聊天上下文中使用的文档列表 -

运行时选项(Runtime Options )

OCICohereChatOptions.java 提供模型配置,例如要使用的 temperature、maxToken、topP 等。

在启动时,可以使用 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()
    ));

示例控制器(Sample Controller)

创建一个新的 Spring Boot 项目,并将 spring-ai-starter-model-oci-genai 添加到 pom (或 gradle) 依赖项中。

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

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

@RestController
public class ChatController {

    private final OCICohereChatModel chatModel;

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

    /**
     * 文本生成
     * @param message 提示词
     * @return 响应结果
     */
    @GetMapping("/ai/generate")
    @Operation(summary = "文本生成")
    public Map<String, Object> generate(@RequestParam(value = "message", defaultValue = "你好!") String message) {
        try {
            String response = chatModel.call(message);
            return Map.of(
                "success", true,
                "generation", response,
                "message", "Generated successfully"
            );
        } catch (Exception e) {
            return Map.of(
                "success", false,
                "error", e.getMessage(),
                "message", "Generation failed"
            );
        }
    }

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

}

手动配置(Manual Configuration)

OCICohereChatModel 实现 ChatModel 接口,并使用 OCI Java SDK 连接到 OCI GenAI 服务。

要启用它,添加 spring-ai-oci-genai 依赖到你的项目 Maven pom.xml 文件:

<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'
}

接下来,创建一个 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."));
作者:Jeebiz  创建时间:2025-08-11 11:19
最后编辑:Jeebiz  更新时间:2025-08-31 23:07