Xây dựng "Trái tim" hệ thống: Gom tất cả AI vào một mối bằng FastAP

AI Hunter

Member
Bạn có Bot Chat, Bot Camera, Bot Tin tức... nhưng chúng nằm rải rác mỗi nơi một file.
Trong bài viết này, chúng ta sẽ xây dựng một API Server trung tâm.

Mục tiêu: Bạn có thể ngồi ở quán cà phê, dùng điện thoại truy cập vào link `http://api-cua-toi.com/chat` để ra lệnh cho máy tính ở nhà làm việc.

Xây dựng Trái tim hệ thống Gom tất cả AI vào một mối bằng FastAP.jpg

1. FastAPI là gì?​

Hãy tưởng tượng FastAPI là một người "Bồi bàn" (Server):
  • Khách hàng (Client): Là App điện thoại, Website XenForo, hoặc trình duyệt web của bạn.
  • Nhà bếp (Backend): Là các file Python chúng ta đã viết (Llama 3, Face ID, DALL-E...).
  • Nhiệm vụ: Khách gọi món (Gửi Request) -> Bồi bàn nhận phiếu -> Đưa xuống bếp -> Bếp làm xong -> Bồi bàn mang món lên (Trả Response).

FastAPI được ưa chuộng nhất hiện nay vì nó Nhanh (như tên gọi), Dễ code, và tự động tạo trang tài liệu hướng dẫn sử dụng.

2. Cài đặt​


Mã:
pip install fastapi uvicorn

3. Triển khai Code (Full Source)​


Chúng ta sẽ tạo file `main.py`. Server này sẽ có 2 chức năng:
1. Chào hỏi thông thường.
2. Tích hợp **Llama 3** (từ bài trước) để trả lời câu hỏi qua mạng.

Python:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import ollama # Thư viện Llama 3 ở bài trước
import uvicorn

# Khởi tạo App
app = FastAPI(title="Jarvis AI API", version="1.0")

# --- ĐỊNH NGHĨA DỮ LIỆU ĐẦU VÀO ---
class ChatRequest(BaseModel):
    prompt: str
    model: str = "llama3" # Mặc định dùng Llama 3

# --- CÁC API ENDPOINT (CÁC MÓN ĂN) ---

@app.get("/")
def home():
    """Trang chủ kiểm tra server sống hay chết"""
    return {"status": "online", "message": "Jarvis đang chờ lệnh sếp!"}

@app.post("/chat")
def chat_with_ai(request: ChatRequest):
    """API chat với Llama 3"""
    print(f"📩 Nhận câu hỏi: {request.prompt}")
   
    try:
        # Gọi Llama 3 (Code bài trước)
        response = ollama.chat(model=request.model, messages=[
            {'role': 'user', 'content': request.prompt},
        ])
       
        reply_content = response['message']['content']
        return {"reply": reply_content}
       
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.get("/control/light/{status}")
def control_light(status: str):
    """API điều khiển đèn (Ví dụ kết nối Home Assistant)"""
    if status.lower() == "on":
        return {"action": "Đã BẬT đèn", "success": True}
    elif status.lower() == "off":
        return {"action": "Đã TẮT đèn", "success": True}
    else:
        return {"error": "Lệnh không hợp lệ (chỉ on/off)"}

# --- CHẠY SERVER ---
if __name__ == "__main__":
    print("🚀 Server đang khởi động tại http://localhost:8000")
    # host="0.0.0.0" để cho phép truy cập từ các máy khác trong mạng LAN
    uvicorn.run(app, host="0.0.0.0", port=8000)

4. Hướng dẫn sử dụng (Test API)​


Bước 1: Chạy Server
Mở Terminal, chạy lệnh:
Mã:
python main.py

Bước 2: Truy cập trang quản lý (Swagger UI)
FastAPI tự động tạo ra một giao diện cực xịn để bạn test. Hãy mở trình duyệt và vào:
`http://localhost:8000/docs`

Bạn sẽ thấy danh sách các API `/chat`, `/control/light`.
* Bấm vào `/chat` -> Chọn **Try it out**.
* Nhập JSON: `{"prompt": "Viết 1 bài thơ về lập trình Python"}`.
* Bấm **Execute** và xem kết quả Llama 3 trả về ngay bên dưới.

5. Kết nối thực tế​


Bây giờ, từ bất kỳ đâu (ví dụ từ code PHP của XenForo, hay từ Shortcut trên iPhone), bạn chỉ cần gửi một `HTTP POST` request tới API này là có thể điều khiển được bộ não AI ở nhà.

Ví dụ code PHP trên XenForo gọi vào Python:
PHP:
$client = new \GuzzleHttp\Client();
$response = $client->post('http://IP_MAY_PYTHON:8000/chat', [
    'json' => ['prompt' => 'Chào bot, bạn khỏe không?']
]);
echo $response->getBody();

Như vậy, Python và XenForo đã chính thức "về chung một nhà"!
 
Back
Top