基于Guzzle调用OpenAI API的返回内容无格式问题咨询
问题解决思路
问题出在API请求的提示词设计,和Guzzle配置无关。Guzzle仅负责发起HTTP请求传递参数,返回内容的格式完全由OpenAI模型的输出逻辑决定。要实现类似ChatGPT的自动格式化输出,只需优化请求中的提示词和可选参数:
1. 强化系统提示词,强制格式要求
修改system角色的提示词,明确要求模型始终用清晰的结构化格式(比如Markdown)输出,无需用户额外指定。示例修改:
'messages' => [ ['role' => 'system', 'content' => '你是为学区教师服务的学生对话数据分析助手,所有输出必须使用标准Markdown格式:列表用短横线/星号,分段用换行,关键内容可加粗。无需用户额外要求格式,自动适配查询需求生成结构化结果。'], ['role' => 'user', 'content' => "Based on the following data:\n$databaseResults\n\nGenerate observations based on the query: $userQuery"] ]
2. 可选:指定响应格式(针对支持的模型)
gpt-4o-mini支持通过response_format参数指定输出格式,可明确要求返回Markdown,进一步约束输出:
'json' => [ 'model' => 'gpt-4o-mini', 'messages' => [/* 上述修改后的消息 */], 'max_tokens' => 1000, 'response_format' => ['type' => 'text', 'format' => 'markdown'] // 新增参数 ]
注意:部分旧模型不支持该参数,gpt-4o-mini及以上版本可正常使用。
3. 前端渲染适配(可选)
如果需要将Markdown转为HTML展示给教师,可使用PHP的Markdown解析库(比如Parsedown),示例代码:
// 先安装Parsedown:composer require erusev/parsedown $parsedown = new Parsedown(); $htmlObservations = $parsedown->text($observations); echo $htmlObservations;
验证修改效果
当教师查询“列出3个给出创意答案的学生及其回答”时,模型会自动输出类似:
- 学生A:[回答内容]
- 学生B:[回答内容]
- 学生C:[回答内容]
的结构化Markdown内容,无需教师手动添加格式要求。
内容的提问来源于stack exchange,提问作者Michael Gabe
相关产品推荐
相关产品推荐

