lyhiving/open-ai

OpenAI GPT-3 Api Client in PHP 不进行 SSL 检查

资助包维护!
orhanerday

3.16 2024-02-18 18:55 UTC

This package is auto-updated.

Last update: 2024-09-18 20:09:40 UTC


README



ChatGPT API 目前支持,点击此处 了解实现介绍。


来自创建者的消息,
感谢您访问 @lyhiving/open-ai 仓库!如果您觉得这个仓库很有用,我们鼓励您在 GitHub 上 star 它。star 一个仓库是支持项目的体现。它也有助于提高项目的可见性,让社区知道它是有价值的。再次感谢您的支持,希望您觉得这个仓库很有用!

Orhan



Latest Version on Packagist Total Downloads



lyhiving-open-ai-logo



特色

Jetbrains Blog

Laravel News

日思录

与其他包的比较


关于此包

这是一个完全开源且安全由社区维护的,用于访问 OpenAI GPT-3 API 的 PHP SDK。

更多信息,您可以阅读 laravel news 博客文章

免费支持可用。 加入我们的 Discord 服务器

要开始使用此包,您首先需要熟悉 OpenAI API 文档示例。您还可以从我们的 #api-support Discord 频道获得帮助。

新闻

需要 PHP 7.4+

加入我们的 Discord 服务器

Discord Banner 2

点击此处加入 Discord 服务器

支持此项目

如您所知,OpenAI PHP 是一个用于 OpenAI 的开源项目包装工具。我们依赖社区的支持来继续开发和维护此项目,而您可以通过捐款来帮助的一种方式。

捐款使我们能够承担诸如托管费用(测试)、开发工具和其他资源等费用,这些费用对于使项目顺利运行是必要的。每一项贡献,无论大小,都有助于我们继续改进 OpenAI PHP。

如果您通过使用 OpenAI PHP 获得了益处,并希望支持其持续发展,我们将非常感谢任何金额的捐款。您可以通过以下方式捐款:

感谢您考虑向 lyhiving/OpenAI PHP SDK 捐款。您的支持非常宝贵,并有助于确保项目可以继续增长和改进。

此致

Orhan Erday / 创建者。

端点支持

安装

您可以通过composer安装此软件包

composer require lyhiving/open-ai

快速入门 ⚡

在您开始之前,您应该将OPENAI_API_KEY设置为环境变量,并使用以下命令将OpenAI密钥设置为环境值:

PowerShell

$Env:OPENAI_API_KEY = "sk-gjtv....."

命令提示符

set OPENAI_API_KEY=sk-gjtv.....

Linux或macOS

export OPENAI_API_KEY=sk-gjtv.....

设置环境时遇到问题?请阅读文章,或者您可以查看我的StackOverflow回答以了解Windows®的环境设置。

创建您的index.php文件,并将以下代码部分粘贴到文件中。

<?php

require __DIR__ . '/vendor/autoload.php'; // remove this line if you use a PHP Framework.

use lyhiving\OpenAi\OpenAi;

$open_ai_key = getenv('OPENAI_API_KEY');
$open_ai = new OpenAi($open_ai_key);

$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,
]);

var_dump($complete);

使用以下命令运行服务器

php -S localhost:8000 -t .

用法

从环境变量加载您的密钥。

根据以下代码,$open_ai是所有open-ai操作的基变量。

use lyhiving\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()方法指定Origin 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(); // you should execute the request FIRST!
var_dump($open_ai->getCURLInfo()); // You can call the request

聊天(也称为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,
]);

相关:ChatGPT克隆项目

完成

给定一个提示,该模型将返回一个或多个预测的完成内容,并且还可以返回每个位置的替代标记的概率。

$complete = $open_ai->completion([
   'model' => 'text-davinci-002',
   'prompt' => 'Hello',
   'temperature' => 0.9,
   'max_tokens' => 150,
   'frequency_penalty' => 0,
   'presence_penalty' => 0.6,
]);

流示例

此功能可能听起来与ChatGPT相似。

ChatGPT克隆项目

演示视频

Isimsiz.video.Clipchamp.ile.yapildi.mp4

ChatGPT克隆是一个简单的基于OpenAI库构建的Web应用程序,使用PHP。它允许用户与实时响应的AI语言模型进行聊天。聊天历史记录使用cookie保存,该项目需要使用API密钥并启用SQLite3。

ChatGPT-Clone仓库的URL https://github.com/lyhiving/ChatGPT

是否流式传输部分进度。如果设置,则在可用时作为数据-only 服务器端事件发送标记,并通过数据: [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>

您应该看到与视频中类似的结果;

stream-event.mp4

编辑

根据提供的输入、指令和参数创建一个新的编辑

   $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();

音频

创建转录

将音频转录为输入语言。

$c_file = curl_file_create(__DIR__ . '/files/en-marvel-endgame.m4a');

$result = $open_ai->transcribe([
    "model" => "whisper-1",
    "file" => $c_file,
]);

响应

{
  "text": "I'm going to use the stones again. Hey, we'd be going in short-handed, you know. Look, he's still got the stones, so... So let's get them. Use them to bring everyone back. Just like that? Yeah, just like that. Even if there's a small chance that we can undo this, I mean, we owe it to everyone who's not in this room to try. If we do this, how do we know it's going to end any differently than it did before? Because before you didn't have me. Hey, little girl, everybody in this room is about that superhero life. And if you don't mind my asking, where the hell have you been all this time? There are a lot of other planets in the universe. But unfortunately, they didn't have you guys. I like this one. Let's go get this son of a bitch."
}

创建翻译

将音频翻译成英语。

我使用土耳其语语音进行翻译,感谢著名科学YouTuber 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. Last month, the biggest leap in the world of artificial intelligence in recent years happened silently. Maybe the biggest leap of all time. GPT-3's beta version was released by OpenAI. When you hear such a sentence, you may think, what kind of leap is this? But be sure, this is the most advanced language model with the most advanced language model with the most advanced language ability. It can answer these artificial intelligence questions, it can translate and even write poetry. Those who have gained access to the API or API of GPT-3 have already started to make very interesting experiments. Let's look at a few examples together. Let's start with an example of aphorism. This site produces beautiful words that you can tweet. Start to actually do things with your words instead of just thinking about them."
}

需要HTML上传音频?请检查本节并更改API引用。例如

...
    echo $open_ai->translate(
        [
            "purpose" => "answers",
            "file" => $c_file,
        ]
    );
...
// OR
...
    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">
    Select file to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload File" name="submit">
</form>
<?php
require __DIR__ . '/vendor/autoload.php';

use lyhiving\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([
       "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;

测试

运行所有测试

composer test

仅运行大多数用户能工作的测试(排除那些需要缺失文件夹或击中已弃用的端点,这些端点对大多数用户不再可用)

./vendor/bin/pest --group=working

变更日志

请参阅变更日志以获取最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请向lyhiving@gmail.com报告安全漏洞

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。

捐赠

Buy Me A Coffee

btc

image

eth

image

doge

image