Thực hành AI Local · Bài 8

Hỏi đáp tài liệu nội bộ bằng AnythingLLM

Hướng dẫn từng bước dựng trợ lý hỏi đáp quy trình, chính sách, tài liệu sản phẩm của công ty bằng AnythingLLM (giấy phép MIT), dùng Ollama làm model trả lời. Khi model và embedder đều chạy trên máy, tài liệu nội bộ không rời máy. Dữ kiện theo tài liệu chính thức AnythingLLM v1.18.0, kiểm tra ngày 20–21/10/2026.

Cập nhật 21/10/2026⏱ 11 phút đọcCài đặt & bắt đầuNgười mới → Trung cấp

Câu hỏi lặp lại mỗi ngày, tài liệu thì không muốn đưa ra ngoài

Nhân viên mới hỏi quy trình đổi trả, kế toán hỏi lại quy định tạm ứng, sale tìm mãi không thấy bảng thông số. Câu trả lời đều nằm trong tệp PDF, Word của công ty, nhưng đưa toàn bộ tài liệu nội bộ lên dịch vụ đám mây thì ban giám đốc chưa yên tâm. (Tình huống minh hoạ.)

Bài này dựng một trợ lý hỏi đáp tài liệu chạy hoàn toàn trên máy bằng AnythingLLM và Ollama, từng bước từ cài đặt tới kiểm tra. Muốn so sánh với Open WebUI Knowledge và các việc khác như tóm tắt, làm slide, xem AI Local làm slide, tài liệu, Excel.

Hỏi đáp tài liệu nội bộ bằng AnythingLLM là gì?

Hỏi đáp tài liệu nội bộ bằng AnythingLLM là nạp tài liệu công ty vào một workspace của AnythingLLM, để ứng dụng chia tài liệu thành đoạn, tìm đúng đoạn liên quan tới câu hỏi rồi đưa cho model trên Ollama trả lời kèm nguồn, mọi bước chạy trên máy của bạn.

Luồng hỏi đáp tài liệu nội bộ bằng AnythingLLM: tài liệu quy trình, chính sách được chia đoạn 1000 ký tự, embed bằng embedder đa ngôn ngữ multilingual-e5-small hoặc bge-m3 qua Ollama, lưu vào kho vector LanceDB trên máy, Ollama trả lời câu hỏi của nhân viên ở chế độ Query kèm mục Sources ghi phần trăm khớp; mọi bước chạy trên máy
Hình: Tài liệu đi qua những bước nào trước khi thành câu trả lời (minh hoạ)

Cách làm này gọi là RAG (truy xuất rồi trả lời), gồm ba thành phần:

Thành phầnVai tròGợi ý trong bài
LLM (model trả lời)Đọc đoạn tài liệu tìm được và viết câu trả lờiModel chat trên Ollama
EmbedderBiến đoạn văn và câu hỏi thành vector để so khớp ý nghĩamultilingual-e5-small có sẵn, hoặc model embedding đa ngôn ngữ qua Ollama
Vector DBLưu vector để tìm nhanhLanceDB mặc định, chạy trên máy, không cần cấu hình

Nguồn: RAG trong AnythingLLM · LanceDB

Chọn bản Desktop hay Docker

DesktopDocker
Dành choMột người, trên máy cá nhânCả nhóm, trên một máy chung
Truy cậpỨng dụng trên máy, không có giao diện webTrình duyệt, cổng 3001
Tài khoản, phân quyềnKhôngCó (Multi-User Mode)
Widget nhúng websiteKhôngCó

Bản mới nhất lúc kiểm tra là v1.18.0 (13/10/2026). Từ bản này, engine model tích hợp sẵn của Desktop đổi từ Ollama sang Lemond (bản nhúng của Lemonade, chạy trên llama.cpp). Người đang dùng bản cũ sẽ thấy lời nhắc "Engine upgrade": nâng cấp sẽ xoá engine cũ cùng các model đã tải bằng nó, giữ nguyên workspace, lịch sử chat, tài liệu. Bài này dùng Ollama cài riêng làm nhà cung cấp model, để một bộ model dùng chung cho nhiều công cụ.

