AI 6 — LLM & Prompt Engineering

13 thg 7, 2026 12 lượt xem
#ai
#claude
#prompt-engineering
#llm

Mở đầu: tại sao bài này quan trọng

Mô hình ngôn ngữ lớn (Large Language Model — LLM) là "bộ não" đứng sau các trợ lý như Claude. Nếu bạn hiểu cách LLM hoạt động và biết cách viết prompt tốt, bạn sẽ chuyển từ chỗ "may rủi cầu trời cho ra kết quả đúng" sang "điều khiển được mô hình một cách có kỷ luật". Bài này đi từ con số không (zero) đến chỗ tự tin xây ứng dụng thật (hero), với ví dụ gọi API chính xác.

Mục tiêu cụ thể sau khi đọc xong:

  • Hiểu LLM thực chất chỉ làm một việc: dự đoán token tiếp theo.
  • Nắm được token, tokenization, context window là gì và vì sao chúng giới hạn bạn.
  • Biết temperaturetop-p thay đổi đầu ra như thế nào.
  • Hiểu hiện tượng hallucination (bịa đặt) và cách giảm thiểu.
  • Viết được prompt rõ ràng: vai trò, few-shot, chain-of-thought, ràng buộc định dạng.
  • Gọi đúng API với họ model Claude hiện đại nhất.

LLM là gì?

Một câu định nghĩa

LLM là một mạng nơ-ron khổng lồ được huấn luyện để dự đoán token tiếp theo trong một chuỗi văn bản. Nghe đơn giản đến mức gây ngạc nhiên, nhưng đúng là vậy: bạn đưa vào một đoạn văn, mô hình tính xác suất cho từng token có thể đứng kế tiếp, rồi chọn một token, ghép vào, và lặp lại.

Ví dụ trực giác. Cho câu "Thủ đô của Việt Nam là", mô hình gán xác suất cao cho token "Hà" (rồi "Nội"), xác suất thấp cho "chuối". Nó không "tra cứu cơ sở dữ liệu" — nó dự đoán dựa trên hàng nghìn tỉ ví dụ văn bản đã thấy lúc huấn luyện.

Sự thông minh có vẻ "biết suy luận, biết viết code, biết tóm tắt" đều nổi lên (emergent) từ một việc tưởng tầm thường này, khi mô hình đủ lớn và dữ liệu đủ nhiều.

Ba giai đoạn huấn luyện (trực giác)

Đừng nhớ chi tiết kỹ thuật, hãy nhớ ý tưởng:

  1. Pretraining (tiền huấn luyện). Mô hình đọc một kho văn bản khổng lồ (sách, web, code...) và học dự đoán token tiếp theo. Sau giai đoạn này nó "biết rất nhiều" về ngôn ngữ và thế giới, nhưng chưa biết cư xử như một trợ lý — nó chỉ biết tiếp nối văn bản.

  2. Fine-tuning (tinh chỉnh có giám sát). Người ta cho mô hình học từ các cặp "câu hỏi → câu trả lời mẫu tốt" do con người viết. Mô hình học cách trả lời theo định dạng hữu ích, lịch sự, đúng trọng tâm.

  3. RLHF (Reinforcement Learning from Human Feedback). Con người xếp hạng nhiều câu trả lời của mô hình (cái nào tốt hơn), và mô hình được "thưởng" khi tạo ra câu trả lời được ưa chuộng. Đây là bước giúp mô hình trở nên an toàn, hữu ích, và bám sát ý người dùng hơn.

Trực giác cốt lõi: pretraining tạo ra kiến thức, fine-tuning + RLHF tạo ra hành vi. Cả hai cộng lại mới ra một trợ lý dùng được.


Token & Tokenization

Token là gì?

Mô hình không "đọc" từng ký tự hay từng từ, mà đọc token — các mảnh văn bản. Một token có thể là một từ ngắn, một phần của từ, hay một dấu câu. Quy tắc xấp xỉ (tiếng Anh): khoảng 1 token ≈ 4 ký tự ≈ 0.75 từ. Tiếng Việt có dấu thường tốn token hơn.

