การสร้าง Local AI Agent สำหรับ OSM

ผมใช้เวลา 21 วันในการสร้าง local AI agent ที่สามารถเปลี่ยนภาษาธรรมชาติให้กลายเป็น OSM filter JSON ได้

ผมต้องการให้มันทำงานบน local GPU ทั้งหมด โดยไม่ต้องมีการเรียกใช้ API ไม่มีความเสี่ยงด้านความเป็นส่วนตัว และไม่มีข้อจำกัดเรื่อง rate limits

นี่คือวิธีการที่ผมสร้างมันขึ้นมาและสิ่งที่ผมได้เรียนรู้

สถาปัตยกรรม

ผมใช้ RAG pipeline เพื่อให้บริบท (context) แก่โมเดล

• Embeddings: ผมใช้ bge-small-en-v1.5 เพื่อเปลี่ยนคำอธิบาย OSM tag ให้เป็น vectors • Database: ผมเก็บ embeddings เหล่านี้ไว้ใน SQLite • Retrieval: เมื่อคุณถามคำถาม ระบบจะค้นหา OSM tags และตัวอย่าง filter ที่เกี่ยวข้องที่สุด • Generation: LLM จะได้รับ query ของคุณพร้อมกับตัวอย่างที่ดึงมาเพื่อสร้าง JSON

ความล้มเหลวที่พบ

การสร้างสิ่งนี้ไม่ได้ราบรื่นนัก ผมต้องเจอกับอุปสรรคหลายอย่าง

• The Stop Token Bug: การรันครั้งแรกๆ ของผมให้ผลลัพธ์เป็นค่าว่าง เนื่องจากโมเดลมีการเพิ่มบรรทัดว่างก่อนหน้า JSON ซึ่งไปกระตุ้น stop token ของผมและทำให้การแสดงผลถูกตัดจบก่อนเวลาอันควร ผมจึงต้องลบ stop token ออกเพื่อแก้ไขปัญหานี้ • Blind Copying: LLM มักจะคัดลอกตัวอย่างมาแบบเป๊ะๆ แทนที่จะนำมาปรับใช้ ผมจึงต้องเขียน prompt ใหม่เพื่อบังคับให้โมเดลสังเคราะห์ filter ใหม่ขึ้นมา • Domain Confusion: โมเดลสับสนระหว่าง maritime tags กับ land tags ผมจึงเพิ่มขั้นตอนการตรวจสอบ (validation step) เพื่อกรอง candidate tags ตามความเกี่ยวข้อง

บทเรียนที่ได้รับ

• หลีกเลี่ยง stop tokens: หากคุณไม่แน่ใจ อย่าใช้มัน เพราะมันมักจะทำให้ output ของคุณพัง • คุณภาพข้อมูลคือหัวใจสำคัญ: การทำ embedding ประโยคภาษาธรรมชาติให้ผลลัพธ์ที่ดีกว่าการทำ embedding จาก raw JSON strings • การใช้ loop คือเวทมนตร์: ผมได้เพิ่ม loop ง่ายๆ เข้าไป หาก filter ให้ผลลัพธ์เป็นศูนย์ ตัว agent จะขยายขอบเขตการค้นหาและลองใหม่อีกครั้ง สิ่งนี้เปลี่ยนจากเครื่องมือที่ทำงานแบบตายตัว (static tool) ให้กลายเป็นระบบที่ปรับตัวได้ (adaptive system)

ผลลัพธ์

ระบบนี้ทำงานบน GPU ตัวเดียวโดยใช้ VRAM น้อยกว่า 8 GB มันสามารถจัดการกับ query พื้นฐานส่วนใหญ่ได้และปรับตัวได้เมื่อเกิดข้อผิดพลาด แม้ว่าจะยังต้องพัฒนาเรื่องการปฏิเสธที่ซับซ้อน (complex negation) และการสังเคราะห์ tag (tag synthesis) แต่โครงสร้างหลักนั้นใช้งานได้แล้ว

คุณจัดการกับความคลุมเครือของ tag ใน workflow ด้าน geospatial ของคุณอย่างไร?

Source: https://dev.to/gisfromscratch/building-a-local-ai-agent-for-osm-21-days-of-iteration-2fc4

Optional learning community: https://t.me/GyaanSetuAi