> ## Documentation Index
> Fetch the complete documentation index at: https://huongdan.luklak.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bài 1 — Nguyên lý LLM: Chuyện gì xảy ra khi bạn gửi một prompt?

> Hiểu từ nguyên lý: một LLM chỉ làm một việc — dự đoán token tiếp theo dựa trên ngữ cảnh. Mọi thứ khác là kỹ thuật.

**Điểm cốt lõi của bài này**

<Check>
  **Một LLM (Large Language Model) chỉ làm một việc: dự đoán token tiếp theo dựa trên ngữ cảnh. Chấm hết. Mọi thứ bạn thấy — trò chuyện, viết code, lập luận — đều là kỹ thuật xây trên nguyên lý đơn giản này.**
</Check>

## Ẩn dụ: Người thư ký thông minh nhất thế giới, nhưng trí nhớ ngắn hạn

Hãy tưởng tượng bạn thuê một trợ lý cực kỳ thông minh. Anh ấy đã đọc gần như mọi thứ từng được viết ra — sách, wiki, tài liệu kỹ thuật, email công khai, mọi thứ.

Nhưng có hai giới hạn:

1. **Anh ấy không nhớ gì về bạn trước khi bạn ngồi xuống nói chuyện.** Mỗi lần gặp, anh bắt đầu từ số 0.
2. **Chiếc bàn làm việc chỉ có chỗ cho một số lượng giấy tờ nhất định.** Nếu bạn đưa quá nhiều tài liệu, anh sẽ phải bỏ bớt đi.

Đó là LLM. Không phép màu, không ý thức — chỉ là một cỗ máy dự đoán, cực kỳ thành thạo trong việc đoán xem "chữ tiếp theo" là gì, dựa trên mọi chữ đã có trên bàn.

## Vòng đời của một prompt

```mermaid theme={null}
flowchart TD
    A[Bạn gõ prompt] --> B[Tokenize<br/>chia thành mảnh nhỏ]
    B --> C[Model nhận<br/>toàn bộ token]
    C --> D[Dự đoán<br/>token tiếp theo]
    D --> E[Thêm vào câu trả lời]
    E --> F{Đã xong?}
    F -->|Chưa| D
    F -->|Rồi| G[Bạn thấy<br/>câu trả lời]
    style A fill:#e3f2fd
    style G fill:#c8e6c9
```

Khi bạn gõ "Viết email xin lỗi khách hàng", chuyện gì xảy ra?

1. **Token hóa (tokenization)**: Câu của bạn được chia thành các mảnh nhỏ gọi là **token (token)**. "Viết" là 1 token, "email" là 1 token, "xin" là 1 token. Một token trung bình là 3/4 một từ tiếng Anh, hoặc khoảng 1 ký tự tiếng Việt.
2. **Nạp vào model**: Toàn bộ token được đưa cho model cùng lúc. Model không "đọc từ trái qua phải" như con người — nó nhìn toàn bộ ngữ cảnh một lần.
3. **Dự đoán**: Model tính xác suất cho từng token có thể là "tiếp theo". Có thể "Kính" có xác suất 42%, "Chào" có 38%, "Gửi" có 20%.
4. **Chọn**: Model chọn một token (thường là token xác suất cao nhất, đôi khi có yếu tố ngẫu nhiên).
5. **Lặp lại**: Token vừa chọn được cộng vào ngữ cảnh, rồi dự đoán tiếp token tiếp theo. Cứ thế cho đến khi model quyết định "đã xong".

**Điểm quan trọng**: model **không "hiểu"** theo nghĩa con người hiểu. Nó thống kê.

## Cửa sổ ngữ cảnh — Chiếc bàn làm việc

<Info>
  **Cửa sổ ngữ cảnh (context window)** là lượng token tối đa model có thể "nhìn thấy" cùng một lúc. Với Claude Opus 4.6, con số này là khoảng **1 triệu token** — tương đương khoảng 700.000 từ tiếng Anh, hoặc toàn bộ bộ Harry Potter.

  Nghe thì nhiều. Thực tế thì rất dễ lấp đầy nếu bạn cho Claude đọc cả một codebase lớn.
</Info>

Cửa sổ ngữ cảnh chứa:

```mermaid theme={null}
flowchart TD
    CW[🖥️ Cửa sổ ngữ cảnh<br/>~1 triệu token]
    CW --> P[📝 Prompt mới nhất]
    CW --> H[💬 Lịch sử trò chuyện]
    CW --> F[📄 File Claude đã đọc]
    CW --> S[⚙️ System prompt<br/>Claude Code nạp ngầm]
    CW --> T[🖥️ Kết quả tool<br/>lệnh shell, grep, ...]
    CW --> M[📋 CLAUDE.md<br/>quy tắc dự án]

    CW -.khi gần đầy.-> AC[🗜️ Auto-compact<br/>nén & tóm tắt]
    AC -.giữ lại.-> P
    AC -.tóm tắt.-> H
    AC -.bỏ bớt.-> T

    style CW fill:#e3f2fd
    style AC fill:#fff3e0
```

Khi bàn hết chỗ, Claude Code sẽ **nén tự động (auto-compact)**: cắt bớt kết quả tool cũ, tóm tắt hội thoại, giữ lại yêu cầu gần nhất. Một số thông tin ban đầu có thể bị "quên" — đó là vì sao **quy tắc bền vững nên đặt trong file CLAUDE.md** (đọc mỗi phiên) thay vì trong trò chuyện.

