SpringAI学习笔记-Chat简单示例

Spring AI的内容太多太多。Chat是其中的一部分,也是其中非常重要、非常基础的一部分,所以适合用来入门。
Chat API主要涉及几个概念:
  • Client:代表各模型的客户端,负责请求和响应。
  • Prompt:请求的最外层封装,包含Message和Option。
    • Message:发送到大模型的内容,另外还包含了一些属性以及消息类型等。
    • Option:相当于参数、控制项,比如本次对话的temperature(值越小大模型回答越严谨,值越大大模型回答越有创造性)。
  • Response:响应对象,封装了大模型返回的信息,主要是Generation。
    • Generation:具体的返回内容。
Chat简单示例
  • 项目依赖

    <dependencies>
        <!-- SpringBootStarterWeb依赖包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>3.4.5</version>
        </dependency>
    
        <!-- JavaxServlet依赖包 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    
        <!-- SpringAI依赖包 -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-spring-boot-autoconfigure</artifactId>
            <version>1.0.0-M6</version>
        </dependency>
    
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-starter</artifactId>
            <version>1.0.0-M6.1</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
            <version>1.0.0-M6</version>
        </dependency>
    </dependencies>
    
  • 项目配置

    • 修改配置文件,主要用于设置API密钥、模型选择等参数。
    • 由于封禁的原因,国内无法获取很多模型的api-key,示例选的国内厂商阿里的大模型服务平台百炼上的模型。
    spring:
      profiles:
        active: dev
      application:
        name: ai-demo-app
      main:
        allow-bean-definition-overriding: true
      ai:
        dashscope:
          api-key: sk-1d888882468a0e12b01b012f1a234f28
          chat:
            enabled: true
            options:
              model: qwen-max
        mcp:
          client:
            enabled: true
            timeout: 60000
    
    server:
      port: 10101
    
  • 项目代码

    • 一个请求是同步阻塞调用,返回完整的字符串响应。
    • 一个请求Flux表示使用响应式流式处理,针对大模型的响应进行流式输出,响应的内容并非一次性展现,而是一段一段的内容,持续不断的展现出来,这就是流式响应的效果。
    @RestController("aiDemoChat")
    @RequestMapping("ai/demo/chat")
    public class AiDemoChatRest {
    
        private ChatClient chatClient;
    
        public AiDemoChatRest(ChatClient.Builder builder, ToolCallbackProvider toolCallbackProvider) {
            this.chatClient = builder
                    .defaultSystem("后续操作")
                    .defaultAdvisors(new PromptChatMemoryAdvisor(new InMemoryChatMemory()))
                    .defaultTools(toolCallbackProvider.getToolCallbacks())
                    .build();
        }
    
        @GetMapping("001")
        public String chat001(@RequestParam(name = "message", defaultValue = "tell a joke") String message) {
            return this.chatClient.prompt().user(message).call().content();
        }
    
        @GetMapping("002")
        public Flux<String> chat002(@RequestParam(name = "message", defaultValue = "tell a joke") String message) {
            Flux<String> content = this.chatClient.prompt().user(message)
                .system(promptSystemSpec -> promptSystemSpec.param("date", new Date()))
                    .advisors(advisorSpec -> advisorSpec.param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100))
                        .stream().content();
            return content.concatWith(Flux.just("[finish]"));
        }
    
    }
    
  • 至此Caht简单示例已基本完成,启动项目,之后就可以通过请求链接跟大模型进行交互。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值