You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用OpenAI微调功能构建问答系统?训练模型响应异常求助

用OpenAI Fine-tuning构建问答系统及PHP调用问题修复

一、构建问答系统的核心步骤

  • 准备标准化训练数据
    必须采用JSONL格式,每条数据包含prompt和completion字段,且格式严格统一。示例:
    {"prompt": "问题:什么是OpenAI微调?\n回答:", "completion": "它是通过自定义数据集调整预训练模型,使其适配特定任务的技术。\n\n###"}
    
    注意:prompt结尾要加固定分隔符(如\n回答:),completion结尾加停止序列(如\n\n###),帮助模型明确问题与回答的边界。
  • 上传数据集
    使用OpenAI CLI工具执行命令:
    openai api files.create --file your_training_data.jsonl --purpose fine-tune
    
    执行后获取文件ID,用于后续微调任务。
  • 创建微调任务
    执行命令启动微调,指定训练文件和基础模型:
    openai api fine_tunes.create --training-file [你的文件ID] --model davinci
    
    等待任务完成后,获取生成的微调模型ID。
  • 测试微调模型
    调用API时必须指定微调后的模型ID,且prompt格式要与训练数据保持一致。

二、PHP调用API的问题修复

问题根源

  1. 代码中调用的是基础davinci模型,而非你训练后的微调模型,导致输出格式不匹配,无answers字段,仅返回text内容。
  2. 训练数据格式不规范,模型未学习到预期的输出逻辑,导致回答与问题无关。

具体修复方案

  • 替换模型ID
    在PHP代码中将模型参数改为你的微调模型ID:
    $data = [
        'model' => 'davinci:ft-your-org-20240520-123456', // 替换为你的微调模型ID
        'prompt' => '问题:[你的问题内容]\n回答:', // 与训练数据prompt格式一致
        'max_tokens' => 100,
        'stop' => ['\n\n###'] // 与训练时设置的停止序列一致
    ];
    
  • 调整输出处理逻辑
    微调模型的响应结果会存在于choices[0]['text']中,修改代码逻辑不再检查answers数组:
    $apiResponse = // 你的API请求返回内容
    $response = json_decode($apiResponse, true);
    if (isset($response['choices'][0]['text'])) {
        $answer = trim($response['choices'][0]['text']);
        echo "回答:" . $answer;
    } else {
        echo "未获取到有效回答";
    }
    
  • 校验训练数据
    重新检查训练数据的格式一致性,确保所有prompt和completion的分隔符、停止序列完全统一,避免模型输出混乱。

内容的提问来源于stack exchange,提问作者user16249416

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:57:22