QianFan Chat

https://docs.spring.io/spring-ai/reference/api/chat/qianfan-chat.html

Spring AI 支持来自 QianFan 的各种 AI 语言模型。您可以与 QianFan 语言模型进行交互,并基于 QianFan 模型创建多语言对话助手。

先决条件

您需要创建一个 QianFan API 来访问 QianFan 语言模型。

在QianFan 注册页面创建一个帐户,并在API Keys 页面生成令牌。Spring AI 项目定义了一个名为spring.ai.qianfan.api-key和 的配置属性。您应该将其设置为从API Keys 页面获取的和spring.ai.qianfan.secret-key的值。导出环境变量是设置该配置属性的一种方法:API KeySecret Key

export SPRING_AI_QIANFAN_API_KEY=<INSERT KEY HERE>

添加存储库和 BOM

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

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

自动配置

Spring AI 为 OpenAI 聊天客户端提供 Spring Boot 自动配置。要启用它,请将以下依赖项添加到项目的 Maven pom.xml 文件中:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-qianfan-spring-boot-starter</artifactId>
</dependency>

或者,在你的 Gradle 构建文件 build.gradle 中添加:

dependencies {
    implementation 'org.springframework.ai:spring-ai-qianfan-spring-boot-starter'
}

Chat 属性

重试属性

spring.ai.retry 前缀的属性,可让您配置 QianFan Chat 客户端的重试机制。

属性 描述 默认值
spring.ai.retry.max-attempts 最大重试次数。 10
spring.ai.retry.backoff.initial-interval Backoff 策略的初始睡眠持续时间。 2 秒.
spring.ai.retry.backoff.multiplier Backoff 间隔乘数。 5
spring.ai.retry.backoff.max-interval 最大 Backoff 持续时间。 3 分钟.
spring.ai.retry.on-client-errors 如果为 false,则抛出 NonTransientAiException,并且不尝试重试4xx客户端错误代码 false
spring.ai.retry.exclude-on-http-codes 不触发重试的 HTTP 状态代码列表(例如: 抛出 NonTransientAiException)。 empty

连接属性

spring.ai.qianfan 前缀的属性,可让您配置 QianFan Chat 客户端的连接。

属性 描述 默认值
spring.ai.qianfan.base-url 要连接的 URL https://api.qianfan.chat
spring.ai.qianfan.api-key API 密钥 -
spring.ai.qianfan.secret-key 秘密钥匙 -
配置属性

spring.ai.qianfan.chat 前缀的属性,可让您配置 QianFan 的 ChatClient 实现。

属性 描述 默认值
spring.ai.qianfan.chat.enabled 启用千帆聊天客户端。 true
spring.ai.qianfan.chat.base-url 覆盖 spring.ai.qianfan.base-url 以提供聊天特定的 url(可选) api.qianfan.chat
spring.ai.qianfan.chat.api-key 覆盖 spring.ai.qianfan.api-key 以提供聊天特定的 api-key(可选) -
spring.ai.qianfan.chat.secret-key 可选覆盖 spring.ai.qianfan.secret-key 以提供聊天特定的密钥 -
spring.ai.qianfan.chat.options.model 这是要使用的千帆聊天模型 abab5.5-chat, abab5.5s-chat, abab5.5-chat, abab6-chat
spring.ai.qianfan.chat.options.maxTokens 聊天完成中要生成的最大标记数。输入标记和生成的标记的总长度受模型的上下文长度限制。 -
spring.ai.qianfan.chat.options.温度 用来控制生成的完成的表观创造性的采样温度。较高的值将使输出更加随机,而较低的值将使结果更加集中和确定。不建议修改同一完成请求的温度和 top_p,因为这两个设置的相互作用很难预测。 0.7
spring.ai.qianfan.chat.options.topP 温度采样的替代方法是核采样,其中模型考虑具有 top_p 概率质量的标记的结果。因此 0.1 表示仅考虑包含前 10% 概率质量的标记。我们通常建议更改此值或温度,但不能同时更改两者。 1.0
spring.ai.qianfan.chat.options.presencePenalty -2.0 到 2.0 之间的数字。正值会根据新标记是否出现在文本中来惩罚新标记,从而增加模型讨论新主题的可能性。 0.0f
spring.ai.qianfan.chat.options.frequencyPenalty -2.0 到 2.0 之间的数字。正值会根据新标记在文本中出现的频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。 0.0f
spring.ai.qianfan.chat.options.stop 模型将停止生成stop指定的字符,目前仅支持单个停用词,格式为[“stop_word1”] -

