问题:
众所周知,opencode存在以下问题:
为了说清楚我介绍两种场景。
1 openai未登录认证的情况下
此时,模型列表没有openai的模型,假设我配置了一个提供商叫openai-third这个是第三方提供商,只不过它的模型也有gpt相关模型,这些模型也支持多模态。
如果,我这时候在config.json中配置的提供商key是openai-third这个名字,则这个提供商的所有模型都无法使用多模态,虽然模型本身是支持的。
但,如果我在config.json中配置的提供商的key是openai,即去掉-third后缀这个名字,则这个提供商的所有模型都支持多模态了。
2 openai已登录认证情况
此时,模型列表会显示一个openai的官方提供商模型列表,这些模型是支持多模态的。
此时,如果我仍旧在config.json中配置的提供商key是openai-third这个名字,则这个提供商的所有模型都无法使用多模态,虽然模型本身是支持的。此时模型列表会有两个提供商,即openai官方和openai-third,仅有openai官方的模型支持多模态。
再假设,我此时在confg.json中把openai-third提供商的名字改成openai,像情况1那样,然后再次重启opencode,你会发现openai-third这个提供商,即目前被改为openai的这个(本来是openai-third)提供商无法在模型列表中显示了。可能因为和官方的openai重名被覆盖了。
所以,这个软件无法同时让多个提供商支持多模态,仅能openai这个提供商的key才支持多模态。
且,现在一旦登录认证了openai官方账号,就仅能这个openai官方的模型支持多模态了,而且也无法通过配置里对key改名覆盖这个官方opeai的提供商了。这就导致我无法让openai官方以外的提供商的模型支持多模态了。
期望
我现在就想能否通过某种方式让openai官方的这个模型临时失效,让第三方的模型可以改成openaikey,从而让第三方模型临时支持多模态。当我需要使用openai官方的模型时再恢复openai官方的模型可用。
当然,最理想的情况还是同时让openai官方和第三方提供商的模型都支持多模态。
解决
最近打算研究opencode的源码,于是顺便让ai分析了这个问题,结果ai给出了完美的解决办法,那就是按已下示例配置即可。
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"openai-third": {
"name": "OpenAI Third",
"npm": "@ai-sdk/openai-compatible",
"api": "https://api.example.com/v1",
"options": {
"apiKey": "sk-xxx"
},
"models": {
"gpt-4o-mini": {
"name": "GPT-4o Mini",
"modalities": {
"input": ["text", "image", "pdf"],
"output": ["text"]
}
}
}
}
}
}
关键点:“npm”: “@ai-sdk/openai-compatible” 和 modalities配置,注意,这两个key写的位置,别搞错了。
希望对有此需求的佬友有所帮助。
2 个帖子 - 2 位参与者