Using Spring AI to Access Deepseek Through Alibaba Cloud Model Studio

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

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
Nothing in the world is difficult if you put your heart into it.
世上无难事,只怕有心人
评论 抢沙发

请登录后发表评论

    暂无评论内容