Hiện tại Google chưa cung cấp một SDK chính thức dành riêng cho PHP để tương tác trực tiếp với API của Gemini. Tuy nhiên, bạn vẫn có thể tích hợp bằng cách sử dụng các thư viện HTTP client của PHP để gửi các yêu cầu API đến các endpoint của Gemini.

Dưới đây là hướng dẫn chi tiết các bước và ví dụ cụ thể để bạn có thể bắt đầu:

Bước 1: Chuẩn bị API Key của Gemini

Trước khi bắt đầu, bạn cần có API key để xác thực các yêu cầu đến API của Gemini. Bạn có thể tạo API key theo các bước sau:

  1. Truy cập vào Google Cloud Console.
  2. Nếu bạn chưa có dự án, hãy tạo một dự án mới.
  3. Trong dự án của bạn, hãy tìm kiếm và kích hoạt “Generative Language API”.
  4. Sau khi kích hoạt, truy cập vào mục “Credentials” (Thông tin xác thực).
  5. Nhấp vào “Create credentials” (Tạo thông tin xác thực) và chọn “API key”.
  6. Sao chép API key mà bạn vừa tạo. Hãy giữ API key này an toàn và không chia sẻ nó công khai.

Bước 2: Cài đặt HTTP Client cho PHP

PHP có nhiều thư viện HTTP client mạnh mẽ mà bạn có thể sử dụng. Một trong những thư viện phổ biến và dễ sử dụng là Guzzle HTTP. Bạn có thể cài đặt Guzzle bằng Composer:

composer require guzzlehttp/guzzle

Đảm bảo bạn đã cài đặt Composer trên hệ thống của mình. Nếu chưa, bạn có thể tải và cài đặt từ trang chủ của Composer.

Bước 3: Xây dựng hàm tương tác với API của Gemini

Bây giờ, bạn có thể tạo một hàm PHP để gửi yêu cầu đến API của Gemini. Dưới đây là một ví dụ cơ bản để gửi một yêu cầu tạo văn bản (text generation):

<?php

require 'vendor/autoload.php'; // Đảm bảo đường dẫn đến autoloader của Composer là đúng

use GuzzleHttp\Client;

function generateTextWithGemini(string $prompt, string $apiKey): ?string
{
    $client = new Client([
        'base_uri' => 'https://generativelanguage.googleapis.com/v1beta/',
        'timeout' => 10, // Thời gian chờ tối đa cho mỗi yêu cầu (giây)
    ]);

    try {
        $response = $client->post('models/gemini-2.0-flash:generateContent?key=' . $apiKey , [
            'headers' => ['Content-Type' => 'application/json'],
            'json' => [
                'contents' => [
                    [
                        'parts' => [['text' => $prompt]],
                    ],
                ],
            ],
        ]);

        $body = $response->getBody();
        $data = json_decode($body, true);

        // Kiểm tra xem có dữ liệu phản hồi và có text được tạo hay không
        if (isset($data['candidates'][0]['content']['parts'][0]['text'])) {
            return $data['candidates'][0]['content']['parts'][0]['text'];
        } else {
            return null; // Hoặc xử lý lỗi khác tùy theo nhu cầu
        }

    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        // Xử lý lỗi khi gọi API
        error_log("Lỗi khi gọi API Gemini: " . $e->getMessage());
        return null;
    }
}

// Sử dụng hàm
$apiKey = 'YOUR_API_KEY'; // Thay YOUR_API_KEY bằng API key thực tế của bạn
$userPrompt = 'Viết một đoạn thơ ngắn về vẻ đẹp của Hồ Gươm.';
$generatedText = generateTextWithGemini($userPrompt, $apiKey);

if ($generatedText !== null) {
    echo "Câu hỏi: " . htmlspecialchars($userPrompt) . "<br>";
    echo "Câu trả lời từ Gemini: " . nl2br(htmlspecialchars($generatedText));
} else {
    echo "Không thể tạo văn bản từ Gemini.";
}

?>

