One day when I check the maven BOM of Spring-AI
, I found a Springboot starter for Spring AI to access Dashscope, which was the former name of Alibaba Cloud Model Studio.
But the doc of Spring AI didn’t announce that, so, let’s learn to use it.
Spring AI need your jdk version >= 17
1. Apply a Api-key on Alibaba Cloud Model Studio
Alibaba Cloud Model Studio – Alibaba Cloud
A one-stop generative AI platform to build intelligent applications that understand your business, based on Qwen and other popular models
alibabacloud.com
2. Import Spring-AI
This is a new Springboot maven project
- Add Spring Milestone and Snapshot Repositories
You will need to add Spring milestone and snapshot repositories to your build system. Because Spring didn’t publish it to maven center repository.
<span><repositories></span><span><repository></span><span><id></span>spring-milestones<span></id></span><span><name></span>Spring Milestones<span></name></span><span><url></span>https://repo.spring.io/milestone<span></url></span><span><snapshots></span><span><enabled></span>false<span></enabled></span><span></snapshots></span><span></repository></span><span><repository></span><span><id></span>spring-snapshots<span></id></span><span><name></span>Spring Snapshots<span></name></span><span><url></span>https://repo.spring.io/snapshot<span></url></span><span><releases></span><span><enabled></span>false<span></enabled></span><span></releases></span><span></repository></span><span></repositories></span><span><repositories></span> <span><repository></span> <span><id></span>spring-milestones<span></id></span> <span><name></span>Spring Milestones<span></name></span> <span><url></span>https://repo.spring.io/milestone<span></url></span> <span><snapshots></span> <span><enabled></span>false<span></enabled></span> <span></snapshots></span> <span></repository></span> <span><repository></span> <span><id></span>spring-snapshots<span></id></span> <span><name></span>Spring Snapshots<span></name></span> <span><url></span>https://repo.spring.io/snapshot<span></url></span> <span><releases></span> <span><enabled></span>false<span></enabled></span> <span></releases></span> <span></repository></span> <span></repositories></span><repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </repository> </repositories>
Enter fullscreen mode Exit fullscreen mode
- Import Spring AI BOM to Manage the Version of Spring AI
<span><dependencyManagement></span><span><dependencies></span><span><dependency></span><span><groupId></span>group.springframework.ai<span></groupId></span><span><artifactId></span>spring-ai-bom<span></artifactId></span><span><version></span>${spring-ai.version}<span></version></span><span><type></span>pom<span></type></span><span><scope></span>import<span></scope></span><span></dependency></span><span><dependency></span><span><groupId></span>org.springframework.boot<span></groupId></span><span><artifactId></span>spring-boot-dependencies<span></artifactId></span><span><version></span>3.3.4<span></version></span><span><type></span>pom<span></type></span><span><scope></span>import<span></scope></span><span></dependency></span><span></dependencies></span><span></dependencyManagement></span><span><dependencyManagement></span> <span><dependencies></span> <span><dependency></span> <span><groupId></span>group.springframework.ai<span></groupId></span> <span><artifactId></span>spring-ai-bom<span></artifactId></span> <span><version></span>${spring-ai.version}<span></version></span> <span><type></span>pom<span></type></span> <span><scope></span>import<span></scope></span> <span></dependency></span> <span><dependency></span> <span><groupId></span>org.springframework.boot<span></groupId></span> <span><artifactId></span>spring-boot-dependencies<span></artifactId></span> <span><version></span>3.3.4<span></version></span> <span><type></span>pom<span></type></span> <span><scope></span>import<span></scope></span> <span></dependency></span> <span></dependencies></span> <span></dependencyManagement></span><dependencyManagement> <dependencies> <dependency> <groupId>group.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>${spring-ai.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>3.3.4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Enter fullscreen mode Exit fullscreen mode
- Add
spring-ai-dashscope-spring-boot-starter
and Some Assistant Package
<span><dependencies></span><span><dependency></span><span><groupId></span>org.springframework.boot<span></groupId></span><span><artifactId></span>spring-boot-starter-web<span></artifactId></span><span></dependency></span><span><dependency></span><span><groupId></span>org.projectlombok<span></groupId></span><span><artifactId></span>lombok<span></artifactId></span><span><optional></span>true<span></optional></span><span></dependency></span><span><dependency></span><span><groupId></span>org.springframework.boot<span></groupId></span><span><artifactId></span>spring-boot-starter-test<span></artifactId></span><span><scope></span>test<span></scope></span><span></dependency></span><span><dependency></span><span><groupId></span>group.springframework.ai<span></groupId></span><span><artifactId></span>spring-ai-dashscope-spring-boot-starter<span></artifactId></span><span></dependency></span><span></dependencies></span><span><dependencies></span> <span><dependency></span> <span><groupId></span>org.springframework.boot<span></groupId></span> <span><artifactId></span>spring-boot-starter-web<span></artifactId></span> <span></dependency></span> <span><dependency></span> <span><groupId></span>org.projectlombok<span></groupId></span> <span><artifactId></span>lombok<span></artifactId></span> <span><optional></span>true<span></optional></span> <span></dependency></span> <span><dependency></span> <span><groupId></span>org.springframework.boot<span></groupId></span> <span><artifactId></span>spring-boot-starter-test<span></artifactId></span> <span><scope></span>test<span></scope></span> <span></dependency></span> <span><dependency></span> <span><groupId></span>group.springframework.ai<span></groupId></span> <span><artifactId></span>spring-ai-dashscope-spring-boot-starter<span></artifactId></span> <span></dependency></span> <span></dependencies></span><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>group.springframework.ai</groupId> <artifactId>spring-ai-dashscope-spring-boot-starter</artifactId> </dependency> </dependencies>
Enter fullscreen mode Exit fullscreen mode
3. Write application.yaml
<span>spring</span><span>:</span><span>ai</span><span>:</span><span>dashscope</span><span>:</span><span># DashScope API Key</span><span>api-key</span><span>:</span> <span># TODO</span><span>chat</span><span>:</span><span>options</span><span>:</span><span># choose the model you want to use</span><span>model</span><span>:</span> <span>deepseek-v3</span><span># temperature is the probability of the model to generate a new word, 0.7 is the default value</span><span>temperature</span><span>:</span> <span>0.7</span><span>logging</span><span>:</span><span>level</span><span>:</span><span>root</span><span>:</span> <span>info</span><span># if you want to check the log of Spring AI, you need enable this config</span><span># org.springframework: debug</span><span>server</span><span>:</span><span>port</span><span>:</span> <span>9090</span><span>spring</span><span>:</span> <span>ai</span><span>:</span> <span>dashscope</span><span>:</span> <span># DashScope API Key</span> <span>api-key</span><span>:</span> <span># TODO</span> <span>chat</span><span>:</span> <span>options</span><span>:</span> <span># choose the model you want to use</span> <span>model</span><span>:</span> <span>deepseek-v3</span> <span># temperature is the probability of the model to generate a new word, 0.7 is the default value</span> <span>temperature</span><span>:</span> <span>0.7</span> <span>logging</span><span>:</span> <span>level</span><span>:</span> <span>root</span><span>:</span> <span>info</span> <span># if you want to check the log of Spring AI, you need enable this config</span> <span># org.springframework: debug</span> <span>server</span><span>:</span> <span>port</span><span>:</span> <span>9090</span>spring: ai: dashscope: # DashScope API Key api-key: # TODO chat: options: # choose the model you want to use model: deepseek-v3 # temperature is the probability of the model to generate a new word, 0.7 is the default value temperature: 0.7 logging: level: root: info # if you want to check the log of Spring AI, you need enable this config # org.springframework: debug server: port: 9090
Enter fullscreen mode Exit fullscreen mode
The value of temperature you can fellow the advice of deepseek
4. Register ChatClient
as a Spring Bean
<span>@Configuration</span><span>public</span> <span>class</span> <span>SpringAiConfig</span> <span>{</span><span>@Autowired</span><span>private</span> <span>ChatModel</span> <span>chatModel</span><span>;</span><span>@Bean</span><span>public</span> <span>ChatClient</span> <span>chatClient</span><span>()</span> <span>{</span><span>return</span> <span>ChatClient</span><span>.</span><span>builder</span><span>(</span><span>chatModel</span><span>)</span><span>// Set default system prompt</span><span>.</span><span>defaultSystem</span><span>(</span><span>""" Imitate Max Verstappen's tone date of today is {current_date} """</span><span>)</span><span>.</span><span>build</span><span>();</span><span>}</span><span>}</span><span>@Configuration</span> <span>public</span> <span>class</span> <span>SpringAiConfig</span> <span>{</span> <span>@Autowired</span> <span>private</span> <span>ChatModel</span> <span>chatModel</span><span>;</span> <span>@Bean</span> <span>public</span> <span>ChatClient</span> <span>chatClient</span><span>()</span> <span>{</span> <span>return</span> <span>ChatClient</span><span>.</span><span>builder</span><span>(</span><span>chatModel</span><span>)</span> <span>// Set default system prompt</span> <span>.</span><span>defaultSystem</span><span>(</span><span>""" Imitate Max Verstappen's tone date of today is {current_date} """</span><span>)</span> <span>.</span><span>build</span><span>();</span> <span>}</span> <span>}</span>@Configuration public class SpringAiConfig { @Autowired private ChatModel chatModel; @Bean public ChatClient chatClient() { return ChatClient.builder(chatModel) // Set default system prompt .defaultSystem(""" Imitate Max Verstappen's tone date of today is {current_date} """) .build(); } }
Enter fullscreen mode Exit fullscreen mode
Then you can use ChatClient to access AI model
5. Test ChatClient
I create a controller to test ChatClient, All test will based on web request to access.
<span>@RestController</span><span>@RequiredArgsConstructor</span><span>@RequestMapping</span><span>(</span><span>"/ai"</span><span>)</span><span>@Slf4j</span><span>public</span> <span>class</span> <span>AiController</span> <span>{</span><span>private</span> <span>final</span> <span>ChatClient</span> <span>chatClient</span><span>;</span><span>}</span><span>@RestController</span> <span>@RequiredArgsConstructor</span> <span>@RequestMapping</span><span>(</span><span>"/ai"</span><span>)</span> <span>@Slf4j</span> <span>public</span> <span>class</span> <span>AiController</span> <span>{</span> <span>private</span> <span>final</span> <span>ChatClient</span> <span>chatClient</span><span>;</span> <span>}</span>@RestController @RequiredArgsConstructor @RequestMapping("/ai") @Slf4j public class AiController { private final ChatClient chatClient; }
Enter fullscreen mode Exit fullscreen mode
Let’s start Spring AI with a normal chat
<span>@GetMapping</span><span>(</span><span>"/chat"</span><span>)</span><span>public</span> <span>String</span> <span>chat</span><span>(</span><span>@RequestParam</span><span>(</span><span>value</span> <span>=</span> <span>"msg"</span><span>)</span> <span>String</span> <span>msg</span><span>)</span> <span>{</span><span>log</span><span>.</span><span>info</span><span>(</span><span>"msg: {}"</span><span>,</span> <span>msg</span><span>);</span><span>return</span> <span>chatClient</span><span>.</span><span>prompt</span><span>()</span><span>.</span><span>user</span><span>(</span><span>msg</span><span>)</span><span>// config default system's current date</span><span>.</span><span>system</span><span>(</span><span>promptSystemSpec</span> <span>-></span> <span>promptSystemSpec</span><span>.</span><span>param</span><span>(</span><span>"current_date"</span><span>,</span> <span>LocalDateTime</span><span>.</span><span>now</span><span>()))</span><span>.</span><span>call</span><span>()</span><span>.</span><span>content</span><span>();</span><span>}</span><span>@GetMapping</span><span>(</span><span>"/chat"</span><span>)</span> <span>public</span> <span>String</span> <span>chat</span><span>(</span><span>@RequestParam</span><span>(</span><span>value</span> <span>=</span> <span>"msg"</span><span>)</span> <span>String</span> <span>msg</span><span>)</span> <span>{</span> <span>log</span><span>.</span><span>info</span><span>(</span><span>"msg: {}"</span><span>,</span> <span>msg</span><span>);</span> <span>return</span> <span>chatClient</span><span>.</span><span>prompt</span><span>()</span> <span>.</span><span>user</span><span>(</span><span>msg</span><span>)</span> <span>// config default system's current date</span> <span>.</span><span>system</span><span>(</span><span>promptSystemSpec</span> <span>-></span> <span>promptSystemSpec</span><span>.</span><span>param</span><span>(</span><span>"current_date"</span><span>,</span> <span>LocalDateTime</span><span>.</span><span>now</span><span>()))</span> <span>.</span><span>call</span><span>()</span> <span>.</span><span>content</span><span>();</span> <span>}</span>@GetMapping("/chat") public String chat(@RequestParam(value = "msg") String msg) { log.info("msg: {}", msg); return chatClient.prompt() .user(msg) // config default system's current date .system(promptSystemSpec -> promptSystemSpec.param("current_date", LocalDateTime.now())) .call() .content(); }
Enter fullscreen mode Exit fullscreen mode
Start the project and test it using postman
How amazing it is!!!
If you want to learn the advance of Spring AI, follow me and I will publish it later.
原文链接:Using Spring AI to Access Deepseek Through Alibaba Cloud Model Studio
暂无评论内容