一、前言

近年来,OpenAI 推出的 ChatGPT 模型在全球范围内掀起了人工智能的热潮。它不仅能写代码、生成文章,还能进行自然语言对话、处理数据,甚至模拟复杂的人类思维方式。

那么问题来了:如果你是一名 PHP 后端开发者,是否也能轻松使用 ChatGPT 来为你的应用添加“智能对话”能力呢?

答案是:当然可以!

本篇文章将手把手教你,如何使用 PHP 原生代码(不依赖框架) 来调用 OpenAI 的 ChatGPT API,构建属于你自己的智能聊天机器人。你将学到:

  • 如何获取 OpenAI API 密钥
  • 如何使用 curl 向 ChatGPT 发起请求
  • 如何构建前后端交互的简单聊天界面
  • 如何记录对话历史,实现多轮对话
  • 如何优化和封装调用逻辑

无需第三方 SDK,0 到 1,全部掌握!

二、准备工作

1. 注册 OpenAI 账号

首先,你需要拥有一个 OpenAI 账号。访问:https://platform.openai.com/signup

注册方式支持邮箱注册、Google 登录等,建议使用常用邮箱注册,方便后续管理。

2. 获取 API Key

登录之后:

  • 点击右上角头像 → “View API Keys”
  • 点击 “+ Create new secret key”
  • 系统会生成一串 key,只显示一次,请立即复制保存到本地(比如写入.env文件中)

示例 Key(请勿使用):

sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

3. PHP 环境准备

建议本地开发环境使用 PHP7.4 或以上,确保以下扩展已启用:

  • curl
  • json
  • openssl

你可以通过 php -m 查看已安装的模块。

三、了解 ChatGPT API 的基本结构

ChatGPT API 的调用方式很简单,只要构造好请求体并发送 POST 请求,就能获取到智能回复。

1. API 请求地址(Endpoint)

https://api.openai.com/v1/chat/completions

2. 支持的模型

常用模型有:

模型名 特点 推荐场景
gpt-3.5-turbo 免费、高速 轻量对话、初级任务
gpt-4 更智能、更准确 写作、技术问答

3. 请求参数

发送请求时,核心字段如下:

{
  "model": "gpt-3.5-turbo",
  "messages": [
    {"role": "system", "content": "你是一个PHP助手"},
    {"role": "user", "content": "如何用PHP调用OpenAI?"}
  ],
  "temperature": 0.7,
  "max_tokens": 1000
}

四、PHP 调用 ChatGPT API 的完整示例

function chatWithGPT($apiKey, $messages, $model = 'gpt-3.5-turbo', $temperature = 0.7, $maxTokens = 1000) {
    $url = 'https://api.openai.com/v1/chat/completions';

    $headers = [
        'Content-Type: application/json',
        'Authorization: Bearer ' . $apiKey
    ];

    $postData = [
        'model' => $model,
        'messages' => $messages,
        'temperature' => $temperature,
        'max_tokens' => $maxTokens
    ];

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));

    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        return 'Error: ' . curl_error($ch);
    }
    curl_close($ch);

    $data = json_decode($response, true);
    return $data['choices'][0]['message']['content'] ?? '没有返回内容';
}

五、构建简单的网页对话界面

<?php
session_start();
$apiKey = 'sk-xxxxxxxxxxxx';

if (!isset($_SESSION['chat_history'])) {
    $_SESSION['chat_history'] = [
        ['role' => 'system', 'content' => '你是一个智能PHP助手']
    ];
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $question = trim($_POST['question']);
    if ($question) {
        $_SESSION['chat_history'][] = ['role' => 'user', 'content' => $question];
        $answer = chatWithGPT($apiKey, $_SESSION['chat_history']);
        $_SESSION['chat_history'][] = ['role' => 'assistant', 'content' => $answer];
    }
}

function chatWithGPT($apiKey, $messages) {
    $url = 'https://api.openai.com/v1/chat/completions';
    $headers = [
        'Content-Type: application/json',
        'Authorization: Bearer ' . $apiKey
    ];
    $data = [
        'model' => 'gpt-3.5-turbo',
        'messages' => $messages,
        'temperature' => 0.7,
        'max_tokens' => 1000
    ];

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    $result = curl_exec($ch);
    curl_close($ch);

    $response = json_decode($result, true);
    return $response['choices'][0]['message']['content'] ?? '[无响应]';
}
?>

六、常见问题与调试技巧

  • 报错 401?检查 API Key。
  • 报错 429?说明请求太频繁,请升级或等待。
  • 增加日志建议:
file_put_contents('chat.log', json_encode($messages) . PHP_EOL, FILE_APPEND);

七、接入微信:打造微信智能机器人

如果你希望把 ChatGPT 嵌入微信,实现自动回复、AI 助手等功能,可以通过第三方平台或者微信开放能力实现。

方法一:使用「企业微信」+ PHP 回调接口

  1. 申请企业微信
    注册地址:https://work.weixin.qq.com/

  2. 创建应用
    在后台 → 应用管理 → 自建应用,获取 AgentIdSecretCorpID

  3. 设置回调接口(Webhook)
    使用 PHP 创建一个接收微信消息的接口,例如:

// 简化版本,仅处理文本
$data = file_get_contents("php://input");
file_put_contents("wx.log", $data); // 用于调试

// 解析 XML,并回复消息(略)
  1. 接入 ChatGPT 回复
    将用户的微信内容转为 ChatGPT 消息体,调用前面的 chatWithGPT 函数,返回内容再封装成 XML 回复。

方法二:使用 wechaty、chatopera 等微信机器人框架

  • wechaty 是基于 Node.js 的微信机器人,可与 PHP 通信。
  • 使用 WebSocket 或消息队列将对话传给 PHP 服务,调用 ChatGPT,完成闭环。

八、知识库对接:实现“私有问答机器人”

ChatGPT 本身并不连接你的业务数据库,但可以通过结合搜索和内容预处理,让它具备“知识问答”能力。

方案一:基于关键词查询数据库

$userInput = 'PHP中如何发送HTTP请求';
$matched = queryKnowledgeBase($userInput); // 关键词查库

if ($matched) {
    $messages[] = ['role' => 'user', 'content' => "根据资料:{$matched}"];
} else {
    $messages[] = ['role' => 'user', 'content' => $userInput];
}
$response = chatWithGPT($apiKey, $messages);

方案二:使用向量搜索(高级)

  1. 将你的网站内容、文档等,切分成段,调用 OpenAI 的 text-embedding API 获取向量。
  2. 存入向量数据库,如 WeaviatePineconeMilvus
  3. 用户提问时,将问题转为向量,检索最相近的内容作为上下文发给 ChatGPT。

方案三:开源工具集成

  • LangChain-PHP(非官方)或 LangChain.js:支持向量搜索 + 文本处理。
  • Flowise:可视化构建 ChatGPT+知识库系统。
  • LlamaIndex:文档加载器 + 分片器 + 向量搜索器(英文为主)。

九、后续建议与优化方向

  • 异步请求:PHP-FPM 下使用任务队列或 Swoole 实现并发处理
  • 日志分析:记录用户行为,生成训练数据优化提示词
  • 内容审查:集成敏感词检测/审核API,确保合规

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