Bộ kỹ năng cho AI agent · tiếng Việt

Xưởng viết tiếng Việt,
từ trang trắng đến bản giao

Năm trục quy trình — bối cảnh, đồng viết, phản biện, biên tập, giám định — nối nhau bằng file chứ không bằng trí nhớ hội thoại. Đổi agent giữa chừng, tắt máy rồi mở lại, chuỗi vẫn liền; và mỗi bản giao mang theo bản tự khai nguồn gốc.

  • 5 trục quy trình
  • 9 hồ sơ thể loại
  • 9 skill · 5 thư mục
  • 7 lệnh chạy lẻ
  • 2 hệ điều hành trong CI
  • chạy CPU · không cần GPU
Trục 5 · đọc mù · hồ sơ essay report.md

s-05Vấn đề này cần được nhìn nhận một cách toàn diện và khách quan hơn.

s-06Trong bối cảnh hiện nay, giáo dục đại học đứng trước một ngã ba đường.

NOTE · sáo ngữ mở đoạn — phản chứng: văn nghị luận Việt được dạy mở như vậy

s-07Số liệu ba năm gần nhất cho thấy điều ngược lại với giả định đó.

s-08Nói cách khác, không chỉ… mà còn là một khuôn lặp lại lần thứ ba trong bài.

NOTE · khuôn cú pháp lặp — chưa hội tụ đủ để thành FLAG
S = 2/100 low_signal FLAG 0 NOTE 2/47 câu
01 · Cơ chế

Năm trục quy trình, chín hồ sơ thể loại

Trục dọc là quy trình — năm việc phải làm để có một bài tử tế. Trục ngang là tham số — thể loại đang viết. Cách chấm một bài luận khác cách chấm một bài blog ở tiêu chí, không khác ở quy trình.

Vì vậy tri thức thể loại là dữ liệu, không phải code: cả năm trục cùng đọc một nguồn, không trục nào giữ một bản hiểu riêng rồi trôi lệch dần.

Y1

Bối cảnh

Phỏng vấn ý đồ, dựng chân dung người viết và độc giả, nạp tài liệu nền.

đọc §1 Ý đồ và độc giả
Y2

Đồng viết

Dàn ý ba tầng → chờ duyệt → viết → tự khai câu nào máy viết.

đọc §2 Khung viết
Y3

Phản biện

Chấm từng tiêu chí, soi lỗ hổng lập luận và ngụy biện. Không có điểm tổng.

đọc §3 Barem chấm
Y4

Biên tập

Sửa về phía giọng tác giả, có vùng cấm sửa: số liệu, trích dẫn, thuật ngữ.

đọc §4 Quy tắc biên tập
Y5

Giám định

Đọc mù, chấm dấu hiệu, báo cáo có phản chứng và câu hỏi xác minh.

đọc §5 Chuẩn mực bắt buộc

Chín hồ sơ thể loại

  • blog bài chia sẻ, quan điểm, hướng dẫn, bài mạng xã hội dàiđủ 5 mục
  • essay bài luận, bài thi, nghị luậnđủ 5 mục
  • research nghiên cứu, báo cáo khoa họcđủ 5 mục
  • journalism tin, bài báo, phóng sựđủ 5 mục
  • novel truyện, tiểu thuyếtđủ 5 mục
  • commentary chính luận, bảo vệ nền tảng tư tưởngchỉ §5
  • thesis-proposal thuyết minh đề tàichỉ §5
  • internship-report báo cáo thực tập, kiến tậpchỉ §5
  • teaching-initiative sáng kiến của giáo viênchỉ §5

Bốn hồ sơ cuối là thể loại đặc thù Việt Nam, sinh ra từ việc giám định thật nên mới chỉ khai phần trục 5 cần. Muốn viết chúng thì dùng essay hoặc research và nói rõ phần chuẩn mực thể loại lấy từ hồ sơ nào.

02 · Quy trình

Y1 → Y5, nối nhau bằng file

Mỗi bài một thư mục ca; mỗi giai đoạn đọc sản phẩm của giai đoạn trước và để lại sản phẩm của mình. Đổi agent giữa chừng, đóng máy rồi mở lại, hay giao cho người khác chạy tiếp — chuỗi vẫn liền, vì trạng thái nằm trên đĩa chứ không nằm trong ngữ cảnh hội thoại.

Y1

Bối cảnh