Cấu hình khuyến nghị theo docs: RAM 16GB, CPU 8 nhân; Windows nên có GPU 8–12GB VRAM trở lên.

Nguồn: Desktop · Changelog v1.18.0 · Yêu cầu hệ thống

Chuẩn bị trước khi cài

Nguồn: AnythingLLM – Ollama · Kết nối Ollama · Ollama – qwen3.5 · Loại tệp hỗ trợ

Bước 1: Cài AnythingLLM Desktop

Lệnh trên máy tính của bạnDán vào Terminal Linux; nên mở installer.sh đọc trước khi chạy
curl -fsSL https://cdn.anythingllm.com/latest/installer.sh -o installer.sh
chmod +x installer.sh
./installer.sh

Nguồn: Cài trên macOS · Cài trên Windows · Cài trên Linux

Bước 2: Chọn Ollama làm model trả lời

  1. Mở Settings → AI Providers → LLM, chọn Ollama.
  2. Ô Ollama Base URL: http://127.0.0.1:11434 (Ollama trên cùng máy, cài đặt mặc định).
  3. Ô Ollama Model chỉ hiện danh sách khi URL đúng; chọn model chat đã tải, ví dụ qwen3.5:9b.
  4. Bấm Show advanced settings nếu cần: Ollama Keep Alive (mặc định 5 phút giữ model trong bộ nhớ), Model context window (để trống thì tự nhận; nhận thất bại sẽ lấy 4096; AnythingLLM tự giới hạn ở 16.384). Ô Authentication Token chỉ dùng khi Ollama nằm sau máy chủ có xác thực.
Tên menu và tên ô trong bài lấy theo docs và mã nguồn giao diện của AnythingLLM (bản v1.18.0); docs không có trang chụp màn hình từng bước. Giao diện có thể đổi nhẹ giữa các phiên bản, hãy đối chiếu trên màn hình của bạn.

AnythingLLM có ba cấp chọn model: System LLM cho cả hệ thống, Workspace LLM ghi đè riêng từng workspace, Agent LLM cho chế độ agent. Với tài liệu dài, nhớ tăng context phía Ollama, xem mục đặt độ dài context.

Nguồn: Cấp LLM · Ô cấu hình Ollama (mã nguồn) · Nhãn giao diện · Ollama – context

Bước 3: Chọn embedder hợp tiếng Việt

Embedder mặc định "AnythingLLM Embedder" dùng model all-MiniLM-L6-v2, chạy bằng CPU, tự tải khoảng 25MB, nhưng docs ghi model này được huấn luyện chủ yếu trên tiếng Anh. Với tài liệu tiếng Việt, vào Settings → AI Providers → Embedder và chọn một trong hai hướng:

Lựa chọnCách chọnGhi chú
multilingual-e5-small (có sẵn)Giữ "AnythingLLM Embedder", đổi model sang multilingual-e5-smallHơn 100 ngôn ngữ, có tiếng Việt; giấy phép MIT; khoảng 487MB, nặng hơn bản mặc định (khoảng 25MB)
Embedding qua OllamaChọn nhà cung cấp Ollama, tải trước ví dụ ollama pull bge-m3bge-m3 (MIT, khoảng 1,2GB) hoặc qwen3-embedding (Apache-2.0) đều ghi hỗ trợ 100+ ngôn ngữ. Danh sách hiện cả model chat lẫn model embedding, phải chọn đúng model embedding
Chọn embedder trước khi nạp tài liệu. Embedder áp dụng cho toàn hệ thống; giao diện cảnh báo đổi embedder sẽ đặt lại mọi tài liệu đã embed ở tất cả workspace. Vector DB cũng vậy: đổi sang DB khác thì phải embed lại.

Cách chia đoạn nằm ở Settings → AI Providers → Text Splitter & Chunking: Chunk Size mặc định 1000 ký tự, Overlap 20; thay đổi chỉ áp dụng cho tài liệu embed sau đó. Người mới nên giữ mặc định.

Nguồn: Embedder tích hợp · Danh sách model native · multilingual-e5-small · Embedder qua Ollama · bge-m3 · qwen3-embedding · Chia đoạn

