Anthropic Claude 是一系列基础人工智能模型,可用于多种应用场景。对于开发人员和企业,您可以利用API访问权限,并直接在 Anthropic 的 AI 基础设施之上构建。
春季人工智能支持Anthropic的链接:https://docs.anthropic.com/claude/reference/messages_post[Messaging API],用于同步和流式文本生成。
Tip
|
Anthropic的Claude模型也可以通过Amazon Bedrock获得。Spring AI提供专门的Amazon Bedrock Anthropic客户端实现。 |
先决条件
您需要在Anthropic门户上创建一个API密钥。在https://console.anthropic.com/dashboard[Anthropic API仪表盘]注册一个账户,并在https://console.anthropic.com/settings/keys[获取API密钥]页面生成api密钥。Spring AI项目定义了一个名为`spring.ai.anthropic.api-key`的配置属性,您应该将其设置为从anthropic.com获得的`API Key`的值。导出一个环境变量是设置该配置属性的一种方法:
export SPRING_AI_ANTHROPIC_API_KEY=<INSERT KEY HERE>
自动配置
Spring AI为Anthropic聊天客户端提供了Spring Boot自动配置。要启用它,请将以下依赖项添加到您项目的Maven `pom.xml`文件中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-anthropic-spring-boot-starter</artifactId>
</dependency>
或添加到你的 Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-anthropic-spring-boot-starter'
}
Tip
|
请参考依赖管理部分,以将Spring AI BOM添加到您的构建文件中。 |
聊天属性
重试属性
前缀 spring.ai.retry
被用作属性前缀,允许你为Anthropic Chat客户端配置重试机制。
属性 |
描述 |
默认值 |
------------------------------------ |
------------------------------------------ |
------- |
spring.ai.retry.max-attempts |
最大重试次数。 |
10 |
spring.ai.retry.backoff.initial-interval |
指数退避策略的初始睡眠时长。 |
2 秒 |
spring.ai.retry.backoff.multiplier |
退避间隔的乘数。 |
5 |
spring.ai.retry.backoff.max-interval |
最大退避时长。 |
3 分钟 |
spring.ai.retry.on-client-errors |
如果是false,抛出NonTransientAiException,并且不对`4xx`客户端错误代码进行重试 |
false |
spring.ai.retry.exclude-on-http-codes |
不触发重试的HTTP状态码列表(例如,抛出NonTransientAiException)。 |
空 |
Note
|
目前重试策略不适用于流式API。 |
连接属性
前缀 spring.ai.anthropic
被用作属性前缀,允许你连接到Anthropic。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.anthropic.base-url |
用于连接的URL地址 |
|
spring.ai.anthropic.version |
Anthropic API版本号 |
2023-06-01 |
spring.ai.anthropic.api-key |
API密钥 |
- |
配置属性
前缀`spring.ai.anthropic.chat`是一个属性前缀,它允许你为Anthropic的聊天客户端实现进行配置。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.anthropic.chat.enabled |
启用Anthropic聊天客户端。 |
|
true |
spring.ai.anthropic.chat.options.model |
|
要使用的Anthropic聊天模型。支持`claude-3-opus-20240229`、 |
|
|
spring.ai.anthropic.chat.options.temperature |
控制生成完成度表面创造力的采样温度。较高的值将使输出更随机,而较低的值将使结果更集中和确定性。不建议同时修改温度和top_p,因为这两个设置的交互作用难以预测。 |
0.8 |
spring.ai.anthropic.chat.options.max-tokens |
聊天完成中生成的最大令牌数。输入令牌和生成的令牌的总长度受模型的上下文长度限制。 |
|
500 |
spring.ai.anthropic.chat.options.stop-sequence |
|
自定义文本序列,会导致模型停止生成。我们的模型通常在它们自然完成它们的回合时停止,这将导致响应的stop_reason为“end_turn”。如果您希望模型在遇到自定义文本字符串时停止生成,可以使用stop_sequences参数。如果模型遇到其中一个自定义序列,响应的stop_reason值将是“stop_sequence”,响应的stop_sequence值将包含匹配的停止序列。 |
- |
|
spring.ai.anthropic.chat.options.top-p |
使用核心抽样。在核心抽样中,我们计算出每个后续令牌按概率递减顺序的累积分布,并在达到top_p指定的特定概率时将其截断。您应该更改温度或top_p,但不要两者都更改。仅推荐用于高级用例。通常,你只需要使用温度。 |
- |
spring.ai.anthropic.chat.options.top-k |
仅从每一个后续令牌的前K个选项中抽样。用于消除“长尾”低概率响应。在这里了解更多技术细节。仅推荐用于高级用例。通常,你只需要使用温度。 |
Tip
|
所有以`spring.ai.anthropic.chat.options`为前缀的属性可以在运行时被覆盖,通过在`Prompt`调用中添加一个特定请求的运行时选项来实现。 |
运行时选项
The AnthropicChatOptions.java 文件提供了模型配置,例如使用的模型、温度、最大令牌计数等。
在启动时,可以通过`AnthropicChatClient(api, options)`构造函数或者`spring.ai.anthropic.chat.options.*`属性来配置默认选项。
在运行时,您可以通过添加新的、特定于请求的选项到`Prompt`调用中,来覆盖默认选项。例如,为了覆盖特定请求的默认模型和温度:
ChatResponse response = chatClient.call(
new Prompt(
"Generate the names of 5 famous pirates.",
AnthropicChatOptions.builder()
.withModel("claude-2.1")
.withTemperature(0.4)
.build()
));
多模态
多模态指的是模型同时理解和处理来自不同来源的信息的能力,包括文本、图像、音频和其他数据格式。这一范式代表了人工智能模型的重大进步。
目前,Anthropic Claude 3支持`images`的`base64`源类型,以及`image/jpeg`、image/png
、`image/gif`和`image/webp`媒体类型。更多信息请查看链接:https://docs.anthropic.com/claude/docs/vision[Vision guide]。
Spring AI的`Message`接口通过引入媒体类型支持多模态AI模型。这个类型包含了消息中媒体附件的数据和信息,使用Spring的`org.springframework.util.MimeType`和一个`java.lang.Object`来表示原始媒体数据。
以下是从https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatClientIT.java[AnthropicChatClientIT.java]中提取的简单代码示例,演示了将用户文本与图像结合的方式。
byte[] imageData = new ClassPathResource("/multimodal.test.png").getContentAsByteArray();
var userMessage = new UserMessage("Explain what do you see on this picture?",
List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)));
ChatResponse response = chatClient.call(new Prompt(List.of(userMessage)));
logger.info(response.getResult().getOutput().getContent());
它以`multimodal.test.png`图片作为输入:
附带文本消息“解释你在这张图片上看到了什么?”,并生成类似这样的回答:
图片展示了一个装有几个水果的金属线制果篮的特写视图。篮子看起来由细金属线制成,形状为圆形,带有一个抬高的手柄。 在篮子里,有几只黄色的香蕉和一对红苹果或可能是番茄。果实的鲜艳颜色与金属色调的丝网篮子形成了漂亮的对比。 照片中浅景深的应用使得前景的水果成为焦点,而向上延伸的篮子手柄略显模糊,背景中创造了一个令人愉悦的散景效果。 构图和光线赋予了这张图片一个干净、极简的美感,突显了展示在这个优雅的金属网篮中果实的自然美和新鲜感。
样本控制器
访问'''创建一个新的Spring Boot项目,并将`spring-ai-anthropic-spring-boot-starter`添加到你的pom(或gradle)依赖中。
在`src/main/resources`目录下添加一个`application.properties`文件,以启用并配置Anthropic聊天客户端:
spring.ai.anthropic.api-key=YOUR_API_KEY
spring.ai.anthropic.chat.options.model=claude-3-opus-20240229
spring.ai.anthropic.chat.options.temperature=0.7
spring.ai.anthropic.chat.options.max-tokens=450
Tip
|
将 api-key 替换为您的Anthropic凭据。
|
这将创建一个您可以注入到类中的 AnthropicChatClient
实现。这里有一个使用聊天客户端进行文本生成的简单 @Controller
类的例子。
@RestController
public class ChatController {
private final AnthropicChatClient chatClient;
@Autowired
public ChatController(AnthropicChatClient 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) {
Prompt prompt = new Prompt(new UserMessage(message));
return chatClient.stream(prompt);
}
}
手动配置
The AnthropicChatClient 实现了 ChatClient
和 StreamingChatClient
接口,并使用 [low-level-api] 来连接到Anthropic服务。
将`spring-ai-anthropic`依赖项添加到项目的Maven `pom.xml`文件中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-anthropic</artifactId>
</dependency>
或添加到你的 Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-anthropic'
}
Tip
|
请参考依赖管理部分,以将Spring AI BOM添加到您的构建文件中。 |
接下来,创建一个`AnthropicChatClient`并使用它进行文本生成:
var anthropicApi = new AnthropicApi(System.getenv("ANTHROPIC_API_KEY"));
var chatClient = new AnthropicChatClient(anthropicApi,
AnthropicChatOptions.builder()
.withModel("claude-3-opus-20240229")
.withTemperature(0.4)
.withMaxTokens(200)
.build());
ChatResponse response = chatClient.call(
new Prompt("Generate the names of 5 famous pirates."));
// 或使用流式响应
Flux<ChatResponse> response = chatClient.stream(
new Prompt("生成5个著名海盗的名字。"));
AnthropicChatOptions` 提供了聊天请求的配置信息。AnthropicChatOptions.Builder
是一个流利的选项构建器。
低级人工智能API客户端
'''The AnthropicApi provides is lightweight Java client for Anthropic Message API.'''
以下类图说明了`AnthropicApi`聊天接口和构建块:
这里是一个简单的代码片段,展示了如何以编程方式使用API:
AnthropicApi anthropicApi =
new AnthropicApi(System.getenv("ANTHROPIC_API_KEY"));
RequestMessage chatCompletionMessage = new RequestMessage(
List.of(new MediaContent("Tell me a Joke?")), Role.USER);
// Sync request
ResponseEntity<ChatCompletion> response = anthropicApi
.chatCompletionEntity(new ChatCompletionRequest(AnthropicApi.ChatModel.CLAUDE_3_OPUS.getValue(),
List.of(chatCompletionMessage), null, 100, 0.8f, false));
// Streaming request
Flux<StreamResponse> response = anthropicApi
.chatCompletionStream(new ChatCompletionRequest(AnthropicApi.ChatModel.CLAUDE_3_OPUS.getValue(),
List.of(chatCompletionMessage), null, 100, 0.8f, true));
关注 AnthropicApi.java 的 JavaDoc 以获取更多信息。
低级别API示例
-
链接:https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/chat/api/AnthropicApiIT.java[AnthropicApiIT.java] 测试提供了一些如何使用轻量级库的通用示例。