Đề bài, luận đề, độc giả, ràng buộc, con trỏ tài liệu nền.

→ context.json
Y2

Đồng viết

Dàn ý ba tầng, duyệt xong mới viết văn xuôi.

→ draft.md→ draft.meta.json
Y3

Phản biện

Chấm barem thể loại, chỉ chỗ lập luận hổng, xếp việc phải sửa.

→ critique.json
Y4

Biên tập

Sửa từng nhát có lý do; thêm hay bớt một dữ kiện là trả lại bản gốc.

→ polished.md→ polish.diff.json
Y5

Giám định

Đọc mù, gán nhãn từng câu, báo cáo có phản chứng.

→ evidence.json→ report.md

Một hệ đánh số câu duy nhất đi suốt chuỗi. sentences.json sinh ở Y2; Y3, Y4 và Y5 không được tự đếm câu. Đây là hợp đồng, không phải tiện ích — ba hệ đánh số khác nhau trong cùng một ca là cách nhanh nhất để bản tự khai trỏ vào một câu không tồn tại.

Ba cổng cứng — qua được mới đi tiếp

CỔNG 1 · Y1

Còn điều kiện chưa gỡ được thì dừng và hỏi, không chuyển sang Y2.

CỔNG 2 · Y2

Chưa được duyệt dàn ý thì không viết văn xuôi.

CỔNG 3 · Y4

Phát hiện mình đã thêm hoặc bớt một dữ kiện thì trả lại bản gốc, không sửa tiếp.

03 · Cài đặt

Không có nút bấm, không có máy chủ

Bạn cài xưởng như một plugin của agent — hoặc mở thẳng thư mục repo — rồi nói chuyện với agent bằng tiếng Việt bình thường. Chạy trên máy bạn, Windows hoặc macOS. Hướng dẫn cài từng bước →

Cài plugin

Claude Code · Windows / macOS
claude plugin marketplace add ducnguyen221/agent-writing-studio
claude plugin install agent-writing-studio@agent-writing-studio
Codex · Antigravity · bản clone
git clone https://github.com/ducnguyen221/agent-writing-studio
cd agent-writing-studio
python studio.py doctor      # kiểm máy, không sửa gì · macOS: python3.12

Plugin mang nguyên cây repo — năm thư mục trục, bốn skill con của trục 5 bên trong 05-forensics/, bảy lệnh và dữ liệu dùng chung ở shared/ — nên không chép thư mục nào bằng tay. Mở bản clone thì agent đọc AGENTS.md trước rồi tự tìm đúng skill.

Thư viện Python — tuỳ chọn, đều nhẹ

pip
pip install underthesea python-docx pymupdf jsonschema pyyaml   # macOS: python3.12 -m pip install …

Không cài gì cả thì agent vẫn đọc, vẫn chấm, vẫn báo cáo được — script trong repo là lớp kiểm chứng, không phải bộ não. Riêng underthesea đáng cài: tiếng Việt không tách từ bằng khoảng trắng, thiếu nó thì các bộ đếm tự hạ độ tin cậy của chính mình.

Nơi để dữ liệu của bạn

station tuỳ chọn · $WRITING_STUDIO_DATA
setx WRITING_STUDIO_DATA "$HOME\.writing"          # Windows
export WRITING_STUDIO_DATA="$HOME/.writing"      # macOS, trong ~/.zshrc

$WRITING_STUDIO_DATA/
  work/<slug>/        # thư mục từng ca chạy
  out/                # bản giao
  corpus/             # bài hiệu chuẩn có provenance
  writers/<slug>/     # tuỳ chọn: hồ sơ giọng, khi không có kho tri thức
  audiences/<slug>/   # tuỳ chọn: chân dung độc giả, như trên

Bài của người thật, hồ sơ giọng văn và các ca chạy không nằm trong repo. Ca chạy và bản giao ở một thư mục riêng trên máy bạn — gọi là station — trỏ bằng một biến môi trường. Hồ sơ giọng, bài mẫu và chân dung độc giả nên nằm trong kho tri thức cá nhân của bạn; không có kho thì để ở station.

Thứ tự ưu tiên: tham số dòng lệnh → biến môi trường → workspace workspace/ trong thư mục bạn mở. Không đặt biến là dùng workspace đó — Git bỏ qua toàn bộ, không phải cấu hình gì; station chỉ cần khi bạn muốn dữ liệu sống lâu hơn bản clone.

