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 Milestone
和 Snapshot
存储库中。请参阅存储库部分将这些存储库添加到您的构建系统中。
为了帮助进行依赖管理,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文件中:
已复制!
或者你的 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
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
new ChatCompletionRequest(List.of(chatCompletionMessage), systemMessage, QianFanApi.ChatModel.ERNIE_Speed_8K.getValue(), 0.7f, false));
// Streaming request
Flux
new ChatCompletionRequest(List.of(chatCompletionMessage), systemMessage, QianFanApi.ChatModel.ERNIE_Speed_8K.getValue(), 0.7f, true));
已复制!
请关注QianFanApi.java的 JavaDoc 以获取更多信息。
千帆API示例
QianFanApiIT.java测试提供了一些如何使用轻量级库的通用示例。
最后编辑:Jeebiz 更新时间:2024-07-06 19:00