Danh sách bài viết

Bài 19: Viết blog post giải thích project — Medium / Dev.to / blog cá nhân

Hướng dẫn viết blog post kỹ thuật giải thích project AI: chọn platform phù hợp, cấu trúc bài chuẩn, tip viết title và code snippet, SEO cơ bản, phân phối sau publish, và các lỗi phổ biến cần tránh.

27/05/2026
0 lượt xem
1

Mục Tiêu Bài Học

Sau khi hoàn thành bài này, bạn sẽ:

  • ✅ Biết chọn platform phù hợp (Dev.to, Medium, Hashnode, personal blog)
  • ✅ Nắm được cấu trúc chuẩn của 1 bài blog technical về project AI
  • ✅ Áp dụng được các tip viết title, intro, code snippet và visual
  • ✅ Hiểu SEO cơ bản cho bài kỹ thuật
  • ✅ Biết cách phân phối bài sau khi publish và tránh các lỗi phổ biến
2

Vì Sao Viết Blog Cho Project

GitHub repo chỉ cho thấy bạn có thể code. Blog post cho thấy bạn có thể giải thích — đây là kỹ năng hiring manager đánh giá cao ngang với kỹ năng kỹ thuật.

Personal branding thông qua nội dung

Mỗi bài blog được index bởi Google theo tên + skill của bạn. Khi recruiter search "RAG engineer Vietnam" hoặc "Vietnamese NLP project", bài viết của bạn có thể xuất hiện. README không làm được điều này.

Reach mở rộng qua social

1 bài Dev.to được share trên LinkedIn hoặc Twitter/X có thể tiếp cận vài nghìn người trong community — gấp nhiều lần so với 1 repo GitHub.

Showcase communication skill

Viết clear là 1 kỹ năng riêng. Nhiều engineer giỏi code nhưng giải thích kém. Blog post là bằng chứng trực tiếp rằng bạn có thể communicate technical decision.

Tài liệu hóa deep work

Sau 3-6 tháng, bạn sẽ quên 60-70% chi tiết implementation của project cũ. Blog post là ghi chú ngoài bộ nhớ — có ích khi phỏng vấn, khi onboard team mới, hoặc khi revisit project.

Networking

Tag tác giả paper bạn reference, mention tool bạn dùng — đôi khi họ reply, share, hoặc nhớ tên bạn. Đây là cách networking ít awkward hơn cold message.

3

Khi Nào Nên Viết

Không phải mọi project đều cần blog post. Viết khi đủ 3 điều kiện sau:

  • Project đã đạt MVP — có kết quả đo được, không phải draft dang dở.
  • Có ít nhất 1-2 insight non-trivial — điều gì đó bạn học được mà không có trong tutorial thông thường.
  • Bạn có 4-8 giờ để viết và edit nghiêm túc trong tuần tới.

Ưu tiên viết cho project mạnh nhất, không cần viết cho tất cả. 1 bài chất lượng cao tốt hơn 5 bài nông cạn.

Dấu hiệu chưa nên viết:

  • Project chỉ follow tutorial, không có decision nào là của bạn.
  • Bạn không thể giải thích tại sao chọn approach A thay vì B.
  • Kết quả chưa được đo cụ thể (chỉ "nó chạy được").
4

Chọn Platform

Dev.to

Community developer, miễn phí, Markdown native. Tags và reactions giúp bài dễ được discover. Khuyến nghị cho technical post AI/ML — audience phù hợp, không cần trả phí để publish.

Medium

Reach lớn hơn, audience đa dạng hơn (bao gồm non-technical). SEO tốt. Cần tài khoản để publish bài gated. Format tối giản, không hỗ trợ code execution. Phù hợp cho bài dạng storytelling hoặc career reflection.

Hashnode

Custom domain miễn phí — bài viết có thể live ở yourname.hashnode.dev hoặc domain riêng. Newsletter built-in. Modern UI. Phù hợp khi bạn muốn blog cá nhân mà không muốn setup hosting.

Personal blog (Astro / Hugo / Jekyll / Next.js)

Kiểm soát hoàn toàn: design, SEO, analytics, URL structure. Long-term asset — bài post không bị gắn với policy của platform khác. Setup effort cao hơn. Phù hợp khi bạn đã có ≥ 3 bài sẵn để populate, không nên bắt đầu với blog trống.