## Vì sao LLM ảo giác

Đây là hiểu lầm lớn nhất về LLM. Nhiều người nghĩ: "AI nói sai vì nó ngu". Không phải.

LLM **luôn luôn dự đoán**. Nó không có khái niệm "biết" vs "không biết" — chỉ có xác suất cao vs xác suất thấp.

Khi bạn hỏi "CEO của công ty ABC tên gì?" và model không có dữ liệu, nó vẫn dự đoán token tiếp theo. Vì mẫu câu "CEO của ABC tên X" là hợp lý về mặt ngữ pháp, model sẽ chọn một cái tên nghe có lý — dù hoàn toàn bịa ra.

Đây gọi là **ảo giác (hallucination)**.

<Warning>
  **Không bao giờ tin kết quả LLM một cách mù quáng — đặc biệt là:**

  * Con số cụ thể (giá, ngày, phần trăm)
  * URL và đường link
  * Tên người, tên công ty, tên API function
  * Lời khuyên pháp lý, y tế, tài chính cụ thể

  Hãy xem LLM là một **bản nháp rất thông minh**, không phải **nguồn sự thật**.
</Warning>

## Garbage in, Garbage out — Luật sắt

Chất lượng đầu ra tỉ lệ với chất lượng đầu vào. Không có ngoại lệ.

Hai prompt dưới đây cho cùng một model:

<Tabs>
  <Tab title="Prompt kém">
    ```
    Viết email gửi khách.
    ```

    Kết quả: Một email chung chung, nhạt nhẽo, không phù hợp với ngữ cảnh cụ thể nào. Model phải đoán mọi thứ: khách là ai, mục đích gì, giọng điệu ra sao.
  </Tab>

  <Tab title="Prompt tốt">
    ```
    Viết email cảm ơn khách hàng Công ty ABC vì đã ký hợp đồng tư vấn
    trị giá 500 triệu ngày hôm nay. Giọng điệu: chuyên nghiệp, ấm áp,
    không quá trang trọng. Đề cập bước tiếp theo: cuộc họp kick-off
    thứ Hai tuần sau. Ký tên: CEO Nguyễn Văn A.
    ```

    Kết quả: Một email cụ thể, đúng ngữ cảnh, gần như có thể gửi ngay. Model có đầy đủ ngữ cảnh để làm việc.
  </Tab>
</Tabs>

Công thức dễ nhớ: **Vai trò + Ngữ cảnh + Nhiệm vụ + Ràng buộc + Định dạng mong muốn.**

## Tự kiểm tra

<AccordionGroup>
  <Accordion title="Câu 1: LLM “biết” mọi thứ nó đã được huấn luyện?" icon="circle-question">
    **Không.** LLM **dự đoán** dựa trên pattern, không phải **ghi nhớ**. Nếu một thông tin xuất hiện nhiều lần trong dữ liệu huấn luyện, model có xác suất đoán đúng cao. Nếu ít xuất hiện, model sẽ bịa — tức ảo giác (hallucinate). Đó là vì sao LLM mạnh với kiến thức phổ thông nhưng yếu với chi tiết cụ thể, số liệu cập nhật.
  </Accordion>

  <Accordion title="Câu 2: Vì sao cùng một prompt có thể cho ra kết quả khác nhau?" icon="circle-question">
    Vì có một yếu tố **ngẫu nhiên** trong bước chọn token (gọi là "temperature"). Với temperature = 0, model luôn chọn token xác suất cao nhất → kết quả giống nhau. Với temperature > 0, model đôi khi chọn token xác suất thấp hơn → kết quả đa dạng, "sáng tạo" hơn. Claude Code mặc định có temperature nhỏ để đầu ra ổn định.
  </Accordion>

  <Accordion title="Câu 3: Cửa sổ ngữ cảnh hết chỗ thì sao?" icon="circle-question">
    Claude Code tự động **nén (auto-compact)**: cắt bớt kết quả tool cũ, tóm tắt hội thoại. Quy tắc nền tảng: đặt thông tin bền vững vào file CLAUDE.md (đọc mỗi phiên), không vào trò chuyện. File luôn có thể đọc lại; hội thoại thì không.
  </Accordion>
</AccordionGroup>

## Bài tập

<Steps>
  <Step title="Mở Claude.ai trong trình duyệt">
    Chưa đăng nhập cũng được.
  </Step>

  <Step title="Thử prompt không có ngữ cảnh">
    Gõ: *"Viết email xin lỗi khách hàng."*

    Quan sát: email có chung chung không? Có phù hợp với ngữ cảnh thực tế của bạn không?
  </Step>

  <Step title="Thử prompt có ngữ cảnh đầy đủ">
    Gõ: *"Viết email xin lỗi khách hàng ABC vì đơn hàng bị giao chậm 3 ngày do bão lũ. Giọng điệu: chân thành, không đổ lỗi. Đề xuất: tặng voucher giảm 10% cho đơn sau. Ký tên: CEO Nguyễn Văn B."*

    Quan sát: khác nhau như thế nào?
  </Step>

  <Step title="Rút ra bài học của chính bạn">
    Viết xuống một câu: *"Prompt tốt là prompt có ..."*
  </Step>
</Steps>

## Tiếp theo?

* [Bài 2 — Claude Code là gì? Không phải chatbot](/06-academy/claude-code/claude-code-la-gi)
* [Quay lại Tổng quan khóa học](/06-academy/claude-code/index)
