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

v1.0.1 2025-11-21 04:31 UTC

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