LinkedIn Article

Tiếp cận tốt trong network chuyên nghiệp của bạn. Format hạn chế (không code block tốt). Organic SEO thấp hơn Dev.to/Medium. Phù hợp cho bài dạng career reflection, không phải deep technical.

Substack

Newsletter-first. Phù hợp nếu bạn muốn publish định kỳ (biweekly hoặc monthly). Không phải lựa chọn tốt cho project-based post đơn lẻ.

Recommendation thực tế

Bắt đầu bằng Dev.to — miễn phí, technical audience, Markdown native, dễ được discover qua tags. Sau khi có 3-5 bài, expand sang Medium (dùng canonical URL) và LinkedIn Article. Personal blog khi bạn muốn đầu tư dài hạn.

5

Cross-Post — Viết 1 Lần, Publish Nhiều Nơi

Cross-posting cho phép bạn tối đa reach mà không cần viết lại. Nguyên tắc cốt lõi: chọn 1 platform làm canonical source (thường là personal blog hoặc Dev.to), sau đó republish lên các platform khác với canonical URL trỏ về source gốc.

Nếu không set canonical URL, Google có thể penalize vì duplicate content — bài ở platform phụ sẽ cạnh tranh với bài gốc của bạn trong search result.

Cách set canonical URL

Dev.to — trong frontmatter YAML của bài:

---
title: "How I Built a RAG Chatbot for 500 Legal Documents"
canonical_url: https://yourblog.dev/posts/rag-chatbot-legal
---

Medium — khi import story, có option "Import a story" → paste URL gốc. Medium tự detect và set canonical. Hoặc sau khi publish: Settings → Advanced Settings → Canonical Link.

Thứ tự nên publish:

  1. Publish trên canonical source (personal blog hoặc Dev.to).
  2. Chờ 3-7 ngày để Google index.
  3. Cross-post lên Medium, Hashnode với canonical URL đã set.
6

Cấu Trúc Bài Blog Technical

Template dưới đây áp dụng tốt cho dạng project deep-dive (1500-2500 từ). Không cần dùng tất cả section — bỏ phần nào không có nội dung thực.

# Title (45-65 ký tự, SEO friendly)

[Hero image — architecture diagram hoặc demo screenshot]

[Intro — 2 đoạn]
- Câu hook: 1 số liệu cụ thể hoặc problem statement rõ.
- Promise: reader sẽ học được gì từ bài này.

## TL;DR
- 3-5 bullet tóm tắt cho người scan nhanh.

## Background
- Context: domain, problem.
- Tại sao existing solution chưa đủ.
- Prior art: cite 1-2 paper hoặc project liên quan.

## Approach
- High-level architecture.
- Diagram visual.
- Tech stack + lý do chọn (không chỉ liệt kê tên).

## Implementation
- Walk-through phần key nhất.
- Code snippet (10-30 dòng mỗi snippet).
- Giải thích "tại sao làm vậy", không chỉ "làm gì".

## Results
- Metric cụ thể.
- So sánh với baseline.
- Visualization (chart, table).

## What I Learned
- Surprising finding.
- Nếu làm lại, tôi sẽ làm khác gì.
- Limitation của approach hiện tại.

## What's Next
- Roadmap ngắn (2-3 bullet, không hứa hẹn quá mức).

## Resources
- Repo GitHub.
- Demo URL (nếu có).
- Reference / further reading.

---
[Bio ngắn: tên, link LinkedIn / GitHub]

Lưu ý về section "Background": Đây là phần nhiều người bỏ qua nhưng lại quan trọng với reader không quen domain. 1-2 đoạn context về bài toán giúp bài accessible với nhiều audience hơn.

7

Tip Viết Chất Lượng

a) Title — quan trọng nhất

Title quyết định 60-70% click. Specificity quan trọng hơn clever:

Tệ Tốt
My AI Project How I Built a RAG Chatbot for 500 Vietnamese Legal Documents in 4 Weeks
Fine-tuning LLM Fine-tuning Llama 3.1 8B on 10K Vietnamese QA Pairs with LoRA — Practical Notes
Improving my model Faithfulness Score 0.65 → 0.87: What Changed After Tuning Chunk Size in RAG

