TROISINH
Làm quen AgentThiết lập & Chạy agent đầu tiên

Viết SOUL.md đầu tiên: Cho agent một linh hồn — Tại sao 'briefing' đọc một lần thay thế lời nhắc lặp đi lặp lại

SOUL.md là gì? File cấu hình markdown giúp AI Agent nhớ 'mình là ai' giữa các phiên làm việc, định nghĩa persona, ràng buộc và workflow một cách bền vững tha...

Bạn có bao giờ chán ngấy vì phải đánh máy lại câu "Bạn là chuyên gia Python với 10 năm kinh nghiệm, luôn viết type hint và test trước khi refactor..." mỗi khi mở cửa sổ chat mới? Với AI Agent, điều này còn tệ hơn — chúng "quên" hết mọi thứ mỗi khi context window reset. SOUL.md sinh ra để chấm dứt vòng lặp này: đây là bản lý lịch trích ngang mà agent đọc đầu tiên mỗi khi "thức dậy", định nghĩa nó là ai, được làm gì, và tuyệt đối không được làm gì.

Vấn đề

Trước SOUL.md, việc định hình AI Agent là một cuộc chiến với sự phiền phức:

  • Groundhog Day syndrome: Mỗi session mới, bạn phải paste lại system prompt dài 500 từ để "setup scene". Nếu bạn quên nhắc "đừng push lên production trực tiếp", agent có thể tự ý làm điều đó.
  • Không thể version control: System prompt trong giao diện web (ChatGPT, Claude.ai) là "ma thuật đen" — không ai biết config hiện tại là gì, không thể diff giữa các phiên bản, không thể rollback khi bạn vô tình thêm một constraint làm agent trở nên vô dụng.
  • Team alignment chaos: Developer A nghĩ agent nên "thận trọng", Developer B muốn agent "tự chủ cao". Kết quả là agent hành xử khác nhau tùy người khởi tạo, gây lỗi production không thể reproduce.

Cách tiếp cận cũ — dùng "System Prompt" dài lê thê — còn gây ra context dilution: Khi prompt dài hơn 2000 tokens, các instruction ở giữa bị "lost in the middle", agent tuân theo yêu cầu đầu và cuối nhưng bỏ qua ràng buộc quan trọng ở giữa.

Ý tưởng cốt lõi

SOUL.md không phải là code phức tạp — nó chỉ là file markdown đặt ở thư mục gốc (hoặc .agent/soul.md) mà agent đọc như briefing paper trước khi bắt đầu bất kỳ task nào.

Cấu trúc hai tầng

File tuân theo quy ước "YAML frontmatter + Markdown body" — tương tự README của GitHub:

Tầng 1 — Metadata (YAML): Định danh và routing

---
name: "BackendAssistant"
role: "senior_backend_dev"
version: "1.2"
preferred_model: "claude-3.5-sonnet"
---

Tầng 2 — Nội dung (Markdown): Văn hóa và quy trình

# Identity
Tôi là senior backend developer cho hệ thống fintech. Tôi ưu tiên bảo mật và correctness hơn tốc độ phát triển.

