alex8bits / ai_client
Laravel AI integration
Installs: 2
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/alex8bits/ai_client
Requires
- php: >=8.1
- illuminate/support: ^10.0 || ^11.0
This package is auto-updated.
Last update: 2025-11-21 04:32:31 UTC
README
π AI Client (Laravel ChatGPT Integration)
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ChatGPT / OpenAI / Proxy-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π² Laravel Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ function calling (tools), ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠΏΡΠ°, ΠΈ DTO.
ΠΠ°ΠΊΠ΅Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°: ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ OpenAI Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· Π»ΡΠ±ΠΎΠΉ ΡΠ²ΠΎΠΉ Proxy API.
π¦ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
composer require alex8bits/ai_client
ΠΠ°ΠΊΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠ΅Π· Laravel Package Discovery.
π§ ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³Π° (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
php artisan vendor:publish --provider="Alex8bits\AiClient\ChatGPTServiceProvider" --tag=config
ΠΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½:
config/chatgpt.php
ΠΡΠΈΠΌΠ΅Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° config/chatgpt.php
return [
'model' => 'gpt-4.1',
'temperature' => 0.2,
'max_tokens' => 2048,
'base_prompt' => "Π’Ρ β ΡΠΌΠ½ΡΠΉ ΠΈ Π²Π΅ΠΆΠ»ΠΈΠ²ΡΠΉ AI Π°ΡΡΠΈΡΡΠ΅Π½Ρ.",
'instructions' => [
'weather' => "Π’Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅ΡΡ ΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π΅ ΠΊΡΠ°ΡΠΊΠΎ, ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎ ΡΠ°ΠΊΡΡ.",
],
'tools' => [
'get_weather' => [
'type' => 'function',
'function' => [
'name' => 'getWeather',
'description' => 'ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ³ΠΎΠ΄Ρ ΠΏΠΎ Π³ΠΎΡΠΎΠ΄Ρ',
'parameters' => [
'type' => 'object',
'properties' => [
'city' => ['type' => 'string'],
],
'required' => ['city'],
],
],
],
],
];
π§ ΠΠ°Π·ΠΎΠ²ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
use ChatGPT;
use Alex8bits\AiClient\DTO\Message;
use Alex8bits\AiClient\Enums\Role;
$response = ChatGPT::send([
new Message(Role::User, 'ΠΡΠΈΠ²Π΅Ρ! ΠΠ°ΠΊ Π΄Π΅Π»Π°?'),
]);
echo $response->text(); // ΠΈΠ»ΠΈ ΡΠ°Π·Π±ΠΎΡ choices
π ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ (instructionKey)
$response = ChatGPT::send(
messages: [
new Message(Role::User, "ΠΠ°ΠΊΠ°Ρ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠ³ΠΎΠ΄Π°?")
],
instructionKey: 'weather'
);
ΠΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ:
Π’Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅ΡΡ ΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π΅ ΠΊΡΠ°ΡΠΊΠΎ, ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎ ΡΠ°ΠΊΡΡ.
π ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ tools ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³Π°
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ tool ΠΏΠΎ ΠΊΠ»ΡΡΡ:
$response = ChatGPT::send(
messages: [
new Message(Role::User, "Π‘ΠΊΠ°ΠΆΠΈ ΠΏΠΎΠ³ΠΎΠ΄Ρ Π² ΠΠΎΡΠΊΠ²Π΅"),
],
toolKeys: ['get_weather']
);
ChatGPT ΡΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ:
{
"type": "function",
"function": {
"name": "getWeather",
"arguments": "{ \"city\": \"ΠΠΎΡΠΊΠ²Π°\" }"
}
}
π§ ΠΡΠΈΠΌΠ΅Ρ ΡΡΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ tool (Π±Π΅Π· ΠΊΠΎΠ½ΡΠΈΠ³Π°)
use Alex8bits\AiClient\DTO\Tool;
use Alex8bits\AiClient\DTO\ToolFunction;
$tool = new Tool(
type: 'function',
function: new ToolFunction(
name: 'calculateSum',
description: 'Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
ΡΠΈΡΠ΅Π»',
parameters: [
'type' => 'object',
'properties' => [
'a' => ['type' => 'number'],
'b' => ['type' => 'number'],
],
'required' => ['a', 'b']
]
)
);
$response = ChatGPT::send(
messages: [
new Message(Role::User, "Π‘Π»ΠΎΠΆΠΈ 5 ΠΈ 7")
],
tools: [$tool]
);
π§© ΠΡΠΈΠΌΠ΅Ρ ΡΠΌΠ΅ΡΠ°Π½Π½ΡΡ tools (ΡΡΡΠ½ΡΠ΅ + ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³Π°)
ChatGPT::send(
messages: [ new Message(Role::User, "ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ") ],
tools: [
new Tool(
type: 'function',
function: new ToolFunction(
name: 'customLogic',
description: 'ΠΠΎΡ Π»ΠΎΠ³ΠΈΠΊΠ°',
parameters: []
)
)
],
toolKeys: ['get_weather']
);
π ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ProxyClient (ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ API)
Π config/chatgpt.php:
'client' => Alex8bits\AiClient\Clients\ProxyClient::class,
'use_proxy' => true,
'proxy_url' => env('CHATGPT_PROXY_URL'),
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎΠΉΠ΄ΡΡ ΡΠ΅ΡΠ΅Π· Π²Π°Ρ API.
π― ΠΡΠ²Π΅Ρ ChatGPT β DTO
$response->choices[0]->content;
$response->choices[0]->functionCall?->name;
$response->raw; // ΠΏΠΎΠ»Π½ΡΠΉ JSON