Chuyển đến nội dung chính

Thư viện Python Ollama: Bắt đầu với LLM cục bộ

Làm chủ Ollama Python SDK để phát triển LLM cục bộ. Học cách tạo văn bản, xử lý hội thoại nhiều lượt, dùng mô hình thị giác và xây dựng ứng dụng AI an toàn.
Đã cập nhật 17 thg 4, 2026  · 7 phút đọc

API LLM trên đám mây rất mạnh mẽ, nhưng đi kèm đánh đổi: tính phí theo mức sử dụng, giới hạn tốc độ và sự bất định thường trực về nơi dữ liệu của bạn được xử lý. Với các nhà phát triển làm việc với dữ liệu nhạy cảm hoặc thử nghiệm nhiều, những ràng buộc này có thể nhanh chóng trở thành lực cản.

Đó là lý do cách tiếp cận ưu tiên cục bộ trở nên nổi bật. Thư viện Python Ollama loại bỏ lực cản đó bằng cách cho phép bạn chạy các mô hình ngôn ngữ lớn ngay trên máy, đồng thời tương tác với chúng bằng mã Python gọn gàng, thuần bản địa. Bạn sẽ có toàn quyền kiểm soát hiệu năng, chi phí và quyền riêng tư.

Trong bài viết này, tôi sẽ hướng dẫn bạn toàn bộ API của thư viện Python Ollama, từ tạo văn bản đơn giản với generate() đến gọi công cụ và mô hình thị giác.

Tôi cũng khuyên bạn nên xem các hướng dẫn Ollama mới nhất khác của chúng tôi:

Điều kiện tiên quyết để chạy Ollama với Python

Trước khi bắt đầu, hãy đảm bảo bạn đã thiết lập các mục sau trên thiết bị:

  • Python 3.8 trở lên

  • Ollama được tải từ trang web của họ, cài đặt và đang chạy (ollama serve)

  • Ít nhất đã kéo về một mô hình (ví dụ, ollama pull llama3.2)

ollama website

Các điều kiện tiên quyết này quan trọng vì Python SDK chỉ là một client; việc suy luận thực tế diễn ra trong runtime của Ollama. Nếu runtime không khả dụng hoặc không có mô hình phù hợp, các lệnh gọi sẽ thất bại.

Bạn cũng có thể cân nhắc dùng Docker với Ollama để đảm bảo tính nhất quán phiên bản.

Thư viện Python Ollama là gì?

ollama python library

Thư viện Python Ollama là SDK chính thức bao bọc Ollama REST API thành một giao diện Pythonic đơn giản. Nói cách khác, nó chuyển các yêu cầu HTTP và payload JSON cấp thấp thành các hàm Python cấp cao để bạn tập trung vào mục tiêu thay vì chi tiết truyền tải.

Khi ứng dụng của bạn mở rộng, lớp trừu tượng này loại bỏ việc lặp lại xây dựng yêu cầu, chuẩn hóa cách xử lý phản hồi và tập trung hóa xử lý lỗi ở một nơi.

Để so sánh, một yêu cầu thô có thể trông như sau:

import requests

response = requests.post(
    "http://localhost:11434/api/generate",
    json={
        "model": "llama3.2",
        "prompt": "Explain recursion"
    }
)

Cách này hoạt động, nhưng nhanh chóng trở nên dài dòng và dễ lỗi. Với SDK, cùng tác vụ đó trở thành:

import ollama

response = ollama.generate(
    model='llama3.2',
    prompt='Explain recursion'
)

Cách thư viện giao tiếp với máy chủ Ollama

Ở tầng bên dưới, mỗi lệnh gọi SDK trở thành một yêu cầu HTTP tới máy chủ Ollama tại http://localhost:11434. Script Python của bạn đóng vai trò client, còn runtime của Ollama là server lưu trữ và thực thi mô hình.

Sự tách biệt này quan trọng vì cho phép mô hình chạy như một dịch vụ chuyên dụng, giúp quản lý tài nguyên (CPU/GPU) hiệu quả hơn và cho phép nhiều ứng dụng chia sẻ cùng một phiên bản mô hình.

