[Day8] Contract-AI 的 bugfix 之路,疑难杂症大揭秘:GLM、Feign 及文件传递问题全攻克

后端技术实践:问题与解决方案

目录

  1. GLM接口链接文件获取问题
  2. Feign访问400问题排查与解决
  3. 接口文件传递问题及处理
  4. 总结与下期预告

GLM接口链接文件获取问题

在项目开发过程中,遇到了GLM接口无法获取链接文件的情况。尽管传递的格式正确,且链接本身在正常访问场景下可用,但无论是minio分享链接,还是其他形式的分享链接,模型均无法识别。

经过排查发现,并非文件本身存在问题,推测可能是链接被某种规则屏蔽。因为当把文件通过nginx反向代理到公网后,文件能够正常被访问。

阿里的百炼针对此类情况,提供了平台内部的oss存储供模型调用。然而,由于对接百炼调用成本对比原平台过高,最终并未采用此方案。

后来,采用了一种较为简单的上云解决方案:通过腾讯云赠送的OSS,然后使用腾讯云的OSS API开放一个有效期为一小时的链接给模型访问。这样既解决了安全性问题,也满足了存储需求。

在此过程中,为排查模型无法访问链接的原因耗费了好几天时间,但遗憾的是,最终也未明确具体原因。提工单没有得到有效解释,相关文档也无说明。若有大佬知晓原因,恳请在评论区留言或私信指点,不胜感激

Feign访问400问题排查与解决

一次访问400的排查

项目启动注册后,Feign访问各个接口均出现400错误。经过一个下午加半天的排查,最终将问题定位在配置类上(当时没有经验,实在是惭愧,现在写文章的时候回想起来,看到4开头的错误码就该想到是请求/配置本身的问题)。

通过在SynchronousMethodHandlertargetRequest设置断点,发现多个配置类重复设置了请求头。按照原本设计,不同的client应使用对应的configuration,但实际情况是这些配置类被重复使用,从而导致请求出现400错误。

问题核心

该问题的核心在于:Feign对客户端专属配置类的处理逻辑,和Spring全局的Bean管理机制是分开的。即便配置类没有被@Configuration(或@Component等)标记,Feign依然能通过特殊逻辑识别并使用其中的@Bean。具体原因如下:

1. Feign客户端的“专属上下文”机制

当在@FeignClient中通过configuration属性指定配置类(如DeepSeekConfiguration)时,Feign会为这个客户端创建一个独立的子上下文(Subcontext)。这个上下文专门用于管理当前客户端的配置,如拦截器、超时设置等,并不依赖Spring的全局容器。

这个“子上下文”具有以下作用:

  • 隔离配置:避免不同Feign客户端的配置相互干扰;
  • 专属加载:专门加载configuration属性指定的配置类中的Bean。

例如,想象一个小区有很多栋楼(不同的Feign客户端),每栋楼都有自己独立的水电管理系统(子上下文),互不干扰。

2. Feign如何识别配置类中的@Bean

即便配置类没有@Configuration注解,Feign依然能够解析其中的@Bean方法,原因如下:

  • Feign会通过SpringFeign的内部逻辑,显式扫描configuration指定的类;
  • 对于这些类中的@Bean方法,Feign会直接调用它们来创建实例,类似“手动实例化”,而非依赖Spring全局容器的自动扫描;
  • 这些通过@Bean创建的对象会被注册到当前Feign客户端的“子上下文”中,仅对该客户端可见。

打个比方,就好像在一个班级(Feign客户端)里,老师(Feign)专门挑选了几个同学(配置类)来完成特定任务(创建Bean),而不需要学校(Spring全局容器)统一安排。

3. 为什么不需要Spring全局管理这些Bean?
  • 若采用全局管理(加@Configuration),会导致Bean被注册到Spring主容器,所有Feign客户端都会共享这些Bean,这正是之前遇到的问题;
  • 而Feign客户端的“子上下文”仅需“临时”创建并使用这些Bean,用完后仅在当前客户端范围内生效。
4. 依赖注入(如@Value)为何依然有效?

在配置类中,@Value("${ai.strategy.deepseek.api - key:}")依然能获取配置,这是因为Feign的“子上下文”会委托Spring主容器解析依赖,如@Value@Autowired等。也就是说,配置类中的依赖,如配置项、其他Bean,会从主容器中获取,但配置类本身和其@Bean创建的对象不会被注册到主容器。

总结:核心区别
场景@Configuration不加@Configuration(仅在@FeignClient.configuration中指定)
Bean注册位置Spring主容器(全局可见)Feign客户端专属“子上下文”(仅当前客户端可见)
生效范围所有Feign客户端共享仅指定的Feign客户端使用
依赖解析主容器自动处理子上下文委托主容器处理依赖

简单来讲,Feign通过“专属子上下文”机制,绕开了Spring全局Bean的管理,专门为每个客户端加载配置类中的@Bean,既保证了配置的隔离性,又能正常使用Spring的依赖注入能力。这就是去掉@Configuration后,Feign依然能使用这些@Bean的核心原因。

最终的解决方法是去掉这些配置类的@Component,仅依靠Feign的configuration配置来注册这些bean在Feign的上下文中。

接口无法正常传递文件

最初,接口直接使用inputstream作为返回值,然而这一做法导致Feign需要转换器才能正常工作。经过调整,将返回值换成byte数组后,接口便能正常传递文件。

总结与下期预告

在本次项目实践中,遇到了GLM接口链接文件获取、Feign访问400以及接口文件传递等问题,并通过各种排查与分析,找到了相应的解决方案。

