换一次模型要改多少代码?我用一个设计彻底告别这种噩梦
·
一、换模型,为什么这么痛?
以前做 AI 项目,换模型简直是灾难。明明只是换一个供应商,却要动一堆代码、改一堆文件、测好几天,还常常引入新的 bug。
真实案例:去年做一个智能客服项目
一开始用 GPT-3.5-turbo,代码长这样:
import openai
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "你好,我想退货"}],
temperature=0.7
)
answer = response.choices[0].message.content
后来业务方说 GPT-3.5 回答不够专业,要换 Claude。我当时的内心是崩溃的:
import anthropic
response = anthropic.messages.create(
model="claude-3-sonnet-20240229",
max_tokens=1024,
messages=[{"role": "user", "content": "你好,我想退货"}]
)
返回结构完全不一样!
answer = response.content[0].text
然后发现:
-
参数名不一样(
max_tokensvsmax_completion_tokens) -
返回结构不一样(
choices[0].message.contentvscontent[0].text) -
流式处理的格式不一样
-
错误码定义不一样
-
连 role 的枚举值都有细微差别
为了换一个模型,我改了 6 个文件,测了 2 天,还引入了新的 bug。
二、好的设计,应该长什么样?
现在如果调用层设计得好,体验应该是:
from my_client import AIClient
client = AIClient()
今天用这个
response = client.chat.completions.create(
model="claude-3.5-sonnet",
messages=[{"role": "user", "content": "你好,我想退货"}]
)
明天想换,改一个字符串
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你好,我想退货"}]
)
后台自动处理所有差异,解析逻辑完全不用动
answer = response.choices[0].message.content
这种差距,就像:
-
以前换服务器要重新装机、配环境、迁移数据
-
现在云平台点几下,镜像一克隆就完成了
三、核心思路:把差异关进黑盒
好的基础设施,就是让复杂的事情对你不可见。
你不需要知道 Claude 和 GPT 的返回结构差异,不需要关心哪家在限流,不需要为每个模型写适配器。你只需要关心:这个场景下,哪个模型效果最好?
你的项目里换一次模型要改多少代码?评论区报个数,让我看看谁最惨。
更多推荐


所有评论(0)