## Constraints (Ràng buộc tuyệt đối)
- **KHÔNG BAO GIỜ** commit trực tiếp vào main; luôn tạo branch feature/*
- **KHÔNG ĐƯỢC** log sensitive data (PII, credit card) vào console hay file
- Luôn chạy `pytest` trước khi báo "task hoàn thành"

## Tools & Environment
- Database: PostgreSQL 15 (không dùng MySQL syntax)
- Framework: FastAPI, SQLModel
- Testing: pytest với coverage threshold 80%

## Workflow mặc định
1. Đọc requirements từ `task.md`
2. Viết test case thất bại trước (TDD)
3. Implement code tối thiểu để test pass
4. Refactor nếu cần
5. Update `CHANGELOG.md` với entry ngắn gọn

Khoảnh khắc "à ra vậy"

Insight then chốt: SOUL.md là "bản sao kỹ thuật số" của employee handbook, không phải là "lệnh tức thời". Khi agent khởi động, nó đọc file này một lần, "nhập vai" theo mô tả, sau đó áp dụng persona đó cho toàn bộ session — giống như diễn viên đọc kịch bản trước khi lên sân khấu, thay vì đạo diễn phải hét lời khuyên từng phân cảnh.

Progressive disclosure (tiết lộ từ tầng) cũng quan trọng: Trong các framework như OpenClaw, SOUL.md chỉ load một lần đầu vào context, sau đó "nén" thành working memory. Điều này tránh việc lặp lại identity trong mọi turn hội thoại, tiết kiệm token cho nội dung thực sự của task.

Tại sao nó hoạt động

SOUL.md hiệu quả vì nó tách biệt các mối quan tâm theo kiến trúc file-based:

Separation of Concerns: Thay vì nhét persona + task cụ thể + business logic vào một prompt khổng lồ, bạn tách:

  • SOUL.md: Identity bền vững (ít thay đổi, review bởi tech lead)
  • Task prompt: Yêu cầu cụ thể hôm nay (thay đổi liên tục)
  • AGENTS.md: Rules cho workspace (shared giữa nhiều agent)

Git-native: Vì là file text, bạn có thể:

  • Dùng git diff để xem ai đã thay đổi constraint nào
  • Branching: Thử nghiệm personality mới trên branch experiment/friendly-tone mà không ảnh hưởng production
  • Pull Request: Security team review Constraints section trước khi merge

Trade-off so với System Prompt truyền thống:

Tiêu chíSystem Prompt (Web UI)SOUL.md (File-based)
Version control❌ Không có✅ Git diff
Team sharing❌ Copy-paste✅ Clone repo là có
Độ dài hợp lýKhông giới hạn (dễ bloat)Nên <1000 tokens (focused)
Thay đổi runtimeInstant (risky)Cần restart (safe)
Audit trail❌ Mất hút✅ Commit history

Tại sao không phải JSON hay XML? Markdown là "lingua franca" — readable cho cả developer, product manager, và compliance officer. YAML frontmatter đủ cấu trúc để máy parse, nhưng phần body vẫn là natural language để con người hiểu và chỉnh sửa dễ dàng.

Ý nghĩa thực tế

Trong production, SOUL.md biến agent từ "công cụ dùng một lần" thành "nhân viên có lý lịch":

Consistency: Khi team 5 người cùng dùng một agent qua tuần, SOUL.md đảm bảo agent không "lúc thì cẩn thận, lúc thì liều lĩnh" tùy mood của người prompt. Điều này giảm 60-70% "surprise behavior" theo báo cáo từ các team dùng OpenClaw.

Security by default: Bằng cách hardcode constraints (VD: "không được dùng eval() trong Python") vào SOUL.md thay vì nhắc nhở mỗi lần, bạn giảm rủi ro prompt injection — kẻ tấn công khó thuyết phục agent bỏ qua rule được load từ file hơn là rule được nhét vào prompt tạm.

Onboarding nhanh: Thành viên mới trong team không cần học "bí kíp prompt" — họ chỉ cần đọc SOUL.md để biết agent có thể làm gì, rồi giao việc bình thường.

Hạn chế cần biết:

  • Không phải phép màu: Nếu bạn viết "Luôn viết code an toàn" nhưng không define "an toàn" là gì, agent vẫn sẽ hallucinate. Cần kèm ví dụ cụ thể.
  • Context limit vẫn áp dụng: SOUL.md quá dài (>1500 tokens) sẽ bị "dilution" — agent chỉ nhớ được đầu và cuối file. Rule of thumb: Giữ dưới 1 trang A4.
  • Không tự cập nhật: Khi business logic thay đổi (VD: thêm bước GDPR check), bạn phải sửa file thủ công. Agent không tự biết "oh, giờ có luật mới".
  • Chỉ là văn bản: SOUL.md không thực thi ràng buộc kỹ thuật — nó chỉ là "lời khuyên" cho LLM. Để enforce thực sự (VD: chặn shell command), cần kết hợp với 5-layer securityhooks.

Đào sâu hơn

Tài liệu chính thức:

  • OpenClaw Documentation: "SOUL.md Specification" — chi tiết về YAML schema và resolution order khi có nhiều file soul
  • Claude Code Docs: "Creating project context" — hướng dẫn tương tự cho hệ sinh thái Anthropic

Bài liên quan TroiSinh:

Cùng cụm — Thiết lập nền tảng

AGENTS.md: Thiết lập workspace rules và constraints cho toàn bộ project

Cài đặt OpenClaw

Từ zero đến agent chạy được với hệ sinh thái OpenClaw

Build agent đầu tiên

Từ SOUL.md đến agent FAQ hoạt động thực tế trong 30 phút

Đọc tiếp — Hoàn thiện hệ thống:

Kết nối messaging

Nối agent vừa tạo vào Telegram, Zalo, Discord để tiếp khách hàng

Chọn LLM provider

So sánh OpenAI, Anthropic, Ollama và cấu hình cost-optimization

Tối ưu chi phí

Prompt caching, model selection, rate limits để agent chạy rẻ mà vẫn mạnh

Mở rộng:

On this page