Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "HI.AI Members" các nội dung bạn quan tâm.

Bài 7. Tích hợp Ollama với PHP

1. Đặt vấn đề

Nhiều hệ thống website bệnh viện, cổng thông tin, Drupal, WordPress hoặc ứng dụng nội bộ sử dụng PHP. Vì vậy, tích hợp Ollama với PHP là nhu cầu thực tế. PHP có thể gửi request HTTP đến Ollama API hoặc API trung gian để sinh văn bản, chat, tóm tắt tài liệu, phân loại phản ánh hoặc hỗ trợ người dùng.

Trong môi trường bệnh viện, PHP thường nằm ở lớp web. Vì vậy, không nên để PHP frontend gọi trực tiếp Ollama nếu thiếu kiểm soát. Tốt hơn là PHP gọi API trung gian nội bộ, hoặc nếu PHP chính là API trung gian thì phải tự xử lý xác thực, phân quyền, log và kiểm soát dữ liệu.

2. Khi nào dùng PHP để gọi Ollama?

Có thể dùng PHP khi:

  • Xây chatbot trên website nội bộ.
  • Tích hợp AI vào Drupal.
  • Tạo form soạn thảo văn bản.
  • Tóm tắt nội dung node.
  • Phân loại phản ánh Webform.
  • Tạo gợi ý câu trả lời CSKH.
  • Hỗ trợ QMS viết bảng kiểm.
  • Gọi model từ module nội bộ.

3. Ví dụ PHP gọi API generate

Ví dụ dùng cURL:

 
<?php

$url = 'http://127.0.0.1:11434/api/generate';

$payload = [
'model' => 'assistant-hanhchinh',
'prompt' => 'Hãy viết thông báo nội bộ về việc triển khai khảo sát hài lòng người bệnh.',
'stream' => false,
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload, JSON_UNESCAPED_UNICODE));
curl_setopt($ch, CURLOPT_TIMEOUT, 120);

$response = curl_exec($ch);

if ($response === false) {
throw new Exception('Lỗi gọi Ollama: ' . curl_error($ch));
}

$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode >= 400) {
throw new Exception('Ollama trả lỗi HTTP: ' . $httpCode);
}

$data = json_decode($response, true);

echo $data['response'] ?? '';

?>
 

Đây là ví dụ tối giản. Khi dùng trong bệnh viện, cần thêm kiểm soát người dùng và log.

4. Ví dụ PHP gọi API chat

 
<?php

$url = 'http://127.0.0.1:11434/api/chat';

$payload = [
'model' => 'assistant-qlcl',
'messages' => [
[
'role' => 'user',
'content' => 'Hãy tạo bảng kiểm giám sát 5S tại khoa lâm sàng.'
]
],
'stream' => false,
];

$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
CURLOPT_TIMEOUT => 120,
]);

$response = curl_exec($ch);

if ($response === false) {
throw new Exception(curl_error($ch));
}

curl_close($ch);

$data = json_decode($response, true);
echo $data['message']['content'] ?? '';

?>
 

5. PHP và streaming

PHP có thể xử lý streaming nhưng phức tạp hơn do buffering của PHP-FPM, Nginx hoặc Apache. Nếu cần streaming thực sự, cần cấu hình:

  • Tắt output buffering phù hợp.
  • Cấu hình Nginx không buffer response.
  • Xử lý chunk từ cURL.
  • Gửi từng phần về browser.
  • Cẩn thận timeout.

Nếu hệ thống chưa cần streaming, có thể dùng response hoàn chỉnh để đơn giản hóa.

6. PHP làm API trung gian

Nếu PHP làm API trung gian, cần thực hiện:

  • Kiểm tra đăng nhập.
  • Kiểm tra quyền người dùng.
  • Chọn model theo vai trò.
  • Kiểm tra prompt.
  • Chặn dữ liệu nhạy cảm nếu cần.
  • Ghi log.
  • Gọi RAG nếu có.
  • Gọi Ollama.
  • Trả response.
  • Giới hạn request.

Không nên chỉ viết một file PHP proxy chuyển toàn bộ request từ browser sang Ollama. Làm vậy không có kiểm soát.

7. Bảo mật khi dùng PHP

Cần tránh:

  • Để người dùng chọn bất kỳ model nào.
  • Để người dùng gửi prompt không giới hạn độ dài.
  • Ghi prompt chứa dữ liệu nhạy cảm vào log công khai.
  • Mở endpoint PHP không xác thực.
  • Gọi Ollama qua IP public.
  • Hard-code thông tin nhạy cảm.
  • Không xử lý timeout.

Cần có CSRF protection nếu tích hợp vào form web, giới hạn quyền và validate input.

8. PHP và Drupal

Drupal dùng PHP, nhưng không nên viết code tùy tiện ngoài chuẩn Drupal nếu triển khai lâu dài. Với Drupal, nên tạo module hoặc service gọi API trung gian. Nội dung chi tiết ở bài sau.

9. Kết luận

PHP có thể tích hợp tốt với Ollama qua HTTP API, đặc biệt trong các website nội bộ và hệ thống Drupal. Tuy nhiên, trong môi trường bệnh viện, PHP không nên chỉ đóng vai trò proxy thô. Nó cần kiểm soát xác thực, phân quyền, dữ liệu đầu vào, log, model và lỗi. Nếu làm đúng, PHP có thể trở thành cầu nối hiệu quả giữa hệ thống web bệnh viện và AI local.