4 คะแนน โดย chlrhdmltkfkd 2026-04-02 | 3 ความคิดเห็น | แชร์ทาง WhatsApp

สวัสดีครับ ทุกครั้งที่เห็นโน้ตบุ๊กคืนสินค้าจำนวนมากไหลเข้ามาในโอเพ่นมาร์เก็ตขนาดใหญ่ ผมรู้สึกเหนื่อยมากกับการต้องตรวจสอบสเปกจริงให้แม่นยำ และนำไปเทียบกับราคาต่ำสุดของ Danawa

เพื่อแก้ปัญหานี้ ผมจึงพัฒนา 'Banpoom Laptop' ซึ่งเป็นบริการที่ใช้ AI เพื่อรวมและแสดงผลข้อมูลดีลโน้ตบุ๊กราคาพิเศษจากแพลตฟอร์มอีคอมเมิร์ซที่กระจัดกระจาย เข้ากับฐานข้อมูลขนาดใหญ่ของ Danawa

Link: https://banpoomlaptop.com

1. เทคโนโลยีที่ใช้ (Tech Stack)

ผมได้สร้างโครงสร้างทั้งหมดขึ้นใหม่ ตั้งแต่ฝั่งฟรอนต์เอนด์ไปจนถึงดาต้าพายป์ไลน์

  • Frontend: Next.js 16 (App Router), React 19, Tailwind CSS v4, Zustand

  • Backend / Database: Node.js, Next API Routes, MongoDB (Aggregation Pipeline), Redis

  • Crawling / Pipeline: Python (curl_cffi), Puppeteer, PM2 (background daemon)

  • AI / Data Matcher: OpenRouter API (Qwen 3.5), BM25 (อัลกอริทึมค้นหาความคล้ายคลึง)

2. จุดที่มีความยากสูงหลัก ๆ ในกระบวนการพัฒนา

ในการสร้างโปรเจกต์นี้ ผมไม่ได้เจอแค่การพัฒนาเว็บธรรมดาเท่านั้น แต่ยังต้องเผชิญกับโจทย์ยากหลายอย่างในช่วงการเก็บรวบรวมและปรับแต่งข้อมูลในพายป์ไลน์อีกด้วย

A. การทำข้อมูลไม่มีโครงสร้างให้เป็นมาตรฐาน และการทำ cross-mapping ระหว่างแพลตฟอร์มต่างชนิด

อุปสรรคที่ใหญ่ที่สุดคือการจับคู่ระหว่าง 'ชื่อสินค้าโน้ตบุ๊กคืนสินค้าที่สะเปะสะปะในโอเพ่นมาร์เก็ต' กับ 'ชื่อสเปกที่ซับซ้อนของ Danawa' เนื่องจากรูปแบบการเขียนแตกต่างกันไปตามผู้ขาย ทำให้การใช้ DB Join ทั่วไปหรือ regex มีข้อจำกัดอย่างชัดเจน
เพื่อแก้ปัญหานี้ ผมจึงสร้าง AI pipeline แบบ 2-step ขึ้นมา

  1. ใช้อัลกอริทึมความคล้ายคลึงของข้อความ BM25 เพื่อดึงโมเดลผู้สมัครรอบแรกจากฐานข้อมูล Danawa ขนาดใหญ่
  2. ส่งชุดผู้สมัครที่ค้นหาได้เข้าไปยัง context window ของ LLM (large language model) ที่อิง Qwen 3.5 เพื่อให้ตีความตามบริบท และออกแบบให้สามารถค้นหารุ่นย่อยเฉพาะ (pcode) ที่ถูกต้องได้ นอกจากนี้ ยังมอบหมายงานให้ background worker จัดโครงสร้างสเปกข้อความยาวของ Danawa ให้เป็น JSON แบบเรียลไทม์ด้วย LLM อีกด้วย

B. การใช้ตรรกะอนุมานของอัลกอริทึมจัดอันดับหลักขั้นสูง (Hidden Score)

ข้อมูลจากโอเพ่นมาร์เก็ตมักทำให้ 'อัตราส่วนลด' ดูโดดเด่นที่สุดเป็นพื้นฐาน แต่ปัญหาคือมีสต็อกค้างเก่าคุณภาพแย่จำนวนมาก
เพื่อแก้ปัญหานี้ ผมจึงฝังระบบ 'Hidden Score' ไว้ภายใน MongoDB Aggregation Pipeline โดยคำนวณ score = discount rate + (performance metric / current price) - age penalty ไม่ได้หยุดแค่การกรองตามเงื่อนไขแบบธรรมดา แต่ยังกำหนดน้ำหนักเพิ่มด้วยการให้โมเดลก่อนปี 22 ถูกหัก -50 คะแนน และโมเดลใหม่ปี 25~26 ได้รับ +20 คะแนน เพื่อให้แสดงเฉพาะอุปกรณ์ที่คุ้มค่าจริงบนชั้นแสดงผลด้านบน (Top Shelf) ก่อน

3. ปิดท้าย

ฝั่งฟรอนต์เอนด์ ผมได้ปรับแต่งให้ตัวกรองสเปกจำนวนมากหลายสิบรายการ (เช่น panel, manufacturer, weight, TGP เป็นต้น) ตอบสนองได้อย่างลื่นไหลทันที ผ่านการเชื่อมการทำงานระหว่าง Zustand และพารามิเตอร์ของ Next.js
การได้นำ LLM มาใช้อย่างจริงจัง ไม่ใช่แค่ในฐานะแชตบอต แต่เป็นทั้ง 'ตัวแยกวิเคราะห์เพื่อทำข้อมูลไม่มีโครงสร้างให้เป็นมาตรฐาน' และ 'smart matcher' ภายใน background pipeline ถือเป็นประสบการณ์ที่มีความหมายมากที่สุดสำหรับผมในฐานะวิศวกร ยินดีอย่างยิ่งต่อการแลกเปลี่ยนความคิดเห็นหรือรับฟีดแบ็กจากผู้ที่สนใจด้าน data crawling, AI matching หรือสภาพแวดล้อมการพัฒนา Next

3 ความคิดเห็น

 
cnaa97 2026-04-02

น่าซื้อจัง..

 
runableapp 2026-04-02

ดีครับ เป็นเว็บไซต์ที่สะดวกใช้งาน
ในความเห็นส่วนตัว ดีไซน์ดูเป็นเว็บช้อปปิ้งมากไปนิด และโทนสีก็ดูทำให้ล้าสายตา
แค่อัลกอริทึมอย่างเดียวก็น่าจะเพียงพออยู่แล้ว เลยอยากทราบว่าจุดที่จำเป็นต้องใช้ LLM จริง ๆ คือส่วนไหนครับ?

 
kurthong 2026-04-02

บนมือถือ (Galaxy S25 Plus) ปุ่มส่งข้อความไปยังหน้าต่างแชต AI กับปุ่มปิด (X) มันทับซ้อนกันครับ