springai实际上是对openai接口调用进行封装后的sdk,也包括了其他大模型调用能力,以及和向量数据库的交互操作。对各种实体和参数进行约定,封装统一调用方法,屏蔽底层细节和API交互。
官方文档:
https://docs.spring.io/spring-ai/reference/api/index.html
包含了下面这些API:
前提
需要jdk 17及以上
创建springboot项目
pom.xml
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>0.8.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
配置application.properties
spring.application.name=springai
spring.ai.openai.api-key=xx
spring.ai.openai.chat.options.model=gpt-4o
spring.ai.openai.chat.options.temperature=0.7
spring.ai.openai.chat.enabled=true
server.port=9090
创建测试接口
@RestController
public class ChatController {
@Autowired
public OpenAiChatClient chatClient;
@Autowired
private EmbeddingClient embeddingClient;
/**
* 对话
* @param message
* @return
*/
@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("generation", chatClient.call(message));
}
/**
* 流式会话
* @param message
* @return
*/
@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);
}
/**
* 获取embedding
* @param message
* @return
*/
@GetMapping("/ai/embedding")
public Map embedding(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("embedding", embeddingClient.embed(message));
}
/**
* tokens分割
* @param message
* @return
*/
@GetMapping("/ai/split")
public List<String> pdf(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
TokenTextSplitter textSplitter = new TokenTextSplitter();
return textSplitter.split(message, 50);
}
}
启动调用
启动配置 vm options参数,因为网络原因设置本地代理,这里使用socks5
-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1083
启动后调用接口:
其他功能如Milvus向量数据库集成待续。