parentyazilim/openaci-chatbot

这是一个用于与OpenAI的API交互的PHP类,特别针对他们的聊天机器人、搜索和文本生成功能,以及使用他们的API创建和微调机器学习模型。

dev-main 2023-02-16 22:01 UTC

This package is not auto-updated.

Last update: 2024-09-28 03:36:35 UTC


README

这是一个用于与OpenAI的API交互的PHP类,特别针对他们的聊天机器人、搜索和文本生成功能,以及使用他们的API创建和微调机器学习模型。

该类有以下公共方法

  • __construct($apiKey, $engineId = 'davinci'):构造函数,接受一个API密钥和一个可选的引擎ID(默认为'davinci')。
  • ask($question):用于向聊天机器人提问并获得响应的方法。
  • search($documents, $query, $maxRerank = 200):使用OpenAI搜索API搜索相关文档的方法。
  • generateText($prompt, $length = 50, $temperature = 0.7):使用OpenAI文本API生成文本的方法。
  • createFineTuningSession($model, $description = ''):使用OpenAI API创建新微调会话的方法。
  • uploadTrainingData($sessionId, $data):使用OpenAI API将训练数据上传到微调会话的方法。
  • startFineTuning($sessionId, $trainingConfig):使用OpenAI API开始训练微调会话的方法。
  • checkFineTuningStatus($sessionId):使用OpenAI API检查微调会话状态的方法。
  • getFineTunedModel($sessionId):使用OpenAI API从微调会话中获取微调模型的方法。

这些方法都通过HTTP请求与OpenAI API交互,并返回相关的PHP对象作为响应。`ask()`和`generateText()`方法接受一个作为字符串的问题或提示,并返回相应的响应或生成的文本字符串。`search()`方法接受一个要搜索的文档数组、一个搜索查询和可选的最大重排结果数,并返回一个搜索结果数组。`createFineTuningSession()`方法创建一个新的微调会话并返回其ID。`uploadTrainingData()`方法将训练数据上传到现有的微调会话并返回成功或失败。`startFineTuning()`方法使用给定的配置选项开始训练微调会话并返回成功或失败。`checkFineTuningStatus()`方法检查现有微调会话的状态并返回其状态字符串。`getFineTunedModel()`方法从现有微调会话中获取微调模型并返回其ID字符串。

OpenAI Chatbot PHP类

OpenAIChatbot类是OpenAI API的PHP包装器。它允许您轻松使用OpenAI API来生成文本、回答问题、通过文档进行搜索以及执行模型的微调。

要求

要使用OpenAIChatbot类,您需要

  • PHP 7.3或更高版本
  • 启用了jsonopenssl扩展
  • OpenAI API密钥

安装

您可以使用Composer安装OpenAIChatbot

composer require parentyazilim/openai-chatbot

用法

