{"product_id":"phan-loại-van-bản-với-claude-hướng-dẫn-toan-diện","title":"Phân loại văn bản với Claude — Hướng dẫn toàn diện","description":"\n\u003cp\u003eTrong 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 \u003cstrong\u003eđộ chính xác 97%\u003c\/strong\u003e 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).\u003c\/p\u003e\n\n\u003cp\u003eBài viết dựa trên \u003cstrong\u003eClaude Cookbooks chính thức\u003c\/strong\u003e của Anthropic, được dịch và biên soạn lại cho độc giả Việt Nam.\u003c\/p\u003e\n\n\u003ch2\u003eTại sao dùng LLM cho classification?\u003c\/h2\u003e\n\n\u003cp\u003eTrước khi LLM xuất hiện, classification đòi hỏi:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eHàng nghìn labeled examples để train model\u003c\/li\u003e\n  \u003cli\u003eFeature engineering phức tạp\u003c\/li\u003e\n  \u003cli\u003eRetrain khi business rules thay đổi\u003c\/li\u003e\n  \u003cli\u003eKhông giải thích được lý do phân loại\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eLLM như Claude giải quyết tất cả những vấn đề này. Bạn chỉ cần \u003cstrong\u003emô tả categories bằng ngôn ngữ tự nhiên\u003c\/strong\u003e, 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.\u003c\/p\u003e\n\n\u003ch2\u003eBài toán: Phân loại ticket hỗ trợ bảo hiểm\u003c\/h2\u003e\n\n\u003cp\u003eChúng ta sẽ phân loại ticket hỗ trợ khách hàng vào \u003cstrong\u003e10 categories\u003c\/strong\u003e:\u003c\/p\u003e\n\n\u003col\u003e\n  \u003cli\u003e\n\u003cstrong\u003eBilling Inquiries\u003c\/strong\u003e — Hỏi về hóa đơn, phí, phương thức thanh toán\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003ePolicy Administration\u003c\/strong\u003e — Thay đổi, hủy, gia hạn hợp đồng\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eClaims Assistance\u003c\/strong\u003e — Hướng dẫn nộp và theo dõi yêu cầu bồi thường\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eCoverage Explanations\u003c\/strong\u003e — Giải thích phạm vi bảo hiểm\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eQuotes and Proposals\u003c\/strong\u003e — Báo giá, so sánh gói\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eAccount Management\u003c\/strong\u003e — Reset mật khẩu, cập nhật thông tin\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eBilling Disputes\u003c\/strong\u003e — Khiếu nại về phí sai, yêu cầu hoàn tiền\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eClaims Disputes\u003c\/strong\u003e — Khiếu nại về bồi thường bị từ chối\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003ePolicy Comparisons\u003c\/strong\u003e — So sánh các gói bảo hiểm\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eGeneral Inquiries\u003c\/strong\u003e — Câu hỏi chung không thuộc nhóm nào\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003cp\u003eDataset gồm 68 ví dụ training và 68 ví dụ test — đủ nhỏ để demo nhưng đủ lớn để đánh giá meaningful.\u003c\/p\u003e\n\n\u003ch2\u003eBước 1: Baseline — Simple Classifier (~70%)\u003c\/h2\u003e\n\n\u003cp\u003eCách đơn giản nhất: mô tả categories trong prompt, gửi ticket, yêu cầu Claude phân loại.\u003c\/p\u003e\n\n\u003ch3\u003eKỹ thuật 1: Structured categories bằng XML\u003c\/h3\u003e\n\u003cp\u003eEncode categories dưới dạng XML giúp Claude parse thông tin chính xác hơn:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003e\u0026lt;categories\u0026gt;\n  \u0026lt;category\u0026gt;\n    \u0026lt;label\u0026gt;Billing Inquiries\u0026lt;\/label\u0026gt;\n    \u0026lt;content\u0026gt;\n      Questions about invoices, charges, fees, and premiums\n      Requests for clarification on billing statements\n    \u0026lt;\/content\u0026gt;\n  \u0026lt;\/category\u0026gt;\n  \u0026lt;!-- ... more categories ... --\u0026gt;\n\u0026lt;\/categories\u0026gt;\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eKỹ thuật 2: Prefilling + Stop Sequences\u003c\/h3\u003e\n\u003cp\u003eĐây là trick quan trọng nhất. Thay vì để Claude tự do viết, ta \u003cstrong\u003eép output format\u003c\/strong\u003e:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003eresponse = client.messages.create(\n    messages=[\n        {\"role\": \"user\", \"content\": prompt},\n        # Bắt đầu response với tag mở\n        {\"role\": \"assistant\", \"content\": \"\u0026lt;category\u0026gt;\"},\n    ],\n    # Dừng ngay khi gặp tag đóng\n    stop_sequences=[\"\u0026lt;\/category\u0026gt;\"],\n    temperature=0.0,  # Deterministic\n    model=\"claude-haiku-4-5\",\n)\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003eKỹ thuật này đảm bảo:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eClaude chỉ output tên category, không giải thích dài dòng\u003c\/li\u003e\n  \u003cli\u003eParse response cực kỳ reliable — không cần regex phức tạp\u003c\/li\u003e\n  \u003cli\u003e\n\u003ccode\u003etemperature=0.0\u003c\/code\u003e cho kết quả nhất quán giữa các lần chạy\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eKết quả: ~70% accuracy\u003c\/strong\u003e — 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.\u003c\/p\u003e\n\n\u003ch2\u003eBước 2: RAG — Thêm ví dụ tương tự (94%)\u003c\/h2\u003e\n\n\u003cp\u003eVấn đề của simple classifier: Claude thiếu context để phân biệt các categories gần nghĩa. Ví dụ: \u003cem\u003e\"I have a question about my bill\"\u003c\/em\u003e (Billing Inquiry) vs \u003cem\u003e\"This charge seems wrong\"\u003c\/em\u003e (Billing Dispute).\u003c\/p\u003e\n\n\u003cp\u003eGiải pháp: \u003cstrong\u003eRetrieval-Augmented Generation (RAG)\u003c\/strong\u003e — tìm 5 ví dụ training tương tự nhất, inject vào prompt.\u003c\/p\u003e\n\n\u003ch3\u003eCách hoạt động\u003c\/h3\u003e\n\u003col\u003e\n  \u003cli\u003e\n\u003cstrong\u003eEmbed training data\u003c\/strong\u003e — Chuyển 68 training tickets thành vector bằng VoyageAI\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSemantic search\u003c\/strong\u003e — Khi có ticket mới, tìm 5 tickets tương tự nhất (cosine similarity)\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eInject vào prompt\u003c\/strong\u003e — Thêm các ví dụ này dưới dạng few-shot examples\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003cpre\u003e\u003ccode\u003edef rag_classify(ticket):\n    # Tìm 5 ví dụ tương tự nhất\n    similar_examples = vectordb.search(ticket, k=5)\n\n    # Format thành XML examples\n    examples_xml = \"\"\n    for ex in similar_examples:\n        examples_xml += f\"\"\"\n        \u0026lt;example\u0026gt;\n          \u0026lt;query\u0026gt;\"{ex['text']}\"\u0026lt;\/query\u0026gt;\n          \u0026lt;label\u0026gt;{ex['label']}\u0026lt;\/label\u0026gt;\n        \u0026lt;\/example\u0026gt;\n        \"\"\"\n\n    # Inject vào prompt cùng với categories\n    prompt = f\"\"\"\n    Classify this ticket:\n    \u0026lt;ticket\u0026gt;{ticket}\u0026lt;\/ticket\u0026gt;\n\n    Categories: {categories}\n\n    Similar examples for reference:\n    \u0026lt;examples\u0026gt;{examples_xml}\u0026lt;\/examples\u0026gt;\n    \"\"\"\n\n    response = client.messages.create(\n        messages=[\n            {\"role\": \"user\", \"content\": prompt},\n            {\"role\": \"assistant\", \"content\": \"\u0026lt;category\u0026gt;\"},\n        ],\n        stop_sequences=[\"\u0026lt;\/category\u0026gt;\"],\n        temperature=0.0,\n        model=\"claude-haiku-4-5\",\n    )\n    return response.content[0].text.strip()\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003e\u003cstrong\u003eKết quả: 94% accuracy\u003c\/strong\u003e — 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ể.\u003c\/p\u003e\n\n\u003ch2\u003eBước 3: Chain-of-Thought — Suy luận trước khi quyết định (97%)\u003c\/h2\u003e\n\n\u003cp\u003eĐể xử lý những edge cases còn lại, ta thêm \u003cstrong\u003eChain-of-Thought (CoT)\u003c\/strong\u003e — yêu cầu Claude \"suy nghĩ thành tiếng\" trước khi đưa ra kết luận.\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003e# Thêm scratchpad vào prompt\nprompt += \"\"\"\nFirst, think step-by-step in scratchpad tags.\nConsider all information and create a concrete\nargument for your classification.\n\n\u0026lt;response\u0026gt;\n  \u0026lt;scratchpad\u0026gt;Your analysis here\u0026lt;\/scratchpad\u0026gt;\n  \u0026lt;category\u0026gt;Your answer\u0026lt;\/category\u0026gt;\n\u0026lt;\/response\u0026gt;\n\"\"\"\n\n# Prefill bắt đầu từ scratchpad\nmessages = [\n    {\"role\": \"user\", \"content\": prompt},\n    {\"role\": \"assistant\", \"content\": \"\u0026lt;response\u0026gt;\u0026lt;scratchpad\u0026gt;\"},\n]\n\n# Parse kết quả\nresult = response.split(\"\u0026lt;category\u0026gt;\")[1].strip()\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003eChain-of-Thought giúp Claude:\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003ePhân tích intent và tone của ticket (hỏi vs khiếu nại)\u003c\/li\u003e\n  \u003cli\u003eSo sánh với các ví dụ RAG để tìm pattern\u003c\/li\u003e\n  \u003cli\u003eLoại trừ categories không phù hợp một cách có logic\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eKết quả: 97% accuracy\u003c\/strong\u003e — gần như hoàn hảo!\u003c\/p\u003e\n\n\u003ch2\u003eTổng kết: Progressive Improvement\u003c\/h2\u003e\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n\u003cth\u003eApproach\u003c\/th\u003e\n\u003cth\u003eAccuracy\u003c\/th\u003e\n\u003cth\u003eKỹ thuật chính\u003c\/th\u003e\n\u003c\/tr\u003e\n  \u003c\/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n\u003ctd\u003eRandom baseline\u003c\/td\u003e\n\u003ctd\u003e~10%\u003c\/td\u003e\n\u003ctd\u003eĐoán ngẫu nhiên\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003ctr\u003e\n\u003ctd\u003eSimple classifier\u003c\/td\u003e\n\u003ctd\u003e~70%\u003c\/td\u003e\n\u003ctd\u003ePrompt + Prefill + Stop sequences\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003ctr\u003e\n\u003ctd\u003eRAG classifier\u003c\/td\u003e\n\u003ctd\u003e94%\u003c\/td\u003e\n\u003ctd\u003e+ Vector search + Few-shot examples\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003ctr\u003e\n\u003ctd\u003eRAG + CoT\u003c\/td\u003e\n\u003ctd\u003e\u003cstrong\u003e97%\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003e+ Chain-of-Thought reasoning\u003c\/td\u003e\n\u003c\/tr\u003e\n  \u003c\/tbody\u003e\n\u003c\/table\u003e\n\n\u003ch2\u003eInsights quan trọng từ Promptfoo evaluation\u003c\/h2\u003e\n\n\u003cp\u003eKhi test systematic với \u003cstrong\u003ePromptfoo\u003c\/strong\u003e (open-source evaluation tool), một số phát hiện thú vị:\u003c\/p\u003e\n\n\u003cul\u003e\n  \u003cli\u003e\n\u003cstrong\u003eTemperature gần như không ảnh hưởng CoT\u003c\/strong\u003e — 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.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eRAG robust với temperature\u003c\/strong\u003e — Dao động 89-94%, nhưng T=0.0 vẫn tốt nhất.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSimple prompt không cải thiện với temperature\u003c\/strong\u003e — Luôn ~70%, chứng tỏ thiếu context quan trọng hơn sampling strategy.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003e\u003cstrong\u003eKhuyến nghị production:\u003c\/strong\u003e Dùng \u003ccode\u003etemperature=0.0\u003c\/code\u003e + RAG + CoT cho maximum consistency và accuracy.\u003c\/p\u003e\n\n\u003ch2\u003eÁp dụng cho bài toán của bạn\u003c\/h2\u003e\n\n\u003cp\u003ePattern này áp dụng được cho mọi bài toán classification:\u003c\/p\u003e\n\n\u003col\u003e\n  \u003cli\u003e\n\u003cstrong\u003ePhân loại email support\u003c\/strong\u003e — Route email đúng team\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eSentiment analysis\u003c\/strong\u003e — Positive\/Negative\/Neutral cho reviews\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eContent moderation\u003c\/strong\u003e — Phát hiện nội dung vi phạm\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eLead scoring\u003c\/strong\u003e — Phân loại leads theo mức độ quan tâm\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eDocument categorization\u003c\/strong\u003e — Tự động gắn tag cho tài liệu\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003cp\u003eBước tiếp theo: Đọc thêm về \u003ca href=\"\/en\/collections\/nang-cao\"\u003eRAG với Claude\u003c\/a\u003e và \u003ca href=\"\/en\/collections\/nang-cao\"\u003ePrompt Engineering nâng cao\u003c\/a\u003e để master hai kỹ thuật cốt lõi trong bài này.\u003c\/p\u003e\n","brand":"Minh Tuấn","offers":[{"title":"Default Title","offer_id":47721705177300,"sku":null,"price":0.0,"currency_code":"VND","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0821\/0264\/9044\/files\/phan-lo_i-van-b_n-v_i-claude-h_ng-d_n-toan-di_n.jpg?v=1774521659","url":"https:\/\/claude.vn\/en\/products\/phan-lo%e1%ba%a1i-van-b%e1%ba%a3n-v%e1%bb%9bi-claude-h%c6%b0%e1%bb%9bng-d%e1%ba%abn-toan-di%e1%bb%87n","provider":"CLAUDE.VN","version":"1.0","type":"link"}