import json visitor_request_schema = { "title": "VisitorRegistrationRequest", "description": "办公楼访客登记请求", "type": "object", "properties": { "visitor_name": {"type": "string", "description": "访客姓名"}, "visit_date": {"type": "string", "description": "来访日期,例如 2026-04-20"}, "arrival_time": {"type": "string", "description": "预计到达时间,例如 10:00"}, "location": {"type": "string", "description": "来访地点或办公室"}, "stay_hours": {"type": "number", "description": "预计停留时长,单位小时"}, "needs_visitor_code": {"type": "boolean", "description": "是否需要前台生成访客码"}, "carry_equipment": {"type": "string", "description": "携带设备说明,没有则填无"}, }, "required": [ "visitor_name", "visit_date", "arrival_time", "location", "stay_hours", "needs_visitor_code", "carry_equipment", ], } visitor_prompt = ( "明天上午10点,供应商李俊会来我们上海办公室,预计停留2小时," "需要前台帮忙开访客码,他会带一台样机进楼。" ) print("JSON Schema 长这样:") print(json.dumps(visitor_request_schema, ensure_ascii=False, indent=2)) deftry_structured_call(method_name: str, include_raw: bool = False): if model isNone: print(f"{method_name} 示例代码已准备好;配置好 API Key 后即可直接运行。") returnNone try: structured_model = model.with_structured_output( visitor_request_schema, method=method_name, include_raw=include_raw, ) result = structured_model.invoke(visitor_prompt) print(f"\n=== method='{method_name}' 的结果 ===") pprint(result) return result exceptExceptionas exc: print(f"\n=== method='{method_name}' 当前未成功执行 ===") print(type(exc).__name__, str(exc)) returnNone json_schema_result = try_structured_call("json_schema") function_calling_result = try_structured_call("function_calling") json_mode_result = try_structured_call("json_mode") json_schema_raw_result = try_structured_call("json_schema", include_raw=True) print("\n=== 一个最简单的手动验证示例 ===") parsed_result = None ifisinstance(json_schema_result, dict): parsed_result = json_schema_result elifisinstance(function_calling_result, dict): parsed_result = function_calling_result elifisinstance(json_mode_result, dict): parsed_result = json_mode_result if parsed_result isnotNone: missing_fields = [field for field in visitor_request_schema["required"] if field notin parsed_result] wrong_type_fields = [] if"needs_visitor_code"in parsed_result andnotisinstance(parsed_result["needs_visitor_code"], bool): wrong_type_fields.append("needs_visitor_code") if missing_fields: print("缺少字段:", missing_fields) elif wrong_type_fields: print("类型不符合预期的字段:", wrong_type_fields) else: print("字段齐全,关键类型也符合预期,可以继续给后续系统使用。") else: print("当前没有拿到可验证的结构化结果;通常是因为模型或提供商暂不支持对应 method。") print("\n方法选择建议:") print("- 想走提供商原生结构化能力:method='json_schema'") print("- 想兼容更多支持工具调用的模型:method='function_calling'") print("- 某些旧接口或特定提供商才会用到:method='json_mode'") print("- 调试时想同时看解析结果和原始消息:include_raw=True") |