要使用OpenAIChatbot类,您需要首先创建类的实例并提供您的OpenAI API密钥。您可以可选地指定默认引擎ID(默认为davinci

<?php
use OpenAIChatbot\OpenAIChatbot;

$openai = new OpenAIChatbot('your_api_key', 'davinci');

提问

要向OpenAI聊天机器人提问并获得响应,请使用ask()函数。该函数接受一个参数,即要提问的问题,并返回聊天机器人的响应。

<?php
$response = $openai->ask('What is the meaning of life?');
echo $response;

通过文档进行搜索

要搜索一组文档并获得最相关的结果,请使用search()函数。该函数接受三个参数

  • $documents:要搜索的文档数组,其中每个文档都是一个具有 "id" 和 "text" 键的关联数组。
  • $query:要使用的搜索查询。
  • $maxRerank(可选):要重新排序的最大结果数(默认为200)。

该函数返回一个搜索结果数组,其中每个结果都是一个具有 "document" 和 "score" 键的关联数组。

<?php
$documents = [
    ['id' => 'doc1', 'text' => 'The quick brown fox jumped over the lazy dog'],
    ['id' => 'doc2', 'text' => 'The brown fox is quick and the dog is lazy'],
    ['id' => 'doc3', 'text' => 'The quick brown fox is friends with the lazy dog'],
];
$results = $openai->search($documents, 'quick brown fox');
foreach ($results as $result) {
    echo $result['document'] . ' (' . $result['score'] . ')' . PHP_EOL;
}

生成文本

要使用 OpenAI API 生成文本,请使用 generateText() 函数。该函数接受三个参数

  • $prompt:用于生成文本的提示。
  • $length(可选):生成文本的长度(以令牌为单位,默认为50)。
  • $temperature(可选):生成文本的“创意”程度(介于0和1之间的值,值越高生成的文本越具创意,默认为0.7)。

该函数返回生成的文本

<?php
$text = $openai->generateText('Once upon a time', 100, 0.5);
echo $text;`

微调模型

要微调 OpenAI 模型,您需要首先使用 createFineTuningSession() 函数创建一个微调会话。该函数接受两个参数

  • $model:用于微调的模型 ID。
  • $description(可选):微调会话的描述(默认为空字符串)。

该函数返回新微调会话的 ID

<?php
$sessionId = $openai->createFineTuningSession('text-davinci-002', 'My fine-tuning session');
echo $sessionId;

创建微调会话后,您可以使用 uploadTrainingData() 函数上传训练数据。该函数接受两个参数

  • $sessionId:微调会话的 ID。
  • $data:一个包含训练数据的数组,其中每个项目都是一个具有 "text" 和 "label" 键的关联数组。

该函数在成功时返回 true,在失败时返回 false

<?php

$data = [
    ['text' => 'The quick brown fox', 'label' => 'animal'],
    ['text' => 'The lazy dog', 'label' => 'animal'],
    ['text' => 'The big red ball', 'label' => 'object'],
];

$result = $openai->uploadTrainingData($sessionId, $data);

if ($result) {
    echo 'Training data uploaded successfully' . PHP_EOL;
} else {
    echo 'Failed to upload training data' . PHP_EOL;
}

上传训练数据后,您可以使用 startFineTuning() 函数开始微调过程。该函数接受两个参数

  • $sessionId:微调会话的 ID。
  • $trainingConfig:一个关联数组,包含训练配置选项,包括 "epochs"、"batch_size" 和 "learning_rate"。

该函数在成功时返回 true,在失败时返回 false

<?php

$trainingConfig = [
    'epochs' => 2,
    'batch_size' => 32,
    'learning_rate' => 0.001,
];

$result = $openai->startFineTuning($sessionId, $trainingConfig);

if ($result) {
    echo 'Fine-tuning started successfully' . PHP_EOL;
} else {
    echo 'Failed to start fine-tuning' . PHP_EOL;
}

您可以使用 checkFineTuningStatus() 函数检查微调过程的进度。该函数接受一个参数

  • $sessionId:微调会话的 ID。

该函数返回微调会话的状态

<?php
$status = $openai->checkFineTuningStatus($sessionId);
echo 'Status: ' . $status . PHP_EOL;

最后,一旦微调过程完成,您可以使用 getFineTunedModel() 函数获取微调模型的 ID。该函数接受一个参数

  • $sessionId:微调会话的 ID。

该函数返回微调模型的 ID

<?php
$modelId = $openai->getFineTunedModel($sessionId);
echo 'Fine-tuned model ID: ' . $modelId . PHP_EOL;

错误处理

如果在使用 OpenAIChatbot 类时发生错误,函数将返回 false。您可以通过调用 error() 函数来检查错误。

<?php

if ($openai->error()) {
    echo 'An error occurred: ' . $openai->errorMessage();
}

结论

OpenAIChatbot 类为 OpenAI API 提供了一个易于使用的 PHP 封装,允许您快速轻松地生成文本、回答问题、搜索文档以及微调模型。

许可

本项目采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。