xây dựng đội nhân viên AI cho riêng bạn

- Published on
- /14 mins read/
Bạn không thiếu ý chí. Bạn đang điều hành một công ty chỉ có một nhân viên duy nhất — và nhân viên đó chính là bạn.
Buổi sáng nào cũng vậy: inbox trước, mấy cái form "nhanh thôi" từ tuần trước, một người đã nhắc hai lần mà vẫn chưa gửi file về. Bạn trả lời, nhắc nhở, copy-paste đoạn văn quen thuộc sang cửa sổ mới. Đến trưa, danh sách trông y hệt tối qua — chỉ nặng hơn.
Không phải vấn đề ý chí. Đó là vấn đề kiến trúc.
Bài này hướng dẫn bạn xây một đội agent AI — những "nhân viên" có thể làm việc khi bạn đóng laptop, ăn cơm hay ngủ. Mỗi bước đều có code và script để copy-paste chạy thẳng.
# kiến trúc 3 tầng
Trước khi bắt tay làm, cần hiểu cách hệ thống vận hành:
┌─────────────────────────────────────────┐
│ LLM Engine (GPT-4o) │ ← bộ não dùng chung
├─────────────────────────────────────────┤
│ agents (Owen, Mara, Cole…) │ ← nhân viên: mỗi người sở hữu 1 mảng
├─────────────────────────────────────────┤
│ shared office (files, browser, API) │ ← văn phòng chung
└─────────────────────────────────────────┘
- LLM Engine: một model duy nhất cho toàn đội — không phải "model này cho viết, model kia cho duyệt"
- Agent: một runtime nhỏ — có role file, workspace, quyền truy cập cụ thể, và định nghĩa rõ "done" là gì
- Shared Office: môi trường chung — thư mục, trình duyệt, API key — thiết lập một lần, dùng mãi
# bước 1: tuyển nhân viên đầu tiên
chọn việc đúng để bắt đầu
Đừng bắt đầu với "giúp tôi quản lý ops". Bắt đầu với một việc có đích đến rõ ràng mà bạn có thể giao cho intern ngày thứ Sáu và kiểm tra vào thứ Hai:
"Đưa inbox tuần trước vào
ops/2026-09-14/với 3 file: brief.md, form-draft.pdf, và action-log.md."
Nhân viên đầu tiên tên Owen — phụ trách gói ops hàng tuần.
tạo cấu trúc thư mục
mkdir -p ~/ai-company/{agents,ops,memory/shared,skills,logs}
mkdir -p ~/ai-company/agents/owen/{charter,workspace}Cấu trúc hoàn chỉnh:
~/ai-company/
├── agents/
│ └── owen/
│ ├── charter/
│ │ ├── role.md # hợp đồng lao động — ít thay đổi
│ │ └── brief.md # nhiệm vụ hôm nay — thay đổi mỗi lần chạy
│ └── workspace/
├── memory/
│ ├── shared/ # cả đội cần biết
│ └── owen/ # ghi chú riêng của Owen
├── skills/ # kỹ năng dùng chung
├── ops/ # output chính
└── logs/
viết role file cho Owen
Tạo ~/ai-company/agents/owen/charter/role.md:
# Owen — weekly ops agent
## owns
gói tổng kết tuần: email chưa trả lời, form chưa xong, danh sách cần nhắc nhở.
## outcome
mỗi chủ nhật trước 22:00, thư mục ops/YYYY-MM-DD/ phải tồn tại và sẵn cho người review.
## sources
- nhãn partners@ trong inbox
- thư mục /partners/forms/
- danh sách chase trong memory/shared/people.md
## deliverables
ops/YYYY-MM-DD/
├── brief.md # tóm tắt 1 trang
├── form-draft.pdf # bản nháp form — CHƯA GỬI
└── action-log.md # danh sách cần nhắc — CHƯA GỬI
## constraints
- không gửi mail
- không submit form
- không xóa file
- không mở mail cá nhân
- dừng sau 40 phút
- nếu thiếu nguồn → ghi log, không tự đoán
## review point
người dùng mở thư mục thứ Hai sáng trước khi làm bất kỳ hành động outbound nào.
## fences
send / spend / publish / delete / legal
viết brief (nhiệm vụ hôm nay)
Tạo ~/ai-company/agents/owen/charter/brief.md:
# Owen — brief 2026-09-28
## nhiệm vụ
xử lý inbox tuần từ 22/09 đến 28/09.
## ghi chú
- form lần này có thêm trường headcount
- Mira vừa vào danh sách chase
- bỏ qua bounce ngày 25/09
## output
lưu vào: ops/2026-09-28/
script chạy Owen
Tạo ~/ai-company/run_owen.sh:
#!/bin/bash
set -e
AGENT="owen"
DATE=$(date +%Y-%m-%d)
WORKSPACE=~/ai-company
OUTPUT_DIR="$WORKSPACE/ops/$DATE"
LOG_FILE="$WORKSPACE/logs/${AGENT}_${DATE}.log"
mkdir -p "$OUTPUT_DIR" "$WORKSPACE/memory/$AGENT"
echo "[$DATE] starting Owen..." | tee -a "$LOG_FILE"
SYSTEM=$(cat "$WORKSPACE/agents/$AGENT/charter/role.md")
BRIEF=$(cat "$WORKSPACE/agents/$AGENT/charter/brief.md")
MEMORY=$(cat "$WORKSPACE/memory/shared/people.md" 2>/dev/null || echo "no data")
RESPONSE=$(curl -s https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d "$(jq -n \
--arg sys "$SYSTEM" \
--arg usr "shared memory:\n$MEMORY\n\n---\n\n$BRIEF\n\noutput dir: $OUTPUT_DIR" \
'{model:"gpt-4o",temperature:0.3,max_tokens:4096,
messages:[{role:"system",content:$sys},{role:"user",content:$usr}]}'
)")
echo "$RESPONSE" | jq -r '.choices[0].message.content' > "$OUTPUT_DIR/brief.md"
if [ -s "$OUTPUT_DIR/brief.md" ]; then
echo "[$DATE] ✅ done → $OUTPUT_DIR" | tee -a "$LOG_FILE"
else
echo "[$DATE] ❌ brief.md trống" | tee -a "$LOG_FILE"
fichmod +x ~/ai-company/run_owen.sh3 bài kiểm tra trước khi thăng chức
| bài test | câu hỏi | fail = |
|---|---|---|
| lid test | bạn ra ngoài — folder vẫn xuất hiện? | vẫn là chatbot |
| stranger test | người khác mở folder và hiểu ngay? | vẫn là nhật ký cá nhân |
| repeat test | output thứ Ba có cùng cấu trúc thứ Hai? | vẫn là việc làm một lần |
Pass cả 3 → bạn có nhân viên thật. Chưa pass → đừng tuyển thêm người.
# bước 2: viết charter — hợp đồng lao động
Sai lầm phổ biến nhất là viết lại "hợp đồng" mỗi ngày vì hôm nay có thêm Mira. Charter không thay đổi vì Mira. Brief mới thêm Mira.
charter = role.md → cố định cả tháng
brief = brief.md → thay đổi mỗi lần chạy
5 trường bắt buộc
outcome — điều gì thay đổi trong thế giới khi job xong, không phải hoạt động:
- ❌ "nhìn qua email"
- ✅ "gói partner tuần này tồn tại và sẵn cho review"
sources — nơi agent được phép xem. Không có trong list → không được tự đi tìm.
constraints — giới hạn thời gian, ngôn ngữ, những gì bỏ qua:
- "dừng sau 40 phút. thiếu nguồn → ghi log, không tự đoán."
deliverable — tên file, đường dẫn, format chính xác:
- ✅
ops/YYYY-MM-DD/brief.md, form-draft.pdf, action-log.md - ❌ "tóm tắt cho tôi xem"
review point — điểm nào con người vẫn cần có mặt:
- "tôi đọc brief trước khi bất kỳ hành động nào ra bên ngoài"
5 fences — động từ bị cấm
Tạo ~/ai-company/memory/shared/fences.md:
# fences — 5 động từ không được thực hiện không có người phê duyệt
send → không gửi mail, DM, comment, ping
spend → không checkout, thanh toán, nâng cấp plan
publish → không đăng bài, go-live, update trang đối ngoại
delete → không xóa, archive-as-delete, overwrite file duy nhất
legal → không ký hợp đồng, chấp nhận điều khoản, thay đổi policy
khi gặp fence:
[FENCE] cần người phê duyệt: <mô tả>
# bước 3: thiết lập văn phòng dùng chung
setup script (chạy một lần)
Tạo ~/ai-company/setup.sh:
#!/bin/bash
echo "🏗️ thiết lập ai company..."
mkdir -p ~/ai-company/{agents,ops,memory/shared,skills,logs,drafts,config}
for agent in owen mara cole rina vince; do
mkdir -p ~/ai-company/agents/$agent/{charter,workspace,memory}
echo "✅ $agent"
done
cat > ~/ai-company/memory/shared/people.md << 'EOF'
# people — dùng chung cho toàn đội
## chase list
| tên | email | việc cần làm | nhắc lần cuối |
|------|----------------------|---------------------|---------------|
| Mira | mira@example.com | gửi báo cáo Q3 | 2026-09-20 |
## partner list
| tổ chức | contact | ghi chú |
|-----------|------------------|---------------------------|
| Acme Corp | acme@example.com | form mới thêm trường headcount |
EOF
cat > ~/ai-company/.env.example << 'EOF'
OPENAI_API_KEY=sk-...
COMPANY_ROOT=~/ai-company
MAX_RUNTIME_MINUTES=40
EOF
echo ""
echo "✅ xong! bước tiếp theo:"
echo " cp ~/ai-company/.env.example ~/ai-company/.env"
echo " # điền API key rồi chạy:"
echo " bash ~/ai-company/run_owen.sh"chmod +x ~/ai-company/setup.sh
bash ~/ai-company/setup.shnhững thứ vẫn cần người trong phòng
- password không muốn lưu trong file agent
- 2FA và hardware key
- CAPTCHA
- thanh toán (dù nhỏ)
- banking, admin console, trang nào ToS cấm bot
Khi gặp các trường hợp này, agent dừng và ghi:
[BLOCKED] cần người xử lý 2FA trên partner portal
# bước 4: một engine cho toàn bộ đội
Dùng 5 model khác nhau = 5 hóa đơn, 5 key, không biết agent nào đang chạy ngầm cả đêm. Một model, nhiều nhân viên — đơn giản hơn, trace được lỗi hơn.
config tập trung
Tạo ~/ai-company/config/llm.json:
{
"model": "gpt-4o",
"temperature": 0.3,
"max_tokens": 4096,
"timeout_seconds": 120,
"retry_attempts": 2
}Mỗi agent đọc config này — không agent nào có model field riêng.
skills library — kỹ năng dùng chung
Skills là file bất kỳ agent nào cũng có thể load — không phải người, là công cụ.
Tạo ~/ai-company/skills/write-chase-note.md:
# skill: viết chase note
## format chuẩn
Chủ đề: nhắc nhở — [tên việc]
Xin chào [Tên],
Muốn theo dõi về [việc cụ thể] từ [ngày].
[Một câu mô tả tình trạng hiện tại]
Bạn có thể cập nhật vào [thời hạn] không?
Cảm ơn,
[người ký]
## quy tắc
- không hơn 80 chữ
- không đổ lỗi
- kết thúc bằng câu hỏi cụ thể
- KHÔNG GỬI — chỉ lưu vào drafts/
memory 2 tầng
# shared memory — cả đội cần biết
memory/shared/
├── people.md # danh sách người, partner
├── fences.md # ranh giới không được vi phạm
└── definitions.md # "qualified lead" nghĩa là gì, v.v.
# agent memory — riêng tư
memory/owen/
├── tried-last-week.md # Owen thử gì tuần trước
└── known-bounces.md # email nào hay bounce# bước 5: tuyển phần còn lại theo mảng sở hữu
5 agent cards
Vince · inbox
owns: phân loại mọi thứ đến
done: labels applied + inbound brief hàng ngày + danh sách cần người quyết
fence: send, delete
Mara · leads
owns: danh sách inbound lead — giữ cho trung thực
done: leads/YYYY-MM-DD.csv + exceptions note
fence: không email lead, không đánh deal là won
Cole · outreach
owns: draft chase và first touch
done: drafts/ + send-queue.md cho người dùng
fence: send
Rina · assets
owns: file mà người khác đang chờ (deck, screenshot, export)
done: assets/YYYY-MM-DD/ với tên file người lạ đọc được
fence: publish
Owen · weekly ops
owns: gói tổng kết tuần
done: ops/YYYY-MM-DD/ gồm brief + form-draft + action-log + links đến output team
fence: send, spend, publish, delete, legal
nguyên tắc khi tuyển thêm
✅ việc lặp lại mỗi tuần → thêm agent
✅ việc chỉ xảy ra 1 lần → thêm vào skills/
❌ đừng tuyển "strategy" — đó là việc của bạn
❌ đừng tuyển "researcher" nếu Mara chỉ cần skills/qualify-lead.md
# bước 6: kết nối handoff — agents bàn giao cho nhau
Đội mà không có handoff = 5 intern đều báo cáo thẳng lên bạn. Bạn trở thành cái hành lang. Nắp laptop không bao giờ thực sự đóng được.
Handoff là file, không phải lời nói:
❌ "Mara, bạn có thể pass cho Cole không?"
✅ Mara ghi vào leads/2026-09-28.csv → Cole đọc file đó
workflow weekly partner pack
Group goal: trước 9:00 thứ Hai, pack sẵn sàng review.
Vince (6:00) → inbox-sorted-brief.md
↓
Mara (6:30) → leads/2026-09-28.csv
↓
Rina (7:00) → assets/2026-09-28/
↓
Cole (7:30) → drafts/ + send-queue.md
↓
Owen (8:00) → ops/2026-09-28/{brief, form-draft, action-log}
↓
bạn (8:10) → 1 message: đường dẫn pack + danh sách cần approve
role file đầy đủ cho Cole
Tạo ~/ai-company/agents/cole/charter/role.md:
# Cole — outreach agent
## owns
draft outreach cho danh sách chase hiện tại.
## receives
- leads/YYYY-MM-DD.csv từ Mara
- ops/YYYY-MM-DD/action-log.md từ Owen
## emits
- draft vào drafts/
- send-queue.md cho người dùng
## never
- tự gửi mail
- tạo lead mà Mara đã reject
- liên hệ ngoài danh sách được cấp
## khi payload thiếu
ghi gap và skip row đó:
"SKIP: Mira — thiếu source line từ Mara"
# bước 7: lên lịch — đội chạy khi bạn không ngồi đây
dry-run trước khi schedule
Đừng đặt lịch khi chưa chạy thử một lần mà bạn đang ngồi xem. Mục tiêu không phải hoàn hảo — mà là output bạn có thể chấp nhận làm bản nháp.
bash ~/ai-company/run_vince.sh && \
bash ~/ai-company/run_mara.sh && \
bash ~/ai-company/run_rina.sh && \
bash ~/ai-company/run_cole.sh && \
bash ~/ai-company/run_owen.sh
# kiểm tra output
ls -la ~/ai-company/ops/$(date +%Y-%m-%d)/
cat ~/ai-company/ops/$(date +%Y-%m-%d)/action-log.mdTiêu chí accept:
- folder tồn tại với đủ 3 file
-
brief.mdđọc được, có nội dung thật -
action-log.mdghi rõ fence nào bị trigger - không file nào bị overwrite từ lần trước
cài cron job
crontab -e# weekly partner pack — thứ Hai hàng tuần
0 6 * * 1 bash ~/ai-company/run_vince.sh >> ~/ai-company/logs/cron.log 2>&1
30 6 * * 1 bash ~/ai-company/run_mara.sh >> ~/ai-company/logs/cron.log 2>&1
0 7 * * 1 bash ~/ai-company/run_rina.sh >> ~/ai-company/logs/cron.log 2>&1
30 7 * * 1 bash ~/ai-company/run_cole.sh >> ~/ai-company/logs/cron.log 2>&1
0 8 * * 1 bash ~/ai-company/run_owen.sh >> ~/ai-company/logs/cron.log 2>&1kill switch — timeout mỗi agent
Thêm vào đầu mỗi script:
# timeout sau 40 phút
if ! timeout 2400 bash -c '
# ... phần xử lý chính ...
'; then
echo "[$(date)] TIMEOUT: dừng sau 40 phút — chưa hoàn thành" \
>> ~/ai-company/logs/owen_$(date +%Y-%m-%d).log
echo "[TIMEOUT] job chưa hoàn thành" \
>> ~/ai-company/ops/$(date +%Y-%m-%d)/action-log.md
fireview hàng tuần
Tạo ~/ai-company/review.sh:
#!/bin/bash
echo "=== weekly review ==="
echo "📁 packs 7 ngày qua:"
find ~/ai-company/ops -maxdepth 1 -type d | sort -r | head -8
echo ""
echo "🔍 fence triggers tuần này:"
grep -h "\[FENCE\]" ~/ai-company/ops/*/action-log.md 2>/dev/null | head -10
echo ""
echo "❓ 3 câu hỏi cần trả lời:"
echo " 1. pack nào thực sự thay đổi quyết định của bạn?"
echo " 2. pack nào bạn chỉ ngưỡng mộ mà không dùng?"
echo " 3. job nào cần DELETE hoàn toàn (không phải pause)?"chmod +x ~/ai-company/review.sh# xử lý lỗi
Đọc log trước khi sửa bất cứ thứ gì:
tail -50 ~/ai-company/logs/owen_$(date +%Y-%m-%d).log
grep "\[FENCE\]" ~/ai-company/ops/*/action-log.md
grep "SKIP\|GAP\|BLOCKED" ~/ai-company/ops/*/action-log.md80% lỗi đến từ 3 nguyên nhân:
| triệu chứng | nguyên nhân | fix |
|---|---|---|
| output rỗng hoặc không liên quan | brief quá mơ hồ | sửa brief.md, không phải role.md |
| agent không tìm được dữ liệu | source đã move | cập nhật sources trong role.md |
| agent tự làm việc bị cấm | thiếu fence | thêm vào fences.md |
Đừng đổi model. Engine đủ tốt rồi. Sửa map của nhân viên.
# checklist theo tuần
tuần 1 — chỉ Owen
- chạy
setup.sh - viết
role.mdđủ 5 trường - viết
brief.mdvới job cụ thể, nhàm chán - chạy 1 lần khi đang ngồi xem
- pass lid / stranger / repeat test
tuần 2 — Vince + Mara
- tạo role file cho Vince và Mara
- test handoff Vince → Mara
- Owen đọc được output của Mara
tuần 3 — Cole + Rina
- Cole nhận đúng payload từ Mara và Owen
- Rina hoạt động độc lập
- chạy full chain dry-run
tuần 4 — schedule
- cài cron job
- đặt timeout cho mỗi agent
- chạy review hàng tuần
- xóa ít nhất 1 job vô dụng
# tổng kết
| lớp | vai trò |
|---|---|
| LLM Engine | bộ não — một engine duy nhất |
| agents | nhân viên — mỗi người sở hữu một outcome |
| shared office | văn phòng — thiết lập một lần, dùng mãi |
| charter + fence | hợp đồng + ranh giới — rõ ràng, ít thay đổi |
| handoff | cầu nối — file cụ thể, không phải câu văn |
| schedule | thời gian — đội chạy khi bạn không ngồi đây |
Tối nay: một tên, một folder, một định nghĩa "done" trên đĩa. Giao việc nhàm chán. Đóng laptop. Mở folder.
Artifacts có ở đó — bạn có nhân viên. Không có — bạn biết cần sửa gì.
Chỉ là những ghi chép cá nhân với hy vọng mang lại chút giá trị. Nếu thấy hữu ích, đừng ngại chia sẻ cho bạn bè & đồng nghiệp nhé!
Happy coding 😎 👍🏻 🚀 🔥.
On this page
- # kiến trúc 3 tầng
- # bước 1: tuyển nhân viên đầu tiên
- chọn việc đúng để bắt đầu
- tạo cấu trúc thư mục
- viết role file cho Owen
- viết brief (nhiệm vụ hôm nay)
- script chạy Owen
- 3 bài kiểm tra trước khi thăng chức
- # bước 2: viết charter — hợp đồng lao động
- 5 trường bắt buộc
- 5 fences — động từ bị cấm
- # bước 3: thiết lập văn phòng dùng chung
- setup script (chạy một lần)
- những thứ vẫn cần người trong phòng
- # bước 4: một engine cho toàn bộ đội
- config tập trung
- skills library — kỹ năng dùng chung
- memory 2 tầng
- # bước 5: tuyển phần còn lại theo mảng sở hữu
- 5 agent cards
- nguyên tắc khi tuyển thêm
- # bước 6: kết nối handoff — agents bàn giao cho nhau
- workflow weekly partner pack
- role file đầy đủ cho Cole
- # bước 7: lên lịch — đội chạy khi bạn không ngồi đây
- dry-run trước khi schedule
- cài cron job
- kill switch — timeout mỗi agent
- review hàng tuần
- # xử lý lỗi
- # checklist theo tuần
- # tổng kết