Bước 4: Tạo workspace, nạp tài liệu, bật chế độ Query

  1. Tạo một workspace theo chủ đề, ví dụ "Quy trình nội bộ" (ví dụ minh hoạ). Mỗi phòng ban nên có workspace riêng.
  2. Tải tài liệu lên. Bước này chỉ chuyển tệp thành chữ.
  3. Chọn tài liệu, bấm Move to Workspace rồi Save and Embed: lúc này tài liệu mới được chia đoạn, embed và lưu vào LanceDB. Kéo tệp thẳng vào khung chat thì khác: tệp chỉ dùng cho cuộc chat đó.
  4. Tài liệu ngắn mà quan trọng (như bảng giá) có thể ghim để đưa toàn văn vào mỗi câu hỏi.
  5. Bấm bánh răng của workspace → Chat Settings → Chat mode chọn Query: chỉ trả lời khi tìm thấy trong tài liệu. (Chế độ Chat trộn thêm kiến thức chung của model; Agent là mặc định cho workspace mới.)
  6. Dán chỉ dẫn dưới đây vào ô System Prompt, sửa ô Query mode refusal response thành câu tiếng Việt của bạn.
Chỉ dẫn cho workspace hỏi đáp nội bộ (ví dụ minh hoạ)Copy rồi dán vào ô System Prompt; thay phần trong <…>
Bạn là trợ lý nội bộ của <tên công ty>, chỉ trả lời dựa trên tài liệu trong workspace này.
- Trả lời bằng tiếng Việt, ngắn gọn, đúng thuật ngữ của công ty.
- Nếu tài liệu không có thông tin, nói rõ "Tài liệu chưa có nội dung này" và gợi ý hỏi <bộ phận phụ trách>.
- Không tự đoán giá, chính sách, con số; luôn nêu tên tài liệu đã dùng.
- Không ghi lại hay yêu cầu mật khẩu, khoá, thông tin thanh toán.

Cùng trang có Max Context Snippets (mặc định 4, docs khuyên 4–6) và Document similarity threshold (No restriction, Low, Medium, High).

Nguồn: Chat với tài liệu · Chế độ chat · Nhãn giao diện

Kiểm tra đã chạy đúng

Dùng cho cả nhóm: bản Docker

Trên máy chung (Linux hoặc Mac), chạy lệnh nguyên văn theo docs. Trang docs có thêm bản PowerShell cho Windows.

Lệnh trên máy tính của bạnDán vào Terminal trên máy chung đã cài Docker
export STORAGE_LOCATION=$HOME/anythingllm && \
mkdir -p $STORAGE_LOCATION && \
touch "$STORAGE_LOCATION/.env" && \
docker run -d -p 3001:3001 \
--cap-add SYS_ADMIN \
--name anythingllm \
-v ${STORAGE_LOCATION}:/app/server/storage \
-v ${STORAGE_LOCATION}/.env:/app/server/.env \
-e STORAGE_DIR="/app/server/storage" \
mintplexlabs/anythingllm
Dòng -v ${STORAGE_LOCATION}:/app/server/storage là bắt buộc: thiếu nó, toàn bộ dữ liệu sẽ mất khi container khởi động lại. Với công ty, nên thay mintplexlabs/anythingllm (tag latest, build theo từng commit) bằng tag phiên bản dạng v*.*.* để chủ động lúc nâng cấp.
  1. Mở http://localhost:3001, vào Settings → Security, bấm Enable Multi-User Mode và tạo tài khoản admin. Lưu ý: đã bật thì không quay lại chế độ một người dùng.
  2. Tạo tài khoản theo vai trò: Admin toàn quyền; Manager làm mọi việc trừ cài đặt LLM, Embedder, Vector DB; Default chỉ chat trong workspace được thêm vào. Chỉ Admin đặt lại được mật khẩu.
  3. Nối Ollama từ trong container: Windows, macOS dùng http://host.docker.internal:11434; Linux dùng http://172.17.0.1:11434.
  4. Nhân viên mở http://<IP-máy-chung>:3001 trong mạng nội bộ; nhớ mở tường lửa cổng 3001 cho mạng nội bộ.
