Facebook PixelOllama: Công cụ hỗ trợ Triển khai Ứng dụng LLM nội bộ | 200Lab Blog

Ollama: Công cụ hỗ trợ Triển khai Ứng dụng LLM nội bộ

13 Mar, 2025

Ollama là một công cụ mã nguồn mở được tạo ra để giúp việc chạy các mô hình ngôn ngữ lớn trở nên đơn giản và dễ dàng hơn trên máy tính cá nhân

Ollama: Công cụ hỗ trợ Triển khai Ứng dụng LLM nội bộ

Mục Lục

1. Ollama là gì?

Ollama là một công cụ mã nguồn mở được tạo ra để giúp việc chạy các mô hình ngôn ngữ lớn (LLM) trở nên đơn giản và dễ dàng hơn trên máy tính cá nhân. Trong bối cảnh AI phát triển mạnh mẽ những năm gần đây, nhu cầu sử dụng các mô hình ngôn ngữ tiên tiến ngày càng tăng.

Ollama được phát triển để giải quyết một số khó khăn chính khi triển khai và sử dụng các mô hình ngôn ngữ lớn (LLM), bao gồm:

  1. Quyền riêng tư và bảo mật dữ liệu: Với việc chạy LLM trên máy local, toàn bộ dữ liệu và tương tác không cần phải gửi đến máy chủ bên thứ ba, giúp đảm bảo thông tin nhạy cảm không bị rò rỉ.
  2. Chi phí: Việc sử dụng các API LLM thương mại thường tốn kém, đặc biệt với các ứng dụng có lượng tương tác lớn như chatbot. Ollama loại bỏ hoàn toàn những chi phí này bằng cách cho phép bạn chạy các mô hình cục bộ, tiết kiệm đáng kể chi phí dài hạn.
  3. Độc lập với Internet: Có khả năng làm việc hoàn toàn ngoại tuyến, không phụ thuộc vào kết nối internet.
  4. Đơn giản hóa triển khai: Trước đây, việc triển khai các LLM cục bộ đòi hỏi người dùng phải có kiến thức chuyên sâu về Machine Learning và các bước cài đặt phức tạp. Ollama đã loại bỏ những rào cản này bằng cách cung cấp một giải pháp dễ sử dụng, giúp các developer nhanh chóng bắt đầu mà không cần tốn nhiều thời gian tìm hiểu kỹ thuật.
  5. Môi trường phát triển linh hoạt: Cung cấp cho các nhà phát triển một nền tảng để thử nghiệm và tích hợp các mô hình LLM vào ứng dụng của họ mà không cần phụ thuộc vào dịch vụ bên ngoài.

Ollama đã nhanh chóng trở thành một trong những công cụ phổ biến nhất để chạy LLM nội bộ, nhờ vào thiết kế đơn giản, hiệu suất tốt và cộng đồng phát triển mạnh mẽ.

2. So sánh Ollama với LM Studio

Điểm khác biệt chính về kiến trúc và thiết kế:

Tiêu chí Ollama LM Studio
Giao diện Tập trung vào CLI, tích hợp API REST Giao diện đồ họa trực quan
Nền tảng hỗ trợ Linux, macOS, Windows (mới) Windows, Linux, macOS
Đối tượng người dùng Developers và power users Thân thiện với người dùng không chuyên
Khả năng tùy biến Mạnh mẽ với Modelfile Giới hạn hơn
Khả năng mở rộng API REST dễ dàng tích hợp vào các ứng dụng Chủ yếu là một ứng dụng độc lập
  • Ollama: Đây là lựa chọn lý tưởng cho các developer ưu tiên hiệu suất và cần một công cụ đơn giản, dễ dàng tích hợp vào hệ thống production hoặc các quy trình CI/CD.
  • LM Studio: Phù hợp hơn cho các giai đoạn nghiên cứu và phát triển (R&D) hoặc thử nghiệm. Đặc biệt, nếu bạn muốn làm việc với nhiều loại mô hình, so sánh hiệu suất trực quan, và trải nghiệm một giao diện giống OpenAI.

Nên lựa chọn như thế nào giữa 2 công cụ này:

  • Nếu bạn là developer đang làm việc với các dự án thực tế đòi hỏi một công cụ ổn định, dễ tích hợp, thì Ollama là lựa chọn phù hợp.
  • Nếu bạn đang ở giai đoạn nghiên cứu, cần thử nghiệm và so sánh các mô hình qua một giao diện trực quan, thì LM Studio sẽ đáp ứng tốt hơn.

3. Hướng dẫn Cài đặt & Sử dụng Ollama

3.1 Cài đặt Ollama

Hãy chạy dòng lệnh để tạo folder lưu trữ dữ liệu cho Ollama, sau đó sử dụng lệnh docker run như hướng dẫn bên dưới. Lưu ý: bạn nên thực hiện thao tác map folder (liên kết thư mục cục bộ của bạn với container) để tránh phải tải lại model mỗi khi xóa container.

Bash
# Tạo thư mục để lưu trữ dữ liệu Ollama
mkdir -p ~/ollama-data

# Chạy container Ollama
docker run -d \
  --name ollama \
  -p 11434:11434 \
  -v ~/ollama-data:/root/.ollama \
  --gpus all \  # Bỏ dòng này nếu không có GPU
  ollama/ollama