Nếu cần kết nối tới máy khác, bạn có thể cấu hình một client tùy chỉnh:

from ollama import Client

client = Client(host='http://remote-server:11434')
response = client.generate(model='llama3.2', prompt='Hello')

Cài đặt và cấu hình thư viện

Việc cài đặt rất đơn giản và yêu cầu ít phụ thuộc:

pip install ollama

Sau khi cài đặt, bạn nên kiểm tra kết nối bằng cách liệt kê các mô hình sẵn có. 

Điều này giúp xác nhận môi trường Python, SDK và runtime Ollama của bạn đều được kết nối đúng.

Để thực hiện, hãy chạy:

import ollama

print(ollama.list())

Tạo văn bản với generate()

Hàm generate() được thiết kế cho các tác vụ không trạng thái, tức mỗi yêu cầu được xử lý độc lập mà không ghi nhớ tương tác trước đó. Điều này rất phù hợp cho các tác vụ như tóm tắt, viết lại hoặc tạo mã.

Vì không có ngữ cảnh được giữ lại, chất lượng đầu ra phụ thuộc hoàn toàn vào độ rõ ràng của prompt.

Tạo văn bản cơ bản

Ví dụ sau minh họa quy trình đơn giản nhất: gửi prompt, nhận phản hồi và trích xuất văn bản được tạo.

import ollama

response = ollama.generate(
    model='llama3.2',
    prompt='Write a Python docstring for a function that calculates factorial'
)

print(response['response'])

Phản hồi cũng bao gồm siêu dữ liệu như thời gian thực thi và số lượng token, hữu ích khi tối ưu hiệu năng.

Tùy chỉnh đầu ra với tham số

Hành vi sinh có thể điều chỉnh bằng các tham số lấy mẫu, điều khiển cách mô hình chọn token.

Giá trị temperature thấp cho đầu ra quyết đoán hơn, trong khi giá trị cao tăng tính biến thiên. Bạn có thể dùng các tham số như top_pnum_predict để tinh chỉnh thêm độ đa dạng và độ dài đầu ra.

Dưới đây là một số tham số quan trọng bạn có thể dùng: 

Tham số

Điều khiển điều gì

Ảnh hưởng tới đầu ra

Khi nào dùng

temperature

Mức ngẫu nhiên khi chọn token

Thấp = dự đoán hơn, cao = sáng tạo/ngẫu nhiên hơn

Dùng thấp (0.1–0.3) cho tác vụ thực chứng, cao (0.7–1.0) cho viết sáng tạo

top_p

Lấy mẫu hạt nhân (ngưỡng khối xác suất)

Mô hình chỉ xét các token trong phần xác suất tích lũy p hàng đầu

Dùng để hạn chế đầu ra kỳ quặc nhưng vẫn giữ đa dạng

top_k

Giới hạn số lượng token ứng viên

Mô hình chỉ chọn trong k token có khả năng cao nhất

Hữu ích để kiểm soát chặt trong đầu ra có cấu trúc

num_predict

Số token tối đa sẽ tạo

Kiểm soát độ dài phản hồi

Tăng cho giải thích dài, giảm cho câu trả lời ngắn gọn

Đây là ví dụ dùng các tham số top_p, temperaturenum_predict:

response = ollama.generate(
    model='llama3.2',
    prompt='Explain machine learning in one paragraph',
    options={
        'temperature': 0.2,
        'top_p': 0.9,
        'num_predict': 100
    }
)

Xây dựng hội thoại với chat()

Khác với generate(), API chat() hỗ trợ tương tác có trạng thái bằng cách làm việc với một chuỗi thông điệp. Điều này cho phép mô hình duy trì ngữ cảnh qua nhiều lượt.

Mỗi thông điệp gồm một vai trò như user, assistant hoặc system, giúp cấu trúc hội thoại.

Yêu cầu chat một lượt

Ngay cả tương tác một lượt cũng dùng định dạng thông điệp, đặt nền móng cho hội thoại phức tạp hơn.

response = ollama.chat(
    model='llama3.2',
    messages=[
        {'role': 'user', 'content': 'Explain Python decorators'}
    ]
)

print(response['message']['content'])

Duy trì ngữ cảnh nhiều lượt

