终于可以用上ai啦,Spring AI Alibaba初体验背景 众所周知,java关于的ai应用的生态一直不是很好,对
背景
众所周知,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) {
}
}
整体效果如下
总结
Spring AI Alibaba,支持大部分的ai使用场景,可以方便快捷的接入ai模型,进行ai应用的开发。最最主要的还是弥补了java在国内ai生态的一些短板。
转载自:https://juejin.cn/post/7416625240157913140