Tự xây AI agent trên VPS: vòng lặp, tools và memory
Tìm hiểu cách tự xây AI agent trên VPS: vòng lặp quanh language model, tools, MCP và memory, cùng cách code thực thi hành động qua API.
Một AI agent thực sự là gì
AI agent là một vòng lặp bao quanh 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, rồi vòng lặp chạy tiếp cho đến khi hoàn thành tác vụ. Đó là toàn bộ ý tưởng. Chatbot thông thường trả lời một lần rồi dừng. Agent tiếp tục hoạt động, thực hiện các hành động thực tế giữa những lượt xử lý của chính nó, cho đến khi đạt mục tiêu bạn giao. Vòng lặp này đủ nhỏ để bạn tự viết trong một buổi chiều. Đây là điểm bắt đầu của lộ trình từng bước để học cách xây dựng agent từ đầu, trước khi thêm tools, memory và safety.
Hành động mới là phần quan trọng. Bản thân language model chỉ tạo ra text. Nó không thể đọc file, gọi API hoặc chạy command. Agent cung cấp cho model một bộ tools mà nó được phép sử dụng, cùng cách để yêu cầu sử dụng các tool đó. Khi model muốn tìm kiếm web hoặc ghi file, nó không tự thực hiện việc đó. Nó phát ra một request có cấu trúc, code của bạn chạy tool, rồi kết quả trở thành thông tin tiếp theo mà model đọc. Model cung cấp khả năng phán đoán; server của bạn cung cấp khả năng thực thi.
Không phải task nào cũng cần agent, và mặc định chọn agent là một lỗi phổ biến. Nếu các bước đã được biết trước, plain script sẽ đơn giản hơn, nhanh hơn và đáng tin cậy hơn. “Lấy trang này mỗi giờ và gửi giá cho tôi qua email” là một scheduled job, không phải agent. Hãy xây dựng agent khi quy trình không được cố định từ trước, khi model phải xem kết quả nhận được và quyết định bước tiếp theo. Chi phí của agent là tính khó đoán, vì vậy chỉ nên chấp nhận chi phí đó khi tính linh hoạt thực sự cần thiết.
Công cụ: agent hoạt động như thế nào
Tool là bất kỳ khả năng nào bạn cung cấp cho model và mô tả đủ rõ để model biết khi nào cần dùng. Đọc file, chạy shell command, truy vấn database, gửi message: mỗi khả năng là một tool có tên, mô tả ngắn và danh sách input. Bạn định nghĩa các tool; model quyết định khi nào gọi chúng. Web search thường là tool đầu tiên đáng thêm vào. Nếu bạn đã chạy SearXNG của riêng mình, bạn có thể biến nó thành search backend của agent thay vì trả phí cho commercial search API.
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 request có cấu trúc, trong đó nêu tên tool và điền các input. Code của bạn nhận request đó, chạy function tương ứng rồi gửi kết quả lại ở lượt tiếp theo. Model đọc kết quả và gọi tool khác hoặc viết câu trả lời cuối cùng. Function calling là phần plumbing bên dưới mọi agent. Vòng lặp điều khiển nó chỉ cần vài dòng code thông thường.
Đây cũng là nơi bạn kiểm soát hoạt động. Model có thể yêu cầu chạy command, nhưng sẽ không có gì chạy cho đến khi code của bạn chọn thực hiện. Khoảng cách này là nơi bạn đặt prompt yêu cầu phê duyệt cho các thao tác nguy hiểm, giới hạn phạm vi mà tool được phép truy cập và log toàn bộ những gì agent đã thực hiện. Mức độ an toàn của agent chỉ tương xứng với các tool bạn cung cấp và những bước kiểm tra bạn đặt trước chúng.
MCP: cách tiêu chuẩn để kết nối các tool
Tự viết một integration mới cho từng service sẽ nhanh chóng trở nên tốn công. Model Context Protocol, hay MCP, là một open standard giải quyết vấn đề này. Thay vì viết code cho tool truy cập file, database và issue tracker, bạn chỉ cần trỏ agent đến một MCP server đã expose các hệ thống đó dưới dạng tool. Agent sử dụng một protocol duy nhất; server phụ trách giao tiếp với hệ thống thực tế.
Lợi ích chính là khả năng tái sử dụng. MCP server do người khác viết cho một service bạn đang dùng sẽ có thể được agent sử dụng mà không cần viết thêm integration code. MCP server do bạn viết cũng có thể được mọi agent hỗ trợ protocol này sử dụng. Một số self-hosted app hiện đã tích hợp MCP server riêng: openGym, ứng dụng theo dõi việc tập luyện expose một MCP server chỉ đọc, nên agent có thể trả lời câu hỏi về lịch sử tập luyện của bạn mà không thể thay đổi dữ liệu. Trên VPS, điều này rất hữu ích vì bạn có thể chạy các MCP server như những service nhỏ riêng biệt bên cạnh agent, mỗi server chỉ có quyền truy cập cần thiết. Khi các hệ thống phía sau những server đó nằm trên một network mà VPS không thể truy cập, chẳng hạn database ở nhà hoặc trong văn phòng, quảng bá network đó vào tailnet bằng subnet router cho phép agent truy cập chúng qua các địa chỉ private mà không expose bất kỳ thứ gì ra public internet. Tôi trình bày cách thiết lập trong chạy MCP server trên VPS.
Bộ nhớ và truy xuất
Mô hình ngôn ngữ không có bộ nhớ riêng giữa các lần gọi. Mỗi lượt, bạn phải cung cấp lại mọi thông tin mà mô hình cần cho tác vụ hiện tại. Với tác vụ ngắn, cách này không có vấn đề vì toàn bộ cuộc hội thoại vừa trong một request. Lượng nội dung chứa được phụ thuộc vào context window. Model tự host được phục vụ bằng Ollama có context window mặc định nhỏ và âm thầm loại bỏ các lượt cũ nhất. Vì vậy, đặt num_ctx khớp với lượng traffic mà loop của bạn tạo ra là việc nên làm trước khi cho rằng agent quên thông tin. Với tác vụ dài hơn, bạn phải tự quản lý bộ nhớ. Có 2 pattern đáng biết.
Pattern đầu tiên là scratchpad. Bạn cung cấp cho agent một file để đọc và ghi, rồi yêu cầu agent ghi lại những gì đã học trong quá trình làm việc. Ở lượt tiếp theo hoặc session tiếp theo, agent đọc lại file và tiếp tục từ chỗ đã dừng. Đây là bộ nhớ dưới dạng tài liệu thuần túy. Cách này hoạt động vì agent coi file như một tool khác.
Pattern thứ hai là retrieval. Khi agent cần kiến thức từ một tập tài liệu lớn không thể đưa hết vào một request, bạn lưu các tài liệu đó dưới dạng có thể tìm kiếm rồi chỉ đưa những phần liên quan vào context của model khi cần. Pattern này gọi là retrieval-augmented generation, hay RAG. Agent đặt câu hỏi, code của bạn tìm một số đoạn khớp, rồi chỉ gửi các đoạn đó cho model. Kho dữ liệu nằm trên server của bạn, nên tài liệu riêng tư không bao giờ rời khỏi server.
Nhiều agent, một coordinator
Một agent với nhiều tool đáp ứng được hầu hết tác vụ. Khi công việc lớn hoặc tự nhiên chia thành nhiều phần, một mô hình khác sẽ phù hợp hơn: một coordinator agent giao việc cho các sub-agent chuyên biệt. Coordinator chia mục tiêu thành các phần, giao từng phần cho sub-agent được thiết kế cho loại công việc đó, rồi tổng hợp kết quả. Delegation cần một kênh kết nối giữa các phần. Cách đơn giản nhất đã có sẵn trên server của bạn: hai session Claude Code trên cùng một VPS có thể gửi message cho nhau. Đây là cách ít tốn kém để thử cách handoff hoạt động trước khi tự xây dựng cơ chế coordination.
Lợi ích là khả năng tập trung. Một sub-agent có nhiệm vụ hẹp và bộ tool nhỏ thường đưa ra quyết định tốt hơn một generalist phải xử lý mọi việc cùng lúc. Các phần độc lập cũng có thể chạy đồng thời. Chi phí là coordination, và chi phí này là có thật. Vì vậy, hãy dùng một agent cho đến khi tác vụ rõ ràng cần nhiều hơn. Bắt đầu đơn giản, rồi chỉ thêm agent khi một agent hiện tại rõ ràng đang quá tải.
Tự host hay dùng dịch vụ hosted: model nào chạy agent của bạn
Model là thành phần duy nhất của agent mà bạn không nhất thiết phải tự vận hành. Việc chọn nơi model chạy là quyết định lớn nhất bạn phải đưa ra. Model hosted được truy cập qua API, cung cấp khả năng reasoning mạnh nhất mà bạn không phải vận hành gì: bạn gửi text và nhận text trả về. Model self-hosted chạy trên server của bạn. Cách này giữ mọi request ở chế độ riêng tư, có chi phí cố định thay vì tính phí theo token, và không phụ thuộc vào việc hệ thống của bên khác có hoạt động hay không. Đổi lại là capability và công sức vận hành. Các model hosted tốt nhất hiện vẫn vượt xa những model bạn có thể tự chạy. Việc tự chạy model cũng đòi hỏi server có đủ memory để nạp model.
Điểm cuối là hạn chế thực tế cần lưu ý. Model phải vừa với memory của server. Nếu dùng GPU, model cũng phải vừa với video memory của GPU. Model lớn hơn khả năng của phần cứng sẽ không load được. Trước khi lập kế hoạch triển khai agent self-hosted, hãy kiểm tra model bạn muốn dùng có vừa với máy hiện có không:
Nếu các con số không phù hợp, bạn có 3 lựa chọn: chọn model nhỏ hơn, dùng quantization mạnh hơn để giảm kích thước, hoặc dùng hosted API cho phần reasoning và chỉ giữ tools cùng data trên server. Nhiều agent self-hosted bắt đầu bằng model local thông qua Ollama trên VPS, rồi chuyển sang hosted API cho những bước khó nhất.
Máy chủ là phần nguy hiểm
Một agent có thể chạy shell command và ghi file là một công cụ mạnh. Đây cũng chính là lý do nó nguy hiểm. Khả năng phán đoán của model tốt nhưng không hoàn hảo. Một instruction sai, bug hoặc input độc hại có thể biến agent hữu ích thành agent xóa nhầm dữ liệu hoặc làm lộ secret. Công việc bảo mật là bắt buộc. Trên máy chủ, đây là phần quan trọng nhất.
Một vài thói quen mang lại phần lớn hiệu quả. Chạy agent bằng một user chuyên dụng không có quyền đặc biệt, tuyệt đối không chạy bằng root, để giới hạn tác động khi xảy ra lỗi; lý do tương tự được trình bày trong chạy service bằng user không có quyền đặc biệt. Giữ secret của agent, chẳng hạn API key, bên ngoài code và chỉ cho user đó đọc. Đồng thời sandbox các tool có thể tác động đến system, để agent chỉ truy cập được những gì thực sự cần. Nếu không muốn tự viết từng check, các plugin DeepSeek Harness đáng cài đặt cung cấp sẵn các thành phần cho những yêu cầu tương tự: rule cấp quyền cho tool, quét prompt injection và giới hạn số tiền agent được phép chi trước khi dừng. Để xem ví dụ thực tế về hardening một agent self-hosted, hãy xem chạy OpenClaw an toàn trên VPS. Nếu muốn dùng model được host sẵn để xử lý phần intelligence, guide đi kèm về xây dựng agent với Claude trên VPS áp dụng cùng các ý tưởng này với một model cụ thể.
Ví dụ thực tế xây dựng personal agent kiểu OpenClaw áp dụng các thành phần trên. Nếu muốn chạy một agent hoàn chỉnh, hãy bắt đầu với self-host Hermes Agent trên VPS hoặc chạy Agent Zero trên máy chủ riêng, rồi xem các AI agent self-hosted tốt nhất năm 2026 để so sánh từng lựa chọn có sẵn mà chúng tôi đề cập, theo cùng một tiêu chí.
FAQ
AI agent khác chatbot ở điểm nào?
Chatbot trả lời một tin nhắn rồi dừng. Agent chạy theo một vòng lặp: model quyết định 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, rồi vòng lặp tiếp tục đến khi hoàn tất task. Điểm khác biệt là agent thực hiện hành động thực tế giữa các lượt xử lý, 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 model. Vòng lặp của agent, các tool và memory đều là code thông thường, có thể chạy tốt trên VPS bình thường không có GPU. GPU cần thiết khi bạn muốn chạy language model trên phần cứng của mình, vì model phải vừa trong memory. Nếu dùng model được host qua API, phần tính toán nặng 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 MCP để xây dựng agent không?
MCP, viết tắt của Model Context Protocol, là một open standard để kết nối agent với tool và data source. Bạn không bắt buộc phải dùng MCP vì có thể tự viết từng tool. MCP giúp giảm phần việc này bằng cách cho phép bạn dùng lại các server có sẵn cho những service phổ biến và expose hệ thống của mình một lần để bất kỳ agent nào cũng có thể sử dụng. Đây là một tiện ích trở nên đáng dùng khi số lượng integration tăng lên.
Cho AI agent quyền truy cập vào server của tôi có an toàn không?
Có thể an toàn nếu bạn cô lập nó. Agent có thể chạy command chỉ an toàn ở mức account mà nó chạy dưới đó và các tool được bạn cho phép. Hãy chạy agent bằng unprivileged user, giữ secret ngoài phạm vi truy cập của nó, sandbox các tool có thể truy cập filesystem và yêu cầu approval cho những action khó hoàn tác. Hãy coi agent là untrusted code nhưng có khả năng xử lý thông minh, và chỉ cấp cho nó những quyền task cần.