Ollama: Công cụ hỗ trợ Triển khai Ứng dụng LLM nội bộ
13 Mar, 2025
Hướng nội
AuthorOllama 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

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:
- 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ỉ.
- 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.
- Độ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.
- Đơ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.
- 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.
# 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
# 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
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
mkdir ollama-demo
cd ollama-demo
- Bước 2: Tạo file
requirements.txt
fastapi
uvicorn
httpx
python-dotenv
- Bước 3: Tạo file
main.py
có nội dung sau
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
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ó.
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
# 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:
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