open-ai
open-ai 是一个专为 PHP 开发者打造的开源工具包,旨在让各类 PHP 项目(如 Laravel、Symfony、Yii 等)能够轻松接入 OpenAI 的强大能力。它主要解决了开发者在集成 GPT-3、DALL-E 以及 ChatGPT API 时面临的配置复杂和兼容性问题,提供了一套简洁、安全且稳定的调用方案。
这款工具特别适合熟悉 PHP 语言的软件工程师和技术团队使用,无论是构建智能客服、内容生成应用,还是进行 AI 功能原型开发,都能快速上手。其核心亮点在于极低的运行门槛,仅需 PHP 7.4 及以上版本即可运行,比许多同类库更兼容老旧环境。此外,open-ai 完整支持类似 ChatGPT 的流式响应(Streaming),能让用户实时看到 AI 生成的内容,显著提升交互体验。
作为社区驱动的项目,open-ai 拥有庞大的下载量和活跃的维护团队,并获得了 JetBrains 和 Laravel News 等权威技术媒体的推荐。如果你希望在 PHP 生态中高效利用大模型能力,这是一个值得信赖的选择。
使用场景
一家电商公司的后端团队正在为其基于 Laravel 构建的客服系统中集成智能自动回复功能,需要快速对接 OpenAI 的 GPT-3.5 和 DALL-E 模型。
没有 open-ai 时
- 开发人员必须手动编写复杂的 HTTP 请求代码来处理 API 认证、参数序列化及错误重试机制,极易出错且难以维护。
- 想要实现类似 ChatGPT 的流式输出(Streaming)体验,需要底层处理 SSE 事件流,技术门槛高且耗时漫长。
- 团队需在多个 PHP 版本间反复测试兼容性,若遇到 API 变更,整个自定义封装层需推倒重来,升级成本极高。
- 缺乏社区支持,遇到鉴权失败或响应解析异常时,只能独自排查文档,严重拖慢项目上线进度。
使用 open-ai 后
- 通过简洁的链式调用即可完成复杂交互,open-ai 内部已完美封装了认证与请求逻辑,代码量减少 80% 以上。
- 原生支持流式传输接口,仅需几行配置即可在网页端实现打字机效果的实时回复,显著提升用户体验。
- 兼容 PHP 7.4 及以上版本,无缝适配 Laravel、Symfony 等主流框架,社区持续跟进官方 API 变更,升级只需更新依赖。
- 拥有活跃的 Discord 社区和海量的实战案例参考,遇到技术问题能迅速获得解决方案,开发效率大幅提升。
open-ai 将繁琐的底层通信细节转化为优雅的 PHP 语法,让开发者能专注于业务逻辑而非重复造轮子。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
PHP 中的 OpenAI API 客户端
如果您希望确保该项目持续发展并不断改进,请务必考虑给予支持。您的帮助对我们意义重大。感谢!
目前已支持 ChatGPT API,有关实现的介绍,请点击此处。
来自创建者的一则信息:
感谢您访问 @orhanerday/open-ai 仓库!如果您觉得这个仓库对您有帮助或有用,我们鼓励您在 GitHub 上为它*加星标。给仓库加星标是表达您对项目支持的一种方式。同时,这也能够提高项目的可见度,并让社区知道它具有价值。再次感谢您的支持,希望您能从这个仓库中受益!
Orhan*
被以下媒体推荐
与其他包的比较
| 项目名称 | 所需 PHP 版本(越低越好) | 描述 | 类型(官方 / 社区) | 支持 |
|---|---|---|---|---|
| orhanerday/open-ai | PHP 7.4+ | 下载量最多、被大量 fork 和贡献、拥有庞大社区支持,是用于访问 OpenAI GPT-3 和 DALL-E 的 PHP SDK。同时也支持类似 ChatGPT 的流式响应。 | 社区 | 提供支持,(社区驱动的 Discord 服务器 或个人邮件 orhann@duck.com) |
| openai-** /c***t | PHP 8.1+ | OpenAI 的 PHP API 客户端。 | 社区 | - |
关于本包
完全开源且安全的社区维护版 PHP SDK,用于访问 OpenAI GPT-3 API。
欲了解更多信息,可阅读 Laravel News 的 博客文章。
提供免费支持。加入我们的 Discord 服务器
要开始使用本包,您首先需要熟悉 OpenAI API 文档 和 示例。此外,您也可以通过名为 #api-support 的 Discord 频道获得帮助。
最新消息
- orhanerday/open-ai 已被添加到 OpenAI 平台的 PHP 社区库 部分。
- orhanerday/open-ai 被 PHPStorm 博客文章 推荐,感谢 JetBrains!
需要 PHP 7.4+
加入我们的 Discord 服务器