Để duy trì ngữ cảnh, bạn chủ động lưu và gửi lại toàn bộ lịch sử hội thoại trong mỗi yêu cầu. Cách này cho bạn toàn quyền kiểm soát mô hình nhớ điều gì.

messages = [
    {'role': 'user', 'content': 'What is recursion?'}
]

response = ollama.chat(model='llama3.2', messages=messages)
messages.append(response['message'])

messages.append({'role': 'user', 'content': 'Give an example in Python'})
response = ollama.chat(model='llama3.2', messages=messages)

Dùng system prompt để định hình hành vi

System prompt dùng để xác định hành vi của mô hình từ đầu, như giọng điệu, ràng buộc hoặc vai trò.

messages = [
    {'role': 'system', 'content': 'You are a strict Python code reviewer.'},
    {'role': 'user', 'content': 'Review this code: def add(a,b): return a+b'}
]

Hỗ trợ Streaming và Async trong thư viện Python Ollama

Với ứng dụng tương tác, độ phản hồi quan trọng không kém độ chính xác. Ollama hỗ trợ cả streaming và thực thi bất đồng bộ để cải thiện hiệu năng và trải nghiệm người dùng.

Streaming phản hồi theo thời gian thực

Streaming cho phép bạn xử lý đầu ra dần dần khi nó được tạo, thay vì chờ toàn bộ phản hồi.

for chunk in ollama.chat(
    model='llama3.2',
    messages=[{'role': 'user', 'content': 'Write a story'}],
    stream=True
):
    print(chunk['message']['content'], end='', flush=True)

Dùng AsyncClient cho ứng dụng async

Thực thi bất đồng bộ cho phép ứng dụng xử lý đồng thời nhiều yêu cầu mà không bị chặn. Bạn sẽ cần dùng thư viện asyncio của Python để hiện thực.

Hãy xem ví dụ dưới đây:

import asyncio
from ollama import AsyncClient

async def main():
    client = AsyncClient()
    async for chunk in await client.chat(
        model='llama3.2',
        messages=[{'role': 'user', 'content': 'Explain async programming'}],
        stream=True
    ):
        print(chunk['message']['content'], end='')

asyncio.run(main())

Quản lý mô hình Ollama từ Python

SDK của Ollama cũng cung cấp công cụ để quản lý mô hình bằng lập trình, đặc biệt hữu ích trong môi trường tự động.

Liệt kê và kiểm tra mô hình cục bộ

Bạn có thể lấy danh sách mô hình sẵn có và kiểm tra thuộc tính của chúng, như kích thước và cấu hình.

models = ollama.list()
print(models)

info = ollama.show('llama3.2')
print(info)

Kéo và xóa mô hình bằng lập trình

Mô hình có thể được tải về hoặc gỡ bỏ trực tiếp từ Python, giúp quản lý phụ thuộc linh hoạt hơn.

ollama.pull('llama3.2')
ollama.delete('llama3.2')

Tạo và sử dụng Embedding với thư viện Python Ollama

Embedding biểu diễn văn bản thành vector số học nắm bắt ý nghĩa ngữ nghĩa. Điều này cho phép bạn so sánh văn bản dựa trên độ tương đồng thay vì trùng khớp từ ngữ.

Tạo embedding văn bản

Ví dụ sau chuyển văn bản thành biểu diễn vector có thể dùng cho tìm kiếm hoặc phân cụm.

response = ollama.embed(
    model='nomic-embed-text',
    input='Ollama is a local LLM runtime'
)

embedding = response['embeddings'][0]

Xây dựng tìm kiếm tương đồng cơ bản

Khi đã tạo embedding, có thể đo độ tương đồng bằng cosine similarity, so sánh góc giữa các vector.

Dưới đây là ví dụ đơn giản về hàm tìm kiếm:

import numpy as np

def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

Gọi công cụ và đầu ra có cấu trúc trong thư viện Python Ollama

Để xây dựng ứng dụng nâng cao, các mô hình thường cần tương tác với hàm bên ngoài hoặc trả về dữ liệu có cấu trúc.

Triển khai gọi công cụ với hàm Python

