Post

【实践】一文带你玩转 Spring AI 可观测性

【实践】一文带你玩转 Spring AI 可观测性

1 前言

参考链接:Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性_博客-阿里云Spring AI Alibaba官网官网

尝试按照链接复现可观测性,但文档步骤似乎有一些问题,没有成功。过程和问题记录于此。

2 问题记录

首先添加文章提到的依赖,报错:

1
Could not find artifact org.springframework.ai:spring-ai-core:pom:1.0.0-M3 in alimaven (https://maven.aliyun.com/nexus/content/groups/public/)

经过测试,应该是要包含如下完整依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?xml version="1.0" encoding="UTF-8"?>  
<project xmlns="http://maven.apache.org/POM/4.0.0"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
    <modelVersion>4.0.0</modelVersion>  
  
    <groupId>com.digitzh</groupId>  
    <artifactId>untitledtest</artifactId>  
    <version>1.0-SNAPSHOT</version>  
  
    <properties>        <!-- Spring AI -->  
        <spring-ai.version>1.0.0</spring-ai.version>  
        <!-- Spring AI Alibaba -->  
        <spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.version>  
        <!-- Spring Boot -->  
        <spring-boot.version>3.4.0</spring-boot.version>  
  
        <maven.compiler.source>17</maven.compiler.source>  
        <maven.compiler.target>17</maven.compiler.target>  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
    </properties>  
    <dependencies>        <dependency>            <groupId>com.alibaba.cloud.ai</groupId>  
            <artifactId>spring-ai-alibaba-starter</artifactId>  
            <version>1.0.0-M3.2</version>  
        </dependency>  
        <dependency>            <!-- spring 提供的可观测工具包,用于初始化 micrometer 组件 -->  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-actuator</artifactId>  
        </dependency>    </dependencies>  
    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.boot</groupId>  
                <artifactId>spring-boot-dependencies</artifactId>  
                <version>${spring-boot.version}</version>  
                <type>pom</type>  
                <scope>import</scope>  
            </dependency>            <dependency>                <groupId>org.springframework.ai</groupId>  
                <artifactId>spring-ai-bom</artifactId>  
                <version>${spring-ai.version}</version>  
                <type>pom</type>  
                <scope>import</scope>  
            </dependency>  
            <dependency>                <groupId>com.alibaba.cloud.ai</groupId>  
                <artifactId>spring-ai-alibaba-bom</artifactId>  
                <version>${spring-ai-alibaba.version}</version>  
                <type>pom</type>  
                <scope>import</scope>  
            </dependency>        </dependencies>    </dependencyManagement>  
</project>

编写聊天服务 Controller 类,提示没有function(),应该是要改为tools():

1
2
3
4
5
6
7
8
public String weatherService(String subject) {  
    return chatClient.prompt()  
            //.function("getWeather", "根据城市查询天气", new MockWeatherService())
            .tools("getWeather", "根据城市查询天气", new MockWeatherService())   
            .user(subject)  
            .call()  
            .content();  
}

FunctionCallingController的导包如下(假设MockWeatherService在包com.digitzh.aiobs.service中,根据需要修改):

1
2
3
4
5
import org.springframework.ai.chat.client.ChatClient;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  
import com.digitzh.aiobs.service.MockWeatherService; // 自定义

MockService的导包,文章没有介绍Function路径:

1
2
3
4
5
6
import com.fasterxml.jackson.annotation.JsonClassDescription;  
import com.fasterxml.jackson.annotation.JsonInclude;  
import com.fasterxml.jackson.annotation.JsonProperty;  
import com.fasterxml.jackson.annotation.JsonPropertyDescription;

import java.util.function.Function; // 不确定是否正确

Response导哪个包不太清楚,从格式来看只是从String定义,那么可以暂时这样定义(是否正确?):

1
2
3
4
5
6
public class Response {  
    String response;  
    Response(String string){  
        response = string;  
    }  
}

从而参数类型Request和Response都在内部定义:

1
public class MockWeatherService implements Function<MockWeatherService.Request, MockWeatherService.Response> {...}

FunctionCallingExampleApplication报错:默认软件包中的 Spring Boot 应用程序。

上述测试程序在spring-ai-alibaba的仓库中未找到,有待解决。

This post is licensed under CC BY 4.0 by the author.