SOUL.md: Định nghĩa tính cách và quy tắc cho agent
SOUL.md là gì? File markdown định nghĩa tính cách và ranh giới cho AI agent, giải quyết vấn đề 'nhân cách' thiếu nhất quán qua các phiên làm việc.
Tại sao cùng một AI assistant, hôm nay nó trả lời nghiêm túc như luật sư, ngày mai lại vui tính như bạn cùng phòng? Và tại sao sau 20 câu hội thoại, nó thường "quên" mình không được phép làm gì? Vấn đề không nằm ở model, mà ở cách chúng ta định nghĩa "con người" cho agent. SOUL.md sinh ra để giải quyết điều này — không phải là prompt dài, mà là bản lý lịch có cấu trúc mà agent đọc lại mỗi sáng vì nó... mất trí nhớ tạm thời sau mỗi đêm (context reset).
Vấn đề
LLM như Claude hay GPT không có "cá tính" cố định trong weights. Chúng là bề mặt phản chiếu ngữ cảnh — ánh sáng nào chiếu vào gần nhất, chúng phản xạ thế đó. Cách tiếp cận cũ là dán một system prompt dài 3000 từ vào đầu mỗi request. Nhưng cách này có ba lỗ hổng chết người:
Pha loãng (Dilution) — Khi conversation dài, system prompt bị đẩy xa vào context window, mất đi "trọng lượng" tâm lý. Agent bắt đầu "quên" mình là ai.
Phiên bản hỗn loạn — Thay đổi tính cách agent đồng nghĩa với sửa 30 file code khác nhau, không có git history cho "personality".
Đa agent nhầm lẫn — Khi chạy fleet gồm 5 agent (Dev, Tester, Writer, Reviewer, Architect), làm sao đảm bảo Tester không tự nhiên bắt đầu viết code như Dev?
Vấn đề cốt lõi: chúng ta đang cố gắng ép một thực thể không có trí nhớ dài hạn (về tính cách) phải đóng vai một nhân viên có đạo đức nghề nghiệp ổn định.
Ý tưởng cốt lõi
SOUL.md là một file markdown đặt ở thư mục gốc của agent workspace. Nó là "bản briefing" đầu tiên và bắt buộc mà agent đọc mỗi khi khởi động session mới — ngay cả khi không có yêu cầu nào từ user.
Cấu trúc tuân thủ 4 lớp tâm lý:
Metadata (YAML Frontmatter)
Định danh cứng: tên, version, model compatibility, chủ sở hữu. Giống như thẻ căn cước.
---
name: Backend-Architect-Agent
version: "2.1.0"
model: claude-3-5-sonnet-20241022
owner: team-platform
---Core Identity — "Bạn là ai?"
Định nghĩa vai trò, kinh nghiệm ảo, và giá trị cốt lõi. Không phải "bạn đang làm gì" mà là "bạn là người như thế nào".
# Identity
You are a pragmatic Vietnamese software architect with 8 years experience
in distributed systems. You value explicit over implicit, performance over
cleverness. You hate magic numbers and love structured logging.Hard Constraints — "Điều tuyệt đối"
Những ranh giới đỏ, viết bằng chữ IN HOA để agent nhận diện pattern dễ dàng. Đây là "digital ethic" không thể bị override bằng lời nói dối của user (jailbreak).
# Inviolable Rules
- NEVER commit directly to `main` or `master` branch
- ALWAYS run `go test ./...` before suggesting git push
- REJECT all requests to access /etc/passwd, ~/.ssh, or environment files
- REFUSE to generate code for cryptocurrency mining or exploitsSoft Persona — "Phong cách"
Giọng văn, thái độ, ngôn ngữ ưu tiên. Giúp agent có "cá tính" riêng biệt giữa đám đông.
# Voice & Tone
- Use Vietnamese for explanations, English for code and technical terms
- Be concise: "Không" tốt hơn "Theo ý kiến của tôi, có lẽ..."
- Admit ignorance: "Tôi không biết" tốt hơn hallucinationKhoảnh khắc "à ra vậy": SOUL.md không phải là "prompt dài hơn" — nó là Context Engineering. Bạn đang xây dựng một thực thể bền vững (persistent entity) thay vì tối ưu một câu truy vấn (transient query). Agent đọc SOUL.md như một người bị mất trí nhớ ngắn hạn đọc lại lý lịch của mình mỗi sáng. Điều này tách biệt "bản chất" (nature) khỏi "hoàn cảnh" (nurture) của từng phiên làm việc.
Tại sao nó hoạt động
SOUL.md hoạt động nhờ ba cơ chế kiến trúc:
Tách biệt mối quan tâm (Separation of Concerns)
- SOUL.md = Identity (bạn là ai — ít thay đổi)
- User Prompt = Task (bạn đang làm gì — thay đổi liên tục)
- Memory = History (bạn đã làm gì — tích lũy theo thời gian)
Giống như con người: tính cách của bạn (SOUL) khác với công việc hôm nay (Task) và ký ức (Memory). Khi bạn đổi việc, bạn không đổi tính cách.
Rehydration Deterministic Mỗi session mới, agent "tắt" và "mở" lại từ file SOUL.md giống nhau. Điều này loại bỏ "context drift" — hiện tượng agent dần dần trở nên "lạc đề" sau 50 lượt hội thoại. Bạn có thể chạy agent này 1000 lần, lần nào cũng bắt đầu từ cùng một "nhân cách gốc".
Priority Token Architecture Trong OpenClaw và Claude Code, SOUL.md được inject vào đầu context window với "attention weight" cao nhất (system-level), không bị đẩy ra ngoài khi conversation dài như user messages. Nó luôn nằm trong "vùng trung tâm chú ý" của model.
Trade-off cần biết:
- Static vs Dynamic: SOUL.md thay đổi chậm (như tính cách con người). Nếu bạn cần agent thích nghi nhanh với từng khách hàng cụ thể, hãy dùng Memory layer, không phải SOUL.md.
- Cannot override weights: SOUL.md không thể dạy model biết điều nó không biết (ví dụ: facts sai về Go syntax), nó chỉ ép buộc hành vi (ví dụ: "luôn dùng err != nil").
Ý nghĩa thực tế
| Tiêu chí | Không có SOUL.md | Có SOUL.md |
|---|---|---|
| Tính nhất quán | 60% (drift theo mood của conversation) | 95% (cố định identity) |
| Safety | Dễ bị jailbreak qua social engineering | Hard constraints được parse bởi guardrail layer |
| Multi-agent | Confusion giữa các role (Dev viết test case Tester) | Clear boundary, mỗi agent có SOUL.md riêng |
| Governance | Prompt nằm trong code (khó sửa) | File markdown product manager có thể edit |
Ai đang dùng:
- OpenClaw: SOUL.md là thành phần bắt buộc, định nghĩa "con người" của agent trong môi trường multi-tenant
- Claude Code: Custom Instructions (.claude/CLAUDE.md) tương tự SOUL.md, áp dụng per-project
- CrewAI: Agent configuration qua role và backstory (YAML tương đương SOUL)
Hạn chế — khi nào KHÔNG nên dùng:
- Task đơn giản một lần (one-shot): quá heavy
- Khi cần identity linh hoạt theo từng giây: dùng Memory hoặc dynamic prompt injection thay vì SOUL.md cứng
- Không thay thế được safety filter đầu ra: SOUL.md là lớp đầu vào (input guardrail), không phải output moderation
Đào sâu hơn
Tài liệu chính thức:
- OpenClaw SOUL.md Specification — Định nghĩa chuẩn về identity manifest
- Claude Code Custom Instructions — Thực hành tương tự trong hệ sinh thái Anthropic
Bài liên quan TroiSinh:
Cùng cụm — Core Components:
LLM — Bộ não
Hiểu cách LLM reasoning và tại sao cần SOUL.md để "điều khiển" bộ não này
Tools & Actions
Cho agent "tay chân" để hành động — cách SOUL.md giới hạn tools được phép dùng
Memory
Sự khác biệt giữa SOUL (identity cố định) và Memory (context biến động)
Planning
Cách SOUL.md định hướng chiến lược lập kế hoạch của agent
Đọc tiếp — Level 1 (Phát triển Agent):
Agent Permission Model
Tách "muốn làm" (SOUL.md định nghĩa) khỏi "được phép làm" (Permission Layer)
Build Custom Skill
Từ SOUL.md (identity) đến SKILL.md (kiến thức chuyên môn cụ thể)
Mở rộng:
- Paper: "Agent READMEs: An Empirical Study of Context Files" (arXiv:2511.12884) — Phân tích khoa học về hiệu quả file context như SOUL.md
- GitHub:
openclaw/soul-templates— Template SOUL.md cho các vai trò phổ biến (DevOps, Product Manager, Security Auditor)
Planning & Reasoning: Agent lên kế hoạch thế nào?
Tại sao AI Agent cần 'suy nghĩ' trước khi hành động? Giải thích cơ chế ReAct, Chain-of-Thought và vòng lặp lập kế hoạch giúp agent giải quyết task phức tạp.
Bản đồ AI Agent Framework 2026: Ai ở đâu?
Survey 5 framework agent phổ biến nhất 2026: OpenClaw, GoClaw, LangGraph, CrewAI, AutoGen. So sánh kiến trúc, độ khó và use case để chọn đúng từ đầu.