Gọi công cụ cho phép mô hình gọi các hàm Python được định nghĩa sẵn dựa trên ý định của người dùng.

Hãy tạo một hàm sử dụng các công cụ như vậy:

def get_weather(city: str) -> str:
    """Get current weather for a city"""
    return f"Weather in {city} is sunny"
response = ollama.chat(
    model='llama3.2',
    messages=[{'role': 'user', 'content': 'What is the weather in Paris?'}],
    tools=[get_weather]
)

Nhận phản hồi JSON có cấu trúc

Đầu ra có cấu trúc đảm bảo phản hồi được trả về theo định dạng nhất quán, máy có thể đọc được như JSON.

response = ollama.chat(
    model='llama3.2',
    messages=[{'role': 'user', 'content': 'Review: Great product, 5 stars!'}],
    format='json'
)

Nâng cao: Mô hình thị giác và Ollama Cloud trong Python

Ollama hỗ trợ các mô hình đa phương tiện và suy luận trên đám mây cho các trường hợp nâng cao.

Gửi ảnh tới mô hình thị giác

Mô hình thị giác có thể xử lý cả văn bản và hình ảnh, cho phép các tác vụ như mô tả ảnh và phân tích trực quan.

response = ollama.chat(
    model='llama3.2-vision',
    messages=[{
        'role': 'user',
        'content': 'Describe this image',
        'images': ['image.jpg']
    }]
)

Chạy mô hình đám mây từ Python

Với các mô hình lớn không thể chạy cục bộ, Ollama Cloud cung cấp suy luận được lưu trữ.

ollama signin
ollama.chat(model='deepseek-v3.1:671b-cloud', messages=[...])
from ollama import Client

client = Client(
    host='https://ollama.com',
    headers={'Authorization': 'Bearer YOUR_API_KEY'}
)

Xử lý lỗi cho các lỗi thường gặp với Python Ollama

Khi xây dựng ứng dụng thực tế, xử lý lỗi rõ ràng giúp ngăn lỗi âm thầm và cải thiện độ tin cậy.

Xử lý ngoại lệ ResponseError

SDK của Ollama đưa ra ngoại lệ có cấu trúc cho lỗi phía server, cho phép bạn kiểm tra nguyên nhân.

import ollama

try:
    ollama.generate(model='unknown', prompt='test')
except ollama.ResponseError as e:
    print(e.status_code, e.error)

Gỡ lỗi kết nối và vấn đề mô hình

Các vấn đề thường gặp gồm server chưa chạy, thiếu mô hình, thiếu bộ nhớ hoặc vượt quá giới hạn ngữ cảnh.

  • Server chưa chạy: Khởi động với ollama serve

  • Không tìm thấy mô hình: Chạy ollama pull

  • Thiếu bộ nhớ: Dùng mô hình nhỏ hơn hoặc lượng tử hóa

  • Vấn đề ngữ cảnh: Điều chỉnh num_ctx

num_ctx điều khiển số token tối đa mô hình có thể “nhìn thấy” cùng lúc, bao gồm:

  • prompt của bạn
  • chỉ dẫn hệ thống
  • lịch sử hội thoại
  • tài liệu được truy xuất (RAG)
  • và các token do chính mô hình tạo 

Quản lý tham số này sẽ giúp ngăn LLM cắt bớt nội dung trước đó (thường từ đầu) hoặc âm thầm làm mất chỉ dẫn hay dữ liệu quan trọng.

Tổng kết

Thư viện Python Ollama cung cấp giao diện đầy đủ để làm việc với LLM cục bộ và trên đám mây, từ tạo văn bản đơn giản đến các khả năng nâng cao như embedding, gọi công cụ và đầu vào đa phương thức. LLM trở thành một dịch vụ cục bộ mà bạn có thể viết script, kiểm thử và mở rộng như bất kỳ thành phần nào khác trong stack.

Theo trải nghiệm của tôi khi dùng Ollama, đây là một lựa chọn tốt khi bạn không muốn dùng LLM đám mây. Chẳng hạn, tôi có thể dùng các mô hình mã nguồn mở linh hoạt hơn. Nếu bạn cũng muốn có thêm tùy chọn để chuyển đổi giữa các mô hình, Ollama là một cánh cổng tốt để truy cập tất cả những điều này.