Giải thích đoạn code:

  1. require 'vendor/autoload.php';: Dòng này bao gồm autoloader của Composer để có thể sử dụng các thư viện đã cài đặt.
  2. use GuzzleHttp\Client;: Khai báo lớp Client từ thư viện Guzzle HTTP.
  3. generateTextWithGemini(string $prompt, string $apiKey): ?string: Hàm này nhận vào prompt (nội dung bạn muốn Gemini xử lý) và API key, sau đó trả về chuỗi văn bản được tạo hoặc null nếu có lỗi.
  4. $client = new Client([...]): Khởi tạo một instance của Guzzle HTTP client với cấu hình base URI của API Gemini và thời gian chờ.
  5. $client->post(...): Gửi một yêu cầu POST đến endpoint models/gemini-pro:generateContent.
    • headers: Đặt header Content-Typeapplication/json vì chúng ta đang gửi dữ liệu JSON.
    • json: Định dạng dữ liệu yêu cầu dưới dạng JSON. Trong trường hợp này, chúng ta gửi một contents array chứa một phần tử là một parts array, và mỗi phần tử của parts là một object chứa text với nội dung prompt.
  6. $response->getBody(): Lấy phần body của phản hồi từ API.
  7. json_decode($body, true): Giải mã chuỗi JSON phản hồi thành một mảng PHP.
  8. Kiểm tra dữ liệu phản hồi: Đoạn code kiểm tra xem phản hồi có chứa dữ liệu mong muốn (candidates[0]['content']['parts'][0]['text']) hay không.
  9. try...catch: Sử dụng khối try...catch để xử lý các exception có thể xảy ra trong quá trình gọi API (ví dụ: lỗi mạng, lỗi server).
  10. Sử dụng hàm: Phần cuối của script minh họa cách gọi hàm generateTextWithGemini với một prompt ví dụ và in ra kết quả.

Các endpoint khác của Gemini API:

Ngoài việc tạo văn bản, Gemini còn có các endpoint khác cho các tác vụ khác, ví dụ như:

  • models/gemini-pro-vision:generateContent: Để xử lý cả văn bản và hình ảnh (multimodal). Bạn sẽ cần điều chỉnh cấu trúc JSON trong phần json của yêu cầu để bao gồm cả dữ liệu hình ảnh (thường là base64 encoded).
  • models/{model}:streamGenerateContent: Để nhận phản hồi theo luồng (streaming). Điều này phức tạp hơn một chút trong việc xử lý phản hồi.

Bạn có thể tham khảo tài liệu chính thức của Google Generative AI API để biết thêm chi tiết về các endpoint và cấu trúc dữ liệu: https://ai.google.dev/docs

Lưu ý quan trọng:

  • Bảo mật API Key: Tuyệt đối không nhúng trực tiếp API key vào mã nguồn client-side (ví dụ: JavaScript). Hãy luôn xử lý API key ở phía server-side (PHP trong trường hợp này).
  • Xử lý lỗi: Đoạn code ví dụ chỉ xử lý lỗi cơ bản. Trong ứng dụng thực tế, bạn nên xử lý lỗi chi tiết hơn (ví dụ: ghi log, thông báo cho người dùng).
  • Giới hạn và chi phí: Hãy lưu ý về các giới hạn sử dụng và chi phí liên quan đến việc sử dụng Google Generative Language API.
  • Input Validation: Luôn kiểm tra và làm sạch dữ liệu đầu vào (prompt) từ người dùng để tránh các vấn đề bảo mật hoặc hành vi không mong muốn.
  • Asynchronous Requests: Đối với các ứng dụng có lưu lượng truy cập lớn, bạn có thể cân nhắc sử dụng các thư viện PHP hỗ trợ asynchronous HTTP requests để không làm chậm quá trình xử lý của server.
  • PHP
  • May 2, 2025
  • 0 comment
  • 72 views

Recent posts

[WordPress] Hướng dẫn tạo Custom Action Hook trong WordPress

[WordPress] Hướng dẫn tạo Custom Action Hook trong WordPress

Tạo custom Action Hook trong WordPress là một kỹ năng rất hữu ích để tùy chỉnh và mở rộng chức […]

Cuộc chiến không hồi kết: “Trình duyệt CC” chặn quảng cáo

Cuộc chiến không hồi kết: “Trình duyệt CC” chặn quảng cáo

Người dùng internet không còn lạ lẫm gì trước những “chiêu” được “hãng Y” sử dụng, nhằm hạn chế việc […]

Windows có lỗ hổng nghiêm trọng, Microsoft biết nhưng từ chối sửa

Windows có lỗ hổng nghiêm trọng, Microsoft biết nhưng từ chối sửa

Một lỗ hổng bảo mật trên Windows có “cửa hậu” cho phép đăng nhập bằng mật khẩu cũ. Một phát […]

Apple phát hành iOS 18.5 RC: Sắp ra mắt chính thức?

Apple phát hành iOS 18.5 RC: Sắp ra mắt chính thức?

Apple phát hành phiên bản Release Candidate (RC) của iOS 18.5 và iPadOS 18.5 đến các nhà phát triển cũng như người dùng tham gia […]

Apple cập nhật ứng dụng Move to iOS, nâng cấp tốc độ truyền tải

Apple cập nhật ứng dụng Move to iOS, nâng cấp tốc độ truyền tải

Move to iOS là ứng dụng của Apple để giúp người dùng Android khi chuyển sang hệ sinh thái của Apple, cụ thể là iOS […]

© 2021 Tạp Chí CNTT. Mr Hoang