快速开始
5 分钟内构建你的第一个 Spring AI Alibaba 应用。
前置条件
- JDK 17+
- Maven 3.6+ 或 Gradle 7+
- 阿里云 DashScope API Key(前往获取)
创建项目
方式一:Spring Initializr
访问 start.spring.io,选择:
- Spring Boot 3.3+
- Java 17+
- 添加依赖:Spring Web
方式二:直接添加依赖
在 pom.xml 中添加:
xml
<properties>
<spring-ai-alibaba.version>1.1.2.1</spring-ai-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<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>
<dependencies>
<!-- Spring Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI Alibaba DashScope Starter -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
</dependencies>配置 API Key
yaml
# application.yml
spring:
ai:
dashscope:
api-key: ${AI_DASHSCOPE_API_KEY:your-api-key-here}
chat:
options:
model: qwen-max
temperature: 0.7
max-tokens: 2048安全提示
不要将 API Key 硬编码在代码中,使用环境变量或配置中心管理。
Hello World
最简单的对话
java
@RestController
@RequestMapping("/ai")
public class ChatController {
private final ChatClient chatClient;
// Spring 自动注入 ChatClient
public ChatController(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
@GetMapping("/chat")
public String chat(@RequestParam String message) {
return chatClient.prompt()
.user(message)
.call()
.content();
}
}启动应用,访问:
GET http://localhost:8080/ai/chat?message=你好,介绍一下自己流式响应
java
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> stream(@RequestParam String message) {
return chatClient.prompt()
.user(message)
.stream()
.content();
}带系统提示词
java
@GetMapping("/assistant")
public String assistant(@RequestParam String message) {
return chatClient.prompt()
.system("你是一个专业的 Java 技术顾问,回答简洁专业。")
.user(message)
.call()
.content();
}带记忆的对话
java
@Configuration
public class AiConfig {
@Bean
public ChatMemory chatMemory() {
return new InMemoryChatMemory();
}
@Bean
public ChatClient chatClient(ChatClient.Builder builder, ChatMemory memory) {
return builder
.defaultAdvisors(
new MessageChatMemoryAdvisor(memory)
)
.build();
}
}
@RestController
public class MemoryChatController {
private final ChatClient chatClient;
public MemoryChatController(ChatClient chatClient) {
this.chatClient = chatClient;
}
@GetMapping("/chat")
public String chat(
@RequestParam String message,
@RequestParam(defaultValue = "default") String sessionId
) {
return chatClient.prompt()
.user(message)
.advisors(a -> a.param(
AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY, sessionId
))
.call()
.content();
}
}工具调用示例
java
// 定义工具
public class WeatherTools {
@Tool(description = "获取指定城市的当前天气")
public String getWeather(
@ToolParam(description = "城市名称,如:北京、上海") String city
) {
// 调用真实天气 API
return String.format("%s 当前天气:晴,25°C,湿度 60%%", city);
}
}
// 使用工具
@GetMapping("/weather")
public String weather(@RequestParam String question) {
return chatClient.prompt()
.user(question)
.tools(new WeatherTools())
.call()
.content();
}访问:
GET /weather?question=北京今天天气怎么样?项目结构建议
src/main/java/com/example/aiapp/
├── config/
│ └── AiConfig.java # AI 相关 Bean 配置
├── controller/
│ └── ChatController.java # REST 接口
├── service/
│ └── AiService.java # 业务逻辑
├── tools/
│ └── WeatherTools.java # 工具定义
└── AiApplication.java