Ví dụ: chuỗi "Tóm tắt CASA" có thể bị tách thành các token kiểu ["Tóm", " tắt", " CA", "SA"]. Quá trình tách này gọi là tokenization.

Vì sao bạn phải quan tâm tới token?

  • Tính tiền theo token. Bạn trả phí cho số token đầu vào (input) và đầu ra (output). Prompt dài = đắt hơn.
  • Giới hạn độ dài. Mô hình chỉ "nhìn" được một số token nhất định cùng lúc (xem context window bên dưới).
  • Đừng đoán bằng công cụ của hãng khác. Đừng dùng tokenizer của OpenAI (như tiktoken) để ước lượng token cho Claude — nó đếm sai. Dùng endpoint đếm token chính thức:
import anthropic
client = anthropic.Anthropic()
resp = client.messages.count_tokens(
    model="claude-opus-4-8",
    messages=[{"role": "user", "content": "Tóm tắt xu hướng CASA quý này."}],
)
print(resp.input_tokens)

Context window

Context window là tổng số token mà mô hình có thể xử lý trong một lượt — bao gồm cả prompt đầu vào lẫn câu trả lời đầu ra. Bạn có thể hình dung nó như "trí nhớ làm việc" của mô hình trong một cuộc gọi.

  • Họ model Claude hiện đại có context window tới 1 triệu token (riêng Claude Haiku 4.5 là 200K) — đủ để nhét cả một codebase hay nhiều tài liệu dài.
  • Nếu nội dung vượt quá context window, bạn không được cắt cụt âm thầm. Hãy chia nhỏ (chunking), tóm tắt, hoặc dùng kỹ thuật RAG (bài sau).
  • Mô hình không nhớ gì giữa các lần gọi API. API là stateless: muốn nó "nhớ" cuộc hội thoại, bạn phải gửi lại toàn bộ lịch sử mỗi lần.

Tham số sinh: temperature & top-p

Khi mô hình đã có phân phối xác suất cho token tiếp theo, cách chọn token được điều khiển bởi vài tham số. Hai tham số quan trọng nhất:

Temperature (nhiệt độ)

temperature điều chỉnh độ "ngẫu nhiên/sáng tạo":

  • Thấp (gần 0): mô hình gần như luôn chọn token có xác suất cao nhất → đầu ra ổn định, lặp lại được, ít sáng tạo. Phù hợp cho trích xuất dữ liệu, phân loại, viết code.
  • Cao (gần 1): mô hình mạnh dạn chọn cả token xác suất thấp → đầu ra đa dạng, sáng tạo, nhưng dễ lệch. Phù hợp cho brainstorming, viết quảng cáo.

Trực giác: temperature thấp = "đi đường an toàn"; temperature cao = "dám rẽ ngang".

Top-p (nucleus sampling)

top-p giới hạn mô hình chỉ chọn trong nhóm token chiếm p phần xác suất tích lũy đầu tiên. Ví dụ top_p = 0.9: chỉ xét những token thuộc nhóm cộng dồn đến 90% xác suất, bỏ phần đuôi 10% ít khả năng. Điều này giúp cắt bỏ các lựa chọn "kỳ quặc" mà vẫn giữ được sự đa dạng hợp lý.

Quy tắc thực dụng: thường chỉ chỉnh một trong hai (temperature hoặc top_p), không chỉnh cả hai cùng lúc. Bắt đầu với mặc định, chỉ tăng độ ngẫu nhiên khi bạn thực sự cần đa dạng.

Lưu ý quan trọng với model Claude mới nhất: Các model như Claude Opus 4.8 / Claude Fable 5 không nhận temperature, top_p, top_k nữa (gửi vào sẽ lỗi 400). Với các model này, bạn điều khiển hành vi bằng cách viết prompt và bằng tham số output_config.effort (mức độ "nỗ lực" suy luận). Đây là một thay đổi cần nhớ: trực giác về temperature/top-p vẫn hữu ích để hiểu LLM nói chung, nhưng cách điều khiển model Claude hiện đại là qua prompt + effort.


Hallucination (ảo giác / bịa đặt)

Hiện tượng

