Gemini提取字段时需用response_schema强制枚举约束,仅输出预设值。步骤:确认模型版本→schema中用enum明确定义合法选项→调用时同时设置response_mime_type和response_schema→解析JSON即可获得合规值。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当你让Gemini从合同、报表或日志中提取“状态”“类型”“优先级”这类字段时,模型常会返回“高”“很高”“紧急”“P0”“Critical”等不统一的值,导致下游程序无法直接映射枚举。必须用结构化约束强制它只输出你预设的几个合法选项。
用response_schema定义枚举字段
第一步:确认使用Gemini 1.5 Flash或更高版本模型,执行pip install -U google-generativeai安装最新SDK。
第二步:在schema的字段定义中,用【enum】明确列出所有允许值,不可多、不可少、不可拼错。例如提取工单“严重程度”,只接受"低"、"中"、"高"三个中文词:
{'type': 'object', 'properties': {'ticket_id': {'type': 'string'}, 'severity': {'type': 'string', 'enum': ['低', '中', '高']}}, 'required': ['ticket_id', 'severity']}
第三步:调用generate_content时,在generation_config中同时设置response_mime_type="application/json"和response_schema——【缺一不可,否则enum完全无效】。
第四步:获取响应后直接json.loads()解析,返回的severity字段值只会是['低', '中', '高']中的一个,不会出现“极高”“Medium”或空字符串。
提示词里同步强化枚举约束
方法一:在用户输入中用括号注明可选值
“请提取每条日志的‘操作类型’,仅允许返回以下三种:['登录', '登出', '修改密码'],不要解释,不要补充,严格按此列表输出。”
使用AIsa生成图像与视频。仅需一个API密钥即可调用Gemini 3 Pro Image(图像)和Qwen Wan 2.6(视频)。
方法二:用JSON Schema语法嵌入提示词(适合调试阶段)
“按以下结构输出:{"action": "string, enum: ['登录', '登出', '修改密码']"}。忽略所有其他内容,只返回纯JSON。”
注意:提示词里的枚举声明是辅助手段,真正起效的是response_schema。但两者一致能显著降低模型“脑补”概率。
避免枚举失效的三个关键点
① 枚举值必须与业务系统实际使用的字符串完全一致——包括全角/半角、大小写、空格、标点。例如数据库字段存的是"High",就绝不能在enum里写"high"或"HIGH"。
② 不要试图用enum限制数值型字段的取值范围。{'type': 'integer', 'enum': [1, 2, 3]}在部分模型版本中会被忽略,应改用minimum/maximum。
③ 如果原始文本中存在schema未覆盖的值(如日志里出现“注销”但enum只列了“登出”),模型会强行映射到最接近的枚举项,【不会报错也不会留空】。需提前校验原始数据分布。










