新闻详情

新闻详情

首页 / 资讯中心 / 详情

Spring AI 调 vLLM 部署的 deepseek 报 400?用 Jetty 客户端快速排查修复

发布时间:2026/9/18 14:32:29来源:尧图网络
Spring AI 调 vLLM 部署的 deepseek 报 400?用 Jetty 客户端快速排查修复
Spring AI 调 vLLM 部署的 deepseek 报 400用 Jetty 客户端快速排查修复【免费下载链接】spring-aiAn Application Framework for AI Engineering项目地址: https://gitcode.com/GitHub_Trending/spr/spring-ai如果你用 Spring AI 的 OpenAiChatModel 对接 vLLM 部署的 deepseek 模型调用时稳定收到 400而 curl 直连却一切正常大概率不是配置写错而是 HTTP 客户端的发送方式与 vLLM 不兼容。本文给出判断信号、根因定位以及替换默认 HTTP 客户端为 Jetty 的最小修复方案和验证清单。这类 400 长什么样先花两分钟确认你是不是踩中了同款问题满足下面三条基本可以锁定用 curl 或独立脚本直连同一 vLLM 地址模型名、base URL、Key 全部确认无误返回正常 换成 Spring AI 的 OpenAiChatModel 发同样的 chat completion 请求必现 400响应里提示 body 缺失或 input 为 nullBadRequestError换 prompt、换参数都复现与是否流式、是否带 tools 无关。如果你只是 Key 写错或地址少了/v1curl 也会失败那就先回到常规配置排查。为什么请求看起来正确却仍然失败问题的关键不在 URL、Key 或 model 名而在请求体的传输方式。HTTP 客户端在发送 body 时可以选择带 Content-Length 的一次性发送也可以采用分块传输编码chunked transfer encoding即把请求体分段推给服务端。Spring 默认的 HTTP 客户端在某些场景下会走后者而 vLLM 侧的请求解析对分块请求支持不完整它没能把分段内容拼回完整 body于是把整个请求体当作None处理直接以 400 拒绝并提示必填字段缺失。你看到的缺字段其实是服务端根本没读到字段。最小改动把默认 HTTP 客户端换成 Jetty修复思路很简单换一个发送行为稳定的 HTTP 客户端。Jetty 客户端对这类同步 POST 请求会正常携带完整 body实测可消除上述 400。第一步为项目引入 Jetty 客户端依赖同步 REST 与响应式 WebClient 各需一个dependency groupIdorg.eclipse.jetty/groupId artifactIdjetty-client/artifactId /dependency dependency groupIdorg.eclipse.jetty/groupId artifactIdjetty-reactive-httpclient/artifactId /dependency第二步在构建 OpenAI 客户端时把 Rest 和 Web 两条链路的请求工厂都指定为 Jetty 实现OpenAiApi api OpenAiApi.builder() .baseUrl(baseUrl) .apiKey(apiKey) .restClientBuilder(RestClient.builder() .requestFactory(new JettyClientHttpRequestFactory())) .webClientBuilder(WebClient.builder() .clientConnector(new JettyClientHttpConnector())) .build();如果你使用的是 1.x 系列版本OpenAiChatModel 基于 OpenAiApi 构建可直接套用上面的写法若你升级到了 2.xspring-ai-openai 模块已切换到官方 OpenAI Java SDK 之上源码见 models/spring-ai-openai/此时没有 restClientBuilder/webClientBuilder 这两个入口按同样思路在 SDK 客户端初始化处替换底层 HTTP 连接即可。修复后如何确认重新构建并重启应用让新的依赖与 Bean 生效而不是只改了代码✅ 复跑之前必现 400 的那条调用确认返回正常内容而非 BadRequestError打开 debug 日志观察出站请求的连接客户端确认实际走的是 Jetty 实现用同一模型、同一 prompt 对比 Spring AI 调用与 curl 直连的响应两者应一致若接了流式输出追加验证一次 streaming 请求避免只在非流式路径上修好了。后续跟进持续关注 vLLM 对分块传输请求的解析修复上游修好后临时适配即可移除把替换 HTTP 客户端作为这类 400 的第一排查动作沉淀到团队文档⚠️ 引入其他推理服务如自研网关、私有部署框架时优先确认其 HTTP 兼容性避免重复踩坑。【免费下载链接】spring-aiAn Application Framework for AI Engineering项目地址: https://gitcode.com/GitHub_Trending/spr/spring-ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Java八股文核心考点精讲:从基础到多线程的面试通关指南 2026/9/18 17:27:01

Java八股文核心考点精讲:从基础到多线程的面试通关指南

简介:这是一份面向Java开发者的经典面试题总结PDF资料,内容覆盖Java基础语法、面向对象、异常处理、多线程、集合框架与网络编程等核心模块,既适合准备校招求职者系统梳理知识,也适合在职开发人员快速查漏补缺。资源为单个PDF文件…

阅读更多 →
桥式起重机变频调速系统:PLC与矢量控制设计全解析 2026/9/18 17:27:01

桥式起重机变频调速系统:PLC与矢量控制设计全解析

简介:这份资源是一份基于PLC控制桥式起重机变频调速系统的完整毕业设计文档,适合电气自动化、机电一体化等专业学生及从事起重机控制系统改造的工程技术人员参考。文档以57页篇幅详细涵盖系统总体方案设计、交流异步电机调速方式对比与选择、变频调速及矢…

阅读更多 →
Ubuntu视频文件排查:mediainfo与ffprobe媒体信息查看指南 2026/9/18 17:27:01

Ubuntu视频文件排查:mediainfo与ffprobe媒体信息查看指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
FPGA与ZYNQ系统学习路径:从Verilog到PetaLinux实战 2026/9/18 17:27:01

FPGA与ZYNQ系统学习路径:从Verilog到PetaLinux实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Storybook终极指南:10个构建高质量UI组件的完整技巧 2026/9/18 17:27:01

Storybook终极指南:10个构建高质量UI组件的完整技巧

Storybook终极指南:10个构建高质量UI组件的完整技巧 Storybook是构建、文档化和测试UI组件的行业标准工具,专为前端开发者设计。这个强大的UI组件开发工具让您能够在隔离环境中独立开发和测试组件,彻底改变传统的前端开发工作流程。无论您是…

阅读更多 →
Git分支全面解析:从指针原理到合并冲突与实战管理 2026/9/18 17:24:00

Git分支全面解析:从指针原理到合并冲突与实战管理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