Spring AI 集成 Groq - 一个运行速度极快的 AI 推理引擎

更快的信息处理速度不仅能提供信息,还能改变我们的认知和创新方式。

Spring AI 是一个强大的框架,用于将 AI 能力集成到 Spring 应用中,现在已支持 Groq - 一个运行速度极快的 AI 推理引擎,并支持工具/函数调用。

利用 Groq 的 OpenAI 兼容 API,Spring AI 通过调整其现有的 OpenAI Chat 客户端实现了无缝集成。这种方法使开发人员能够通过熟悉的 Spring AI API 利用 Groq 的高性能模型。

spring ai 整合 groq

本文将带你了解如何配置和使用 Spring AI OpenAI 聊天客户端与 Groq 进行连接。详细信息请查阅 Spring AI Groq 文档 和相关 测试

Groq API Key

要与 Groq 交互,你需要从 https://console.groq.com/keys 获取 Groq API Key。

依赖

将 Spring AI OpenAI Starter 添加到项目中。

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

对于 Gradle,在 build.gradle 中添加以下内容:

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

确保已添加 Spring MilestoneSnapshot 仓库,并添加了 Spring AI BOM

为 Groq 配置 Spring AI

要在 Spring AI 中使用 Groq,我们需要配置 OpenAI 客户端,使其指向 Groq 的 API 端点,并使用 Groq 特定的模型。

在项目中添加以下环境变量

export SPRING_AI_OPENAI_API_KEY=<INSERT GROQ API KEY HERE>  
export SPRING_AI_OPENAI_BASE_URL=https://api.groq.com/openai  
export SPRING_AI_OPENAI_CHAT_OPTIONS_MODEL=llama3-70b-8192

或者,你也可以将这些内容添加到 application.properties 文件中:

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

关键点:

有关配置属性的完整列表,请查阅 Groq chat 属性文档

示例代码

现在,我们已经将 Spring AI 配置为使用 Groq,来看一个如何在应用中使用它的简单示例。

@RestController
public class ChatController {

  private final ChatClient chatClient;

  @Autowired
  public ChatController(ChatClient.Builder builder) {
      this.chatClient = builder.build();
  }

  @GetMapping("/ai/generate")
  public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
     String response = chatClient.prompt().user(message).call().content();
     return Map.of("generation", response);
  }

  @GetMapping("/ai/generateStream")
  public Flux<String> generateStream(@RequestParam(value = "message", 
        defaultValue = "Tell me a joke") String message) {
      return chatClient.prompt().user(message).stream().content();
  }
}

如上例,我们创建了一个简单的 REST Controller,其中有两个端点:

  • /ai/generate:对给定的提示生成一个回复。
  • /ai/generateStream:流式响应,这对较长的输出或实时交互非常有用。

工具/函数

Groq API 端点支持 工具/函数(Tool/Function)调用,当选择支持 Tool/Function 的模型之一时。

spring ai 调用 Groq Function

你可以在 ChatModel 中注册自定义 Java 函数,然后让所提供的 Groq 模型智能地选择输出包含参数的 JSON 对象,以调用一个或多个已注册函数。这是一种将 LLM 功能与外部工具和 API 相连接的强大技术。

Tool 示例

下面是一个如何在 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") // 通过 bean 名称引用
                .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,然后获取实时天气数据。

预期的回答是这样的 “The weather in Amsterdam is currently 20 degrees Celsius, and the weather in Paris is currently 25 degrees Celsius(阿姆斯特丹目前的天气是 20 摄氏度,巴黎目前的天气是 25 摄氏度)”。

点击 这里 了解更多有关 OpenAI 函数调用的信息。

一些点

将 Groq 与 Spring AI 结合使用时,请注意以下几点:

  • 工具/函数调用:Groq 支持 工具/函数调用。请查看建议使用的模型。
  • API 兼容性:Groq API 与 OpenAI API 并不完全兼容。请注意行为或功能上的潜在差异。
  • 模型选择:确保你使用的是 Groq 专用 模型 之一。
  • 多模态限制:目前,Groq 不支持多模态消息。
  • 性能:Groq 以其快速的推理时间而闻名。你可能会注意到与其他提供商相比,特别是对于较大的模型,响应速度有所提高。

总结

将 Groq 与 Spring AI 集成,为希望在 Spring 应用中利用高性能 AI 模型的开发人员提供了新的可能性。通过重新利用 OpenAI 客户端,Spring AI 可以在不同的 AI 提供商之间直接切换,让你可以根据具体需求选择最佳解决方案。

在探索这种集成的过程中,请记得及时查阅来自 Spring AIGroq 的最新文档,因为功能和兼容性可能会随着时间的推移而发生变化。


Ref:https://spring.io/blog/2024/07/31/spring-ai-with-groq-a-blazingly-fast-ai-inference-engine