Hallucination là khi mô hình tạo ra thông tin nghe rất tự tin nhưng sai hoặc bịa hoàn toàn — tên sách không tồn tại, số liệu sai, trích dẫn giả, hàm API không có thật.

Vì sao xảy ra? Quay lại bản chất: mô hình dự đoán token có vẻ hợp lý, chứ không kiểm tra sự thật. Khi nó không "biết", nó vẫn tạo ra văn bản trôi chảy, vì việc đó giống với điều nó được huấn luyện để làm. Nó không có cơ chế nội tại để nói "tôi không chắc" trừ khi được dạy.

Cách giảm hallucination

Kỹ thuậtVì sao có tác dụng
Cung cấp ngữ cảnh / tài liệu nguồnMô hình trả lời dựa trên văn bản bạn đưa thay vì "trí nhớ" mơ hồ (nền tảng của RAG — bài AI 7).
Cho phép nói "không biết"Ghi rõ trong prompt: "Nếu không có trong tài liệu, trả lời 'Không có thông tin'."
Yêu cầu trích dẫnBuộc mô hình chỉ ra nguồn → khó bịa hơn, dễ kiểm tra hơn.
Hạ độ ngẫu nhiênVới model có temperature, để thấp; với model mới, dùng prompt rõ ràng và effort cao.
Chain-of-thoughtCho mô hình suy luận từng bước trước khi kết luận giúp giảm sai logic.
Kiểm tra lại (verification)Dùng một lượt gọi thứ hai để mô hình tự rà soát, hoặc đối chiếu với nguồn ngoài.

Không có cách nào loại bỏ hoàn toàn hallucination. Hãy thiết kế hệ thống với giả định "mô hình có thể sai" — luôn có bước kiểm chứng cho các quyết định quan trọng (đặc biệt trong ngân hàng, y tế, pháp lý).


Prompt Engineering: nghệ thuật ra lệnh cho LLM

Prompt là toàn bộ văn bản bạn đưa cho mô hình. Prompt engineering là kỹ năng viết prompt sao cho mô hình trả về đúng thứ bạn muốn. Đây là kỹ năng có đòn bẩy cao nhất khi xây ứng dụng LLM — thường rẻ và nhanh hơn nhiều so với việc tinh chỉnh model.

Luồng cơ bản: prompt → LLM → output

Các kỹ thuật prompt cốt lõi