Nếu bạn muốn nâng cao kỹ năng, tôi khuyến nghị tham gia khóa học Developing LLM Applications with LangChain hoặc theo đuổi chứng chỉ Associate AI Engineer for Developers.

Câu hỏi thường gặp về thư viện Python Ollama

Tôi có cần GPU mạnh để dùng Ollama với Python không?

Không nhất thiết. Ollama có thể chạy trên CPU, nhưng hiệu năng sẽ chậm hơn so với dùng GPU. Nhiều mô hình nhỏ hơn hoặc đã lượng tử hóa được thiết kế để chạy hiệu quả trên laptop phổ thông. Nếu bạn mới bắt đầu hoặc đang thử nghiệm, CPU thường là đủ. Với khối lượng công việc nặng hoặc mô hình lớn hơn, GPU sẽ cải thiện đáng kể tốc độ và độ phản hồi.

Sự khác nhau giữa chạy mô hình cục bộ và dùng Ollama Cloud là gì?

Chạy mô hình cục bộ nghĩa là mọi thứ diễn ra trên chính máy của bạn, giúp bạn toàn quyền kiểm soát quyền riêng tư dữ liệu và loại bỏ chi phí sử dụng. Ngược lại, Ollama Cloud cho phép bạn truy cập các mô hình lớn hơn nhiều mà phần cứng cục bộ của bạn có thể không hỗ trợ.

Tôi nên dùng generate() hay chat() khi nào?

Dùng generate() cho các tác vụ đơn lẻ, đơn giản như tóm tắt văn bản hoặc tạo mã. Nó trực diện và không cần quản lý lịch sử hội thoại. Dùng chat() khi bạn cần ngữ cảnh qua nhiều lượt tương tác, chẳng hạn xây dựng chatbot hoặc trợ lý.

Embedding là gì và vì sao hữu ích?

Embedding chuyển văn bản thành các vector số học biểu diễn ý nghĩa. Điều này cho phép bạn so sánh các đoạn văn bản khác nhau dựa trên độ tương đồng thay vì trùng khớp từ ngữ. Chúng thường được dùng trong hệ thống tìm kiếm, công cụ gợi ý và retrieval-augmented generation (RAG).

Tôi xử lý lỗi như thế nào khi dùng thư viện Python Ollama?

Hầu hết lỗi xuất phát từ các vấn đề đơn giản, như máy chủ Ollama chưa chạy hoặc mô hình chưa có sẵn cục bộ. Thư viện đưa ra các ngoại lệ có cấu trúc như ResponseError, bạn có thể bắt bằng khối try/except.


Austin Chia's photo
Author
Austin Chia
LinkedIn

Tôi là Austin, một blogger và cây bút công nghệ với nhiều năm kinh nghiệm làm nhà khoa học dữ liệu và nhà phân tích dữ liệu trong lĩnh vực chăm sóc sức khỏe. Khởi đầu hành trình công nghệ với nền tảng sinh học, tôi hiện hỗ trợ những người khác thực hiện chuyển đổi tương tự thông qua blog công nghệ của mình. Niềm đam mê công nghệ đã đưa tôi đến với việc cộng tác viết cho hàng chục công ty SaaS, truyền cảm hứng cho người khác và chia sẻ trải nghiệm của bản thân.

Chủ đề

Khóa học Kỹ sư AI

Tracks

Kỹ sư Trợ lý Trí tuệ Nhân tạo (AI) cho Lập trình viên

26 giờ
Học cách tích hợp trí tuệ nhân tạo (AI) vào các ứng dụng phần mềm thông qua việc sử dụng các giao diện lập trình ứng dụng (API) và các thư viện mã nguồn mở. Hãy bắt đầu hành trình trở thành Kỹ sư Trí tuệ Nhân tạo ngay hôm nay!
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow
Có liên quan

blogs

Claude Opus 4.6: Tính năng, điểm chuẩn, các bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu bảng xếp hạng về mã hóa theo hướng tác nhân và suy luận phức tạp. Thêm nữa, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem thêmXem thêm