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,还不行加入重试机制多试几次。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