您可以覆盖实现的通用、spring.ai.qianfan.base-url和spring.ai.qianfan.chat.api-key。如果设置了、和属性,则它们优先于通用属性。如果您想为不同的模型和不同的模型端点使用不同的 QianFan 帐户,这将非常有用。 spring.ai.qianfan.chat.secret-keyChatClientspring.ai.qianfan.chat.base-urlspring.ai.qianfan.chat.api-keyspring.ai.qianfan.chat.secret-key
通过在调用中添加请求特定的运行时选项,spring.ai.qianfan.chat.options可以在运行时覆盖 所有以 为前缀的属性。 Prompt
运行时选项
QianFanChatOptions.java提供模型配置,例如要使用的模型、温度、频率惩罚等。

在启动时,可以使用QianFanChatModel(api, options)构造函数或spring.ai.qianfan.chat.options.*属性配置默认选项。

在运行时,您可以通过向调用添加新的、特定于请求的选项来覆盖默认选项Prompt。例如,要覆盖特定请求的默认模型和温度:

ChatResponse response = chatClient.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        QianFanChatOptions.builder()
            .withModel(QianFanApi.ChatModel.ERNIE_Speed_8K.getValue())
            .withTemperature(0.5f)
        .build()
    ));

已复制!
除了模型特定的QianFanChatOptions之外,您还可以使用通过ChatOptionsBuilder#builder()创建的可移植ChatOptions实例。
样品控制器
创建一个新的 Spring Boot 项目并将其添加spring-ai-qianfan-spring-boot-starter到您的 pom(或 gradle)依赖项中。

在目录下添加一个application.properties文件src/main/resources,用于启用并配置千帆聊天客户端:

spring.ai.qianfan.api-key=YOUR_API_KEY
spring.ai.qianfan.secret-key=YOUR_SECRET_KEY
spring.ai.qianfan.chat.options.model=ernie_speed
spring.ai.qianfan.chat.options.temperature=0.7

已复制!
用您的 QianFan 凭证替换api-key和secret-key。
这将创建一个QianFanChatModel可以注入到类中的实现。下面是一个@Controller使用聊天客户端生成文本的简单类的示例。

@RestController
public class ChatController {

private final QianFanChatModel chatClient;

@Autowired
public ChatController(QianFanChatModel chatClient) {
    this.chatClient = chatClient;
}

@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
    return Map.of("generation", chatClient.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 chatClient.stream(prompt);
}

}

已复制!
手动配置
QianFanChatModel实现了和,并使用Low-level QianFanApi Client连接到 QianFan 服务。ChatClientStreamingChatClient

将spring-ai-qianfan依赖项添加到项目的 Mavenpom.xml文件中:

org.springframework.ai spring-ai-qianfan

已复制!
或者你的 Gradlebuild.gradle构建文件。

dependencies {
implementation ‘org.springframework.ai:spring-ai-qianfan’
}

已复制!
请参阅依赖管理部分,将 Spring AI BOM 添加到您的构建文件中。
接下来,创建一个QianFanChatModel并使用它进行文本生成:

var qianFanApi = new QianFanApi(System.getenv(“QIANFAN_API_KEY”), System.getenv(“QIANFAN_SECRET_KEY”));

var chatClient = new QianFanChatModel(qianFanApi, QianFanChatOptions.builder()
.withModel(QianFanApi.ChatModel.ERNIE_Speed_8K.getValue())
.withTemperature(0.4f)
.withMaxTokens(200)
.build());

ChatResponse response = chatClient.call(
new Prompt(“Generate the names of 5 famous pirates.”));

// Or with streaming responses
Flux streamResponse = chatClient.stream(
new Prompt(“Generate the names of 5 famous pirates.”));

已复制!
提供QianFanChatOptions聊天请求的配置信息。QianFanChatOptions.Builder是流畅的选项生成器。

低级 QianFanApi 客户端
QianFanApi为QianFan API提供了轻量级的 Java 客户端。

以下是以编程方式使用 API 的简单代码片段:

String systemMessage = “Your name is QianWen”;

QianFanApi qianFanApi =
new QianFanApi(System.getenv(“QIANFAN_API_KEY”), System.getenv(“QIANFAN_SECRET_KEY”));

ChatCompletionMessage chatCompletionMessage =
new ChatCompletionMessage(“Hello world”, Role.USER);

// Sync request
ResponseEntity response = qianFanApi.chatCompletionEntity(
new ChatCompletionRequest(List.of(chatCompletionMessage), systemMessage, QianFanApi.ChatModel.ERNIE_Speed_8K.getValue(), 0.7f, false));

// Streaming request
Flux streamResponse = qianFanApi.chatCompletionStream(
new ChatCompletionRequest(List.of(chatCompletionMessage), systemMessage, QianFanApi.ChatModel.ERNIE_Speed_8K.getValue(), 0.7f, true));

已复制!
请关注QianFanApi.java的 JavaDoc 以获取更多信息。

千帆API示例
QianFanApiIT.java测试提供了一些如何使用轻量级库的通用示例。

作者:Jeebiz  创建时间:2024-06-28 00:24
最后编辑:Jeebiz  更新时间:2024-07-06 19:00