Ollama: chạy mô hình mở trên máy chủ riêng, ranh giới với cloud và cách vận hành
Đăng ngày 12/10/2026
Mục lục bài nghiên cứu

Một máy chủ mô hình mở gọn nhẹ cho hạ tầng riêng, và lúc nên chọn nó
Ollama là phần mềm tải, chạy và phục vụ mô hình ngôn ngữ mở trên máy của người dùng; README giới thiệu nó gọn trong một câu: bắt đầu xây dựng với mô hình mở [1]. Sau khi cài, người dùng có lệnh ollama để chạy mô hình hoặc nối với agent, ứng dụng sẵn có, cùng một REST API ở cổng 11434 [1].
Ollama có hai chế độ: mô hình chạy cục bộ, gọi không cần khóa API, và mô hình chạy trên cloud của Ollama qua tài khoản và API key [4][6]. Bài phân tích phần mã nguồn mở cùng chế độ cục bộ, và chỉ rõ ranh giới với cloud.
Nên cân nhắc Ollama khi cần đưa mô hình mở vào mạng nội bộ nhanh, khi dữ liệu không được rời hạ tầng, hoặc khi nhiều công cụ cần chung một điểm API. Không nên coi nó là lời giải mặc định cho dịch vụ đông người dùng đồng thời cần phân quyền chi tiết. Khuyến nghị: một máy GPU trong mạng nội bộ, đặt sau reverse proxy có xác thực, tắt cloud nếu chính sách dữ liệu yêu cầu, và đo chất lượng tiếng Việt trên câu hỏi thật.
Từ tệp trọng số đến một API dùng được
Mô hình mở được phát hành dưới dạng tệp trọng số. Để dùng, đơn vị phải chọn định dạng và mức lượng tử hóa (nén trọng số xuống ít bit hơn), dựng engine suy luận cho đúng GPU, viết khuôn prompt cho từng mô hình, quản lý bộ nhớ khi nhiều yêu cầu đến cùng lúc, rồi mở API cho ứng dụng.
Ollama gói các bước đó lại: ollama pull để tải, ollama run để trò chuyện, máy chủ HTTP cho ứng dụng gọi, Modelfile để khai báo mô hình tùy biến [4][7]. Khi chạy cục bộ, FAQ khẳng định Ollama không thấy prompt hay dữ liệu của người dùng [5], một lý do quan trọng để doanh nghiệp tự chạy mô hình.
Ollama cũng có endpoint tương thích Chat Completions, Responses và Messages cho công cụ viết sẵn theo API của OpenAI hay Anthropic, nhưng chỉ bao phủ một phần API gốc [4], nên từng tính năng vẫn phải kiểm tra.
Ba lớp bên trong: giao diện dòng lệnh, máy chủ điều phối và runner suy luận
Lớp ngoài là CLI ollama và ứng dụng desktop, gửi yêu cầu tới máy chủ cục bộ, kèm lệnh launch để khởi chạy tích hợp như Claude Code, Codex, OpenCode [1][4]. Lớp giữa là máy chủ HTTP mặc định lắng nghe 127.0.0.1:11434, quản lý mô hình đã tải và lập lịch nạp mô hình vào bộ nhớ [5].
Lớp dưới là engine suy luận, với llama.cpp là backend được README liệt kê [1]. Theo tài liệu thư mục llama, biến LLAMA_CPP_VERSION ghim phiên bản llama.cpp, bước cấu hình CMake tải mã và áp bản vá trong llama/compat, rồi llama-server được khởi chạy với tham số mà các tệp Go như llm/llama_server.go, server/sched.go sử dụng; phát hiện thiết bị dựa trên CUDA, ROCm, Vulkan và Metal [8]. Modelfile còn nhắc mô hình MLX bên cạnh GGUF [7].
Mô hình được mô tả bằng Modelfile, mỗi dòng một chỉ thị: FROM chỉ mô hình gốc (tên trong thư viện, thư mục Safetensors hoặc tệp GGUF), PARAMETER đặt tham số chạy, TEMPLATE là khuôn prompt theo cú pháp template của Go, SYSTEM là chỉ dẫn hệ thống, MESSAGE là hội thoại mẫu, LICENSE ghi giấy phép, REQUIRES đặt phiên bản Ollama tối thiểu [7].
ollama create dựng mô hình từ Modelfile, ollama show --modelfile xem lại cấu hình; ví dụ trong tài liệu cho thấy FROM trỏ tới một blob đặt tên theo mã sha256 [7], gợi ý cách lưu theo địa chỉ nội dung. Thư mục lưu mô hình đổi được bằng OLLAMA_MODELS [5].
Đường đi của một yêu cầu qua cổng 11434
Yêu cầu điển hình là POST tới /api/chat với tên mô hình và danh sách tin nhắn; ví dụ trong README đặt stream bằng false, tức nhận trọn câu trả lời một lần [1]. Ứng dụng viết cho OpenAI gọi /v1/chat/completions hoặc /v1/responses, ứng dụng viết cho Anthropic gọi /v1/messages; endpoint Responses phi trạng thái nên lịch sử hội thoại phải gửi lại mỗi lần [4].
Nếu mô hình chưa nằm trong bộ nhớ, máy chủ nạp nó vào GPU, RAM hệ thống hoặc chia giữa hai nơi; ollama ps cho biết tỷ lệ [5]. Thiếu bộ nhớ thì yêu cầu xếp hàng tới khi mô hình rảnh được dỡ ra, hàng đợi đầy thì trả lỗi 503; sau khi trả lời, mô hình ở lại bộ nhớ năm phút theo mặc định, chỉnh bằng keep_alive hoặc OLLAMA_KEEP_ALIVE [5].
Bên trong, chỉ dẫn hệ thống và tin nhắn được ghép theo TEMPLATE với các biến System, Prompt, Response, rồi runner sinh token tới khi gặp chuỗi stop hoặc hết num_predict [7]; cửa sổ ngữ cảnh do num_ctx hoặc OLLAMA_CONTEXT_LENGTH quyết định [5][7].
Các luồng ra ngoài mà tài liệu nhắc tới gồm tải mô hình qua HTTPS, có thể qua HTTPS_PROXY, và tự tải bản cập nhật trên macOS, Windows [5]; dùng mô hình cloud hoặc tìm kiếm web của Ollama [5][6]; đẩy, kéo mô hình riêng tư bằng khóa gắn với tài khoản [5].
Những gì tài liệu tại commit c1c53629 xác nhận
Cài bằng script trên macOS và Linux, PowerShell trên Windows, hoặc ảnh Docker ollama/ollama [1]. Lệnh ollama mở luồng thiết lập, ollama launch khởi chạy tích hợp agent lập trình, ollama run mở phiên trò chuyện [1][4].
API gốc gồm /api/chat và /api/generate [1][5]; endpoint tương thích OpenAI Chat Completions, OpenAI Responses và Anthropic Messages, mỗi loại là một phần API gốc [4]; thư viện ollama-python và ollama-js [1].
Modelfile nhận FROM từ thư viện, Safetensors hoặc GGUF, kể cả GGUF chia mảnh, cùng các tham số num_ctx, temperature, seed, stop, num_predict, top_k, top_p, min_p, repeat_penalty và draft_num_predict cho giải mã suy đoán (speculative decoding) [7].
Máy chủ được chỉnh qua biến môi trường như OLLAMA_HOST, OLLAMA_ORIGINS, OLLAMA_MODELS, OLLAMA_CONTEXT_LENGTH, OLLAMA_KEEP_ALIVE, OLLAMA_MAX_LOADED_MODELS, OLLAMA_NUM_PARALLEL, OLLAMA_MAX_QUEUE, OLLAMA_FLASH_ATTENTION và OLLAMA_KV_CACHE_TYPE [5]. Phần cloud tách riêng: gọi ollama.com bằng API key, không cần cài đặt, có trang mức dùng, gói dịch vụ và lịch ngừng hỗ trợ mô hình cloud, còn mô hình đã tải về máy không bị ảnh hưởng [6].
Ai hợp với Ollama
Ba nhóm hưởng lợi rõ nhất là nhà phát triển muốn thử mô hình mở trên máy cá nhân, nhóm sản phẩm cần điểm API tương thích OpenAI để nối công cụ có sẵn [4], và bộ phận IT muốn có trợ lý nội bộ mà dữ liệu không rời văn phòng [5].
Lĩnh vực có dữ liệu nhạy cảm hoặc mạng hạn chế như y tế, pháp lý, sản xuất, giáo dục, bán lẻ nhiều điểm có thể dùng Ollama làm lớp suy luận cục bộ. Với bạn đọc phamvanthu.com đang xây hệ thống tri thức cá nhân kiểu bộ não thứ hai, Ollama có thể là lớp mô hình chạy trên máy riêng cho tóm tắt và hỏi đáp, nếu chấp nhận chất lượng của mô hình nhỏ.
Ít hợp với đơn vị phục vụ hàng nghìn người dùng đồng thời trên cụm GPU, cần phân quyền theo người dùng ngay trong máy chủ mô hình, hoặc không có ai vận hành máy chủ.
Đề xuất cho một chuỗi cà phê: trợ lý vận hành chạy trong mạng nội bộ
Phần sau là đề xuất cho một doanh nghiệp giả định: chuỗi cà phê F&B khoảng ba mươi cửa hàng ở TP.HCM và Đà Nẵng, có sổ tay pha chế, quy trình mở và đóng ca, danh mục kiểm tra vệ sinh an toàn thực phẩm, và hàng trăm phản hồi khách mỗi tuần từ ứng dụng giao hàng, mạng xã hội. Nhân viên mới hay hỏi lại điều đã có trong sổ tay; bộ phận marketing tốn công phân loại phản hồi.
Đề xuất đặt một máy chủ Ollama ở văn phòng. Một Modelfile cố định SYSTEM theo giọng thương hiệu và yêu cầu trả lời tiếng Việt, đặt temperature thấp, num_ctx đủ chứa đoạn sổ tay được chèn vào, rồi ollama create thành mô hình nội bộ có tên riêng [7]. Ứng dụng hỏi đáp và công cụ phân loại gọi qua endpoint tương thích OpenAI [4]; giao diện chat có thể lấy từ danh sách tích hợp cộng đồng [1] sau khi rà giấy phép và bảo mật.
Về dữ liệu: đặt OLLAMA_NO_CLOUD=1, không đưa tên hay số điện thoại khách vào prompt, và mở máy chủ cho mạng cửa hàng qua reverse proxy có xác thực thay vì đổi OLLAMA_HOST sang mọi địa chỉ [5]. Phản hồi được gom theo lô cuối ngày để mô hình gắn nhãn chủ đề; quản lý vùng duyệt nhãn trước khi lên báo cáo.
Tiêu chí đo gồm tỷ lệ trả lời đúng theo sổ tay trên 100 câu hỏi do quản lý cửa hàng soạn, độ khớp nhãn so với người gán, thời gian phản hồi giờ cao điểm. Chất lượng tiếng Việt của từng mô hình là ẩn số mà tài liệu Ollama không trả lời.
Cài đặt, cấu hình và cập nhật máy chủ
Trên Linux, Ollama chạy như dịch vụ systemd, biến môi trường đặt qua systemctl edit ollama.service; macOS dùng launchctl setenv; Windows kế thừa biến môi trường của người dùng và hệ thống [5]. macOS và Windows tự tải bản cập nhật, Linux chạy lại script cài đặt [5]; nên thử bản mới trên máy phụ trước.
Ảnh Docker chính thức có sẵn [1]; tăng tốc GPU trong container cần nvidia-container-toolkit trên Linux hoặc Windows qua WSL2, còn Docker Desktop trên macOS không có GPU [5]. Sau proxy doanh nghiệp, đặt HTTPS_PROXY và cài chứng chỉ proxy vào hệ thống, tránh HTTP_PROXY vì có thể làm gián đoạn kết nối của client [5].
ollama ps cho biết mô hình chạy ở đâu, ollama stop hoặc keep_alive bằng 0 dỡ mô hình, yêu cầu rỗng tới /api/generate hay /api/chat nạp trước [5]. Nhật ký nên theo dõi lỗi 503, thời gian nạp, tỷ lệ rơi xuống CPU và dung lượng ổ. Chính sách bảo mật của dự án khuyên cập nhật thường xuyên, bảo vệ truy cập vào máy chủ và theo dõi hoạt động bất thường [3].
Tính bộ nhớ trước khi mua máy: ngữ cảnh, song song và K/V cache
Phần cứng phụ thuộc ba biến số hơn là tên mô hình. Thứ nhất là kích thước: quickstart lấy ví dụ gemma4:e2b, bản tải khoảng 7,2 GB, khuyến nghị 8 GB VRAM trống hoặc bộ nhớ hợp nhất trên Mac; thiếu VRAM thì Ollama dùng RAM hệ thống và chậm hơn [4].
Thứ hai là ngữ cảnh và mức song song. FAQ ghi ngữ cảnh mặc định 4096 token, còn bảng tham số Modelfile ghi num_ctx mặc định 2048 [5][7], nên cần kiểm tra trên bản đang dùng. Song song nhân ngữ cảnh lên theo số yêu cầu, 2K với 4 yêu cầu thành 8K, và RAM cần tăng theo tích OLLAMA_NUM_PARALLEL với OLLAMA_CONTEXT_LENGTH [5].
Thứ ba là K/V cache, vùng nhớ giữ trạng thái chú ý của các token đã xử lý. Khi Flash Attention bật, có thể lượng tử hóa K/V cache sang q8_0, khoảng một nửa bộ nhớ của f16, hoặc q4_0, khoảng một phần tư, đổi lại mất ít hoặc vừa phải độ chính xác; thiết lập này áp dụng toàn cục [5].
Cấu hình nên đi từ nhu cầu: số người dùng đồng thời giờ cao điểm, độ dài tài liệu trong ngữ cảnh, số mô hình nạp cùng lúc. Mô hình vừa một GPU sẽ nằm trên GPU đó, không vừa thì chia trên mọi GPU; muốn nạp đồng thời nhiều mô hình khi suy luận bằng GPU, mỗi mô hình phải vừa trọn VRAM [5].
Bề mặt tấn công của một máy chủ không đòi khóa API
Mặc định an toàn nhất là chỉ lắng nghe 127.0.0.1 [5]. Rủi ro xuất hiện khi đổi OLLAMA_HOST sang 0.0.0.0, vì gọi máy chủ cục bộ không cần khóa API [4] trong khi REST API này dùng để chạy và quản lý mô hình [1]. Nên đặt reverse proxy như Nginx phía trước [5], thêm xác thực, giới hạn tốc độ và chỉ mở cho dải mạng cần thiết.
OLLAMA_ORIGINS quy định nguồn gốc web được gọi chéo, mặc định gồm 127.0.0.1 và 0.0.0.0; muốn tiện ích trình duyệt gọi được phải thêm mẫu như chrome-extension [5], và mở cho mọi tiện ích là quyết định rủi ro. FAQ có hướng dẫn ngrok, Cloudflare Tunnel [5], nhưng đường hầm đưa máy chủ ra Internet nên phải đi kèm xác thực.
FAQ nói chạy cục bộ thì Ollama không thấy prompt hay dữ liệu; với mô hình cloud, nội dung được xử lý để trả lời nhưng không lưu, không ghi log, không dùng để huấn luyện, còn thông tin tài khoản và siêu dữ liệu sử dụng hạn chế thì được thu thập [5][6]. Muốn chắc chỉ dùng cục bộ, đặt disable_ollama_cloud trong server.json hoặc OLLAMA_NO_CLOUD=1 [5].
API key cloud phải nằm ở máy chủ ứng dụng, ngoài mã trình duyệt và kho mã [4][6]; cặp khóa có phần công khai id_ed25519.pub trong thư mục .ollama cho phép đẩy, kéo mô hình riêng tư và chạy mô hình cloud [5], nên phần khóa riêng cần được bảo vệ như danh tính của máy. Tệp mô hình lấy ngoài thư viện chính thức cần kiểm soát nguồn gốc. Lỗ hổng được báo qua email hello@ollama.com thay vì mở issue công khai [3].
MIT cho mã, ISC cho một thư mục con, giấy phép riêng cho từng mô hình
LICENSE gốc tại commit c1c53629 là MIT với dòng bản quyền Copyright (c) Ollama. Điều kiện của MIT là giữ dòng bản quyền và văn bản giấy phép trong các bản sao; tác giả không chịu trách nhiệm bảo hành [2].
Thư mục app/dialog có giấy phép ISC riêng, bản quyền năm 2018 của nhóm tác giả dialog [9], cần giữ khi đóng gói lại ứng dụng desktop. Mã llama.cpp được bước cấu hình tải về theo phiên bản ghim rồi vá thêm [8]; giấy phép của llama.cpp và thư viện GPU như CUDA, ROCm thuộc phạm vi riêng.
Quan trọng nhất, MIT của Ollama không áp dụng cho trọng số mô hình. Modelfile có chỉ thị LICENSE để mô hình mang theo giấy phép của nó [7]; mỗi họ mô hình như Gemma, Qwen hay DeepSeek có điều khoản riêng, có thể giới hạn mục đích dùng hoặc yêu cầu ghi công.
Ollama Cloud chịu gói dịch vụ và chính sách riêng [6]; ứng dụng trong danh sách tích hợp cộng đồng [1] là dự án độc lập. Ở thời điểm thu thập, kho không ở trạng thái lưu trữ (archived) và giấy phép gốc vẫn là MIT; kết luận chỉ áp dụng cho commit đã nêu.
Chi phí thật nằm ở GPU, điện và giờ quản trị
Phần mềm miễn phí theo MIT [2] và mô hình cục bộ không tính phí theo token; chi phí chuyển sang tài sản: máy GPU đủ VRAM cho mô hình và ngữ cảnh, ổ lưu nhiều mô hình mà mỗi bản nhỏ đã cỡ vài GB [4], điện năng, làm mát và băng thông tải mô hình.
Về con người, cần quản trị hệ thống lo cài đặt, cập nhật, theo dõi; người viết Modelfile và tích hợp; người nghiệp vụ soạn bộ câu hỏi đánh giá. Với chuỗi cà phê, giả định một máy chủ ở văn phòng, một kỹ thuật viên dành một phần thời gian mỗi tuần, và quản lý vận hành dành vài buổi soạn, chấm câu hỏi.
Ollama Cloud tính theo gói và mức dùng, xem trên trang giá và trang mức dùng [6]; bài không chép lại mức giá vì chúng thay đổi theo thời gian. Phương án lai, cục bộ cho việc thường ngày và cloud cho tác vụ cần mô hình lớn, chỉ hợp khi dữ liệu tác vụ đó được rời hạ tầng. Nên so chi phí trên mỗi câu trả lời đạt, tính cả khấu hao phần cứng, điện, giờ quản trị và tỷ lệ phải sửa.
Đặt Ollama cạnh các cách phục vụ mô hình khác
Gọi trực tiếp llama.cpp là phương án sát engine nhất; Ollama dựng trên llama.cpp [1][8], thêm quản lý mô hình, API và lập lịch bộ nhớ, đổi lại phải chờ nhịp cập nhật của Ollama để dùng tính năng mới của engine gốc.
Engine hướng thông lượng như vLLM hay SGLang thường được dùng trên cụm GPU với nhiều yêu cầu đồng thời; LocalAI hay LM Studio là những lựa chọn chạy cục bộ khác. Bài không so tốc độ vì không có số liệu đo độc lập; khác biệt về cách tiếp cận là Ollama ưu tiên cài đặt nhanh và mặc định thận trọng, như mỗi mô hình chỉ xử lý một yêu cầu song song nếu không chỉnh [5].
API mô hình đóng của OpenAI, Anthropic, Google cho chất lượng mô hình lớn mà không cần phần cứng, đổi lại dữ liệu rời hạ tầng; Ollama Cloud là điểm giữa với cùng giao diện nhưng mô hình chạy trên hạ tầng Ollama [6]. Dùng giao diện tương thích OpenAI làm lớp trừu tượng [4] giúp đổi phía sau dễ hơn, với điều kiện có bộ kiểm thử tích hợp.
Giới hạn và trường hợp không nên dùng
Gọi máy chủ cục bộ không cần khóa API [4], nên Ollama không hợp để mở thẳng ra mạng nhiều người dùng; phân quyền, nhật ký theo người gọi và hạn mức phải do lớp bên ngoài lo.
Chất lượng do mô hình quyết định: mô hình nhỏ vừa máy văn phòng có thể kém xa mô hình lớn ở tiếng Việt, suy luận nhiều bước hay gọi công cụ, và tiết kiệm bộ nhớ bằng lượng tử hóa K/V cache có đánh đổi độ chính xác [5].
Tài liệu chưa nhất quán về ngữ cảnh mặc định giữa FAQ và Modelfile [5][7]; Windows với GPU Radeon mặc định chỉ nạp một mô hình do giới hạn ROCm [5]; mỗi lần nâng llama.cpp có thể ảnh hưởng nạp mô hình, phát hiện GPU, streaming [8]. Không nên dùng khi cần thông lượng lớn mà thiếu đội vận hành GPU, khi không ai vá máy chủ, hoặc khi giấy phép mô hình không cho phép mục đích sử dụng.
Bốn giai đoạn thử nghiệm có tiêu chí thoát
Chuẩn bị, hai tuần: chọn hai, ba mô hình ứng viên, đọc giấy phép từng mô hình, soạn 100 câu hỏi sổ tay có đáp án và 300 phản hồi đã gán nhãn, chốt máy thử. Các mốc này là khuyến nghị; bài chưa đo gì.
Đo trong phòng thí nghiệm, hai tuần: chạy từng mô hình với cùng Modelfile, ghi tỷ lệ đúng, độ khớp nhãn, độ trễ ở một và nhiều yêu cầu đồng thời, tỷ lệ CPU/GPU theo ollama ps, và thử các mức OLLAMA_NUM_PARALLEL, OLLAMA_KV_CACHE_TYPE [5].
Thí điểm, bốn tuần: mở cho ba đến năm cửa hàng qua reverse proxy có xác thực, cloud tắt [5]; đo số câu hỏi mỗi ngày, tỷ lệ câu trả lời bị báo sai, số lỗi 503 [5], giờ quản trị; quét cổng từ mạng cửa hàng để chắc 11434 không lộ trực tiếp.
Quyết định: đi tiếp nếu đạt ngưỡng thống nhất từ đầu, chẳng hạn không có câu trả lời sai về an toàn thực phẩm trong mẫu kiểm tra; dừng nếu mô hình liên tục bịa quy trình, máy chủ bị truy cập ngoài phạm vi hoặc chi phí phần cứng vượt dự toán.
Kết luận về vị trí của Ollama trong hạ tầng AI doanh nghiệp
Ollama hạ đáng kể rào cản đưa mô hình mở vào hạ tầng riêng: cài nhanh, API quen thuộc, Modelfile để cố định cấu hình, nhiều nút chỉnh bộ nhớ và song song [1][5][7].
Đổi lại là trách nhiệm: máy chủ không đòi khóa API khi gọi cục bộ phải được bảo vệ bằng lớp mạng và proxy, giấy phép từng mô hình phải đọc riêng, ranh giới với Ollama Cloud phải được cấu hình chủ động [4][5][6].
Với chuỗi cà phê hay doanh nghiệp nào khác, Ollama là lớp hạ tầng; giá trị nằm ở dữ liệu nghiệp vụ, bộ câu hỏi đánh giá và người chịu trách nhiệm nội dung.
Nguồn, commit và giới hạn phương pháp
Bài thuộc nhóm Mô hình và suy luận AI. Căn cứ chọn Ollama là một bản lưu GitHub Trending theo ngôn ngữ do bên độc lập duy trì: ngày 05/01/2026, dự án đứng thứ 10 trong danh sách Go [10]; tính đến 10/10/2026, dữ liệu tuyển chọn đếm được 62 lần xuất hiện. Bản lưu chỉ phủ Python, Go, JavaScript, Swift và không có ảnh chụp ngày 03/09 lẫn 12/10, nên đây là tuyển chọn biên tập, không phải Top 100 chính thức.
Nguồn kỹ thuật lấy tại commit c1c536297f5bdbb3aef028df6f09bf81cf260497 (12/10/2026), kiểm tra cùng ngày: README, LICENSE, SECURITY.md, quickstart, FAQ, trang Cloud, tài liệu Modelfile, tài liệu cập nhật llama.cpp và giấy phép app/dialog [1][2][3][4][5][6][7][8][9]. Danh sách tệp còn một giấy phép riêng ở cmd/bench/prompts mà bài chưa đọc; tài liệu API chi tiết, GPU, Docker và MLX cũng chưa được đọc.
Phương pháp là đọc tài liệu với trợ giúp của công cụ AI; bài không phải công trình khoa học qua phản biện, không cài Ollama, không tải mô hình, không đo độ trễ hay chất lượng. Các con số như cổng 11434, dung lượng 7,2 GB hay giá trị mặc định của biến môi trường lấy từ tài liệu được trích; phương án cho chuỗi cà phê, giả định nguồn lực và bốn giai đoạn thử nghiệm thuộc phần khuyến nghị của bài.
Xem mã nguồn Ollama trên GitHub