likes
comments
collection
share

终于可以用上ai啦,Spring AI Alibaba初体验背景 众所周知,java关于的ai应用的生态一直不是很好,对

作者站长头像
站长
· 阅读数 92

背景

众所周知,java关于的ai应用的生态一直不是很好,对于ai模型的适配也不是便捷。虽然Spring AI出现帮助我们降低接入ai的成本,但是没有接入国内的相关的ai大模型,spring-ai-alibaba也算是填补了java对于国内ai模型的空白。

实践

首先引入spring-ai-alibaba-starter

<!-- Spring AI -->
  <spring-ai-alibaba.version>1.0.0-SNAPSHOT</spring-ai-alibaba.version>
        
  <dependency>
   <groupId>com.alibaba.cloud.ai</groupId>
   <artifactId>spring-ai-alibaba-starter</artifactId>
   <version>${spring-ai-alibaba.version}</version>
  </dependency>

配置阿里云通义千文的apikey,就完成了引入

spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}

目前支持的功能有:

* 提供多种大模型服务对接能力,包括主流开源与阿里云通义大模型服务(百炼)等
* 支持的模型类型包括聊天、文生图、音频转录、文生语音等
* 支持同步和流式 API,在保持应用层 API 不变的情况下支持灵活切换底层模型服务,支持特定模型的定制化能力(参数传递)
* 支持 Structured Output,即将 AI 模型输出映射到 POJOs
* 支持矢量数据库存储与检索
* 支持函数调用 Function Calling
* 支持构建 AI Agent 所需要的工具调用和对话内存记忆能力
* 支持 RAG 开发模式,包括离线文档处理如 DocumentReader、Splitter、Embedding、VectorStore 等,支持 Retrieve 检索

我也稍微尝试了一下普通聊天的方式,定义一个Controller,注入ChatClient,就可以调用ai模型了

@RestController
public class ChatController {

 private final ChatClient chatClient;

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

 @GetMapping("/chat")
 public String chat(String input) {
  return this.chatClient.prompt()
    .functions("getWeather","getOrderFunction")
    .user(input)
    .call()
    .content();
 }
}

同时还可以定义对应的funtion,为ai模型提供支持

@Service
public class MockWeatherService implements Function<MockWeatherService.Request, MockWeatherService.Response> {
    private static final String weatherUrl = "http://apis.juhe.cn/simpleWeather/query?city=%s";
    @Override
    public Response apply(Request request) {

        String urlEncode = HttpUtil.encodeParams(String.format(weatherUrl, request.city), StandardCharsets.UTF_8);
        String result = HttpUtil.get(urlEncode);
        return new Response(result);
    }

    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonClassDescription("根据日期和城市查询天气")
    public record Request(
            @JsonProperty(required = true, value = "city"@JsonPropertyDescription("城市, 比如杭州") String city,
            @JsonProperty(required = true, value = "date"@JsonPropertyDescription("日期, 比如2024-08-22") String date) {
    }

    public record Response(String description) {
    }

}

整体效果如下

终于可以用上ai啦,Spring AI Alibaba初体验背景 众所周知,java关于的ai应用的生态一直不是很好,对

总结

Spring AI Alibaba,支持大部分的ai使用场景,可以方便快捷的接入ai模型,进行ai应用的开发。最最主要的还是弥补了java在国内ai生态的一些短板。

转载自:https://juejin.cn/post/7416625240157913140
评论
请登录