springai实际上是对openai接口调用进行封装后的sdk,也包括了其他大模型调用能力,以及和向量数据库的交互操作。对各种实体和参数进行约定,封装统一调用方法,屏蔽底层细节和API交互。

官方文档:

https://docs.spring.io/spring-ai/reference/api/index.html

包含了下面这些API:
image.png

前提

需要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

启动后调用接口:
image.png

image.png

image.png

image.png

其他功能如Milvus向量数据库集成待续。