PHP接单涨薪系列(二)之不用Python!PHP直接调用ChatGPT API的终极方案
近年来,OpenAI 推出的 ChatGPT 模型在全球范围内掀起了人工智能的热潮。它不仅能写代码、生成文章,还能进行自然语言对话、处理数据,甚至模拟复杂的人类思维方式。本篇文章将手把手教你,如何使用 **PHP 原生代码(不依赖框架)** 来调用 OpenAI 的 ChatGPT API,构建属于你自己的智能聊天机器人。
一、前言
近年来,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 回调接口
-
申请企业微信
注册地址:https://work.weixin.qq.com/ -
创建应用
在后台 → 应用管理 → 自建应用,获取AgentId、Secret、CorpID -
设置回调接口(Webhook)
使用 PHP 创建一个接收微信消息的接口,例如:
// 简化版本,仅处理文本
$data = file_get_contents("php://input");
file_put_contents("wx.log", $data); // 用于调试
// 解析 XML,并回复消息(略)
- 接入 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);
方案二:使用向量搜索(高级)
- 将你的网站内容、文档等,切分成段,调用 OpenAI 的
text-embeddingAPI 获取向量。 - 存入向量数据库,如
Weaviate、Pinecone、Milvus。 - 用户提问时,将问题转为向量,检索最相近的内容作为上下文发给 ChatGPT。
方案三:开源工具集成
- LangChain-PHP(非官方)或 LangChain.js:支持向量搜索 + 文本处理。
- Flowise:可视化构建 ChatGPT+知识库系统。
- LlamaIndex:文档加载器 + 分片器 + 向量搜索器(英文为主)。
九、后续建议与优化方向
- 异步请求:PHP-FPM 下使用任务队列或 Swoole 实现并发处理
- 日志分析:记录用户行为,生成训练数据优化提示词
- 内容审查:集成敏感词检测/审核API,确保合规
更多推荐



所有评论(0)