Trung cấpHướng dẫnClaude APINguồn: Anthropic

Phân loại văn bản với Claude — Hướng dẫn toàn diện

Nghe bài viết
00:00

Điểm nổi bật

Nhấn để đến mục tương ứng

  1. 1 Tận dụng Claude hiệu quả: Trước khi LLM xuất hiện, classification đòi hỏi: Hàng nghìn labeled examples để train model Feature engineering phức — mẹo quan trọng là cung cấp đủ ngữ cảnh để AI trả về kết quả chính xác hơn 80% so với prompt chung chung.
  2. 2 So sánh thực tế: Chúng ta sẽ phân loại ticket hỗ trợ khách hàng vào 10 categories : Billing Inquiries — Hỏi về hóa đơn, phí, phương thức. Mỗi phương pháp đều có ưu và nhược — lựa chọn phụ thuộc vào ngữ cảnh cụ thể của bạn.
  3. 3 Điểm nhấn quan trọng: Kỹ thuật 1: Structured categories bằng XML Encode categories dưới dạng XML giúp Claude parse thông tin chính xác hơn:. Đây là phần mang lại giá trị thực tiễn cao nhất trong toàn bài viết.
  4. 4 Thực hành được liền: Để xử lý những edge cases còn lại, ta thêm Chain-of-Thought CoT — yêu cầu Claude "suy nghĩ thành tiếng" trước khi đưa. Quy trình từng bước trong phần này giúp bạn bắt đầu ngay mà không cần kinh nghiệm chuyên sâu.
  5. 5 Góc nhìn thực tế: Khi test systematic với Promptfoo open-source evaluation tool, một số phát hiện thú vị: Temperature gần như không ảnh. Điều quan trọng là hiểu rõ khi nào nên và không nên áp dụng phương pháp này.
black and gray robot with goggles

Trong bài hướng dẫn này, bạn sẽ xây dựng một hệ thống phân loại văn bản đạt độ chính xác 97% bằng cách kết hợp prompt engineering, Retrieval-Augmented Generation (RAG), và Chain-of-Thought reasoning. Chúng ta sẽ đi từ baseline 10% (random) lên 70% (prompt đơn giản), rồi 94% (RAG), và cuối cùng 97% (RAG + CoT).

Bài viết dựa trên Claude Cookbooks chính thức của Anthropic, được dịch và biên soạn lại cho độc giả Việt Nam.

Tại sao dùng LLM cho classification?

Trước khi LLM xuất hiện, classification đòi hỏi:

  • Hàng nghìn labeled examples để train model
  • Feature engineering phức tạp
  • Retrain khi business rules thay đổi
  • Không giải thích được lý do phân loại

LLM như Claude giải quyết tất cả những vấn đề này. Bạn chỉ cần mô tả categories bằng ngôn ngữ tự nhiên, cung cấp vài ví dụ, và Claude có thể phân loại chính xác — thậm chí giải thích lý do phân loại bằng tiếng Việt.

Bài toán: Phân loại ticket hỗ trợ bảo hiểm

Chúng ta sẽ phân loại ticket hỗ trợ khách hàng vào 10 categories:

  1. Billing Inquiries — Hỏi về hóa đơn, phí, phương thức thanh toán
  2. Policy Administration — Thay đổi, hủy, gia hạn hợp đồng
  3. Claims Assistance — Hướng dẫn nộp và theo dõi yêu cầu bồi thường
  4. Coverage Explanations — Giải thích phạm vi bảo hiểm
  5. Quotes and Proposals — Báo giá, so sánh gói
  6. Account Management — Reset mật khẩu, cập nhật thông tin
  7. Billing Disputes — Khiếu nại về phí sai, yêu cầu hoàn tiền
  8. Claims Disputes — Khiếu nại về bồi thường bị từ chối
  9. Policy Comparisons — So sánh các gói bảo hiểm
  10. General Inquiries — Câu hỏi chung không thuộc nhóm nào

Dataset gồm 68 ví dụ training và 68 ví dụ test — đủ nhỏ để demo nhưng đủ lớn để đánh giá meaningful.

Bước 1: Baseline — Simple Classifier (~70%)

Cách đơn giản nhất: mô tả categories trong prompt, gửi ticket, yêu cầu Claude phân loại.

Kỹ thuật 1: Structured categories bằng XML

Encode categories dưới dạng XML giúp Claude parse thông tin chính xác hơn:

<categories>
  <category>
    <label>Billing Inquiries</label>
    <content>
      Questions about invoices, charges, fees, and premiums
      Requests for clarification on billing statements
    </content>
  </category>
  <!-- ... more categories ... -->
</categories>

Kỹ thuật 2: Prefilling + Stop Sequences

Đây là trick quan trọng nhất. Thay vì để Claude tự do viết, ta ép output format:

response = client.messages.create(
    messages=[
        {"role": "user", "content": prompt},
        # Bắt đầu response với tag mở
        {"role": "assistant", "content": "<category>"},
    ],
    # Dừng ngay khi gặp tag đóng
    stop_sequences=["</category>"],
    temperature=0.0,  # Deterministic
    model="claude-haiku-4-5",
)

Kỹ thuật này đảm bảo:

  • Claude chỉ output tên category, không giải thích dài dòng
  • Parse response cực kỳ reliable — không cần regex phức tạp
  • temperature=0.0 cho kết quả nhất quán giữa các lần chạy

