Bỏ qua để đến nội dung

Thiết lập: LLM cục bộ

TomoriBot có thể sử dụng bất kỳ máy chủ LLM cục bộ nào tương thích với OpenAI để tạo văn bản và tạo vector nhúng. Hướng dẫn này sẽ đi qua quy trình bằng cách sử dụng Ollama làm ví dụ vì đây là công cụ dễ bắt đầu nhất.

Khi bạn đã quen thuộc hơn, hãy cân nhắc một máy chủ linh hoạt hơn như KoboldCPP và sử dụng các model mã nguồn mở trực tiếp từ Hugging Face, vì việc lựa chọn và trải nghiệm các model do cộng đồng tạo ra là một nửa niềm vui khi tự vận hành AI của riêng bạn.

Cài đặt Ollama. Các ví dụ dưới đây sử dụng Gemma 4 của Google nhưng bất kỳ model nào trong thư viện của Ollama đều hoạt động.

Các model cục bộ chạy trong VRAM của GPU (bộ nhớ tích hợp trên card đồ họa của bạn, tách biệt với RAM hệ thống). Quy tắc ngón tay cái: một model cần lượng VRAM trống ít nhất bằng dung lượng tải xuống của nó, cộng thêm khoảng 1-2 GB dung lượng dự phòng cho ngữ cảnh cuộc trò chuyện. Hãy chọn phiên bản Gemma 4 lớn nhất vừa vặn với card đồ họa của bạn:

VRAM GPU của bạnBản phù hợp nhấtDung lượng tải xuống (ước tính)
~8 GBgemma4:e2b7.2 GB
~12 GBgemma4:12b7.6 GB
~16 GBgemma4:12b (vừa hoàn toàn), hoặc gemma4:26b7.6 / 18 GB
24 GB+gemma4:26b hoặc gemma4:31b18 / 20 GB

Dung lượng tải xuống là các kích thước lượng hóa mặc định của Ollama; xem trang model để biết số liệu chính xác. Bạn không chắc mình có bao nhiêu VRAM? Trên Windows: Task Manager → Performance → GPU, đọc mục “Dedicated GPU memory.”

Tải kích thước bạn đã chọn và khởi động máy chủ:

Terminal window
ollama pull gemma4:12b # thay bằng thẻ tag phù hợp với VRAM của bạn
ollama serve # lắng nghe tại http://127.0.0.1:11434

Xác nhận có thể kết nối từ máy mà TomoriBot đang chạy:

Terminal window
curl http://127.0.0.1:11434/v1/models

Ghi lại thẻ tag chính xác đã cài đặt, vì đây chính là Model Name bạn sẽ đăng ký:

Terminal window
ollama list
# NAME ID SIZE
# gemma4:12b a1b2c3d4... 7.6 GB

Chạy /providers (toàn máy chủ) hoặc /personal providers (chỉ riêng bạn), chọn Add New Custom Endpoint, và nhập:

TrườngGiá trị cho Ollama
endpoint_labelTên bạn chọn, ví dụ home-ollama
API CompatibilityOpenAI-Compatible (khuyến nghị) hoặc Ollama
endpoint_urlhttp://127.0.0.1:11434/v1 cho OpenAI-Compatible · http://127.0.0.1:11434 cho Ollama
auth_token(để trống)

Sau khi lưu kết nối, chọn kết nối đó và chọn + Add new Text Model từ menu dropdown model của nó. Điền thông tin:

  • Model Name (ID API chính xác): gemma4:12b, thẻ tag chính xác từ ollama list.
  • Context Window Override: tùy chọn, chỉ dành cho Ollama / KoboldCPP. Đặt giá trị này (ví dụ 8192, 16384) để tăng num_ctx mặc định của Ollama, vì mặc định khá nhỏ có thể cắt bớt ngữ cảnh dài của TomoriBot. Để trống để sử dụng mặc định của máy chủ.
  • Các nút bật tắt: bật Tools nếu model hỗ trợ function calling; chỉ bật Image Understanding cho model có khả năng nhìn; Structured Output nếu model xử lý JSON schema tốt. Đối với ví dụ của chúng ta, Gemma 4 hỗ trợ tất cả các tính năng đó, vì vậy hãy bật tất cả.

TomoriBot sẽ xác thực kết nối khi bạn lưu. Nếu báo lỗi không thể kết nối tới endpoint, nguyên nhân thông thường là do không khớp giữa localhost/Docker hoặc thiếu/thừa /v1 (xem các lưu ý).

Việc thêm model sẽ tự động đặt nó làm model text đang hoạt động. Hãy bắt đầu trò chuyện để trải nghiệm. Nếu vì lý do nào đó model chưa hoạt động, hãy chạy /config > Models > Switch Models và chọn model mới đăng ký của bạn.

Việc đăng ký không bao giờ làm thay đổi bất kỳ model nào khác ngoài text. Nếu bạn đã đánh dấu Image Understanding để endpoint này hoạt động như một trình hỗ trợ thị giác cho model trò chuyện không có khả năng nhìn ảnh, hãy chọn nó một cách rõ ràng bằng /config > Models > Switch Models; mọi endpoint text bạn đã đăng ký với nút bật đó đều xuất hiện ở đó. Lưu ý rằng model thị giác chỉ được hỏi ý kiến khi model trò chuyện không thể nhìn thấy hình ảnh, vì vậy việc đặt model thị giác phía sau một model trò chuyện có sẵn khả năng nhìn ảnh sẽ không có tác dụng cho đến khi bạn chuyển đổi.

