欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > SpringAI调用硅基流动免费模型

SpringAI调用硅基流动免费模型

2025/5/7 4:17:43 来源:https://blog.csdn.net/liudachu/article/details/147084461  浏览:    关键词:SpringAI调用硅基流动免费模型

一、引入Spring AI

新建一个Spring Boot的工程,在工程中引入Spring AI的依赖,Spring AI支持Ollma、类OpenAI的接口,这两个引入的pom不一样,这里示例中是使用的硅基流动的模型

<!-- Spring Boot版本要 2.x 或者 3.x以上--> 
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.6</version>
</parent><!-- Spring AI -->  
<properties><spring-ai.version>1.0.0-M6</spring-ai.version>
</properties><dependency>  <groupId>org.springframework.ai</groupId>  <artifactId>spring-ai-openai-spring-boot-starter</artifactId>  <version>${spring-ai.version}</version>  
</dependency>

这里为了展示调用结果,同时引入Spring Boot Web相关依赖,使用restful方式调用

<!-- Spring Boot -->  
<properties><spring-boot.version>3.4.0</spring-boot.version>
</properties><dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId>  <version>${spring-boot.version}</version>  
</dependency>

二、配置模型接口信息

这里使用的是硅基流动中Qwen/Qwen2.5-7B-Instruct模型,也可以其他的对话模型

server:  port: 9000  spring:  ai:  openai:  api-key: ${密钥}  base-url: https://api.siliconflow.cn/  chat:  options:  model: Qwen/Qwen2.5-7B-Instruct  completions-path: /v1/chat/completions

三、使用Spring AI调用模型

编写控制器 OpenAiChatClientController 实现调用逻辑,可以设置默认的系统Prompt,定义模型的参数

package com.renne.ai.learn.chat.controller;  import jakarta.servlet.http.HttpServletResponse;  
import org.springframework.ai.chat.client.ChatClient;  
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;  
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;  
import org.springframework.ai.chat.memory.InMemoryChatMemory;  
import org.springframework.ai.openai.OpenAiChatOptions;  
import org.springframework.http.MediaType;  
import org.springframework.http.codec.ServerSentEvent;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestParam;  
import org.springframework.web.bind.annotation.RestController;  
import reactor.core.publisher.Flux;  @RestController  
@RequestMapping("/openai/chat")  
public class OpenAiChatClientController {  private final ChatClient openAiChatClient;  private static final String DEFAULT_PROMPT = "你是一个聊天助手,请根据用户提问回答!";  public OpenAiChatClientController(ChatClient.Builder chatClientBuilder) {  this.openAiChatClient = chatClientBuilder  .defaultSystem(DEFAULT_PROMPT)  // 实现 Chat Memory 的 Advisor              // 在使用 Chat Memory 时,需要指定对话 ID,以便 Spring AI 处理上下文。  .defaultAdvisors(  new MessageChatMemoryAdvisor(new InMemoryChatMemory())  )  // 实现 Logger 的 Advisor              .defaultAdvisors(  new SimpleLoggerAdvisor()  )  // 设置 ChatClient 中 ChatModel 的 Options 参数  .defaultOptions(  OpenAiChatOptions.builder()  .topP(0.7)  .build()  )  .build();  }  /**  * ChatClient 简单调用  */  @GetMapping("/simple/chat")  public String simpleChat(@RequestParam String message) {  return openAiChatClient  .prompt(message).call().content();  }  /**  * ChatClient 简单调用  * 默认使用 InMemoryChatMemory  ** @param message 消息  * @param chatId  会话ID  */@GetMapping("/simple/chat")  public String simpleChat(@RequestParam String message, @RequestParam String chatId) {  return openAiChatClient  .prompt(message)  .advisors(a -> a  .param(AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY, chatId) // 设置聊天会话ID  .param(AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100)) // 设置聊天记录检索数量  .call().content();  }/**  * ChatClient 流式调用  */  @GetMapping("/stream/chat")  public Flux<String> streamChat(@RequestParam String message,  HttpServletResponse response) {  response.setCharacterEncoding("UTF-8");  return openAiChatClient.prompt(message).stream().content();  }  /**  * ChatClient 流式响应  */  @GetMapping(value = "/stream/response", produces = MediaType.TEXT_EVENT_STREAM_VALUE)  public Flux<ServerSentEvent<String>> streamChat(@RequestParam String message) {  return openAiChatClient.prompt()  .user(message)  .stream()  .content()  .map(content -> ServerSentEvent.<String>builder()  .data(content)  .build());  }  }

使用InMemoryChatMemory聊天记录的存储,可以让模型记住对话记录,结合上下文去回答,chatId就是会话窗口的id,在这个id不变的情况下,它会自定义的去在总结100条对话记录,然后再回答你的问题

调用streamChat接口可以得到模型的返回值
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词