AnythingLLM bản Docker cho cả nhóm trong mạng nội bộ: máy chung chạy AnythingLLM cổng 3001 và Ollama cổng 11434, ba vai trò Admin, Manager, Default; bật Multi-User Mode trước khi cho máy khác vào qua IP máy cổng 3001; không mở ra Internet; làm việc từ xa qua VPN như Tailscale, hạn chế tunnel công khai
Hình: Một máy chung, mỗi người một tài khoản (minh hoạ)

Mọi người vào được workspace sẽ thấy các tài liệu đã embed trong đó, nên chia workspace theo quyền xem tài liệu.

Nguồn: Docker · Các tag image · Nhiều người dùng · Kết nối Ollama · Truy cập từ máy khác

Lỗi thường gặp và cách xử lý

Hiện tượngNguyên nhân thường gặpCách xử lý
Ô Ollama Model trốngOllama chưa chạy, hoặc sai Base URLMở ứng dụng Ollama hoặc ollama serve; kiểm tra URL
connect ECONNREFUSED 172.17.0.1:11434Container không gọi được Ollama trên máyDùng đúng địa chỉ theo hệ điều hành ở mục Docker; xem trang xử lý lỗi kết nối Ollama của AnythingLLM
Trả lời "không có thông tin" dù tài liệu cóChưa Save and Embed, ngưỡng tìm đoạn quá cao, hoặc hỏi khác từ trong tài liệuEmbed lại vào workspace; hạ threshold về No restriction để thử; hỏi bằng đúng từ trong tài liệu
Tìm sai đoạn với câu hỏi tiếng ViệtĐang dùng embedder tiếng Anh mặc địnhĐổi sang multilingual-e5-small hoặc bge-m3, rồi embed lại
Docker báo unable to open database fileThư mục lưu trữ (dưới /mnt, /data, /srv, /opt) sai quyềnsudo chown -R 1000:1000 ${STORAGE_LOCATION}; không dùng chmod -R 777

Nguồn: Kết nối Ollama · Docker · Chế độ chat

Cập nhật, sao lưu và gỡ cài đặt

Xoá thư mục lưu trữ là xoá vĩnh viễn tài liệu đã nạp và lịch sử chat. Kiểm tra bản sao lưu trước khi xoá.

Nguồn: Nơi lưu dữ liệu · Cập nhật · Gỡ cài đặt

An toàn: giữ dữ liệu nội bộ ở lại trên máy

Nguồn: Desktop – không mở ra Internet · Truy cập từ xa · Advisory bảo mật · Telemetry

Bắt đầu từ đâu?

  1. Hôm nay: cài Desktop, nối Ollama, chọn multilingual-e5-small, nạp 5–10 tài liệu quy trình, bật Query.
  2. Tuần này: cho 2–3 người hỏi thử, ghi lại câu trả lời sai, sửa tài liệu nguồn cho rõ ràng hơn.
  3. Khi đã ổn: chuyển sang bản Docker trên máy chung, chia workspace theo phòng ban, đặt người phụ trách cập nhật.

Muốn đưa trợ lý vào quy trình tự động hay chatbot, xem Ghép n8n với Ollama làm chatbot; muốn cả nhóm chat chung một giao diện, xem Open WebUI cho cả nhóm. Muốn được tư vấn hoặc cài đặt AI Local theo nhu cầu riêng, bạn có thể đăng ký Tư vấn 1-1 hoặc Coaching 1-1 cho doanh nghiệp; chi phí báo sau buổi tư vấn.

Đọc tiếp: n8n và Ollama làm chatbot →

Câu hỏi thường gặp

AnythingLLM có mất phí không?

Bản Desktop và bản Docker dùng giấy phép MIT, không thu phí phần mềm. Chi phí nằm ở máy chạy model, điện và công vận hành. Nếu bạn chọn nhà cung cấp model đám mây trong AnythingLLM thì sẽ phát sinh phí API của nhà cung cấp đó.

Vì sao nên đổi embedder khi tài liệu là tiếng Việt?

