當前位置: 妍妍網 > 碼農

OpenAI PHP異步客戶端1.0釋出,適用於workerman和webman

2024-01-31碼農

OpenAI PHP 異步客戶端1.0釋出,適用於workerman和webman

安裝

composer require webman/openai

流式聊天

<?php
namespaceapp\controller;
usesupport\Request;
useWebman\Openai\Chat;
useWorkerman\Protocols\Http\Chunk;
classChatController
{
publicfunctioncompletions(Request $request)
{
$connection = $request->connection;
$chat = new Chat(['apikey' => 'sk-xx''api' => 'https://api.openai.com']);
$chat->completions(
[
'model' => 'gpt-3.5-turbo',
'stream' => true,
'messages' => [['role' => 'user''content' => 'hello']],
], [
'stream' => function($data)use($connection){
$connection->send(new Chunk(json_encode($data, JSON_UNESCAPED_UNICODE) . "\n"));
},
'complete' => function($result, $response)use($connection){
if (isset($result['error'])) {
$connection->send(new Chunk(json_encode($result, JSON_UNESCAPED_UNICODE) . "\n"));
}
$connection->send(new Chunk(''));
},
]);
return response()->withHeaders([
"Transfer-Encoding" => "chunked",
]);
}
}

非流式聊天

<?php
namespaceapp\controller;
usesupport\Request;
useWebman\Openai\Chat;
useWorkerman\Protocols\Http\Chunk;
classChatController
{
publicfunctioncompletions(Request $request)
{
$connection = $request->connection;
$chat = new Chat(['apikey' => 'sk-xxx''api' => 'https://api.openai.com']);
$chat->completions(
[
'model' => 'gpt-3.5-turbo',
'messages' => [['role' => 'user''content' => 'hello']],
], [
'complete' => function($result, $response)use($connection){
$connection->send(new Chunk(json_encode($result, JSON_UNESCAPED_UNICODE) . "\n"));
$connection->send(new Chunk(''));
},
]);
return response()->withHeaders([
"Transfer-Encoding" => "chunked",
]);
}
}

影像生成

<?php
namespaceapp\controller;
usesupport\Request;
useWebman\Openai\Image;
useWorkerman\Protocols\Http\Chunk;
classImageController
{
publicfunctiongenerations(Request $request)
{
$connection = $request->connection;
$image = new Image(['apikey' => 'sk-xxx''api' => 'https://api.openai.com']);
$image->generations([
'model' => 'dall-e-3',
'prompt' => 'a dog',
'n' => 1,
'size' => "1024x1024"
], [
'complete' => function($result)use($connection){
$connection->send(new Chunk(json_encode($result)));
$connection->send(new Chunk(''));
}
]);
return response()->withHeaders([
"Content-Type" => "application/json",
"Transfer-Encoding" => "chunked",
]);
}
}

音訊語音

<?php
namespaceapp\controller;
usesupport\Request;
useWebman\Openai\Audio;
useWorkerman\Protocols\Http\Chunk;
classAudioController
{
publicfunctionspeech(Request $request)
{
$connection = $request->connection;
$audio = new Audio(['apikey' => 'sk-xxx''api' => 'https://api.openai.com']);
$audio->speech([
'model' => 'tts-1',
'input' => '你好,有什麽可以幫您?',
'voice' => 'echo'
], [
'stream' => function($buffer)use($connection){
$connection->send(new Chunk($buffer));
},
'complete' => function($result, $response)use($connection){
$connection->send(new Chunk(''));
}
]);
return response()->withHeaders([
"Content-Type" => "audio/mpeg",
"Transfer-Encoding" => "chunked",
]);
}
}

嵌入向量

<?php
namespaceapp\controller;
usesupport\Request;
useWebman\Openai\Embedding;
useWorkerman\Protocols\Http\Chunk;
classEmbeddingController
{
publicfunctioncreate(Request $request)
{
$connection = $request->connection;
$embedding = new Embedding(['apikey' => 'sk-xxx''api' => 'https://api.openai.com']);
$embedding->create([
'model' => 'text-embedding-ada-002',
'input' => 'Some words',
'encodding_format' => 'float',
], [
'complete' => function($result)use($connection){
$connection->send(new Chunk(json_encode($result)));
$connection->send(new Chunk(''));
}
]);
return response()->withHeaders([
"Content-Type" => "application/json",
"Transfer-Encoding" => "chunked",
]);
}
}

微軟openai

public function completions(Request $request)
{
$connection = $request->connection;
$chat = new Chat(['api' => 'https://xxx.openai.azure.com''apikey' => 'xxx''isAzure' => true]);
$chat->completions(
[
'model' => 'gpt-3.5-turbo',
'stream' => true,
'messages' => [['role' => 'user''content' => 'hello']],
], [
'stream' => function($data) use ($connection) {
$connection->send(new Chunk(json_encode($data, JSON_UNESCAPED_UNICODE) . "\n"));
},
'complete' => function($result$response) use ($connection) {
if (isset($result['error'])) {
$connection->send(new Chunk(json_encode($result, JSON_UNESCAPED_UNICODE) . "\n"));
}
$connection->send(new Chunk(''));
},
]);
return response()->withHeaders([
"Transfer-Encoding" => "chunked",
]);
}