GPT-4-Vision模型是否禁用logit_bias?代码是否有误?
GPT-4视觉模型logit_bias报错及图像分类替代方案
核心结论
你的代码没有问题,gpt-4-vision-preview模型目前不支持logit_bias参数。尽管它和GPT-4共享聊天补全端点,但视觉模型的参数支持范围存在差异,这就是你收到body -> logit_bias extra fields not permitted 400错误的原因。
图像分类替代方案(解决冗余输出问题)
既然logit_bias用不了,以下几种方法可以确保模型输出符合你的分类需求:
1. 强化Prompt约束
在提问文本里明确要求仅输出指定词汇,配合temperature=0和max_tokens=1使用:
# 修改后的prompt {"type": "text", "text": "判断这张图片是否是猫,**只准输出Yes或No,绝对不能加其他任何内容**"}
2. 结果后处理过滤
不管模型输出什么冗余内容,直接在代码里提取有效结果:
# 提取并处理模型输出 response_text = result.choices[0].message.content.strip() # 匹配Yes/No,兜底返回Unknown final_answer = None if "Yes" in response_text: final_answer = "Yes" elif "No" in response_text: final_answer = "No" else: final_answer = "Unknown"
3. 用函数调用强制结构化输出
通过定义分类函数,让模型调用函数返回严格格式的结果,彻底避免冗余:
import json # 定义分类函数描述 functions = [ { "name": "cat_classifier", "description": "判断图片中是否包含猫,仅返回指定选项", "parameters": { "type": "object", "properties": { "result": { "type": "string", "enum": ["Yes", "No"], "description": "分类结果,只能是Yes或No" } }, "required": ["result"] } } ] # 调用模型时指定函数 result = client.chat.completions.create( model="gpt-4-vision-preview", messages=[ { "role": "user", "content": [ {"type": "text", "text": "判断这张图片是否是猫"}, { "type": "image_url", "image_url": { "url": f"data:image/jpeg;base64,{base64_image}", "detail": "low" }, }, ], } ], temperature=0, functions=functions, function_call={"name": "cat_classifier"} ) # 解析函数返回的结构化结果 function_args = json.loads(result.choices[0].message.function_call.arguments) final_answer = function_args["result"]
内容的提问来源于stack exchange,提问作者user3554004
相关产品推荐
相关产品推荐