下期将探讨management模块。目前基础模块已基本搭建完成,接下来将着手搭建上层模块,如同搭建积木一般,逐步完善整个项目架构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1120331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吐血推荐!MBA论文必备TOP9 AI论文网站深度测评

吐血推荐!MBA论文必备TOP9 AI论文网站深度测评 为什么需要一份靠谱的MBA论文AI工具榜单 在MBA学习过程中,撰写高质量的论文是每位学生必须面对的挑战。随着人工智能技术的发展,越来越多的AI论文辅助工具涌现,但如何选择真正适合自…

突破AI原生应用领域可控性的瓶颈

突破AI原生应用领域可控性的瓶颈:从"黑箱魔法"到"透明工坊" 关键词:AI原生应用、可控性、可解释性、意图对齐、动态反馈 摘要:当AI从"辅助工具"进化为"原生构建者",我们不再满足于它"偶尔给出惊喜",而是需要它"稳…

华为OD机试真题双机位C卷 【采购订单】C语言实现

采购订单 2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 算法考点详解 题目描述 在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(P…

渗透测试该如何系统学习?一份从小白到实战的学习路径规划

渗透测试该如何系统学习?一份从小白到实战的学习路径规划 在网络安全持续升温的今天,越来越多的人开始关注“渗透测试”这一硬核技能。但渗透测试门槛不低,很多新手一上来就被术语、工具和庞杂的学习路径劝退。 那么,渗透测试到…

深度学习毕设项目:基于python的蔬菜识别基于CNN卷积网络的蔬菜识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Agent全面爆发!一文搞懂Agent开发核心链路

过去一年,「智能体(Agent)」这个词的含义悄悄变了。 最早大家聊的是: 模型够不够聪明? 回答像不像人? 而现在,越来越多团队在问的是: 它能不能自己判断? 能不能自己…

2026必备!8个AI论文平台,助你轻松搞定本科毕业论文!

2026必备!8个AI论文平台,助你轻松搞定本科毕业论文! AI 工具的崛起,让论文写作不再难 在当前这个信息爆炸的时代,学术研究和论文写作已成为本科生必须面对的重要任务。无论是课程作业还是毕业论文,都对学生…

渗透测试和逆向工程,它们的区别是什么?当一名白帽黑客要学逆向吗?

渗透测试和逆向工程,它们的区别是什么?当一名白帽黑客要学逆向吗? 在网络安全领域,渗透测试与逆向工程常被并称为 “攻防两大核心技术”,但两者的技术路径、应用场景和核心目标存在显著差异。对于白帽黑客而言&#x…

微服务架构下的高可用保障:RuoYi-Cloud中Sentinel与Feign的完美融合

在微服务架构中,服务间的稳定通信是系统可用性的基石。本文将深度解析如何在RuoYi-Cloud框架中通过Sentinel与Feign的深度集成,实现优雅的服务调用与智能的熔断降级。 引言:微服务通信的挑战 随着企业应用规模不断扩大,传统的单体架构已无法满足业务快速迭代的需求。微服务…

智能体迈入 Agent RL 新架构时代?

序章:三大核心认知基石 在探索 Agent RL 技术浪潮之前,我们需先锚定三个根本性认知: 人类的本质:生物界中,人类凭借高等智慧脱颖而出,而制造与使用工具的能力,正是人与动物的核心分野。 大模型…

【课程设计/毕业设计】基于机器学习CNN卷积网络的蔬菜识别基于深度学习的蔬菜识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

深度学习毕设选题推荐:基于CNN深度学习的遥感图片识别沙漠湖泊和森林基于pythonCNN深度学习的遥感图片识别沙漠湖泊和森林

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

渗透测试技术,从入门到精通,小白也能成为白帽黑客,最新的学习路线和方法都在这。

渗透测试技术,从入门到精通,小白也能成为白帽黑客,最新的学习路线和方法都在这。 安全圈最热的渗透技术怎么学?从入门到精通最完整的学习方法,学完你就是白帽大佬。 首先你要知道渗透测试工程师的主要工作是什么&…

qsort-简单使用 · vs2022调试

把10个整形数据排序,你会怎么做?先来考虑升序情况最先想到用冒泡法做,ok,正好回忆一下oi~那还有更简洁的方法吗?有请 qsort 函数qsort 函数:void qsort(void*base,size-t num,size-t size, int (*compar)(const void*,…

一文彻底厘清:AI Agent、Agentic Workflow与Agentic AI

随着大模型的多次迭代、更多技术架构的提出以及多样化产品的出现,加上学术界对于Agentic AI与AI Agent的全新诠释,可能技术、产品等圈子已经对这几个概念有了更深的认知。但是各领域的相关从业者,对着几个概念仍旧很模糊。 现在AI Agent已经成…

深度学习计算机毕设之基于深度学习卷积网络的蔬菜识别基于CNN卷积网络的蔬菜识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【毕业设计】基于CNN卷积网络的蔬菜识别基于python卷积网络的蔬菜识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

python基于django的基于微信小程序的校园资讯共享平台_ 校园表白墙系统c8463qc4

目录 项目概述技术架构核心功能创新点应用价值 关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 项目概述 该项目基于Django框架与微信小程序开发,旨在构建一个校园资讯…

计算机深度学习毕设实战-基于pythonCNN深度学习的遥感图片识别沙漠湖泊和森林基于CNN深度学习的遥感图片识别沙漠湖泊和森林

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

吐血推荐8个AI论文平台,继续教育学生轻松搞定毕业论文!

吐血推荐8个AI论文平台,继续教育学生轻松搞定毕业论文! AI 工具如何助力论文写作,成为学生新宠 在继续教育领域,论文写作一直是许多学生的“硬骨头”。无论是本科、硕士还是博士阶段,论文的撰写不仅考验学术能力&#…