Chọn endpoint đã lưu và sử dụng menu dropdown model để thêm một model Embedding (ví dụ ollama pull nomic-embed-text, Model Name nomic-embed-text:latest). Các tính năng RAG cũng yêu cầu pgvector được cài đặt trong Postgres. Bạn có thể xem hướng dẫn cài đặt thủ công tại đây.

Tất cả các máy chủ này đều sử dụng cùng một quy trình, chỉ có URL và một vài lưu ý là thay đổi.

  • Khởi động với chế độ tương thích OpenAI được bật (tích hợp sẵn). Mặc định: http://127.0.0.1:5001/v1.
  • API Compatibility: OpenAI-Compatible. endpoint_url: http://127.0.0.1:5001/v1.
  • Hỗ trợ Context Window Override tương tự như Ollama.
  • Nạp các model GGUF; Model Name là bất kỳ tên nào mà model đã nạp báo cáo (thường là tên tệp không có phần mở rộng), kiểm tra phản hồi từ /v1/models của KoboldCPP.
  • Xây dựng hoặc cài đặt llama.cpp, sau đó phục vụ tệp GGUF bằng máy chủ tương thích OpenAI đi kèm:
    Terminal window
    llama-server -m model.gguf -c 16384 --host 0.0.0.0 --port 8080
  • API Compatibility: OpenAI-Compatible. endpoint_url: http://127.0.0.1:8080/v1.
  • Đặt kích thước cửa sổ ngữ cảnh khi khởi chạy bằng -c, vì tùy chọn Context Window Override trong modal chỉ dành cho Ollama/KoboldCPP và không có tác dụng ở đây.
  • Model Name là bất kỳ tên nào mà /v1/models báo cáo; bạn có thể đặt tên gọn gàng bằng --alias my-model.
  • Nếu bạn khởi động với --api-key, hãy nhập khóa đó vào auth_token.
  • Trong LM Studio, khởi động Local Server (thẻ Developer). Mặc định: http://127.0.0.1:1234/v1.
  • API Compatibility: OpenAI-Compatible. endpoint_url: http://127.0.0.1:1234/v1.
  • Model Name là định danh mà LM Studio hiển thị cho model đã nạp.
  • Phục vụ bằng máy chủ tương thích OpenAI: vllm serve <model>http://127.0.0.1:8000/v1.
  • API Compatibility: OpenAI-Compatible. endpoint_url: http://127.0.0.1:8000/v1.
  • Nếu bạn khởi chạy vLLM với --api-key, hãy nhập khóa đó vào auth_token.
  • Model Name là đường dẫn/tên model được phục vụ (khớp với /v1/models).
  • Chạy proxy LiteLLM; mặc định: http://127.0.0.1:4000/v1.
  • API Compatibility: OpenAI-Compatible. endpoint_url: http://127.0.0.1:4000/v1.
  • Model Name là bí danh model bạn đã định nghĩa trong cấu hình của LiteLLM.
  • Nếu proxy yêu cầu khóa chính, hãy đặt khóa đó trong auth_token.

Có hướng dẫn chuyên biệt riêng do giải pháp thay thế prompt system: Thiết lập: ChatMock.

Bên cạnh thư viện tuyển chọn của Ollama, Hugging Face lưu trữ hàng nghìn model cộng đồng. KoboldCPP, llama.cpp và LM Studio đều có thể nạp định dạng GGUF, là gói tệp đơn lẻ mà bạn tải về và trỏ máy chủ vào đó.

  1. Tìm tệp GGUF. Tìm kiếm trên Hugging Face tên model của bạn kèm từ khóa “GGUF”, các tác giả lượng hóa cộng đồng như bartowski thường xuất bản các bản dựng GGUF cho hầu hết các model phổ biến ngay sau khi phát hành. Hãy ưu tiên biến thể instruct/chat (tên kết thúc bằng -Instruct hoặc -Chat); các model nền tảng không thể duy trì cuộc trò chuyện.
  2. Chọn mức lượng hóa phù hợp với VRAM của bạn. Một kho lưu trữ sẽ liệt kê cùng một model ở nhiều mức lượng hóa, và dung lượng tệp ≈ lượng VRAM nó cần (cộng thêm ~1-2 GB cho ngữ cảnh, cùng quy tắc như bảng kích thước ở trên). Tải tệp .gguf đơn lẻ cho lựa chọn của bạn.
  3. Nạp model. Khởi động KoboldCPP hoặc llama-server với tệp đó (xem Các máy chủ khác), sau đó đăng ký endpoint trong Discord như bình thường.
  • Mỗi nhãn chỉ tương ứng với một mục endpoint. Để đăng ký nhiều model dùng chung một máy chủ, hãy chọn endpoint đã lưu và sử dụng lại menu dropdown model của nó. Sử dụng các nhãn riêng biệt cho các máy chủ hoặc giao thức API thực sự khác nhau.
  • Model Name là định danh API. Đây là chuỗi chính xác được gửi đến máy chủ. Điền sai tên này là nguyên nhân phổ biến nhất dẫn đến tình trạng “kết nối được nhưng phản hồi thất bại”.
  • Chạy TomoriBot trong Docker? localhost bên trong container không phải là máy chủ lưu trữ của bạn. Hãy sử dụng http://host.docker.internal:<port> (Windows/macOS) hoặc IP mạng LAN của máy chủ, và liên kết máy chủ model với 0.0.0.0.