Gọi bằng tiếng Việt bình thường

Muốn gìNói với agentTrục chạy
Chuẩn bị viết“Tôi cần viết một bài luận về X. Dựng bối cảnh giúp tôi trước đã.”Y1
Viết nháp“Đã có bối cảnh ở thư mục ca. Dựng dàn ý rồi viết nháp.”Y2
Phản biện“Chấm giúp bài này theo hồ sơ research, chỉ chỗ lập luận hổng.”Y3
Biên tập“Biên tập bản nháp này, giữ nguyên số liệu và trích dẫn.”Y4
Giám định“Bài nộp này có dấu hiệu AI viết không? Đọc và báo cáo.”Y5

Nói rõ thể loại thì tốt; không nói thì agent sẽ hỏi.

Giao bản docx

Bản giao hoàn chỉnh cho người đọc mặc định là .docx, không phải .md: giảng viên và biên tập viên nhận bài bằng Word.

shared/scripts/export_docx.py
python shared/scripts/export_docx.py polished.md \
  --out "D:/thu-muc-cua-toi" --provenance polished.provenance.json

Quy cách mặc định là chuẩn văn bản Việt phổ thông: Times New Roman 13pt · giãn dòng 1,5 · lề trên và dưới 2cm, trái 3cm, phải 2cm · heading đậm cỡ 14–16. --out nhận thư mục hoặc đường dẫn .docx cụ thể; --provenance chép bản tự khai nguồn gốc sang cạnh file docx. Cần python-docx; bảng Markdown chưa được dựng thành bảng Word — bài có bảng thì dùng pandoc.

Bản giao nằm ở thư mục của bạn, không nằm trong station. $WRITING_STUDIO_DATA là xưởng cục bộ của agent — mọi file làm việc ở lại đó. Bản giao ghi chính xác vào thư mục bạn đang làm việc hoặc đã chỉ định; không ai phải mò vào .writing để lấy bài.

04 · Lệnh

Bảy lệnh chạy lẻ từng bước

Namespace /agent-writing-studio:<lệnh>. Mỗi lệnh chỉ làm đúng một bước: thiếu sản phẩm của bước trước thì nó nói rõ thiếu file gì và lệnh nào sinh ra file đó, chứ không tự chạy lại cả chuỗi.

LệnhTrụcLàm gìCần đầu vàoRa file
01-contextY1Phỏng vấn ý đồ, luận đề, độc giả, ràng buộc— (bước đầu)context.json
02-draftY2Dàn ý ba tầng → chờ duyệt → viết văn xuôicontext.jsondraft.md · draft.meta.json · sentences.json
03-critiqueY3Chấm từng tiêu chí theo barem thể loạidraft.md · sentences.jsoncritique.json
04-humanizeY4Sửa về phía giọng tác giả, ba chế độ đầu radraft.md · sentences.jsonpolished.md · polish.diff.json · sidecar
05-auditY5Đọc mù → S/C → báo cáo; mặc định auditvăn bản · sentences.jsonevidence.json · report.md
deliver-docxgiaomd → docx đúng quy cách Việt, đặt vào thư mục bạn chọnpolished.md<tên>.docx + sidecar
list—In chính bảng này, đọc động từ các file lệnh——

Bảng trên là bản chép cho người đọc. Nguồn thật là bảy file trong commands/ — lệnh list đọc thẳng từ đó, nên hai chỗ lệch nhau thì tin list.

05 · Ranh giới đạo đức

Repo này vừa viết vừa giám định — nên nó tự đo mình

Cùng một danh mục dấu hiệu được dùng cho cả hai chiều. Đó là xung đột lợi ích có thật, nên nó được đo, không được hứa suông.

Phép thử: studio viết một bài 100% bằng máy, rồi chính studio chấm mù

Một bài 994 từ do trục 2 viết trọn, không một chữ nào của người, và tự khai đúng như vậy. Trục 5 chấm mù bằng một mô hình khác, chỉ nhìn thấy bản văn:

2/100

Điểm dấu hiệu S → nhãn low_signal: không làm gì, không lưu hồ sơ nghi vấn.

4,4%

Câu ở mức NOTE (đáng ghi chú) — 2/45 câu theo cách đếm tại thời điểm đo.

0%

