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

หลังจากคิดอยู่มานาน ผมขอแชร์โอเพนซอร์สเอนจินอัตโนมัติสำหรับจดหมายข่าว (LLM Newsletter Kit) ที่ผมสร้างขึ้นมาเพื่อใช้เอง

ตอนนี้เอนจินนี้เป็นแกนหลักของจดหมายข่าวด้านมรดกวัฒนธรรม "Research Radar" ที่ผมดูแลอยู่ โดยยังคงรักษาอัตราการคลิก (CTR) ไว้ที่ 15% และปรับต้นทุน LLM API ต่อการส่งแต่ละครั้งให้อยู่ราว $0.20

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

เบื้องหลังการพัฒนาและเรื่องเล่าตรงไปตรงมา

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

ตอนแรกมันเป็น "จดหมายข่าวเฉพาะทางด้านมรดกวัฒนธรรม" ที่ทำไว้ดูเองคนเดียว หลังจากนั้นจึงเปิดให้ใครก็สมัครรับได้

พอพัฒนาไปเรื่อย ๆ ก็พบว่าซอร์สโค้ดกับลอจิกของโดเมนมรดกวัฒนธรรมผูกติดกันแน่นเกินไป เพื่อแก้ปัญหานี้ ผมจึงทำ abstraction ด้วยโครงสร้าง DI (dependency injection) แล้วแยกออกมาเป็นไลบรารีที่ใครก็ใช้งานได้

npm i @llm-newsletter-kit/core

ตอนนี้บริการของผมเองก็เลิกใช้ legacy code แบบเดิมที่ผูกติดแน่นในอดีต และกำลัง migrate มารันบนโอเพนซอร์สคอร์ตัวนี้อยู่

ปรัชญาการออกแบบ: "Logic in code, reasoning in AI"

เหตุผลที่ผมเลือกโค้ดแทนเครื่องมือ no-code ก็มาจากปรัชญาการออกแบบนี้เอง "ให้ลอจิกอยู่ในโค้ด ให้การให้เหตุผลอยู่ใน AI และให้การเชื่อมต่ออยู่ในสถาปัตยกรรม (Logic in code, reasoning in AI, connections in architecture)."

เครื่องมือ no-code นั้นสะดวก แต่มีข้อจำกัดที่ชัดเจนเมื่อต้องทำลอจิกซับซ้อน ผมจึงควบคุม workflow ที่สำคัญด้วยโค้ดแบบ type-safe (TypeScript) และมอบหมายเฉพาะการวิเคราะห์เชิงอัจฉริยะให้ LLM ทำ ทำให้สามารถสร้างลอจิกที่ประณีตอย่าง self-reflection หรือการตรวจสอบหลายขั้นตอนได้

คุณสมบัติหลัก

การออกแบบแบบ Type-First & DI: เขียนด้วย TypeScript และทุกขั้นตอนตั้งแต่การ crawl, วิเคราะห์, ไปจนถึงการ generate ล้วนอยู่บนพื้นฐานของ Provider interface จึงสลับเปลี่ยนได้เหมือนถอดเปลี่ยนชิ้นส่วน

Bring Your Own Scraper: ไม่ถูกล็อกอินกับไลบรารีใดไลบรารีหนึ่ง จะเป็น Puppeteer, Cheerio หรือ parser ที่ใช้ AI ก็สามารถ inject แบบ asynchronous เข้ามาใช้ได้ตามต้องการ

Production Ready: พร้อมใช้งานจริงในระบบ production โดยมี retry logic, chain options และ test coverage 100%

ลิงก์

ขอบคุณครับ ยินดีรับฟีดแบ็กเสมอ!

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น