当前位置: 首页 > news >正文

038-Spring AI Alibaba VLLM Chat 功能完整案例

本案例将引导您一步步构建一个 Spring Boot 应用,演示如何利用 Spring AI Alibaba 集成 VLLM 模型,实现多种聊天交互方式,包括简单聊天、流式聊天和自定义参数聊天。

1. 案例目标

我们将创建一个包含三个核心功能的 Web 应用:

  1. 简单聊天 (/vllm/chat-model/simple/chat):最基本的大模型调用方式,不传入任何自定义参数。
  2. 流式聊天 (/vllm/chat-model/stream/chat):实现打字机效果的流式输出,提升用户体验。
  3. 自定义参数聊天 (/vllm/chat-model/custom/chat):通过编程方式自定义大模型参数,如温度、最大令牌数等。

2. 技术栈与核心依赖

  • Spring Boot 3.x
  • Spring AI (用于对接 OpenAI 兼容接口,包括 VLLM)
  • Maven (项目构建工具)

在 pom.xml 中,你需要引入以下核心依赖:

<dependencies><!-- Spring Web 用于构建 RESTful API --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring AI OpenAI 兼容接口,用于对接 VLLM --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId></dependency>
</dependencies>

3. 项目配置

在 src/main/resources/application.yml 文件中,配置 VLLM 服务的连接信息。

server:port: 10003spring:application:name: spring-ai-alibaba-vllm-chat-model-exampleai:openai:api-key: ${OPENAI_API_KEY}  # VLLM 服务的 API Keybase-url: https://api.openai-hk.com  # VLLM 服务的访问地址

重要提示:请将 OPENAI_API_KEY 环境变量设置为你从 VLLM 服务获取的有效 API Key。你也可以直接将其写在配置文件中,但这不推荐用于生产环境。

4. 编写 Java 代码

4.1 VllmChatModelApplication.java

Spring Boot 应用程序入口类。

package com.alibaba.cloud.ai.example.chat.vllm;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class VllmChatModelApplication {public static void main(String[] args) {SpringApplication.run(VllmChatModelApplication.class, args);}
}

4.2 VllmChatModelController.java

实现三种聊天交互方式的控制器类。

package com.alibaba.cloud.ai.example.chat.vllm.controller;import jakarta.servlet.http.HttpServletResponse;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;@RestController
@RequestMapping("/vllm/chat-model")
public class VllmChatModelController {private static final String DEFAULT_PROMPT = "你好,介绍下你自己吧。";private static final String JSON_OUTPUT_PROMPT = "how can I solve 8x + 7 = -23";private final ChatModel ChatModel;public VllmChatModelController(ChatModel chatModel) {this.ChatModel = chatModel;}/*** 最简单的使用方式,没有任何 LLMs 参数注入。** @return String types.*/@GetMapping("/simple/chat")public String simpleChat() {return ChatModel.call(new Prompt(DEFAULT_PROMPT)).getResult().getOutput().getText();}/*** Stream 流式调用。可以使大模型的输出信息实现打字机效果。** @return Flux<String> types.*/@GetMapping("/stream/chat")public Flux<String> streamChat(HttpServletResponse response) {// 避免返回乱码response.setCharacterEncoding("UTF-8");Flux<ChatResponse> chatResponseFlux = ChatModel.stream(new Prompt(DEFAULT_PROMPT));return chatResponseFlux.map(resp -> resp.getResult().getOutput().getText());}/*** 使用编程方式自定义 LLMs ChatOptions 参数, {@link org.springframework.ai.openai.OpenAiChatOptions}* 优先级高于在 application.yml 中配置的 LLMs 参数!*/@GetMapping("/custom/chat")public String customChat() {OpenAiChatOptions customOptions = OpenAiChatOptions.builder().topP(0.7).model("111").maxTokens(1000).temperature(0.8).build();return ChatModel.call(new Prompt(DEFAULT_PROMPT, customOptions)).getResult().getOutput().getText();}
}

5. 运行与测试