Câu ở mức FLAG (đáng nghi). Lớp đếm tự động, không gọi mô hình: 0 tín hiệu.

Con số 4,4% tính trên 45 câu. Sau đó một lỗi nuốt câu ngắn đã được sửa và bài có 47 câu; tính lại là 2/47 = 4,3%. Con số gốc được giữ kèm ghi chú thay vì làm tròn cho đẹp.

Đọc con số này cho đúng. Trục 2 tránh đúng danh mục mà trục 5 dùng để soi — một danh sách, dùng theo hai chiều. Văn viết bằng cách tránh danh sách thì danh sách ấy không thấy nó. Trên văn đã đi qua studio, low_signal khi chấm mù là kết quả kỳ vọng, không phải bằng chứng. Ai đọc điểm thấp thành “bài này do người viết” là đọc sai.

Liêm chính đến từ provenance đi theo sản phẩm, không đến từ điểm của máy giám định. Bản tự khai nguồn gốc — câu nào máy viết, bài đã qua biên tập máy hay chưa — nằm trong draft.meta.json và trong file đi kèm bản giao. Câu hỏi đúng là bản tự khai có khớp với bản văn không, chứ không phải máy có đoán ra được không.

Vì thế trục 5 có hai chế độ: blind chỉ thấy bản văn, dùng cho tài liệu từ ngoài; audit được xem bản tự khai sau khi bản đọc mù đã khoá, và trả về báo cáo liêm chính, không trả về điểm.

Bốn luật không thương lượng

Không kỷ luật aiMọi kết quả là đầu vào cho một cuộc trao đổi, không phải một phán quyết.
Luôn có phản chứngKhông nghĩ ra được một lời giải thích vô tội cho câu đó thì bỏ nhận định đi.
Văn hành chính vốn công thức“Trong bối cảnh…”, bố cục “kết quả – tồn tại – phương hướng” là văn phong được dạy trong trường, có trước khi có mô hình ngôn ngữ. Mật độ sáo ngữ đo thể loại, không đo nguồn gốc.
Không né máy chấmTrục 4 chỉ chạy trên bản thảo đã biết nguồn gốc, và mọi bản giao đều mang theo ghi chú “đã qua biên tập máy”.

Hai con số nên nhớ trước khi tin bất kỳ máy dò AI nào. Một mô hình lớn khi được giao làm giám định viên nhận đúng 97–100% văn AI nhưng gắn nhầm hơn 95% văn người thành AI (arXiv 2308.01284). Bảy công cụ dò AI thương mại phân loại nhầm 61,22% bài TOEFL của người không nói tiếng Anh bản ngữ thành AI (arXiv 2304.02819, Patterns 2023). Cả repo này được thiết kế xung quanh hai con số đó.

06 · Thuật ngữ

Mười chữ cần thống nhất trước

Không thống nhất mấy chữ này thì cả trang trên đọc thế nào cũng được — và “đọc thế nào cũng được” là chỗ hiểu nhầm sinh ra.

Agent
Trợ lý AI đọc được file trên máy bạn và chạy được lệnh, không chỉ trò chuyện.
Skill
Một thư mục có file SKILL.md nói cho agent biết khi nào dùng và làm theo trình tự nào.
Hồ sơ thể loại
File dữ liệu mô tả một thể loại theo 5 mục, tương ứng 5 trục; cả năm trục cùng đọc một nguồn.
S — điểm dấu hiệu
0–100, dấu hiệu toàn tài liệu mạnh đến đâu. Không phải xác suất do AI viết.
C — độ phủ
Phần trăm câu hợp lệ mang dấu hiệu đo được. Không phải “bao nhiêu phần trăm bài do AI viết”.
FLAG / NOTE
Nhãn câu khi đọc mù: nhiều dấu hiệu hội tụ / một dấu hiệu đơn lẻ.
Provenance
Bản tự khai nguồn gốc đi kèm bản giao: câu nào máy viết, đã qua biên tập máy hay chưa.
Đọc mù
Chấm khi chỉ nhìn thấy bản văn, chưa được xem bản tự khai — và phải khoá kết quả trước khi xem.
Phản chứng
Lời giải thích vô tội cho chính dấu hiệu vừa nêu; thiếu nó thì nhận định chưa hoàn chỉnh.
Thư mục ca
Một bài một thư mục, chứa toàn bộ sản phẩm trung gian của chuỗi Y1→Y5.