Kỹ thuậtMô tảKhi nào dùng
System prompt / vai tròĐặt persona và quy tắc nền: "Bạn là trợ lý phân tích dữ liệu ngân hàng."Hầu như luôn dùng — định khung toàn cuộc hội thoại.
Zero-shotChỉ ra lệnh, không cho ví dụ.Tác vụ đơn giản, mô hình đã hiểu rõ.
Few-shotCho 2–5 ví dụ "đầu vào → đầu ra mong muốn".Khi cần định dạng/giọng văn nhất quán, tác vụ đặc thù.
Chain-of-thought (CoT)Yêu cầu "suy luận từng bước trước khi trả lời".Bài toán cần suy luận nhiều bước (toán, logic, phân tích).
Cung cấp ngữ cảnhDán tài liệu/dữ liệu vào prompt để mô hình bám vào.Giảm hallucination, hỏi-đáp trên tài liệu.
Ràng buộc định dạng đầu raBắt mô hình trả về JSON/bảng/danh sách theo schema.Khi output cần được máy đọc lại.
Phân tách rõ ràngDùng nhãn/thẻ (### Yêu cầu, <tài_liệu>...</tài_liệu>) để tách các phần.Prompt dài, nhiều thành phần.

Cấu trúc một prompt rõ ràng

Một prompt tốt thường có các phần được phân tách rõ:

  1. Vai trò & quy tắc (system): bạn là ai, được/không được làm gì.
  2. Ngữ cảnh: dữ liệu, tài liệu, bối cảnh cần thiết.
  3. Nhiệm vụ: yêu cầu cụ thể, một việc rõ ràng.
  4. Ràng buộc đầu ra: định dạng, độ dài, ngôn ngữ.
  5. (Tuỳ chọn) Ví dụ: few-shot minh hoạ.

Ví dụ minh hoạ (prompt phân loại email khách hàng):

[System] Bn là trlý phân loi yêu cu ca khách hàng ngân hàng.

[Ngữ cảnh] Email: "Tôi quên mt khu Internet Banking, làm sao đặt li?"

[Nhiệm vụ] Phân loi email vào MT nhãn: TÀI_KHON, THẺ, VAY, KHÁC.

[Ràng buộc] Chtrvề đúng mt nhãn, viết hoa, không gii thích.

Few-shot trong thực tế

Khi zero-shot không ra đúng định dạng, thêm ví dụ:

Phân loại cảm xúc (POSITIVE/NEGATIVE/NEUTRAL):

"Dịch vụ tuyệt vời!" -> POSITIVE
"Chờ quá lâu, tệ." -> NEGATIVE
"Cũng bình thường." -> NEUTRAL
"App dùng mượt mà." ->

Mô hình học khuôn mẫu từ ví dụ và điền tiếp POSITIVE.

Chain-of-thought

So sánh:

  • Không CoT: "15% của 240 là bao nhiêu?" → mô hình có thể trả lời nhanh và sai.
  • Có CoT: "Tính 15% của 240. Hãy suy luận từng bước rồi đưa kết quả cuối." → mô hình viết "10% của 240 là 24, 5% là 12, tổng là 36" → chính xác hơn.

Với model Claude mới, "suy luận" được hỗ trợ ở tầng hệ thống qua adaptive thinking (xem bên dưới) — bạn không cần luôn nhồi "hãy suy nghĩ từng bước" vào prompt, mà có thể bật chế độ suy luận thích ứng.


Gọi API: dùng đúng model Claude hiện đại

Khi xây ứng dụng, hãy mặc định dùng model Claude mới nhất. Họ model Claude của Anthropic:

ModelModel IDGhi chú
Claude Opus 4.8claude-opus-4-8Mặc định khuyến nghị — mạnh, cân bằng.
Claude Sonnet 4.6claude-sonnet-4-6Cân bằng tốc độ / thông minh, chi phí thấp hơn.
Claude Haiku 4.5claude-haiku-4-5Nhanh và rẻ nhất, cho tác vụ đơn giản.
Claude Fable 5claude-fable-5Mạnh nhất — cho suy luận khó và tác vụ agent dài hơi.

Ví dụ gọi API bằng Anthropic Python SDK (chính xác):

import anthropic

client = anthropic.Anthropic()  # đọc ANTHROPIC_API_KEY từ môi trường
resp = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    system="Bạn là trợ lý phân tích dữ liệu ngân hàng.",
    messages=[{"role": "user", "content": "Tóm tắt xu hướng CASA quý này."}],
)
print(resp.content[0].text)

Phân tích từng phần:

  • model: chọn ID model chính xác (không tự bịa hậu tố ngày tháng).
  • max_tokens: giới hạn số token đầu ra. Đừng để quá thấp kẻo câu trả lời bị cắt giữa chừng.
  • system: system prompt — đặt vai trò/quy tắc.
  • messages: lịch sử hội thoại (vì API là stateless, gửi lại đầy đủ mỗi lần).
  • resp.content[0].text: lấy phần văn bản trả về. content là một danh sách các khối, nên kiểm tra block.type == "text" trước khi đọc.

Adaptive thinking (suy luận thích ứng)

Với bài toán khó, hãy để mô hình "suy nghĩ kỹ hơn" trước khi trả lời. Cách làm hiện đại là bật adaptive thinking và đặt mức effort:

resp = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=4096,
    thinking={"type": "adaptive"},
    output_config={"effort": "high"},
    system="Bạn là trợ lý phân tích dữ liệu ngân hàng.",
    messages=[{"role": "user", "content": "Phân tích nguyên nhân CASA giảm và đề xuất 3 giải pháp."}],
)
print(resp.content[0].text)
  • thinking={"type": "adaptive"}: để mô hình tự quyết định suy luận sâu tới đâu cho từng câu hỏi.
  • output_config={"effort": "high"}: tăng mức nỗ lực (các mức: low, medium, high, ...).