Embedder mặc định all-MiniLM-L6-v2 được huấn luyện chủ yếu trên tiếng Anh. Với tài liệu tiếng Việt, nên chọn multilingual-e5-small (hơn 100 ngôn ngữ, có sẵn trong AnythingLLM) hoặc một model embedding đa ngôn ngữ qua Ollama. Hãy chọn trước khi nạp tài liệu, vì đổi embedder về sau phải embed lại toàn bộ.

Dữ liệu có thật sự không rời máy không?

Có, khi cả model trả lời (Ollama) và embedder đều chạy trên máy, vector lưu trong LanceDB trên máy. Dữ liệu sẽ rời máy nếu bạn chọn nhà cung cấp đám mây, bật agent duyệt web, hoặc mở máy ra Internet. Telemetry ẩn danh tắt được trong cài đặt hoặc bằng DISABLE_TELEMETRY=true.

Desktop và Docker khác nhau thế nào?

Desktop dành cho một người, không có giao diện web. Docker dành cho nhiều người dùng có tài khoản, mật khẩu, phân quyền, truy cập bằng trình duyệt ở cổng 3001, và có widget nhúng web.

Trợ lý trả lời "không có thông tin" dù tài liệu có ghi?

Ở chế độ Query, trợ lý chỉ trả lời khi tìm thấy đoạn phù hợp. Hãy hỏi bằng đúng từ có trong tài liệu, kiểm tra tài liệu đã được embed vào workspace, hạ ngưỡng Document similarity threshold, hoặc ghim tài liệu ngắn quan trọng.

Tài liệu liên quan

Xem tất cả tài liệu hướng dẫn →

Đăng ký Tư vấn 1-1 về AI Local – Nguyễn Đức, Aduca
Bước tiếp theo

Đăng ký Tư vấn 1-1 về AI Local

Chuyên gia Aduca cùng bạn xem nhu cầu, máy đang có và dữ liệu cần bảo vệ, rồi đề xuất nên chạy AI Local, dùng đám mây hay kết hợp. Dịch vụ cài AI Local nằm trong gói Tư vấn 1-1 hoặc Coaching 1-1; chi phí báo sau buổi tư vấn.

Về AducaChuỗi bài do đội ngũ Aduca biên soạn từ kinh nghiệm đào tạo và triển khai AI Agent cho Marketing – Sales. Aduca Academy do Nguyễn Đức – Chủ tịch Aduca Group sáng lập; ông kinh doanh thương mại điện tử từ 2012, chạy quảng cáo Facebook từ 2014 và đào tạo từ 2016. Phần thực hành từng bước nằm trong các thư mục OpenClaw, Hermes Agent, Claude, ChatGPT và n8n, Second Brain.

Nguồn tham khảo

Lịch sử cập nhật

Miễn trừ trách nhiệm

Bài viết thuộc chuỗi kiến thức của Công ty Cổ phần Giáo dục Aduca, chia sẻ miễn phí cho mục đích học tập. Thông tin kỹ thuật đối chiếu với tài liệu chính thức của các dự án và nền tảng tại ngày cập nhật (có ghi nguồn); phần nhận định là quan điểm của Aduca. OpenClaw, Hermes Agent, Claude (thương hiệu của Anthropic), ChatGPT (thương hiệu của OpenAI), n8n (thương hiệu của n8n GmbH), các phần mềm chạy model và các model AI mở (Ollama, LM Studio, Qwen, Gemma, gpt-oss…), Obsidian, Notion, phương pháp Building a Second Brain (Tiago Forte) cùng các phần mềm, dịch vụ nêu trong bài thuộc về chủ sở hữu tương ứng, không thuộc Aduca; Aduca không phải đối tác chính thức của các công ty này. Tính năng, gói và giá có thể thay đổi bất cứ lúc nào – hãy kiểm tra trang chính thức trước khi mua. Kết quả áp dụng phụ thuộc quy trình, dữ liệu và con người của từng doanh nghiệp; bài viết không cam kết doanh thu hay hiệu quả cụ thể. © 2026 Aduca — được trích dẫn khi ghi rõ nguồn aduca.vn.