Công thức title hiệu quả: [Verb] + [specific tech/approach] + [specific context/number] + [optional: outcome]

b) Intro 2 đoạn

Đoạn đầu: hook bằng số liệu cụ thể hoặc vấn đề rõ ràng. Đoạn hai: nói rõ reader sẽ học được gì.

Ví dụ hook hiệu quả:
"Sau 3 lần iteration, RAG chatbot của tôi đạt Faithfulness 0.87 trên bộ 500 trang luật lao động VN. Điểm khác biệt không phải model — mà là chunk size và reranker. Bài này ghi lại toàn bộ quá trình."

Ví dụ hook yếu:
"Trong bài viết này tôi sẽ giới thiệu project RAG của tôi." — Không có số liệu, không có tension, không có lý do để đọc tiếp.

c) Show, don't tell

Thay vì claim chung chung, dùng số liệu cụ thể:

Tell (yếu) Show (mạnh)
It works very well. Latency P95 = 1.2s, down from 3.8s sau khi switch sang async retrieval.
The model is accurate. F1 score = 0.91 trên test set 2000 samples, baseline (TF-IDF) = 0.73.
I improved the pipeline. Faithfulness tăng từ 0.65 → 0.87 sau khi tăng chunk size từ 200 → 500 token.

d) Code snippet — 5 quy tắc

  1. Pin version: Ghi rõ "với LangChain 0.3.5, Python 3.11" ngay đầu snippet hoặc trong intro.
  2. Self-contained: Reader có thể copy-paste và chạy được (hoặc hiểu được) mà không cần đọc file khác.
  3. Highlight key line: Dùng comment để chỉ ra dòng quan trọng nhất.
  4. Truncate: Tối đa 30 dòng mỗi snippet. Dài hơn thì link full code trên GitHub.
  5. Language tag: Luôn dùng code fence với tag ngôn ngữ (```python, ```bash, v.v.) để syntax highlighting hoạt động.

Ví dụ snippet tốt:

# LangChain 0.3.5 + Python 3.11
# Key change: chunk_size=500 thay vì mặc định 200

from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,       # ← điểm cải thiện Faithfulness 0.65→0.87
    chunk_overlap=50,
    separators=["\n\n", "\n", "。", ".", " ", ""],
)

docs = splitter.split_documents(raw_docs)
print(f"Total chunks: {len(docs)}")  # 1247 chunks từ 500 trang

e) Visual

Mỗi bài 1500 từ nên có tối thiểu 2-3 visual:

  • Diagram kiến trúc (dùng Excalidraw hoặc draw.io) — đặt ở đầu phần Approach.
  • Chart kết quả (accuracy over iterations, latency comparison) — đặt trong Results.
  • Screenshot demo hoặc output thực tế — đặt trong Implementation hoặc Results.

Visual không cần đẹp — cần rõ. Sơ đồ tay vẽ trên Excalidraw đủ dùng.

f) Voice và tone

Viết ở first-person, cụ thể, thành thật về limitation. Tránh passive voice và câu quá dài. Không dùng từ như "leverage", "synergy", "paradigm shift" — chúng không thêm thông tin, chỉ làm bài nặng hơn.

Ví dụ về tone:

  • Tốt: "Tôi thử dùng Pinecone trước, nhưng free tier chỉ 100MB — không đủ cho 500 trang PDF. Sau đó chuyển sang Qdrant self-hosted, latency giảm từ 0.4s → 0.12s."
  • Tệ: "Leveraging state-of-the-art vector database technology, the system achieves optimal performance."
8

Độ Dài Tối Ưu

Loại bài Độ dài khuyến nghị
Project deep-dive 1500-2500 từ
Engineering decision (tại sao chọn A thay B) 1200-1800 từ
Deep technical tutorial 2500-4000 từ
Learning reflection / journey 1000-1500 từ

Dưới 1000 từ: Thường không đủ depth để show kỹ năng kỹ thuật. Phù hợp cho LinkedIn post, không phải blog post.

Trên 4000 từ: Completion rate giảm mạnh. Nếu content nhiều, xem xét tách thành 2 phần (Part 1 / Part 2).

9

SEO Cơ Bản

Bạn không cần thành SEO specialist. Chỉ cần tránh các lỗi phổ biến:

