Cách tự build AI agent trên VPS của bạn
Tìm hiểu cách xây dựng AI agent bằng cách kết hợp language model với tools, MCP và memory để tạo vòng lặp xử lý tác vụ tự động ngay trên VPS của bạn.
AI agent thực sự là gì
Một AI agent là một vòng lặp bao quanh một language model. Model đọc tình huống, quyết định một hành động, code của bạn thực hiện hành động đó, kết quả được gửi lại cho model, và vòng lặp chạy lại cho đến khi hoàn thành tác vụ. Đó là ý tưởng cốt lõi. Một chatbot thông thường chỉ trả lời một lần rồi dừng lại. Một agent sẽ tiếp tục chạy, thực hiện các hành động thực tế giữa các lượt của nó, cho đến khi đạt được mục tiêu bạn giao.
Hành động là phần quan trọng nhất. Bản thân một language model chỉ tạo ra văn bản. Nó không thể đọc file, gọi API, hoặc chạy một command. Một agent cung cấp cho model một bộ công cụ (tools) mà nó được phép sử dụng, và một cách để yêu cầu chúng. Khi model muốn tìm kiếm web hoặc ghi một file, nó không tự làm việc đó. Nó phát ra một yêu cầu có cấu trúc, code của bạn chạy tool đó, và câu trả lời được gửi lại như là nội dung tiếp theo mà model sẽ đọc. Model cung cấp khả năng phán đoán; server của bạn cung cấp "đôi tay".
Không phải tác vụ nào cũng cần agent, và việc mặc định dùng agent là một sai lầm phổ biến. Nếu các bước đã được biết trước, một script thông thường sẽ đơn giản, nhanh hơn và đáng tin cậy hơn. "Fetch trang này mỗi giờ và gửi email báo giá cho tôi" là một scheduled job, không phải là một agent. Hãy xây dựng một agent khi lộ trình không cố định trước, khi model cần xem xét những gì nó tìm thấy để quyết định bước tiếp theo. Chi phí của một agent là sự không thể dự đoán, vì vậy chỉ nên chấp nhận khi sự linh hoạt mang lại giá trị xứng đáng.
Tools: cách một agent hành động
Một tool là bất kỳ khả năng nào bạn giao cho model, được mô tả đủ tốt để nó biết khi nào cần dùng đến. Đọc một file, chạy một shell command, truy vấn một database, gửi một tin nhắn: mỗi thứ là một tool với một cái tên, một mô tả ngắn và một danh sách các input. Bạn định nghĩa các tools; model quyết định khi nào gọi chúng.
Cơ chế này giống nhau ở mọi nơi, bất kể bạn dùng model nào. Model trả về một yêu cầu có cấu trúc chứa tên tool và các input của nó. Code của bạn nhận yêu cầu đó, chạy function tương ứng, và gửi kết quả lại trong lượt tiếp theo. Model đọc kết quả và sẽ gọi một tool khác hoặc viết câu trả lời cuối cùng. Function calling là phần hạ tầng bên dưới mọi agent, và vòng lặp điều khiển nó chỉ gồm vài dòng code thông thường.
Đây cũng là nơi bạn nắm quyền kiểm soát. Model có thể yêu cầu chạy một command, nhưng không có gì được chạy cho đến khi code của bạn quyết định chạy nó. Khoảng trống đó là nơi bạn đặt các prompt phê duyệt cho các hành động nguy hiểm, các giới hạn cho những gì một tool có thể chạm tới, và một log ghi lại mọi thứ agent đã làm. Một agent chỉ an toàn bằng chính các tools bạn giao cho nó và các bước kiểm tra bạn đặt ra trước chúng.
MCP: cách tiêu chuẩn để kết nối tools
Viết một integration mới cho mỗi service bằng tay sẽ rất tốn thời gian. Model Context Protocol, hay MCP, là một tiêu chuẩn mở giải quyết vấn đề này. Thay vì code một tool mới cho file, database và issue tracker của bạn, bạn trỏ agent tới một MCP server đã cung cấp sẵn những thứ đó dưới dạng tools. Agent nói một protocol duy nhất; server thực hiện việc giao tiếp với hệ thống thực tế.
Lợi ích là khả năng tái sử dụng. Một MCP server mà người khác viết cho một service bạn đang dùng sẽ có sẵn cho agent của bạn mà không cần code integration mới, và một server bạn viết có thể được sử dụng bởi bất kỳ agent nào nói ngôn ngữ protocol đó. Trên một VPS, điều này rất quan trọng, vì bạn có thể chạy các MCP server như các service nhỏ riêng biệt cạnh agent, mỗi cái chỉ có quyền truy cập cần thiết. Tôi sẽ trình bày cách thiết lập trong running MCP servers on a VPS.
Memory và retrieval
Một language model không có bộ nhớ riêng giữa các lần gọi. Mọi thứ nó biết về tác vụ hiện tại phải được đưa cho nó trong mỗi lượt. Với một job ngắn thì điều này ổn, vì toàn bộ hội thoại nằm gọn trong một request. Với bất kỳ thứ gì dài hơn, bạn phải tự quản lý memory, và có hai pattern đáng để biết.
Thứ nhất là scratchpad. Bạn đưa cho agent một file mà nó có thể đọc và ghi, và bảo nó ghi lại những gì nó học được trong quá trình chạy. Ở lượt tiếp theo, hoặc session tiếp theo, nó đọc lại file đó và tiếp tục từ nơi nó đã dừng lại. Đây là memory dưới dạng một document thông thường, và nó hoạt động vì agent coi file đó như một tool khác.
Thứ hai là retrieval. Khi agent cần kiến thức từ một tập hợp tài liệu lớn mà không thể nhét hết vào một request, bạn lưu trữ các tài liệu đó dưới dạng có thể tìm kiếm và chỉ lấy các phần liên quan đưa vào context của model khi cần thiết. Pattern này được gọi là retrieval-augmented generation, hay RAG. Agent đặt một câu hỏi, code của bạn tìm ra một vài đoạn văn khớp, và chỉ những đoạn đó được gửi tới model. Kho lưu trữ nằm trên server của bạn, vì vậy các tài liệu riêng tư không bao giờ rời khỏi đó.
Nhiều agents, một coordinator
Một agent với nhiều tools có thể xử lý hầu hết các tác vụ. Khi một job lớn hoặc tự chia thành các phần, một cấu trúc khác sẽ hiệu quả hơn: một coordinator agent để điều phối các sub-agents chuyên biệt. Coordinator chia nhỏ mục tiêu thành các phần, giao mỗi phần cho một sub-agent được xây dựng cho loại công việc đó, và kết hợp các kết quả lại.
Lợi ích là sự tập trung. Một sub-agent với job hẹp và bộ tool nhỏ sẽ đưa ra quyết định tốt hơn một agent generalist phải xử lý mọi thứ, và các phần độc lập có thể chạy cùng lúc. Chi phí là sự điều phối, và nó là có thật, vì vậy hãy giữ ở mức một agent duy nhất cho đến khi tác vụ thực sự cần nhiều hơn. Hãy bắt đầu đơn giản, và chỉ thêm agent khi một agent hiện tại đang quá tải.
Self-hosted hay hosted: model nào chạy agent của bạn
Model là phần duy nhất của một agent mà bạn không nhất thiết phải tự chạy, và việc chọn nơi nó cư trú là quyết định lớn nhất bạn sẽ thực hiện. Một hosted model, được truy cập qua API, cung cấp khả năng suy luận mạnh nhất mà không cần vận hành gì cả: bạn gửi text, bạn nhận lại text. Một self-hosted model chạy trên server của chính bạn, giúp mọi request được riêng tư, chi phí cố định thay vì trả phí theo token, và không phụ thuộc vào việc bên thứ ba có uptime hay không. Sự đánh đổi là giữa khả năng và công sức. Các hosted model tốt nhất thường vượt xa những gì bạn có thể tự chạy, và việc tự chạy đồng nghĩa với việc bạn phải cung cấp đủ memory cho nó.
Điểm cuối cùng chính là rào cản thực tế. Một model phải nằm vừa trong memory của server, và nếu bạn dùng GPU, phải nằm vừa trong video memory. Một model quá lớn so với phần cứng sẽ không load được. Trước khi bạn lập kế hoạch cho một self-hosted agent, hãy kiểm tra xem model bạn muốn có vừa với máy bạn đang có không:
Nếu các con số không khớp, bạn có ba lựa chọn: chọn một model nhỏ hơn, sử dụng quantization mạnh hơn để thu nhỏ nó, hoặc sử dụng một hosted API để suy luận và chỉ giữ các tool và data của bạn trên server. Nhiều self-hosted agent bắt đầu với một local model thông qua Ollama on a VPS và chuyển sang dùng hosted API cho các bước khó nhất.
Server là phần nguy hiểm
Một agent có thể chạy shell command và ghi file thì rất mạnh mẽ, và đó chính là lý do tại sao nó nguy hiểm. Khả năng phán đoán của model là tốt nhưng không hoàn hảo, và một instruction sai, một bug, hoặc một input độc hại có thể biến một agent hữu ích thành một agent xóa nhầm thứ hoặc làm rò rỉ bí mật. Công việc bảo mật là bắt buộc, và trên một server, đó là phần quan trọng nhất.
Một vài thói quen sẽ gánh vác phần lớn trách nhiệm. Hãy chạy agent dưới một user không có đặc quyền (unprivileged user), tuyệt đối không chạy dưới quyền root, để nếu có sai sót thì phạm vi ảnh hưởng cũng bị giới hạn; nguyên tắc tương tự nằm trong running services as an unprivileged user. Giữ các bí mật của nó, như API keys, tách biệt khỏi code và chỉ user đó mới có quyền đọc. Và hãy sandbox các tools có chạm vào hệ thống, để agent chỉ có thể tiếp cận những gì nó thực sự cần. Để xem ví dụ thực tế về việc hardening một self-hosted agent, hãy xem running OpenClaw safely on a VPS. Nếu bạn muốn dùng hosted model để lấy trí tuệ, hướng dẫn về building an agent with Claude on a VPS sẽ áp dụng các ý tưởng tương tự với một model cụ thể.
Để xem ví dụ thực tế, building an OpenClaw-style personal agent áp dụng các thành phần này, và nếu bạn muốn chạy một bản hoàn chỉnh, hãy bắt đầu với self-hosting Hermes Agent on a VPS hoặc running Agent Zero on your own server, và the best self-hosted AI agents in 2026 sẽ so sánh mọi lựa chọn có sẵn mà chúng tôi đề cập.
FAQ
Sự khác biệt giữa AI agent và chatbot là gì?
Chatbot trả lời một tin nhắn rồi dừng lại. Agent chạy một vòng lặp: model quyết định một hành động, code của bạn thực hiện nó, kết quả được gửi lại cho model, và nó lặp lại cho đến khi hoàn thành tác vụ. Sự khác biệt là agent thực hiện các hành động thực tế giữa các lượt của nó, gọi các tool để đọc file, chạy command, hoặc truy vấn service, thay vì chỉ tạo ra văn bản.
Tôi có cần GPU để chạy AI agent trên VPS không?
Chỉ khi bạn tự host (self-host) model. Vòng lặp agent, các tools, và memory là code thông thường chạy tốt trên một VPS bình thường không có GPU. GPU quan trọng khi bạn muốn chạy language model trên phần cứng của chính mình, vì model phải nằm vừa trong memory. Nếu bạn dùng hosted model qua API, việc tính toán nặng sẽ diễn ra ở nơi khác và một VPS cấu hình vừa phải là đủ.
MCP là gì và tôi có cần nó để xây dựng agent không?
MCP, Model Context Protocol, là một tiêu chuẩn mở để kết nối agent với các tools và nguồn dữ liệu. Bạn không nhất thiết phải cần nó, vì bạn có thể tự viết từng tool bằng tay. MCP giúp bạn tiết kiệm công sức đó bằng cách cho phép tái sử dụng các server có sẵn cho các service phổ biến và cung cấp hệ thống của riêng bạn một lần cho bất kỳ agent nào sử dụng. Đó là một sự tiện lợi sẽ trở nên đáng giá khi số lượng integration tăng lên.
Có an toàn không khi cho AI agent quyền truy cập vào server của tôi?
Có thể, nếu bạn kiểm soát được nó. Một agent chạy command chỉ an toàn bằng chính tài khoản mà nó chạy và các tools bạn cho phép. Hãy chạy nó dưới một user không có đặc quyền, giữ các bí mật ngoài tầm với, sandbox các tools chạm vào filesystem, và yêu cầu phê duyệt cho các hành động khó có thể hoàn tác. Hãy coi agent như một đoạn code không đáng tin cậy nhưng có trí thông minh, và chỉ cấp cho nó những gì tác vụ cần.