【实践】一文带你玩转 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.