Skip to content

快速开始

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

下一步探索

本站内容由 褚成志 整理编写,仅供学习参考