Spring AI

Spring AI简介

Spring AI官方文档

Spring AI 是一个面向人工智能工程的应用框架,它类似于一个客户端,可以实现向不同厂商对应的AI模型服务发送请求获取响应

SpringAI目前能够支持的AI模型

img

Spring AI实践

Open ai Api Key第三方平台

在该平台上注册可以免费获取一定的使用额度

image-20240507203148267

参考SpringAI openAI官方文档,快速搭建一个应用

引入pom依赖

1
2
3
4
dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

进行相关配置

1
2
3
4
5
6
7
8
#服务地址
spring.ai.openai.base-url=https://api.xty.app
#openai key
spring.ai.openai.api-key=sk-yJ86bNiRwQJVyczO122aF307B7554905A0F53eF6B3B27132
#使用模型名称
spring.ai.openai.chat.options.model=gpt-3.5-turbo
#随机性
spring.ai.openai.chat.options.temperature=0.7

编写一个简单controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@RestController
public class ChatController {

private final OpenAiChatClient chatClient;

@Autowired
public ChatController(OpenAiChatClient 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);
}
}

测试

构造请求:http://localhost:8080/ai/generate?message=%E5%AD%A6%E4%B9%A0Java%E8%B7%AF%E7%BA%BF

得到的响应:

image-20240507210454691

其他应用

调用openAI相关模型生成图片

官方文档参考

相关配置

1
2
3
4
#开启生图模式
spring.ai.openai.image.enabled=true
#指定生图模型,默认为dall-e-3
spring.ai.openai.image.options.model=dall-e-3

controller代码

1
2
3
4
5
6
7
8
9
10
11
//注入openAiImageClien
@Autowired
OpenAiImageClient openAiImageClient;
@GetMapping("/ai/image")
public String generateImage(String prompt){
ImageResponse response = openAiImageClient.call(new ImagePrompt(prompt));
//可以两种形式返回生成的图片
//图片的url:response.getResult().getOutput().getUrl()
//图片的base64编码:response.getResult().getOutput().getB64Json()
return response.getResult().getOutput().getUrl();
}

测试

构造请求:http://localhost:8080/ai/image?prompt=一个女孩坐在苹果树下

响应结果:

image-20240507214047146

在浏览器直接输入上述url即可显示下图

image-20240507214027753

扩展

AnythingLLM:基于RAG方案构专属私有知识库(开源|高效|可定制)

我们可以使用AnythingLLM 配合 Ollama 构建自己的知识库,可以通过给本地模型喂入一些文本文档,使其具有一些特殊领域的知识

比如:我们选择本地Ollama模型,直接提问得到的结果如下

image-20240507220505442

我们给其上传一个文本txt文件,文本内容如下:

1
吴棒,男,毕业于华中科技大学,人张的贼帅

然后上传该文本文件,喂入模型

image-20240507220714606

再次提问:

image-20240507220803128

也可以直接给一个网页链接,其可以自动爬取网页内容训练模型

比如我们给其输入网页:https://eic.hust.edu.cn/info/1195/7541.htm

image-20240507221034200

喂入数据模型之前提问结果:

image-20240507220938907

喂入数据之后模型提问结果:

image-20240507221151449