  1. 启动应用:运行你的 Spring Boot 主程序。
  2. 使用浏览器或 API 工具(如 Postman, curl)进行测试

测试 1:简单聊天

访问以下 URL,进行最基本的聊天交互。

http://localhost:10003/vllm/chat-model/simple/chat

预期响应

你好!我是一个基于大型语言模型的AI助手,可以回答问题、提供信息和帮助解决各种问题。我的知识涵盖了广泛的领域,包括科学、历史、文化、技术等等。如果你有任何问题或需要帮助,请随时告诉我,我会尽力提供有用的回答。

测试 2:流式聊天

访问以下 URL,体验流式输出的打字机效果。

http://localhost:10003/vllm/chat-model/stream/chat

预期响应

















A
I























测试 3:自定义参数聊天

访问以下 URL,使用自定义参数进行聊天。

http://localhost:10003/vllm/chat-model/custom/chat

预期响应

你好!我是一个AI助手,基于大型语言模型技术构建。我能够理解和生成人类语言,回答各种问题,提供信息,并帮助解决各种任务。我的知识库涵盖了广泛的领域,包括科学、历史、文化、技术等。如果你有任何问题或需要帮助,请随时告诉我,我会尽力提供有用的回答。

6. 实现思路与扩展建议

实现思路

本案例的核心思想是通过 Spring AI 简化与 VLLM 服务的集成。Spring AI 提供了统一的 API 接口,使得我们可以轻松切换不同的模型提供商,而无需修改业务代码。这使得:

  • 代码简洁:通过 Spring AI 的抽象,我们无需处理底层的 HTTP 请求和响应处理。
  • 易于扩展:可以轻松添加新的聊天功能,如多轮对话、上下文管理等。
  • 参数灵活:既可以在配置文件中设置全局参数,也可以在代码中动态调整单个请求的参数。

扩展建议

  • 多轮对话管理:实现会话管理,支持多轮对话,保持上下文连贯性。
  • 参数动态调整:根据不同的业务场景,动态调整模型参数,如温度、最大令牌数等。
  • 模型选择:支持在多个 VLLM 模型之间动态切换,根据任务类型选择最合适的模型。
  • 结果缓存:对于常见问题,实现结果缓存,提高响应速度并降低 API 调用成本。
  • 错误处理与重试:增强错误处理机制,实现自动重试和降级策略。
  • 安全与认证:添加 API 访问认证、请求限流等安全机制。
http://www.dtcms.com/a/540298.html

相关文章:

  • MCU的时钟树(Clock Tree)是什么?
  • 用 htmi5做网站海南最新消息新闻
  • 深入解析Linux MISC驱动框架
  • 【Linux学习笔记】线程安全问题之单例模式和死锁
  • 百日挑战-单词版(第六天)
  • 专为WebGIS开发者打造的用户端---GISBox
  • std::set、std::multiset 和 std::unordered_set的异同
  • iO 拆解:从熟悉的密码模块构建
  • 2026年AEI SCI1区TOP,混合近端策略粒子群算法+公路线形优化,深度解析+性能实测
  • 英文的购物网站泉州网站建设方案详细
  • 如何建公司网站的步骤ppt做的最好的网站
  • 网站建设比较好的多少钱建企业网站需要哪些资料
  • 深圳住房和城乡建设部网站大学网站 作风建设专题
  • 电商网站建设需要活动 网站 源码
  • 如何使用Spring Cloud Gateway实现动态路由?
  • Linux Wlan 无线协议栈开发-传输层详解
  • 前端基础之《React(4)—webpack简介-编译打包优化》
  • F039 python五种算法美食推荐可视化大数据系统vue+flask前后端分离架构
  • 网站开发框架参考文献京东官方网上商城
  • Spring OXM:轻松实现Java-XML互转
  • 功能测试总结
  • 小白来学习 LVDS 差分原理及应用
  • 【Linux】网络层协议IP
  • 《Muduo网络库:TcpConnection类》
  • 网站详情页怎么做的好看的网页设计作品欣赏
  • 线扫相机上位机开发——如何提高问题排查效率
  • 计算机网络自顶向下方法10——应用层 HTTP/2 成帧 响应报文优先次序和服务器推
  • 孝感网站的建设网页设计一般一个月工资多少
  • 什么是持续集成(CI)和持续交付(CD)?测试在其中扮演什么角色?
  • 利用机器学习优化CPU调度的一些思路案例