OpenAI API 兼容 or 不兼容

1 天前
 niz

五月份使用 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_KEYANTHROPIC_API_KEY。如果你想用其他的模型,则需要自定义一些代码了...

很矛盾!!要兼容吧,会有 bug 、会跳过某些特定能力 API ;不兼容吧,会被“供应商锁定”。在没有 OPENAI_API_KEYANTHROPIC_API_KEY 的情况下,AI Agent 框架貌似是不能直接使用的。

挺纠结的。各位有何看法?

1245 次点击
所在节点    程序员
7 条回复
musi
1 天前
不可能存在完全兼容的这个情况,模型能力都不一样你能咋兼容
bigtear
1 天前
Langchain 之类的框架就是解决这种问题的,一般是使用最大公约数的 OpenAI 兼容
yulon
23 小时 8 分钟前
FinishReason 本来就会 sensitive
iugo
22 小时 23 分钟前
针对这样的问题, 我们选择的是针对不同平台, 分别包裹一层后再用 OpenAI 的 SDK.

写一个 SDK, 套壳 OpenAI SDK, 不过针对参数和返回值有套壳.
ZSeptember
19 小时 38 分钟前
首先,OpenAI 有 finish reason 是 content_filter
serverKnignt
19 小时 8 分钟前
可以看下我的开源项目,有解决提到的兼容问题。https://v2ex.com/t/1151396
viking602
19 小时 0 分钟前
不完全兼容吧 厂商有的会有自己的参数 所以就需要用到一些框架额外转换一次

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1158489

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX