如何保证模型结构化输出
·
1.提示词优化
明确要求,加入约束,提供示例,这是最直接有效的方法,如下
你是一个数据提取助手,必须严格按照以下 JSON Schema 输出,不要输出任何其他文字、解释或Markdown标记。
Schema:
{
"name": "string, 人名",
"age": "number, 年龄",
"city": "string, 所在城市"
}示例输出:
{"name": "张三", "age": 28, "city": "北京"}现在请根据以下内容输出JSON:
用户说:我叫李四,今年35岁,住在上海。
client的entity方法就是自动将实体类转成的样本拼接在提示词末尾,并且返回时将其解析成实体类对象。

2.json mode
部分前沿模型在API层面原生支持了结构化输出,通过传参response_format:Schema 来定义结构化输出,强制输出与 Schema 精确匹配。
@Configuration
public class StructuredOutputConfig {
@Value("${spring.ai.openai.chat.options.model}")
private String modelName;
@Bean
public ChatClient strictStructuredOutputClient(ChatClient.Builder builder) {
return builder
.defaultOptions(OpenAiChatOptions.builder()
.model(modelName)
.responseFormat(ResponseFormat.builder(//开启json mode
.type(ResponseFormat.Type.JSON_OBJECT)
.jsonSchema(ResponseFormat.JsonSchema.builder()
.name("user_info")
.schema("""
{
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"city": {"type": "string"}
},
"required": ["name", "age", "city"],
"additionalProperties": false
}
""")
.strict(true)
.build())
.build())
.build())
.build();
}
}
3.采样参数调整
| 参数 | 推荐值 | 作用 |
|---|---|---|
| temperature | 0 ~ 0.2 | 降低随机性,避免格式混乱 |
| top_p | 0.9 | 保持一定确定性 |
| stop | ["\n\n", "```"] | 防止模型继续生成解释文字 | |
4.容错机制
模型偶尔还是会输出带Markdown的标记,代码中将其手动去除再解析成json,还不行加入重试机制多试几次。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)