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

PHP对接OpenAI GPT-4 Assistants API无法获取邮件主题求助

PHP对接OpenAI Assistant获取邮件主题问题排查与修复

核心问题排查与修复步骤

1. 确认文件已关联到Thread消息

上传文件后,必须在Thread的用户消息中明确传入文件ID,否则Assistant无法读取文件内容。检查代码是否遗漏了file_ids参数:

// 创建Thread后,添加带文件关联的用户消息
$threadMessageUrl = "https://api.openai.com/v1/threads/{$threadId}/messages";
$messageData = [
    'role' => 'user',
    'content' => '请基于上传的文件内容,生成3个适合的邮件主题',
    'file_ids' => [$uploadedFileId] // 替换为你上传得到的文件ID
];

$messageOptions = [
    'http' => [
        'header' => "Content-Type: application/json\r\nAuthorization: Bearer " . OPENAI_API_KEY,
        'method' => 'POST',
        'content' => json_encode($messageData),
    ],
];
$messageContext = stream_context_create($messageOptions);
$messageResponse = file_get_contents($threadMessageUrl, false, $messageContext);

2. 触发Assistant的Run操作

创建Thread和消息后,必须显式创建Run来启动Assistant的逻辑处理,这是最容易遗漏的步骤:

// 创建Run,关联你的Assistant和目标Thread
$runUrl = "https://api.openai.com/v1/threads/{$threadId}/runs";
$runData = [
    'assistant_id' => YOUR_ASSISTANT_ID, // 替换为你的Assistant ID
    'instructions' => '请严格基于上传文件的核心内容,生成3个简洁、有吸引力的邮件主题,每个主题不超过20字'
];

$runOptions = [
    'http' => [
        'header' => "Content-Type: application/json\r\nAuthorization: Bearer " . OPENAI_API_KEY,
        'method' => 'POST',
        'content' => json_encode($runData),
    ],
];
$runContext = stream_context_create($runOptions);
$runResponse = file_get_contents($runUrl, false, $runContext);
$runResult = json_decode($runResponse, true);
$runId = $runResult['id'];

3. 轮询等待Run完成并提取结果

Run是异步执行的,需要轮询检查状态,直到Run完成后再获取回复:

// 轮询检查Run状态
$runStatusUrl = "https://api.openai.com/v1/threads/{$threadId}/runs/{$runId}";
$statusOptions = [
    'http' => [
        'header' => "Authorization: Bearer " . OPENAI_API_KEY,
        'method' => 'GET',
    ],
];
$statusContext = stream_context_create($statusOptions);

do {
    sleep(2); // 间隔2秒查询一次,可根据需求调整
    $statusResponse = file_get_contents($runStatusUrl, false, $statusContext);
    $statusResult = json_decode($statusResponse, true);
    $runStatus = $statusResult['status'];
} while ($runStatus !== 'completed' && $runStatus !== 'failed');

// 状态完成后,获取Thread中的所有消息并提取Assistant回复
$messagesUrl = "https://api.openai.com/v1/threads/{$threadId}/messages?order=asc";
$messagesOptions = [
    'http' => [
        'header' => "Authorization: Bearer " . OPENAI_API_KEY,
        'method' => 'GET',
    ],
];
$messagesContext = stream_context_create($messagesOptions);
$messagesResponse = file_get_contents($messagesUrl, false, $messagesContext);
$messagesResult = json_decode($messagesResponse, true);

// 解析并输出邮件主题
foreach ($messagesResult['data'] as $message) {
    if ($message['role'] === 'assistant') {
        foreach ($message['content'] as $content) {
            if ($content['type'] === 'text') {
                echo $content['text']['value'] . "\n";
            }
        }
    }
}

4. 优化Assistant的提示词

确保你的Assistant指令足够明确,比如在Assistant后台设置:

你是邮件主题生成专家,用户上传文件后,需读取文件核心信息,生成3个符合要求的主题:

  1. 不超过20字,简洁凝练
  2. 准确匹配文件核心内容
  3. 具备吸引力,提升邮件打开率

5. 基础权限与参数检查

  • 确认API密钥拥有assistants、threads、files相关权限
  • 检查上传文件格式为OpenAI支持的类型(如txt、pdf、docx等)
  • 确认文件上传后状态为processed,再执行后续操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:12:31