Title tag

Đặt từ khoá kỹ thuật reader sẽ search ở đầu title. Ví dụ: "RAG" hoặc "fine-tuning LoRA" nên xuất hiện trong title, không chỉ trong body.

Slug URL

Lowercase, hyphen-separated, dưới 60 ký tự. Tránh stop word không cần thiết:

  • Tốt: rag-chatbot-legal-documents-langchain
  • Tệ: how-i-built-my-amazing-rag-chatbot-for-vietnamese-legal-documents-using-langchain

Meta description

150-160 ký tự, mô tả cụ thể bài viết có gì. Dev.to và Medium tự generate nếu bạn không set, nhưng tự set thường tốt hơn. Ví dụ: "Hướng dẫn build RAG chatbot trên 500 trang PDF pháp lý với LangChain 0.3.5 và Qdrant. Bao gồm evaluation Faithfulness với RAGAS."

Header hierarchy

H1 chỉ dùng 1 lần (title). H2 cho section chính. H3 cho subsection. Không dùng H2 làm bold text thuần túy.

Internal và external link

Link 3-5 resource liên quan (paper, tool docs, repo). Giúp reader đọc thêm, đồng thời tốt cho SEO.

Alt text cho image

Mọi ảnh cần alt text mô tả nội dung ảnh, không phải tên file.

10

Phân Phối Sau Publish

Publish xong không phải là hết. Distribution quyết định một phần lớn reach của bài:

LinkedIn

Viết 1 post ngắn (3-5 dòng) tóm tắt key insight của bài, đính kèm link. Đừng chỉ post "New blog post: [link]" — context giúp post được reach cao hơn trong LinkedIn algorithm.

Twitter/X thread

Thread 5-10 tweet: tweet đầu là hook + số liệu, các tweet tiếp theo walk-through key point, tweet cuối link full blog. Format này hoạt động tốt với technical audience trên Twitter.

Reddit

Subreddit phù hợp: r/MachineLearning (standard), r/learnmachinelearning (accessible hơn), r/LanguageTechnology (NLP/LLM). Đọc rule của sub trước khi post — nhiều sub yêu cầu không self-promote quá nhiều. Thêm value trong comment thread, không chỉ drop link.

Hacker News

Submit nếu bài có insight kỹ thuật thực sự mới. HN community khắt khe với marketing-speak — bài phải fact-based, không hype. Nếu đủ chất lượng, 1 bài HN front page = traffic lớn trong 24h.

Discord / Slack community

Share trong channel #projects hoặc #resources của community AI/ML bạn tham gia. Tốt hơn nếu bài đề cập đến tool mà community đang dùng.

Tag người liên quan

Nếu bài reference paper của ai đó, hoặc bạn dùng tool của team nào đó, tag họ khi share. Tỷ lệ reply/repost cao hơn so với cold mention.

Giới hạn tự promote

Share 1-2 lần đầu trong tuần đầu là hợp lý. Spam cùng link qua nhiều channel trong vài ngày → bị mute hoặc ban. Tag random influencer không quen → annoying, không hiệu quả.

Lịch publish hợp lý

1 bài mỗi 2-3 tuần là sustainable trong dài hạn. 5-6 bài trong 1 năm đã là blog presence solid. Quantity không bù được quality.

11

3 Dạng Blog Phổ Biến Cho AI Engineer

a) Project deep-dive

1 project, 1 insight kỹ thuật chính. Tập trung vào decision — tại sao chọn approach này, không phải approach khác.

Ví dụ title: "Why I Switched from Pinecone to Qdrant for My RAG Project — Benchmark and Migration Notes"

Khi dùng: Khi bạn có decision kỹ thuật rõ ràng với evidence (metric, benchmark, trade-off).

b) Tutorial

Reader follow theo và build được something cụ thể. Cần test kỹ — snippet phải chạy được với version đã pin.

Ví dụ title: "Build a Vietnamese Food Classifier with PyTorch 2.4 in 200 Lines — From Dataset to Gradio Demo"

Khi dùng: Khi bạn có quy trình end-to-end rõ ràng và muốn giúp người khác replicate.

c) Learning journey / reflection

Nhìn lại 1 milestone (6 tháng học, hoàn thành khóa học, chuyển ngành). Honest hơn, personal hơn, dễ được share hơn trên LinkedIn.