3.2 Download model

Bash
# Sử dụng thông qua Docker exec
docker exec -it ollama ollama pull tinyllama

# Hoặc truy cập API từ bên ngoài container
curl -X POST http://localhost:11434/api/pull -d '{"name": "tinyllama"}'

Để biết tên model bạn truy cập vào đường link https://ollama.com/library để tìm kiếm model phù hợp với nhu cầu của mình nhé.

Tương tác với CLI trong container

Bash
docker exec -it ollama ollama run tinyllama "Viết một đoạn code Python đơn giản để tính giai thừa"

3.3 Xây dựng API Wrapper đơn giản với Python

Bây giờ, chúng ta sẽ tạo một ứng dụng Python đơn giản sử dụng Ollama thông qua Docker. Ứng dụng này sẽ đóng vai trò như một API cơ bản, cho phép gửi prompt và nhận phản hồi từ mô hình.

  • Bước 1: Tạo folder dự án tên ollama-demo và đi đến thư mục này
Bash
mkdir ollama-demo
cd ollama-demo
  • Bước 2: Tạo file requirements.txt
Txt
fastapi
uvicorn
httpx
python-dotenv
  • Bước 3: Tạo file main.py có nội dung sau
Python
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import httpx
import os
from typing import List, Dict, Any

app = FastAPI(title="Ollama AI Assistant")

# Cấu hình kết nối Ollama
OLLAMA_HOST = os.getenv("OLLAMA_HOST", "http://localhost:11434")
DEFAULT_MODEL = os.getenv("DEFAULT_MODEL", "tinyllama")

class Message(BaseModel):
    role: str
    content: str

class ChatRequest(BaseModel):
    messages: List[Message]
    model: str = DEFAULT_MODEL
    temperature: float = 0.7
    
class ChatResponse(BaseModel):
    response: str
    model: str
    
@app.get("/")
def read_root():
    return {"status": "online", "service": "Ollama AI Assistant"}

@app.get("/models")
async def list_models():
    """Liệt kê các mô hình có sẵn trong Ollama"""
    async with httpx.AsyncClient() as client:
        try:
            response = await client.get(f"{OLLAMA_HOST}/api/tags")
            return response.json()
        except Exception as e:
            raise HTTPException(status_code=500, detail=f"Không thể kết nối đến Ollama: {str(e)}")

@app.post("/chat", response_model=ChatResponse)
async def chat(request: ChatRequest):
    """Gửi tin nhắn đến mô hình và nhận phản hồi"""
    payload = {
        "model": request.model,
        "messages": [{"role": m.role, "content": m.content} for m in request.messages],
        "temperature": request.temperature
    }
    
    async with httpx.AsyncClient() as client:
        try:
            response = await client.post(f"{OLLAMA_HOST}/api/chat", json=payload)
            if response.status_code != 200:
                raise HTTPException(status_code=response.status_code, 
                                   detail=f"Ollama API error: {response.text}")
            
            result = response.json()
            return {
                "response": result["message"]["content"],
                "model": request.model
            }
        except httpx.RequestError as e:
            raise HTTPException(status_code=500, 
                               detail=f"Lỗi kết nối đến Ollama: {str(e)}")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)
  • Bước 4: Tạo Dockerfile cho ứng dụng
Bash
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY main.py .

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
  • Bước 5: Tạo docker-compose.yml để chạy cả Ollama và ứng dụng, bạn nhớ xoá container ollama đã start ở các bước trước đó nhé, vì chúng ta sẽ khởi tạo lại nó.
Bash
version: '3'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    volumes:
      - ollama_data:/root/.ollama
    ports:
      - "11434:11434"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

  api:
    build: .
    container_name: ollama-api
    environment:
      - OLLAMA_HOST=http://ollama:11434
      - DEFAULT_MODEL=tinyllama
    ports:
      - "8000:8000"
    depends_on:
      - ollama

volumes:
  ollama_data:
  • Bước 6: Khởi động hệ thống
Bash
# Build và chạy các container
docker-compose up -d

# Đảm bảo mô hình được tải vào Ollama
docker-compose exec ollama ollama pull tinyllama
  • Bước 7: Sử dụng API
    • Bây giờ bạn có thể truy cập API tại http://localhost:8000/docs để xem giao diện Swagger UI và test thử.
    • Hoặc sử dụng curl để gọi API:
Bash
curl -X POST http://localhost:8000/chat \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {"role": "user", "content": "Viết một hàm JavaScript để tìm số lớn nhất trong mảng"}
    ],
    "model": "tinyllama",
    "temperature": 0.7
  }'

4. Kết luận

Qua các bước hướng dẫn trên, bạn đã nắm được cách cài đặt, cấu hình và sử dụng Ollama thông qua Docker. Không chỉ vậy, bạn còn thực hiện được một ứng dụng demo đơn giản để tương tác với Ollama API. Chúc các bạn ứng dụng thành công vào công việc nhé, hẹn gặp lại các bạn trong những bài viết kế tiếp

Bài viết liên quan

Đăng ký nhận thông báo

Đừng bỏ lỡ những bài viết thú vị từ 200Lab