Kết quả: ~70% accuracy — tốt hơn nhiều so với random (10%), nhưng vẫn nhầm lẫn giữa các categories tương tự nhau.

Bước 2: RAG — Thêm ví dụ tương tự (94%)

Vấn đề của simple classifier: Claude thiếu context để phân biệt các categories gần nghĩa. Ví dụ: "I have a question about my bill" (Billing Inquiry) vs "This charge seems wrong" (Billing Dispute).

Giải pháp: Retrieval-Augmented Generation (RAG) — tìm 5 ví dụ training tương tự nhất, inject vào prompt.

Cách hoạt động

  1. Embed training data — Chuyển 68 training tickets thành vector bằng VoyageAI
  2. Semantic search — Khi có ticket mới, tìm 5 tickets tương tự nhất (cosine similarity)
  3. Inject vào prompt — Thêm các ví dụ này dưới dạng few-shot examples
def rag_classify(ticket):
    # Tìm 5 ví dụ tương tự nhất
    similar_examples = vectordb.search(ticket, k=5)

    # Format thành XML examples
    examples_xml = ""
    for ex in similar_examples:
        examples_xml += f"""
        <example>
          <query>"{ex['text']}"</query>
          <label>{ex['label']}</label>
        </example>
        """

    # Inject vào prompt cùng với categories
    prompt = f"""
    Classify this ticket:
    <ticket>{ticket}</ticket>

    Categories: {categories}

    Similar examples for reference:
    <examples>{examples_xml}</examples>
    """

    response = client.messages.create(
        messages=[
            {"role": "user", "content": prompt},
            {"role": "assistant", "content": "<category>"},
        ],
        stop_sequences=["</category>"],
        temperature=0.0,
        model="claude-haiku-4-5",
    )
    return response.content[0].text.strip()

Kết quả: 94% accuracy — nhảy vọt từ 70%! RAG giúp Claude phân biệt chính xác hơn nhờ thấy ví dụ cụ thể.

Bước 3: Chain-of-Thought — Suy luận trước khi quyết định (97%)

Để xử lý những edge cases còn lại, ta thêm Chain-of-Thought (CoT) — yêu cầu Claude "suy nghĩ thành tiếng" trước khi đưa ra kết luận.

# Thêm scratchpad vào prompt
prompt += """
First, think step-by-step in scratchpad tags.
Consider all information and create a concrete
argument for your classification.

<response>
  <scratchpad>Your analysis here</scratchpad>
  <category>Your answer</category>
</response>
"""

# Prefill bắt đầu từ scratchpad
messages = [
    {"role": "user", "content": prompt},
    {"role": "assistant", "content": "<response><scratchpad>"},
]

# Parse kết quả
result = response.split("<category>")[1].strip()

Chain-of-Thought giúp Claude:

  • Phân tích intent và tone của ticket (hỏi vs khiếu nại)
  • So sánh với các ví dụ RAG để tìm pattern
  • Loại trừ categories không phù hợp một cách có logic

Kết quả: 97% accuracy — gần như hoàn hảo!

Tổng kết: Progressive Improvement

Approach Accuracy Kỹ thuật chính
Random baseline ~10% Đoán ngẫu nhiên
Simple classifier ~70% Prompt + Prefill + Stop sequences
RAG classifier 94% + Vector search + Few-shot examples
RAG + CoT 97% + Chain-of-Thought reasoning

Insights quan trọng từ Promptfoo evaluation

Khi test systematic với Promptfoo (open-source evaluation tool), một số phát hiện thú vị:

  • Temperature gần như không ảnh hưởng CoT — RAG + CoT đạt 95.6% nhất quán ở T=0.0, 0.2, và 0.8. Chain-of-Thought stabilize output bất kể sampling randomness.
  • RAG robust với temperature — Dao động 89-94%, nhưng T=0.0 vẫn tốt nhất.
  • Simple prompt không cải thiện với temperature — Luôn ~70%, chứng tỏ thiếu context quan trọng hơn sampling strategy.

Khuyến nghị production: Dùng temperature=0.0 + RAG + CoT cho maximum consistency và accuracy.

Áp dụng cho bài toán của bạn

Pattern này áp dụng được cho mọi bài toán classification:

  1. Phân loại email support — Route email đúng team
  2. Sentiment analysis — Positive/Negative/Neutral cho reviews
  3. Content moderation — Phát hiện nội dung vi phạm
  4. Lead scoring — Phân loại leads theo mức độ quan tâm
  5. Document categorization — Tự động gắn tag cho tài liệu

Bước tiếp theo: Đọc thêm về RAG với ClaudePrompt Engineering nâng cao để master hai kỹ thuật cốt lõi trong bài này.

Tính năng liên quan:ClassificationRAGChain-of-ThoughtEvaluation

Bai viet co huu ich khong?

Bản quyền thuộc về tác giả. Vui lòng dẫn nguồn khi chia sẻ.

Bình luận (0)
Ảnh đại diện
Đăng nhập để bình luận...
Đăng nhập để bình luận
  • Đang tải bình luận...

Đăng ký nhận bản tin

Nhận bài viết hay nhất về sản phẩm và vận hành, gửi thẳng vào hộp thư của bạn.

Bảo mật thông tin. Hủy đăng ký bất cứ lúc nào. Chính sách bảo mật.