一、创建应用(直接jdk17创建)

二、 开发代码

本文由于使用免费的通义模型,但是SpringAI原生不支持通义模型,所以就需要做适配了,如果不想适配,那么可以选择使用SpringAI Alibaba(做了封装和适配)

pom配置如下(这是核心配置,没有之一):

直接上核心代码,这里的ChatClient是一个高层抽象,底层会调用对应模型(通义)的SDK:

import org.springframework.ai.chat.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TongyiApp implements CommandLineRunner {

	@Autowired
	private ChatClient chatClient;

	public static void main(String[] args) {
		SpringApplication.run(TongyiApp.class, args);
	}

	@Override
	public void run(String... args) {
		String question = "杨汉森是谁?";
		String response = chatClient.call(question);
		System.out.println("通义回答:" + response);
	}
}

这是底层通义SDK的代码逻辑,也是封装和适配逻辑:

import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import org.springframework.ai.chat.ChatClient;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;
import java.util.stream.Collectors;

@Configuration
public class TongyiConfig {

    @Value("${spring.ai.dashscope.api-key}")
    private String apiKey;

    @Bean
    public ChatClient chatClient() {
        return new ChatClient() {
            @Override
            public ChatResponse call(Prompt prompt) {
                try {
                    // 使用完整类名
                    com.alibaba.dashscope.aigc.generation.Generation gen =
                            new com.alibaba.dashscope.aigc.generation.Generation();

                    String userContent = prompt.getInstructions().stream()
                            .map(msg -> msg.getContent())
                            .collect(Collectors.joining(" "));

                    Message systemMsg = Message.builder()
                            .role("system")
                            .content("You are a helpful assistant.")
                            .build();

                    Message userMsg = Message.builder()
                            .role("user")
                            .content(userContent)
                            .build();

                    GenerationParam param = GenerationParam.builder()
                            .apiKey(apiKey)
                            .model("qwen-turbo")
                            .messages(Arrays.asList(systemMsg, userMsg))
                            .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                            .build();

                    GenerationResult result = gen.call(param);
                    String content = result.getOutput().getChoices().get(0).getMessage().getContent();

                    // 使用 Spring AI 的 Generation 类
                    org.springframework.ai.chat.Generation springGeneration =
                            new org.springframework.ai.chat.Generation(content);
                    return new ChatResponse(Arrays.asList(springGeneration));
                } catch (Exception e) {
                    org.springframework.ai.chat.Generation errorGeneration =
                            new org.springframework.ai.chat.Generation("调用失败: " + e.getMessage());
                    return new ChatResponse(Arrays.asList(errorGeneration));
                }
            }
        };
    }
}

代码都有了,接下来需要配置下api-key就可以直接和大模型对话了

spring.ai.dashscope.api-key=********
spring.ai.dashscope.model=qwen-turbo

三、配置API-KEY

按照指示处配置即可,easy,然后配置到代码配置中,直接跑代码就可运行

 四、入门总结

如果你看到这样的信息,或者类似这样的信息,恭喜你入门了!!! 

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