五月份使用 Spring AI 集成了 DeepSeek 和智谱 GLM-4 ,当时功能都是正常的。
上周又重新跑了一下程序,发现 DeepSeek 只能回答 MCP 工具之内的问题。然后我又换成了智谱 GLM-4.5 ,当时正值阅兵,我随意输入了一个关于阅兵的问题,智谱 GLM-4.5 回答一半停住了。看日志说是返回值 FinishReason 是 sensitive,而 Spring AI 中的代码中没有添加这个属性,导致反序列化失败。看到这里自然就明白了,sensitive 表示因为某些敏感词触发机制,智谱把当前的流式响应切断了!这是一个新加的属性,想必 Open AI API 中不会有这个属性。(当然我没仔细比对)
到这里情况就清楚了:
然后我又浏览国内各大模型的 API 文档,也看了一些国外 AI Agent 框架文档。
我发现各个厂商都在维持所谓的 OpenAI API 兼容性这个“最大公约数”,但是一旦你深入浏览各模型厂商的文档就会发现,同一个兼容接口的返回值可能是不一样的,甚至有些模型厂商会提供额外的模型能力 API 。
那么在这样的情况下,基于所谓兼容的 OpenAI API 构建的 AI Agent 未必会充分利用各模型的能力,又因为各模型厂商返回值可能的不一致从而引入 bug 。
另外,那些 AI Agent 框架默认你需要有一个 OPENAI_API_KEY
或 ANTHROPIC_API_KEY
。如果你想用其他的模型,则需要自定义一些代码了...
很矛盾!!要兼容吧,会有 bug 、会跳过某些特定能力 API ;不兼容吧,会被“供应商锁定”。在没有 OPENAI_API_KEY
或 ANTHROPIC_API_KEY
的情况下,AI Agent 框架貌似是不能直接使用的。
挺纠结的。各位有何看法?
![]() |
1
musi 18 小时 22 分钟前 via iPhone ![]() 不可能存在完全兼容的这个情况,模型能力都不一样你能咋兼容
|
2
bigtear 18 小时 20 分钟前
Langchain 之类的框架就是解决这种问题的,一般是使用最大公约数的 OpenAI 兼容
|
3
yulon 15 小时 58 分钟前
FinishReason 本来就会 sensitive
|
![]() |
4
iugo 15 小时 14 分钟前
针对这样的问题, 我们选择的是针对不同平台, 分别包裹一层后再用 OpenAI 的 SDK.
写一个 SDK, 套壳 OpenAI SDK, 不过针对参数和返回值有套壳. |
![]() |
5
ZSeptember 12 小时 28 分钟前
首先,OpenAI 有 finish reason 是 content_filter
|
![]() |
6
serverKnignt 11 小时 58 分钟前
可以看下我的开源项目,有解决提到的兼容问题。https://v2ex.com/t/1151396
|
![]() |
7
viking602 11 小时 50 分钟前
不完全兼容吧 厂商有的会有自己的参数 所以就需要用到一些框架额外转换一次
|