支持本项目
正如您所知,OpenAI PHP 是一个用于封装 OpenAI API 的开源项目。我们依靠社区的支持来继续开发和维护该项目,而您可以通过捐款来提供帮助。
捐款使我们能够支付诸如托管费用(用于测试)、开发工具以及其他维持项目顺利运行所需的资源。无论金额大小,每一份贡献都有助于我们不断改进 OpenAI PHP,使其惠及更多人。
如果您曾受益于使用 OpenAI PHP,并希望支持其持续发展,我们将非常感激您捐赠任意金额。您可以通过以下方式捐款:
感谢您考虑向 Orhanerday/OpenAI PHP SDK 捐款。您的支持备受珍视,并有助于确保该项目能够持续成长与进步。
此致,
Orhan Erday / 创建者。
文档
请访问 https://orhanerday.gitbook.io/openai-php-api-1/
终端支持
- 聊天
- 模型
- 完成
- 编辑
- 图片
- 嵌入
- 音频
- 文件
- 微调
- 内容审核
引擎(已弃用)- 助手(测试版)
- 线程(测试版)
- 消息(测试版)
- 运行(测试版)
安装
您可以通过 Composer 安装该包:
composer require orhanerday/open-ai
快速入门 ⚡
在开始之前,您需要将 OPENAI_API_KEY 设置为环境变量,并使用以下命令将其值设置为您的 OpenAI API 密钥:
PowerShell
$Env:OPENAI_API_KEY = "sk-gjtv....."
Cmd
set OPENAI_API_KEY=sk-gjtv.....
Linux 或 macOS
export OPENAI_API_KEY=sk-gjtv.....
在设置环境变量时遇到问题?请阅读 这篇文章,或者您可以查看 我的 StackOverflow 回答,了解 Windows® 环境变量的设置方法。
创建您的 index.php 文件,并将以下代码粘贴到文件中。
<?php
require __DIR__ . '/vendor/autoload.php'; // 如果您使用 PHP 框架,请移除此行。
use Orhanerday\OpenAi\OpenAi;
$open_ai_key = getenv('OPENAI_API_KEY');
$open_ai = new OpenAi($open_ai_key);
$chat = $open_ai->chat([
'model' => 'gpt-3.5-turbo',
'messages' => [
[
"role" => "system",
"content" => "You are a helpful assistant."
],
[
"role" => "user",
"content" => "Who won the world series in 2020?"
],
[
"role" => "assistant",
"content" => "The Los Angeles Dodgers won the World Series in 2020."
],
[
"role" => "user",
"content" => "Where was it played?"
],
],
'temperature' => 1.0,
'max_tokens' => 4000,
'frequency_penalty' => 0,
'presence_penalty' => 0,
]);
var_dump($chat);
echo "<br>";
echo "<br>";
echo "<br>";
// 解码响应
$d = json_decode($chat);
// 获取内容
echo($d->choices[0]->message->content);
使用以下命令运行服务器
php -S localhost:8000 -t .
NVIDIA NIM 集成
orhanerday/open-ai 支持 NVIDIA NIM。以下示例使用的是 MixtralAI。更多示例请访问 https://build.nvidia.com/explore/discover。
<?php
require __DIR__ . '/vendor/autoload.php'; // 如果您使用 PHP 框架,请移除此行。
use Orhanerday\OpenAi\OpenAi;
$nvidia_ai_key = getenv('NVIDIA_AI_API_KEY');
error_log($nvidia_ai_key);
$open_ai = new OpenAi($nvidia_ai_key);
$open_ai->setBaseURL("https://integrate.api.nvidia.com");
$chat = $open_ai->chat([
'model' => 'mistralai/mixtral-8x7b-instruct-v0.1',
'messages' => [["role" => "user", "content" => "Write a limmerick about the wonders of GPU computing."]],
'temperature' => 0.5,
'max_tokens' => 1024,
'top_p' => 1,
]);
var_dump($chat);
echo "<br>";
echo "<br>";
echo "<br>";
// 解码响应
$d = json_decode($chat);
// 获取内容
echo ($d->choices[0]->message->content);
使用方法
从环境变量加载您的密钥。
根据以下代码,
$open_ai是所有 OpenAI 操作的基础变量。
use Orhanerday\OpenAi\OpenAi;
$open_ai = new OpenAi(env('OPEN_AI_API_KEY'));
请求组织
对于属于多个组织的用户,您可以传递一个头部来指定用于 API 请求的组织。 这些 API 请求的使用量将计入指定组织的订阅配额。
$open_ai_key = getenv('OPENAI_API_KEY');
$open_ai = new OpenAi($open_ai_key);
$open_ai->setORG("org-IKN2E1nI3kFYU8ywaqgFRKqi");
基础 URL
您可以通过 setBaseURL() 方法指定基础 URL;
$open_ai_key = getenv('OPENAI_API_KEY');
$open_ai = new OpenAi($open_ai_key, $originURL);
$open_ai->setBaseURL("https://ai.example.com/");
使用代理
您可以为您的 API 请求使用一些代理服务器;
$open_ai->setProxy("http://127.0.0.1:1086");
设置头部
$open_ai->setHeader(["Connection"=>"keep-alive"]);
获取 cURL 请求信息
!!! 警告:如果您将此方法添加到您的代码中,您的 API 密钥将会暴露,因此请在部署前移除此方法。请务必小心!
您可以在请求之后获取 cURL 信息。
$open_ai = new OpenAi($open_ai_key);
echo $open_ai->listModels(); // 您必须先执行请求!
var_dump($open_ai->getCURLInfo()); // 您可以调用该请求
聊天(也称为 ChatGPT API)
给定一段聊天对话,模型会返回一个聊天完成的响应。
$complete = $open_ai->chat([
'model' => 'gpt-3.5-turbo',
'messages' => [
[
"role" => "system",
"content" => "You are a helpful assistant."
],
[
"role" => "user",
"content" => "Who won the world series in 2020?"
],
[
"role" => "assistant",
"content" => "The Los Angeles Dodgers won the World Series in 2020."
],
[
"role" => "user",
"content" => "Where was it played?"
],
],
'temperature' => 1.0,
'max_tokens' => 4000,
'frequency_penalty' => 0,
'presence_penalty' => 0,
]);
访问元素
<?php
// 聊天 API 的模拟响应
$j = '
{
"id":"chatcmpl-*****",
"object":"chat.completion",
"created":1679748856,
"model":"gpt-3.5-turbo-0301",
"usage":{
"prompt_tokens":9,
"completion_tokens":10,
"total_tokens":19
},
"choices":[
{
"message":{
"role":"assistant",
"content":"This is a test of the AI language model."
},
"finish_reason":"length",
"index":0
}
]
}
';
// 解码响应
$d = json_decode($j);
// 获取内容
echo($d->choices[0]->message->content);
相关:ChatGPT 克隆项目
完成
给定一个提示,模型会返回一个或多个预测的完成结果,同时也可以返回每个位置上替代标记的概率。
$complete = $open_ai->completion([
'model' => 'gpt-3.5-turbo-instruct',
'prompt' => 'Hello',
'temperature' => 0.9,
'max_tokens' => 150,
'frequency_penalty' => 0,
'presence_penalty' => 0.6,
]);
流式示例
此功能听起来可能与 ChatGPT 中的功能相似。
ChatGPT 克隆项目
演示视频:
ChatGPT 克隆是一个简单的 Web 应用程序,由 OpenAI 库提供支持,并使用 PHP 构建。它允许用户与一个实时响应的 AI 语言模型进行对话。聊天历史通过 Cookie 保存,该项目需要使用 API 密钥和启用 SQLite3。
ChatGPT 克隆仓库地址:https://github.com/orhanerday/ChatGPT
是否流式返回部分进度。如果设置为 true,当标记可用时,它们将作为仅包含数据的 服务器发送事件 发送,流将以 data: [DONE] 消息终止。
$open_ai = new OpenAi(env('OPEN_AI_API_KEY'));
$opts = [
'prompt' => "Hello",
'temperature' => 0.9,
"max_tokens" => 150,
"frequency_penalty" => 0,
"presence_penalty" => 0.6,
"stream" => true,
];
header('Content-type: text/event-stream');
header('Cache-Control: no-cache');
$open_ai->completion($opts, function ($curl_info, $data) {
echo $data . "<br><br>";
echo PHP_EOL;
ob_flush();
flush();
return strlen($data);
});
将这部分添加到 HTML 的 <body> 内
<div id="divID">Hello</div>
<script>
var eventSource = new EventSource("/");
var div = document.getElementById('divID');
eventSource.onmessage = function (e) {
if(e.data == "[DONE]")
{
div.innerHTML += "<br><br>Hello";
}
div.innerHTML += JSON.parse(e.data).choices[0].text;
};
eventSource.onerror = function (e) {
console.log(e);
};
</script>
你应该会看到像视频中那样的响应;
编辑
根据提供的输入、指令和参数创建新的编辑内容
$result = $open_ai->createEdit([
"model" => "text-davinci-edit-001",
"input" => "What day of the wek is it?",
"instruction" => "Fix the spelling mistakes",
]);
图片(DALL·E)
所有 DALL·E 示例都可在该 仓库 中找到。
给定一个提示,该模型将返回一个或多个生成的图片,以 URL 或 Base64 编码的形式呈现。
创建图片
根据提示创建一张图片。
$complete = $open_ai->image([
"prompt" => "A cat drinking milk",
"n" => 1,
"size" => "256x256",
"response_format" => "url",
]);
创建图片编辑
根据原始图片和提示创建编辑或扩展后的图片。
需要用于图片编辑或变体的 HTML 上传吗?请查看 DALL·E 示例
$otter = curl_file_create(__DIR__ . './files/otter.png');
$mask = curl_file_create(__DIR__ . './files/mask.jpg');
$result = $open_ai->imageEdit([
"image" => $otter,
"mask" => $mask,
"prompt" => "A cute baby sea otter wearing a beret",
"n" => 2,
"size" => "1024x1024",
]);
创建图片变体
创建给定图片的变体。
$otter = curl_file_create(__DIR__ . './files/otter.png');
$result = $open_ai->createImageVariation([
"image" => $otter,
"n" => 2,
"size" => "256x256",
]);
搜索
(已弃用)
此端点已弃用,将于 2022 年 12 月 3 日删除 OpenAI 已开发出性能更好的新方法。了解更多信息。
给定一个查询和一组文档或标签,该模型会根据其语义相似性对每个文档进行排名。
$search = $open_ai->search([
'engine' => 'ada',
'documents' => ['White House', 'hospital', 'school'],
'query' => 'the president',
]);
嵌入
获取给定输入的向量表示,该表示可以被机器学习模型和算法轻松消费。
相关指南:嵌入
创建嵌入
$result = $open_ai->embeddings([
"model" => "text-similarity-babbage-001",
"input" => "The food was delicious and the waiter..."
]);
回答
(已弃用)
此端点已弃用,将于 2022 年 12 月 3 日删除 我们已经开发出性能更好的新方法。了解更多信息。
给定一个问题、一组文档和一些示例,API 会根据文档中的信息生成问题的答案。这对于基于事实来源(如公司文档或知识库)的问题回答应用非常有用。
$answer = $open_ai->answer([
'documents' => ['Puppy A is happy.', 'Puppy B is sad.'],
'question' => 'which puppy is happy?',
'search_model' => 'ada',
'model' => 'curie',
'examples_context' => 'In 2017, U.S. life expectancy was 78.6 years.',
'examples' => [['What is human life expectancy in the United States?', '78 years.']],
'max_tokens' => 5,
'stop' => ["\n", '<|endoftext|>'],
]);
分类
(已弃用)
此端点已弃用,将于 2022 年 12 月 3 日删除 OpenAI 已开发出性能更好的新方法。了解更多信息。
给定一个查询和一组带标签的示例,模型将预测查询最可能的标签。这可以用作任何 ML 分类或文本到标签任务的直接替代品。
$classification = $open_ai->classification([
'examples' => [
['A happy moment', 'Positive'],
['I am sad.', 'Negative'],
['I am feeling awesome', 'Positive'],
],
'labels' => ['Positive', 'Negative', 'Neutral'],
'query' => 'It is a raining day =>(',
'search_model' => 'ada',
'model' => 'curie',
]);
内容审核
给定一段文本输入,输出该模型是否将其分类为违反 OpenAI 的内容政策。
$flags = $open_ai->moderation([
'input' => 'I want to kill them.'
]);
有关内容审核的更多信息,请参阅:OpenAI 审核
列举引擎
(已弃用)
引擎端点已弃用。 请改用其替代方案,模型。
列出当前可用的引擎,并提供关于每个引擎的基本信息,例如所有者和可用性。
$engines = $open_ai->engines();
音频
文本转语音 (TTS)
$result = $open_ai->tts([
"model" => "tts-1", // tts-1-hd
"input" => "我要再次使用无限宝石。嘿,那样我们人手就不够了,你知道的",
"voice" => "alloy", // echo, fable, onyx, nova, 和 shimmer
]);
// 保存音频文件
file_put_contents('tts-result.mp3', $result);
创建转录
将音频转录为输入语言。
$c_file = curl_file_create(__DIR__ . '/files/en-marvel-endgame.m4a');
$result = $open_ai->transcribe([
"model" => "whisper-1",
"file" => $c_file,
]);
响应
{
"text": "我要再次使用无限宝石。嘿,那样我们人手就不够了,你知道的。你看,他手里还有那些宝石呢,所以……所以我们去把它们拿回来吧。用它们把所有人都救回来。就这么简单吗?是的,就这么简单。就算只有一线希望可以挽回这一切,我觉得我们也应该为那些不在这个房间里的所有人试一试。如果我们这么做,怎么知道结果会和之前不一样呢?因为以前你可没有我啊。喂,小姑娘,这屋子里的人都在追求超级英雄的生活呢。不过冒昧问一句,你这段时间到底跑哪儿去了?宇宙里还有很多其他的星球。可惜那些地方都没有你们这些人。我就喜欢这里。走,咱们去收拾那个混蛋吧。"
}
创建翻译
将音频翻译成英语。
我使用土耳其语语音进行翻译,感谢著名科学博主 Barış Özcan
$c_file = curl_file_create(__DIR__ . '/files/tr-baris-ozcan-youtuber.m4a');
$result = $open_ai->translate([
"model" => "whisper-1",
"file" => $c_file,
]);
响应
{
"text": "GPT-3。上个月,人工智能领域近年来最大的飞跃悄然发生。也许是有史以来最大的一次飞跃。OpenAI发布了GPT-3的测试版。听到这样的消息,你可能会想:这到底是什么样的飞跃呢?但请相信,这是目前最先进的语言模型,拥有最强大的语言能力。它可以回答关于人工智能的问题,还能进行翻译,甚至写诗。那些已经获得GPT-3 API访问权限的人,已经开始做一些非常有趣的实验了。让我们一起来看看几个例子。先从格言警句开始。这个网站能生成一些很美的句子,你可以直接发到推特上。与其只是空想,不如真正行动起来,用你的语言去做点什么吧。"
}
需要通过 HTML 上传音频文件吗?请查看此处的部分,并修改 API 引用。示例:
...
echo $open_ai->translate(
[
"purpose" => "answers",
"file" => $c_file,
]
);
...
// 或者
...
echo $open_ai->transcribe(
[
"purpose" => "answers",
"file" => $c_file,
]
);
...
文件
文件用于上传可在“答案”、“搜索”和“分类”等功能中使用的文档。
列出文件
返回属于用户所在组织的文件列表。
$files = $open_ai->listFiles();
上传文件
上传包含文档的文件,以便在各个端点/功能中使用。目前,一个组织上传的所有文件总大小不得超过 1 GB。如需提高存储限制,请联系 OpenAI。
$c_file = curl_file_create(__DIR__ . 'files/sample_file_1.jsonl');
$result = $open_ai->uploadFile([
"purpose" => "answers",
"file" => $c_file,
]);
使用 HTML 表单上传文件
<form action="index.php" method="post" enctype="multipart/form-data">
选择要上传的文件:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="上传文件" name="submit">
</form>
<?php
require __DIR__ . '/vendor/autoload.php';
use Orhanerday\OpenAi\OpenAi;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
ob_clean();
$open_ai = new OpenAi(env('OPEN_AI_API_KEY'));
$tmp_file = $_FILES['fileToUpload']['tmp_name'];
$file_name = basename($_FILES['fileToUpload']['name']);
$c_file = curl_file_create($tmp_file, $_FILES['fileToUpload']['type'], $file_name);
echo "[";
echo $open_ai->uploadFile(
[
"purpose" => "answers",
"file" => $c_file,
]
);
echo ",";
echo $open_ai->listFiles();
echo "]";
}
删除文件
$result = $open_ai->deleteFile('file-xxxxxxxx');
获取文件
$file = $open_ai->retrieveFile('file-xxxxxxxx');
获取文件内容
$file = $open_ai->retrieveFileContent('file-xxxxxxxx');
微调
管理微调任务,以根据您的特定训练数据定制模型。
创建微调
$result = $open_ai->createFineTune([
"model" => "gpt-3.5-turbo-1106",
"training_file" => "file-U3KoAAtGsjUKSPXwEUDdtw86",
]);
列举微调
$fine_tunes = $open_ai->listFineTunes();
获取微调
$fine_tune = $open_ai->retrieveFineTune('ft-AF1WoRqd3aJAHsqc9NY7iL8F');
取消微调
$result = $open_ai->cancelFineTune('ft-AF1WoRqd3aJAHsqc9NY7iL8F');
列举微调事件
$fine_tune_events = $open_ai->listFineTuneEvents('ft-AF1WoRqd3aJAHsqc9NY7iL8F');
删除微调模型
$result = $open_ai->deleteFineTune('curie:ft-acmeco-2021-03-03-21-44-20');
获取引擎
(已弃用)
获取引擎实例,提供有关引擎的基本信息,例如所有者和可用性。
$engine = $open_ai->engine('davinci');
模型
列出并描述 API 中可用的各种模型。
列出模型
列出当前可用的模型,并提供每个模型的基本信息,例如所有者和可用性。
$result = $open_ai->listModels();
获取模型
获取模型实例,提供有关模型的基本信息,例如所有者和权限设置。
$result = $open_ai->retrieveModel("text-ada-001");
打印结果 即 $search
echo $search;
助手(测试版)
允许您在自己的应用程序中构建 AI 助手。
创建助手
使用模型和指令创建助手。
$data = [
'model' => 'gpt-3.5-turbo',
'name' => '我的助手',
'description' => '我的助手描述',
'instructions' => '你应该热情地帮助我',
'tools' => [],
'file_ids' => [],
];
$assistant = $open_ai->createAssistant($data);
获取助手
$assistantId = 'asst_zT1LLZ8dWnuFCrMFzqxFOhzz';
$assistant = $open_ai->retrieveAssistant($assistantId);
修改助手
$assistantId = 'asst_zT1LLZ8dWnuFCrMFzqxFOhzz';
$data = [
'name' => '我的修改后的助手',
'instructions' => '你应该再次热情地帮助我',
];
$assistant = $open_ai->modifyAssistant($assistantId, $data);
删除助手
$assistantId = 'asst_DgiOnXK7nRfyvqoXWpFlwESc';
$assistant = $open_ai->deleteAssistant($assistantId);
列出助手
返回助手列表。
$query = ['limit' => 10];
$assistants = $open_ai->listAssistants($query);
创建助手文件
通过将文件附加到助手来创建助手文件。
$assistantId = 'asst_zT1LLZ8dWnuFCrMFzqxFOhzz';
$fileId = 'file-jrNZZZBAPGnhYUKma7CblGoR';
$file = $open_ai->createAssistantFile($assistantId, $fileId);
获取助手文件
$assistantId = 'asst_zT1LLZ8dWnuFCrMFzqxFOhzz';
$fileId = 'file-jrNZZZBAPGnhYUKma7CblGoR';
$file = $open_ai->retrieveAssistantFile($assistantId, $fileId);
删除助手文件
$assistantId = 'asst_zT1LLZ8dWnuFCrMFzqxFOhzz';
$fileId = 'file-jrNZZZBAPGnhYUKma7CblGoR';
$file = $open_ai->deleteAssistantFile($assistantId, $fileId);
列出助手文件
返回助手文件列表。
$assistantId = 'asst_zT1LLZ8dWnuFCrMFzqxFOhzz';
$query = ['limit' => 10];
$files = $open_ai->listAssistantFiles($assistantId, $query);
线程(测试版)
创建助手可以与之交互的线程。
创建线程
$data = [
'messages' => [
[
'role' => 'user',
'content' => '你好,什么是AI?',
'file_ids' => [],
],
],
];
$thread = $open_ai->createThread($data);
获取线程
$threadId = 'thread_YKDArENVWFDO2Xz3POifFYlp';
$thread = $open_ai->retrieveThread($threadId);
修改线程
$threadId = 'thread_YKDArENVWFDO2Xz3POifFYlp';
$data = [
'metadata' => ['test' => '1234abcd'],
];
$thread = $open_ai->modifyThread($threadId, $data);
删除线程
$threadId = 'thread_YKDArENVWFDO2Xz3POifFYlp';
$thread = $open_ai->deleteThread($threadId);
消息(测试版)
在线程中创建消息。
创建消息
$threadId = 'thread_YKDArENVWFDO2Xz3POifFYlp';
$data = [
'role' => 'user',
'content' => 'AI是如何工作的?用简单的语言解释一下。',
];
$message = $open_ai->createThreadMessage($threadId, $data);
获取消息
$threadId = 'thread_d86alfR2rfF7rASyV4V7hicz';
$messageId = 'msg_d37P5XgREsm6BItOcppnBO1b';
$message = $open_ai->retrieveThreadMessage($threadId, $messageId);
修改消息
$threadId = 'thread_d86alfR2rfF7rASyV4V7hicz';
,messageId = 'msg_d37P5XgREsm6BItOcppnBO1b';
,data = [
'metadata' => ['test' => '1234abcd'],
];
,message = $open_ai->modifyThreadMessage($threadId, $messageId, $data);
列出消息
返回给定线程的消息列表。
$threadId = 'thread_d86alfR2rfF7rASyV4V7hicz';
,query = ['limit' => 10];
$messages = $open_ai->listThreadMessages($threadId, $query);
获取消息文件
$threadId = 'thread_d86alfR2rfF7rASyV4V7hicz';
,messageId = 'msg_CZ47kAGZugAfeHMX6bmJIukP';
,fileId = 'file-CRLcY63DiHphWuBrmDWZVCgA';
,file = $open_ai->retrieveMessageFile($threadId, $messageId, $fileId);
列出消息文件
返回消息文件列表。
$threadId = 'thread_d86alfR2rfF7rASyV4V7hicz';
,messageId = 'msg_CZ47kAGZugAfeHMX6bmJIukP';
,query = ['limit' => 10];
$files = $open_ai->listMessageFiles($threadId, $messageId, $query);
运行(测试版)
表示在线程上执行的一次运行。
创建运行
$threadId = 'thread_d86alfR2rfF7rASyV4V7hicz';
,data = ['assistant_id' => 'asst_zT1LLZ8dWnuFCrMFzqxFOhzz'];
$run = $open_ai->createRun($threadId, $data);
获取运行
$threadId = 'thread_JZbzCYpYgpNb79FNeneO3cGI';
,runId = 'run_xBKYFcD2Jg3gnfrje6fhiyXj';
$run = $open_ai->retrieveRun($threadId, $runId);
修改运行
$threadId = 'thread_JZbzCYpYgpNb79FNeneO3cGI';
,runId = 'run_xBKYFcD2Jg3gnfrje6fhiyXj';
,data = [
'metadata' => ['test' => 'abcd1234'],
];
$run = $open_ai->modifyRun($threadId, $runId, $data);
列出运行
返回属于某个线程的运行列表。
$threadId = 'thread_JZbzCYpYgpNb79FNeneO3cGI';
,query = ['limit' => 10];
$runs = $open_ai->listRuns($threadId, $query);
提交工具输出
当运行状态为“requires_action”且required_action.type为submit_tool_outputs时,可以在所有工具调用完成后使用此端点提交工具输出。所有输出必须在单个请求中提交。
$threadId = 'thread_JZbzCYpYgpNb79FNeneO3cGI';
,runId = 'run_xBKYFcD2Jg3gnfrje6fhiyXj';
,outputss = [
'tool_outputs' => [
['tool_call_id' => 'call_abc123', 'output' => '28C'],
],
];
$run = $open_ai->submitToolOutputs($threadId, $runId, $outputs);
取消运行
取消正在“in_progress”中的运行。
$threadId = 'thread_JZbzCYpYgpNb79FNeneO3cGI';
,runId = 'run_xBKYFcD2Jg3gnfrje6fhiyXj';
$run = $open_ai->cancelRun($threadId, $runId);
创建线程并运行
在一个请求中创建线程并运行它。
$data = [
'assistant_id' => 'asst_zT1LLZ8dWnuFCrMFzqxFOhzz',
'thread' => [
'messages' => [
[
'role' => 'user',
'content' => '你好,什么是AI?',
'file_ids' => [],
],
],
],
];
$run = $open_ai->createThreadAndRun($data);
获取运行步骤
获取运行执行过程中的一个步骤。
$threadId = 'thread_JZbzCYpYgpNb79FNeneO3cGI';
,runId = 'run_xBKYFcD2Jg3gnfrje6fhiyXj';
,stepId = 'step_kwLG0vPQjqVyQHVoL7GVK3aG';
$step = $open_ai->retrieveRunStep($threadId, $runId, $stepId);
列出运行步骤
返回属于某个运行的运行步骤列表。
$threadId = 'thread_JZbzCYpYgpNb79FNeneO3cGI';
,runId = 'run_xBKYFcD2Jg3gnfrje6fhiyXj';
,query = ['limit' => 10];
$steps = $open_ai->listRunSteps($threadId, $runId, $query);
测试
运行所有测试:
composer test
仅运行对大多数用户有效的测试(排除那些需要缺失文件夹或调用已弃用且大多数用户不再可用的端点的测试):
./vendor/bin/pest --group=working
更改记录
请参阅 CHANGELOG 以了解最近的更改内容。
贡献
详情请参阅 .github/CONTRIBUTING.md。
安全漏洞
如有安全漏洞,请向 orhanerday@gmail.com 报告。
致谢
许可证
MIT 许可证 (MIT)。更多信息请参阅 许可证文件。
捐赠
星标历史
版本历史
5.32025/03/125.22024/05/305.12024/01/255.02023/11/304.9.12023/11/134.92023/10/284.82023/06/114.7.22023/05/154.7.12023/03/084.72023/03/084.62023/03/044.52023/03/044.12023/03/044.02023/03/023.52023/02/103.42023/01/033.32022/12/283.2.12022/12/073.22022/12/063.12022/11/22常见问题
相似工具推荐
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
OpenHands
OpenHands 是一个专注于 AI 驱动开发的开源平台,旨在让智能体(Agent)像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点,通过自动化流程显著提升开发速度。 无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员,还是需要快速原型验证的技术团队,都能从中受益。OpenHands 提供了灵活多样的使用方式:既可以通过命令行(CLI)或本地图形界面在个人电脑上轻松上手,体验类似 Devin 的流畅交互;也能利用其强大的 Python SDK 自定义智能体逻辑,甚至在云端大规模部署上千个智能体并行工作。 其核心技术亮点在于模块化的软件智能体 SDK,这不仅构成了平台的引擎,还支持高度可组合的开发模式。此外,OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩,证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能,支持与 Slack、Jira 等工具集成,并提供细粒度的权限管理,适合从个人开发者到大型企业的各类用户场景。





