Groq Chat
Groq 是一种基于 LPU™ 的超快 AI 推理引擎,它支持各种 AI 模型,支持工具 / 函数调用,并公开一个与 OpenAI API 兼容的端点。
Spring AI 通过重用现有的 OpenAI 客户端来集成 Groq。为此,需要获取 Groq Api Key, 将基本 URL 设置为 api.groq.com/openai , 并选择其中一个提供的 Groq 模型
前提条件(Prerequisites)
- 创建 API 密钥:访问此处 创建 API 密钥。Spring AI 项目定义了一个名为
spring.ai.openai.api-key
的配置属性,您应该将其设置为从 groq.com 获取的 API 密钥的值。 - 设置 groq URL: 必须将
spring.ai.openai.base-url
属性设置为api.groq.com/openai
。 - 选择 Groq 模型:使用
spring.ai.openai.chat.model=<model name>
属性从可用的 Groq 模型中进行选择。
您可以在 application.properties 文件中设置这些配置属性:
spring.ai.openai.api-key=<your-groq-api-key>
spring.ai.openai.base-url=https://api.groq.com/openai
spring.ai.openai.chat.model=llama3-70b-8192
为了提高处理 API 密钥等敏感信息时的安全性,可以使用 Spring 表达式语言 (SpEL) 来引用自定义环境变量:
# In application.yml
spring:
ai:
openai:
api-key: ${GROQ_API_KEY}
base-url: ${GROQ_BASE_URL}
chat:
model: ${GROQ_MODEL}
您还可以在应用程序代码中以编程方式设置这些配置:
// Retrieve configuration from secure sources or environment variables
String apiKey = System.getenv("GROQ_API_KEY");
String baseUrl = System.getenv("GROQ_BASE_URL");
String model = System.getenv("GROQ_MODEL");
添加存储库和 BOM
Spring AI 工件发布在 Spring Milestone
和 Snapshot
存储库中。请参阅存储库部分将这些存储库添加到您的构建系统中。
为了帮助进行依赖管理,Spring AI 提供了 BOM(物料清单),以确保在整个项目中使用一致的 Spring AI 版本。请参阅依赖管理部分将 Spring AI BOM 添加到您的构建系统。
自动配置(Auto-configuration)
Spring AI 为 OpenAI 聊天模型提供 Spring Boot 自动配置。要启用它,请在项目的 Maven pom.xml
文件中添加以下依赖项:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
或者,在你的 Gradle 构建文件 build.gradle
中添加:
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-openai'
}
聊天属性(Chat Properties)
Retry 属性(Retry Properties)
前缀 spring.ai.retry
用作属性前缀,允许您为 Groq 模型配置 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.openai
的属性,用于配置 OpenAI 的链接。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.openai.base-url | 连接URL。必须设置为https://api.groq.com/openai |
- |
spring.ai.openai.api-key | Groq API密钥 | - |
配置属性(Configuration Properties)
前缀是 spring.ai.openai.chat
的属性,用于配置 OpenAI 的 ChatModel 实现。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.openai.chat.enabled (已移除且不再有效) | 启用OpenAI聊天模型 | true |
spring.ai.openai.chat | 启用OpenAI聊天模型 | openai |
spring.ai.openai.chat.base-url | 可选覆盖spring.ai.openai.base-url提供特定聊天URL。必须设置为https://api.groq.com/openai |
- |
spring.ai.openai.chat.api-key | 可选覆盖spring.ai.openai.api-key提供特定聊天API密钥 | - |
spring.ai.openai.chat.options.model | 可用模型名称包括llama3-8b-8192 、llama3-70b-8192 、mixtral-8x7b-32768 、gemma2-9b-it |
- |
spring.ai.openai.chat.options.temperature | 控制生成内容创造性的采样温度。值越高输出越随机,值越低结果越集中和确定。不建议同时修改temperature和top_p | 0.8 |
spring.ai.openai.chat.options.frequencyPenalty | -2.0到2.0之间的数值。正值会根据token在文本中的现有频率进行惩罚,降低模型重复相同内容的可能性 | 0.0f |
spring.ai.openai.chat.options.maxTokens | 聊天补全中生成的最大token数。输入token和生成token的总长度受模型上下文长度限制 | - |
spring.ai.openai.chat.options.n | 为每个输入消息生成多少聊天补全选项。注意将根据所有选项生成的token数量计费。保持n=1可最小化成本 | 1 |
spring.ai.openai.chat.options.presencePenalty | -2.0到2.0之间的数值。正值会根据token是否已出现在文本中进行惩罚,增加模型谈论新话题的可能性 | - |
spring.ai.openai.chat.options.responseFormat | 指定模型输出格式的对象。设置为{ "type": "json_object" } 可启用JSON模式,保证模型生成的消息是有效JSON |
- |
spring.ai.openai.chat.options.seed | (Beta功能)如果指定,系统将尽力确定性采样,相同seed和参数的重复请求应返回相同结果 | - |
spring.ai.openai.chat.options.stop | API将停止生成更多token的序列(最多4个) | - |
spring.ai.openai.chat.options.topP | 温度采样的替代方法-核心采样,模型考虑具有top_p概率质量的token结果。0.1表示只考虑概率质量前10%的token。建议修改此参数或temperature但不要同时修改 | - |
spring.ai.openai.chat.options.tools | 模型可能调用的工具列表。目前仅支持函数作为工具。用于提供模型可能生成JSON输入的函数列表 | - |
spring.ai.openai.chat.options.toolChoice | 控制模型调用哪个(如果有)函数。none表示不调用函数而生成消息;auto表示模型可选择生成消息或调用函数;通过{"type":"function","function":{"name":"my_function"}} 指定特定函数会强制调用该函数。无函数时默认为none,有函数时默认为auto |
- |
spring.ai.openai.chat.options.user | 代表终端用户的唯一标识符,可帮助OpenAI监控和检测滥用行为 | - |
spring.ai.openai.chat.options.functions | 函数名称列表,用于在单个提示请求中启用函数调用。这些名称的函数必须存在于functionCallbacks注册表中 | - |
spring.ai.openai.chat.options.stream-usage | (仅流式传输)设置为添加包含整个请求token使用统计的额外块。此块的choices 字段为空数组,所有其他块也将包含usage字段但值为null |
false |
spring.ai.openai.chat.options.proxy-tool-calls | 如果为true,Spring AI不会内部处理函数调用而是代理给客户端处理;如果为false(默认),Spring AI会内部处理函数调用。仅适用于支持函数调用的聊天模型 | false |
运行时选项(Runtime Options )
OpenAiChatOptions.java 提供模型配置,例如要使用的 temperature、maxToken、topP 等。
在启动时,可以使用 OpenAiChatModel (api,options)
构造函数或 spring.ai.openai.chat.options.*
属性来配置默认选项。
在运行时,您可以通过在 Prompt 调用中添加新的、特定请求的选项来覆盖默认选项。例如,为特定请求覆盖默认型号和温度:
ChatResponse response = chatModel.call(
new Prompt(
"Generate the names of 5 famous pirates.",
OpenAiChatOptions.builder()
.model("mixtral-8x7b-32768")
.temperature(0.4)
.build()
));
工具 / 功能调用(Tool/Function Calling)
Groq API 端点支持在选择其中一个工具 / 函数支持的模型时调用工具 / 函数。
工具示例(Tool Example )
下面是一个简单的例子,展示如何使用 Spring AI 调用 Groq 函数:
@SpringBootApplication
public class GroqApplication {
public static void main(String[] args) {
SpringApplication.run(GroqApplication.class, args);
}
@Bean
CommandLineRunner runner(ChatClient.Builder chatClientBuilder) {
return args -> {
var chatClient = chatClientBuilder.build();
var response = chatClient.prompt()
.user("What is the weather in Amsterdam and Paris?")
.functions("weatherFunction") // reference by bean name.
.call()
.content();
System.out.println(response);
};
}
@Bean
@Description("Get the weather in location")
public Function<WeatherRequest, WeatherResponse> weatherFunction() {
return new MockWeatherService();
}
public static class MockWeatherService implements Function<WeatherRequest, WeatherResponse> {
public record WeatherRequest(String location, String unit) {}
public record WeatherResponse(double temp, String unit) {}
@Override
public WeatherResponse apply(WeatherRequest request) {
double temperature = request.location().contains("Amsterdam") ? 20 : 25;
return new WeatherResponse(temperature, request.unit);
}
}
}
在这个例子中,当模型需要天气信息时,它会自动调用 weatherFunction
Bean, 后者随后可以获取实时天气数据。预期响应如下:“阿姆斯特丹的天气当前为 20 摄氏度,巴黎的天气当前为 25 摄氏度。”
多模态(Multimodal )
目前,Groq API 不支持媒体内容。
示例控制器(Sample Controller)
创建一个新的 Spring Boot 项目,并将 spring-ai-starter-model-openai
添加到 pom (或 gradle) 依赖项中。
在 src/main/resources 目录下添加 application.properties 文件,以启用和配置 OpenAi 聊天模型:
spring.ai.openai.api-key=<GROQ_API_KEY>
spring.ai.openai.base-url=https://api.groq.com/openai
spring.ai.openai.chat.options.model=llama3-70b-8192
spring.ai.openai.chat.options.temperature=0.7
这将创建一个 OpenAiChatModel 的实现,你可以将其注入到你的类中。下面是一个简单的 @Controller 类的示例,它使用聊天模型进行文本生成。
@RestController
public class ChatController {
private final OpenAiChatModel chatModel;
@Autowired
public ChatController(OpenAiChatModel 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)
要启用它,添加 spring-ai-openai
依赖到你的项目 Maven pom.xml
文件:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai</artifactId>
</dependency>
或者,在你的 Gradle 构建文件 build.gradle
中添加:
dependencies {
implementation 'org.springframework.ai:spring-ai-openai'
}
接下来,创建一个 OpenAiChatModel
并将其用于文本生成:
var openAiApi = new OpenAiApi("https://api.groq.com/openai", System.getenv("GROQ_API_KEY"));
var openAiChatOptions = OpenAiChatOptions.builder()
.model("llama3-70b-8192")
.temperature(0.4)
.maxTokens(200)
.build();
var chatModel = new OpenAiChatModel(this.openAiApi, this.openAiChatOptions);
ChatResponse response = this.chatModel.call(
new Prompt("Generate the names of 5 famous pirates."));
// Or with streaming responses
Flux<ChatResponse> response = this.chatModel.stream(
new Prompt("Generate the names of 5 famous pirates."));
OpenAiChatOptions 提供聊天请求的配置信息。OpenAiChatOptions.Builder 是流畅的选项构建器。
最后编辑:Jeebiz 更新时间:2025-08-31 23:07