Ví dụ title: "6 Months Learning AI Engineering From Scratch — What Worked, What Didn't, What I'd Do Differently"

Khi dùng: Khi bạn muốn connect với audience rộng hơn (không chỉ technical). Không cần code snippet nhiều.

12

Tools Hỗ Trợ

Mục đích Tool Ghi chú
Draft + outline Notion / Obsidian / Google Docs Chọn 1, dùng nhất quán
Markdown editor VS Code, Typora VS Code với Markdown Preview đủ dùng
Grammar check Grammarly, LanguageTool Tiếng Anh: Grammarly; tiếng Việt: LanguageTool
Diagram Excalidraw, draw.io Excalidraw nhanh hơn, miễn phí hoàn toàn
Screenshot / annotation CleanShot X (macOS), Flameshot (Linux) Annotation giúp highlight phần quan trọng
AI assist Claude, ChatGPT Dùng để brainstorm outline và edit — KHÔNG generate full post

Về AI assist: Dùng để check grammar, suggest cách diễn đạt ngắn gọn hơn, hoặc brainstorm section structure — có ích. Generate full post từ prompt → bài nhạt, dễ bị detect, một số platform đã có policy về AI content. Voice cá nhân là thứ differentiates bài của bạn.

13

Anti-Pattern Cần Tránh

Content

  • LLM-generated content rõ ràng: Văn phong template, không có voice riêng, không có số liệu cụ thể → reader detect ngay, một số platform ban account.
  • Code snippet không chạy được: Broken trust với reader. Luôn test snippet trước khi publish.
  • Result claim không verify được: "Đạt 99% accuracy" mà không nói test set gồm gì → không credible.
  • Bài outdated nhanh: Snippet Python 3.6 trong 2026, API deprecated không update → negative signal về attention to detail.
  • Framework name dropping: Liệt kê 10 tool trong title nhưng chỉ dùng 2 thực sự → clickbait.
  • Intro quá dài: Mất 400 từ giải thích "deep learning là gì" trong bài về RAG specific → reader bỏ trước khi đến content chính.

Distribution

  • Spam community: Đăng link trong 5 community khác nhau cùng ngày → ban.
  • Tag random influencer: Tag người không biết bạn, không liên quan bài → annoying.
  • Copy code không attribution: Nếu dùng snippet từ Stack Overflow hoặc tutorial khác, credit nguồn.
  • 1 post / 6 tháng: Blog "dead" signal, không build được reader base.

Credibility

  • Self-deprecating intro: "Tôi chỉ là beginner, bài này có thể sai" ở đầu bài → undermine credibility ngay từ đầu. Nếu có uncertainty, nói cụ thể về phần nào uncertain, không nói chung chung.
  • Comment off + không reply: Reader hỏi câu hỏi trong comment, bạn không reply → ghost community.
14

Bài Tập Thực Hành

Bài tập này hoàn thành trong 1 tuần:

Ngày 1 — Chọn project và outline (30 phút)

  1. Chọn 1 project đã hoàn thành.
  2. Xác định 1 insight non-trivial bạn học được.
  3. Viết outline 8-10 bullet theo template ở mục 6 — chưa cần viết prose.
  4. Draft 3 ứng viên title theo format: [Verb] + [specific tech] + [context/number].

Ngày 2-4 — Draft (4-6 giờ tổng)

  1. Viết prose từ outline. Đừng edit khi đang draft — chỉ viết.
  2. Chèn code snippet — test chạy được trước khi paste.
  3. Tạo ít nhất 1 diagram bằng Excalidraw.

Ngày 5-6 — Edit (2-3 giờ tổng)

  1. Edit lần 1: xóa đoạn nào không thêm value.
  2. Edit lần 2: check tất cả số liệu và snippet còn đúng không.
  3. Edit lần 3: check grammar (Grammarly nếu viết tiếng Anh).
  4. Viết meta description (150-160 ký tự).

Ngày 7 — Publish và share

  1. Publish trên Dev.to với đúng tags (3-5 tags liên quan).
  2. Viết LinkedIn post ngắn: 3-4 dòng key insight + link bài.
  3. Share trong 1 community phù hợp.
  4. Monitor comment trong 48h đầu và reply.