Tôi build Local AI Agent từ đầu — không framework, không background IT.


Từ con số 0 đến Local AI Agent: Hành trình 2 tháng build Sunny AI (Llama 3B + ReAct Agent)
2 tháng tìm hiểu AI, 1 tháng bắt đầu code. Phần lớn code được viết trên điện thoại, sau đó chạy trên PC với GPU RTX 3050. Đây là một trong những project tôi build được trong quá trình — chia sẻ lại để ai quan tâm có thể tham khảo.
Bài viết có dùng AI hỗ trợ viết, nhưng toàn bộ code và kinh nghiệm là thật. Tôi vẫn đang học mỗi ngày và hệ thống còn nhiều thứ phải cải thiện.
Bắt đầu từ con số 0
Tôi không học IT. Không có background lập trình. Công việc hàng ngày không liên quan gì đến code.
Cách đây 2 tháng tôi bắt đầu tìm hiểu AI. Cách đây 1 tháng tôi bắt đầu code. Và hôm nay tôi có một Local AI Agent chạy hoàn toàn trên máy cá nhân — không cloud, không API key, không subscription fee.
Không phải vibe code rồi không hiểu gì. Tôi hiểu từng dòng, từng bug đã fix.
Sunny AI là gì?
Sunny AI v5.0 là một Local AI Agent Framework chạy hoàn toàn trên máy cá nhân:
- Model: Llama 3.2 3B Instruct chạy trên CUDA (RTX 3050 6GB)
- Quantization: BitsAndBytes 4bit — không cần Ollama, không cần LM Studio
- Inference: Hugging Face Transformers trực tiếp
- Agent architecture: ReAct-based autonomous agent
Không dùng framework agent như LangChain hay AutoGPT. Agent logic được tự implement bằng Python + Transformers.
Tech Stack
Backend:
- Python 3.10
- FastAPI + WebSocket (streaming UI)
AI Stack:
- Transformers + BitsAndBytes 4bit quantization
- FAISS vector database
- sentence-transformers embedding
Frontend:
- HTML + JavaScript
- WebSocket streaming UI
Hành trình từ lv1 đến lv4
Level 1 — Chatbot đơn giản
User → LLM → Reply
Chỉ là gọi model rồi trả lời. Không có gì đặc biệt.
Level 2 — Thêm Memory
User → VectorMemory.search() → LLM → Reply → VectorMemory.add()
Dùng FAISS + sentence-transformers. Sunny bắt đầu "nhớ" được hội thoại qua restart.
Level 3 — Planner Agent
User → make_plan() → [tool1, tool2, tool3] → execute → Reply
LLM tự tạo plan dạng JSON, executor chạy từng bước. Thêm Retry × 3 và Replan khi thất bại.
Level 4 — ReAct Agent
Thought → Action → Observation → Critic → Next action
Không còn plan cố định. Agent tự suy nghĩ từng bước, tự đánh giá kết quả, tự quyết định tiếp theo làm gì.
Architecture
User Input
│
▼
VectorMemory.search() ← FAISS semantic search
│
▼
SunnyBrain.make_plan() ← LLM tạo plan
│
▼
PlanExecutor.run()
├─ [Lv3] Tool → Retry×3 → Replan
└─ [Lv4] ReAct: Thought→Action→Observe→Critic→loop
└─ Repeated action guard
│
▼
SunnyBrain.think_stream() ← Stream reply
│
▼
VectorMemory.add() ← Lưu long-term memory
10 Tools
| Tool | Chức năng |
|---|---|
web_search |
DuckDuckGo — không tracking |
visit_url |
Đọc nội dung trang web |
read_file |
PDF/DOCX/XLSX/TXT |
scan_folder |
Tìm file rác trong thư mục |
scan_temp |
Scan file rác hệ thống |
delete_temp |
Xóa file rác hệ thống |
phone_control |
Điều khiển Android qua ADB |
read_diary |
Đọc episodic memory |
python_exec |
Chạy Python code (sandboxed) |
shell_run |
Chạy shell command (whitelist) |
Memory System — 2 lớp
FAISS Vector Memory — tìm kiếm ngữ nghĩa, persist qua restart
Diary (Episodic Memory) — lịch sử hội thoại theo thời gian, agent đọc được qua tool read_diary
Đây không phải log — agent thật sự truy xuất và dùng lại lịch sử khi cần.
Security — Sandbox 3 lớp
Khi thêm python_exec và shell_run, bảo mật là vấn đề nghiêm túc:
Layer 1 — Path guard: chặn path traversal, symlink attack, extension whitelist
Layer 2 — Code execution guard: block os.system, subprocess, eval, exec, socket, requests, ghi file (open với mode w/a/wb/ab)
Layer 3 — Shell whitelist: chỉ cho phép lệnh đọc an toàn (dir, ls, pip list...), block rm -rf, shutdown, curl|bash...
Những bug đáng nhớ
1. Torchao drama
AttributeError: module 'torch' has no attribute 'int1'
Mọi người nghĩ lỗi torch. Thực ra thủ phạm là torchao:
pip uninstall torchao -y
Xong.
2. Lock release bug
# Bug: release khi chưa acquire
finally:
self._lock.release() # ❌
# Fix:
finally:
if acquired:
self._lock.release() # ✅
3. JavaScript SyntaxError trong WebSocket
Emoji + Vietnamese text + multiline string bên trong confirm() → SyntaxError. Fix bằng cách escape đúng cách.
Log thật khi chạy
[REACT Step 1]
Thought: user muốn tính toán, dùng python_exec
Action: python_exec
Input: print(123 * 456)
[Observation]: 55928
[Critic]: YES — đủ thông tin
[REACT_FINISH step=1]
[REACT Step 1]
Thought: cần tìm tin tức AI mới
Action: web_search
Input: AI news today
[Observation]: 5 kết quả
[REACT Step 2]
Thought: cần đọc thêm nội dung
Action: visit_url
Input: https://...
[Critic]: YES
[REACT_FINISH step=2]
Kết quả thực tế
- Test câu: "Tính 123 × 456" → Sunny tự dùng
python_exec, trả về55928✅ - Test câu: "Tìm tin tức AI mới nhất" → Sunny tự chain
web_search→visit_url→ summarize ✅ - Test ReAct loop: log hiện
REACT_FINISH step=2— agent tự biết dừng khi đủ thông tin ✅
Điều tôi học được
- Đừng sợ lỗi — mỗi bug fix là hiểu sâu hơn một layer
- Llama 3B đủ cho nhiều tác vụ agent cá nhân nếu có tool support — không nhất thiết phải dùng model lớn
- Local > Cloud cho privacy — data nằm trên máy, không ai đọc được
- Không cần framework — hiểu architecture từ đầu giúp debug nhanh hơn nhiều
Hạn chế hiện tại
- Model nhỏ nên đôi khi reasoning chưa ổn định
- Một số tool cần cải thiện sandbox thêm
- Chưa có multi-agent hay planner riêng biệt
Đây vẫn là một project học tập cá nhân.
Lộ trình Sunny AI v6
Một số hướng tôi muốn thử nghiệm tiếp:
- Reasoning UI realtime — hiển thị quá trình agent suy nghĩ theo thời gian thực
- Tách planner và executor — để reasoning ổn định hơn
- Sandbox tốt hơn — tăng cường kiểm soát cho
python_execvàshell_run - Memory phong phú hơn — kết hợp semantic memory và episodic memory tốt hơn
- Phone integration — agent điều khiển Android qua ADB (screenshot, file transfer...)
Sunny AI vẫn chỉ là project cá nhân để học về AI, local LLM và system architecture. Nhưng tôi tin Local AI sẽ ngày càng quan trọng khi mọi người muốn privacy + kiểm soát thay vì phụ thuộc hoàn toàn vào cloud.
Link
- GitHub lv3: https://github.com/canhdien69-tech/Sunny-AI-v5.0-lv3-Local-Agent
- GitHub lv4: https://github.com/canhdien69-tech/File-Agent-lv4
- License: CC BY-NC 4.0 — free cho cá nhân, cấm thương mại
*Phần code được viết chủ yếu trên điện thoại + 3 AI miễn phí. Không background IT. Tôi vẫn đang học mỗi ngày — nếu tôi làm được thì bạn cũng làm được.
All Rights Reserved