LLM结构化输出指南
为什么结构化输出如此重要? LLM默认输出自由文本,但实际应用中我们通常需要结构化数据——JSON对象、表格、特定格式。不可靠的结构化输出会导致下游解析失败,是LLM应用从原型到生产的主要障碍之一。 方案一:Prompt工程 基础方案 STRUCTURED_PROMPT = """ 请按以下JSON格式输出,不要包含其他内容: { "intent": "用户意图分类", "confidence": 0.0-1.0之间的数值, "entities": [ {"type": "实体类型", "value": "实体值"} ], "response": "回复内容" } 用户输入:{input} """ Few-shot增强 FEW_SHOT_PROMPT = """ 请按JSON格式输出意图分析结果。 示例1: 输入:我想订一张明天去北京的机票 输出:{"intent": "book_flight", "confidence": 0.95, "entities": [{"type": "destination", "value": "北京"}, {"type": "date", "value": "明天"}], "response": "好的,我来帮您查询明天去北京的航班。"} 示例2: 输入:今天天气怎么样 输出:{"intent": "weather_query", "confidence": 0.9, "entities": [{"type": "date", "value": "今天"}], "response": "让我为您查询今天的天气。"} 现在请分析: 输入:{input} 输出: """ 优缺点 优点:简单通用,任何LLM都支持 缺点:不可靠,模型可能输出多余文本、格式错误、字段缺失 方案二:JSON Mode from openai import OpenAI client = OpenAI() response = client.chat.completions.create( model="qwen3-32b", messages=[{"role": "user", "content": "分析以下文本的情感,返回JSON"}], response_format={"type": "json_object"} # 强制JSON输出 ) result = json.loads(response.choices[0].message.content) JSON Mode保证输出是合法的JSON,但不保证包含特定字段。 ...