Đây thay cho khái niệm "budget_tokens" cũ. Với model Claude mới nhất, đừng dùng thinking={"type": "enabled", "budget_tokens": N} nữa — sẽ lỗi. Hãy dùng adaptive + effort.


Giới hạn của LLM (phải nhớ)

LLM rất mạnh, nhưng có những giới hạn cố hữu:

  • Không tự biết sự thật. Nó dự đoán văn bản hợp lý, không tra cứu chân lý → hallucination.
  • Không có trí nhớ giữa các lần gọi. API stateless — bạn phải tự quản lý lịch sử và ngữ cảnh.
  • Kiến thức có ngày cắt (knowledge cutoff). Không biết sự kiện sau thời điểm huấn luyện trừ khi bạn cung cấp (qua RAG hoặc tìm kiếm web).
  • Giới hạn context window. Không nhồi vô hạn dữ liệu vào một lượt được.
  • Nhạy cảm với cách viết prompt. Cùng một ý, diễn đạt khác nhau cho kết quả khác nhau.
  • Có thể sai về toán/logic phức tạp. CoT và effort giúp giảm, không xoá bỏ.
  • Không nên giao quyết định quan trọng mà không có người kiểm. Đặc biệt trong môi trường ngân hàng/pháp lý.

Hiểu các giới hạn này giúp bạn thiết kế hệ thống an toàn: thêm tài liệu nguồn, thêm kiểm chứng, thêm con người trong vòng lặp (human-in-the-loop) ở những chỗ rủi ro cao.


Tóm tắt

  • LLM về bản chất chỉ dự đoán token tiếp theo; sự thông minh nổi lên từ quy mô. Nó được tạo qua pretraining → fine-tuning → RLHF.
  • Token là đơn vị mô hình xử lý; context window là tổng token (input + output) mô hình xử lý trong một lượt. API là stateless.
  • Temperaturetop-p điều khiển độ ngẫu nhiên; nhưng model Claude mới nhất bỏ các tham số này — bạn điều khiển bằng prompteffort.
  • Hallucination là việc bịa thông tin tự tin; giảm bằng cung cấp ngữ cảnh, cho phép nói "không biết", yêu cầu trích dẫn, và kiểm chứng.
  • Prompt engineering: cấu trúc rõ ràng (vai trò → ngữ cảnh → nhiệm vụ → ràng buộc), few-shot, chain-of-thought, ràng buộc định dạng đầu ra.
  • Khi xây ứng dụng, mặc định dùng model Claude mới nhất (claude-opus-4-8) và bật adaptive thinking cho bài toán khó.

Tự kiểm tra

  1. Nói bằng một câu: nhiệm vụ cốt lõi mà mọi LLM thực hiện là gì?
  2. Phân biệt context window và "trí nhớ dài hạn" — vì sao API được gọi là stateless và điều đó buộc bạn phải làm gì?
  3. Bạn cần đầu ra ổn định, lặp lại được cho tác vụ trích xuất dữ liệu. Với model có temperature, bạn đặt cao hay thấp? Với claude-opus-4-8 thì điều khiển bằng cách nào?
  4. Hallucination là gì và kể ba kỹ thuật giảm thiểu?
  5. Viết khung 5 phần của một prompt rõ ràng.
  6. Vì sao không nên dùng thinking={"type":"enabled","budget_tokens":N} với model Claude mới nhất, và dùng gì thay thế?

Đọc tiếp

AI 7 — RAG & Agents

Bài viết liên quan

Phân biệt AI/ML/DL, các kiểu học máy, quy trình ML end-to-end và thuật ngữ nền tảng.

13 thg 7, 2026 14

Chất lượng dữ liệu, xử lý thiếu/ngoại lai, mã hoá, chuẩn hoá, tạo đặc trưng và tránh data leakage.

13 thg 7, 2026 12

Retrieval-Augmented Generation, vector database, tool calling, agent và MCP để xây ứng dụng LLM thực tế.

13 thg 7, 2026 11

Đưa mô hình ra production: phục vụ, giám sát, model/data drift, versioning, và AI có trách nhiệm.

13 thg 7, 2026 10