大数跨境
0
0

调试了一下午的程序,竟然发现是大模型选错了

调试了一下午的程序,竟然发现是大模型选错了 数翼
2025-12-18
0
导读:先说下事情背景。众所周知, Agent AI 框架是 Python 的天下,其实是 TypeScript , 然而企业级编程语言的王者 JAVA,却在这个领域坐着冷板凳。

先说下事情背景。

众所周知, Agent AI 框架是 Python 的天下,其实是 TypeScript , 然而企业级编程语言的王者 JAVA,却在这个领域坐着冷板凳。

为了使用之前的记了的 Java 生态的工具和运维经验,我最近尝试重构 之前的一个智能体平台,从 Python 框架迁移到 Spring AI 。

由于这次尝试偏向实验性,所以我选择了最新的 SpringBoot 4 和 Spring AI 2.0.0-SNAPSHOT 版本。

关于用 SNAPSHOT 版本的想法,有下面几个原因:

  • • 程序功能不是很复杂,技术栈也都通用 OpenAI 兼容模型 + PgVector
  • • 反正也要升级,先 SNAPSHOT 用着,两个月的时间等得起
  • • 从以往 Spring 出品的项目看来,SNAPSHOT 版本的也不会有大问题
Spring AI 目前已经 发布了 2.0.0-M1 版本。

实现过程整体都比较顺利,也就是 AI 偶尔 AI 不认识新代码。

下午的时候,在测试自主智能体的时候,出现了一个问题, 后端一直报一个 Tool 工具调用,工具名称不能为空的问题

好歹也是程序员出身,虽然 Java 异步程序比较复杂,大概了解了出错过程。

交互流程大概是:

  • • 客户端发送消息
  • 服务端查找知识库,给出方案
  • • 调用工具 -> 分析
  • • 重复上面流程
  • • 返回最终结果

在第二次调用工具的时候,总会出现一个有名字的工具调用,和一个没有名字但是有参数的工具调用。

我第一直觉解决的办法就是,忽略没有名字的工具调用。 但是框架本身很多类不让重写,由于我也不很熟悉,没找到能够自定义的地方。

虽然知道这个是服务端返回的工具调用,我默认以为是 SpringAI 框架或者是我程序的问题, 让 AI 改了几个版本发现没有解决,又手动调试好一会儿。

当前还没有对接相关监控工具,这块儿生态 Java 也不是很完善。

我当时是用了 qwen3-max 模型,我是实在没想到是模型本身的问题:

  • • 处于直觉对 qwen3 的最强模型的信任
  • • 我的场景还是 Demo 级别,知识库文档和问题都比较简单,而且是写好的场景
  • • 每次失败的情况一致,而且是每次都失败,不符合大模型随机性的问题
  • • 23 年底主力是 glm ,当时测试这类场景已经比较稳定了,经过这两年发展,我不认为模型简单的工具调用会有问题

然而,然而,这个世界总是会打破你的认知。

在我发现 LLM 追踪实现比较麻烦的时候, 我尝试着把模型换成了 deepseek-v3.2, 重新测试竟然正常了。

竟然正常了!!!

现在想了想,可能是我的工具名字是中文的,导致 qwen3 模型识别的不太好。 但是每次都出错,错误都一致,每次都是第二个工具调用出错。

这也是误导我浪费时间调试的主要原因。谁能想到 qwen3-max 能这么稳定的出错。

恍惚间想起来,上半年重构智能体的时候,也出现过类似的问题,重构后每次都出错,我当时还以为是 Agno 的问题, 传的上下文不对,使用 LLM 监控工具发现上下文没有问题。

现在想想可能是阿里云 qwen 的宇宙最强缓存全然我命中了,而且是给了好几版依然能命中错误的缓存。

最后我想说, DeepSeek 能把国外一众厂商打的哭爹喊娘不是没有道理的。

大家开发企业智能体,能用 DeepSeek 就用 DeepSeek 吧,官方的、三方部署的都可以。

GLM, K2, Minimax 等模型据说也对工具调用有很好的支持。我没有在企业场景下测试过,先不发表意见误人子弟了。

【声明】内容源于网络
0
0
数翼
专注 AIGC 人工智能知识传播和实践
内容 228
粉丝 0
数翼 专注 AIGC 人工智能知识传播和实践
总阅读124
粉丝0
内容228