คำตอบด่วน: ทรี Document Object Model (DOM) มีโทเค็นส่วนเกินมากถึง 92% จาก SVG แบบอินไลน์, คลาส CSS, สคริปต์ติดตาม และเมนูนำทาง การใช้ html parser ประสิทธิภาพสูง เช่น lxml, Cheerio หรือ Tree-sitter ตัดโหนดที่ไม่จำเป็น จะช่วยลด token reduction html ได้ 85–92% ประหยัดค่าใช้จ่ายการประมวลผล LLM และเพิ่มความแม่นยำของ RAG
1. บทนำ: Document Object Model (DOM) คืออะไร และทำไม HTML ดิบถึงลดทอนประสิทธิภาพ LLM
เอเจนต์ท่องเว็บอัตโนมัติ ระบบ RAG (Retrieval-Augmented Generation) และเครื่องมือดึงข้อมูลอัจฉริยะมักเผชิญกับอุปสรรคสำคัญ นั่นคือ มาร์กอัปเว็บที่ไม่ได้ผ่านการทำความสะอาด เมื่อ AI เอเจนต์เข้าชมหน้าเว็บผ่าน Playwright หรือคำขอ HTTP เอนจินเบราว์เซอร์จะแปลงข้อมูลไบต์เป็นโครงสร้างต้นไม้ในหน่วยความจำที่เรียกว่าโครงสร้าง document object ทรี
Document Object Model (DOM) คืออะไร?
เพื่อเพิ่มประสิทธิภาพการประมวลผลข้อมูลสำหรับโมเดลภาษา วิศวกรจำเป็นต้องทำความเข้าใจโครงสร้างหลัก: what is document object model dom?
Document Object Model (DOM) คืออินเทอร์เฟซมาตรฐานที่เป็นกลางทางภาษาซึ่งสร้างขึ้นโดยเบราว์เซอร์เอนจิน (Blink ใน Chromium, Gecko ใน Firefox, WebKit ใน Safari) เมื่อโค้ด HTML มาถึง เครื่องมือจะแยกวิเคราะห์คำศัพท์ สร้างโครงสร้างโหนด (Document $\rightarrow$ Element $\rightarrow$ Text) และคำนวณเค้าโครงภาพร่วมกับ CSSOM ในเบราว์เซอร์ทั่วไป โครงสร้าง document object ถูกออกแบบมาเพื่อการแสดงผลทางสายตาและการควบคุมแบบไดนามิกผ่าน JavaScript
การประมวลผลคำศัพท์ในเบราว์เซอร์และการสร้างทรี Document Object Model (DOM):
┌─────────────────────────────────────────────────────────────────────────────┐
│ สตรีมไบต์ HTML ดิบจากเครือข่าย │
│ <!DOCTYPE html><html lang="th"><head>... │
└──────────────────────────────────────┬──────────────────────────────────────┘
│ ตัวแยกโทเค็น (HTML5 Parser Algorithm)
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ สตรีมโทเค็นคำศัพท์ (Tokens) │
│ [StartTag: html] [StartTag: head] [StartTag: script] [EndTag: head] │
└──────────────────────────────────────┬──────────────────────────────────────┘
│ ตัวสร้างทรี (Tree Builder)
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ โครงสร้างทรี Document Object Model (DOM) │
│ Document │
│ │ │
│ <html> │
│ ┌─────────────────┴─────────────────┐ │
│ <head> <body> │
│ ┌───────┴───────┐ ┌───────┴───────┐ │
│ <title> <script> <header> <main> │
│ │ │ │ │ │
│ "ชื่อหน้า" [สคริปต์สถิติ] <nav> <article> │
│ │ │ │
│ <ul>... <p> "เนื้อหาหลัก" │
└─────────────────────────────────────────────────────────────────────────────┘
ปัญหาที่เกิดจาก DOM ดิบเมื่อป้อนเข้าสู่ LLM:
- การบวมของบริบทข้อความ: หน้าเว็บทั่วไปมีโทเค็น HTML ดิบระหว่าง 45,000 ถึง 120,000 โทเค็น ซึ่ง 85% ถึง 92% เป็นข้อมูลขยะ เช่น พิกัดเส้นโค้ง SVG, คลาส CSS, สคริปต์วิเคราะห์ และป๊อปอัปคุกกี้
- การเจือจางความสนใจและความแม่นยำของ RAG ลดลง: เมื่อเนื้อหาสำคัญจมอยู่ใต้โทเค็นขยะ 40,000 ตัว จะเกิดปรากฏการณ์ "Lost in the Middle" ทำให้ความแม่นยำในการดึงข้อมูลของ RAG ลดลง 34% ถึง 48%
- ต้นทุนการประมวลผลสูงเกินจริง: การประมวลผล 100,000 หน้าดิบต่อวันมีค่าใช้จ่ายมากกว่า $18,000 ต่อเดือน แต่การตัดแต่ง DOM จะช่วยลดค่าใช้จ่ายลงเหลือไม่ถึง $2,200
2. ไปป์ไลน์การตัดแต่ง DOM 5 ขั้นตอนเพื่อลดโทเค็น 85-92%
- ขั้นตอนที่ 1: ลบแท็กต้องห้ามทั้งหมด: ลบ
,,,,,และพร้อมเนื้อหาภายในทิ้งทันที - ขั้นตอนที่ 2: ล้างแอตทริบิวต์อย่างเข้มงวด: เก็บเฉพาะแอตทริบิวต์ที่จำเป็น (
href,alt,colspan/rowspanของตาราง) และลบคลาส CSS ทั้งหมด - ขั้นตอนที่ 3: ตัดส่วนประกอบโครงสร้างคงที่: กำจัด
,,และบล็อกโฆษณา - ขั้นตอนที่ 4: กรองตามความหนาแน่นของลิงก์: ตัดส่วนที่มีสัดส่วนลิงก์สูงกว่า 0.65 ทิ้งโดยอัตโนมัติ
- ขั้นตอนที่ 5: แปลงเป็นมาร์กดาวน์เชิงความหมาย: แปลงทรีที่สะอาดเป็นโครงสร้าง Markdown มาตรฐานพร้อมตารางที่สมบูรณ์
3. เปรียบเทียบประสิทธิภาพพาร์เซอร์
| ตัวชี้วัด | Cheerio (Node.js) | lxml (Python / C) | resoup / Rust (lol-html) | Tree-sitter (HTML) |
|---|---|---|---|---|
| ทรูพุต (MB/s) | 84.2 MB/s | 178.5 MB/s | 412.0 MB/s | 126.4 MB/s |
| เวลาแฝงเฉลี่ย p50 | 3.80 ms | 1.79 ms | 0.78 ms | 2.53 ms |
| หน่วยความจำ (1,000 คนทำงาน) | 2,840 MB | 890 MB | 185 MB | 420 MB |
| อัตราการลดโทเค็น | 89.4% | 90.8% | 88.9% | 91.7% |
4. สรุปและคำแนะนำ
- คัดกรองตั้งแต่ระดับพร็อกซี: ลบ SVG และสคริปต์ที่เกตเวย์ก่อนส่งต่อไปยังเซิร์ฟเวอร์ AI
- เลือกเครื่องมือให้ตรงกับระบบ: ใช้
lxmlใน Python,Cheerioใน TypeScript และ Rust สำหรับงานที่ต้องการทรูพุตสูงสุด - รักษาโครงสร้างตารางข้อมูล: แปลงตารางเป็น Markdown เสมอเพื่อรักษาความสัมพันธ์ของข้อมูล