OSM ಗಾಗಿ ಸ್ಥಳೀಯ AI ಏಜೆಂಟ್ ಅನ್ನು ನಿರ್ಮಿಸುವುದು

ನಾನು ಸ್ಥಳೀಯ AI ಏಜೆಂಟ್ ಅನ್ನು ನಿರ್ಮಿಸಲು 21 ದಿನಗಳನ್ನು ಕಳೆದಿದ್ದೇನೆ. ಇದು ನೈಸರ್ಗಿಕ ಭಾಷೆಯನ್ನು (natural language) OSM ಫಿಲ್ಟರ್ JSON ಆಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ.

ಇದು ಸಂಪೂರ್ಣವಾಗಿ ಸ್ಥಳೀಯ GPU ಮೇಲೆ ಕಾರ್ಯನಿರ್ವಹಿಸಬೇಕೆಂದು ನಾನು ಬಯಸಿದ್ದೆ. ಯಾವುದೇ API ಕರೆಗಳಿಲ್ಲ. ಯಾವುದೇ ಗೌಪ್ಯತೆಯ ಅಪಾಯಗಳಿಲ್ಲ. ಯಾವುದೇ ರೇಟ್ ಲಿಮಿಟ್‌ಗಳಿಲ್ಲ.

ನಾನು ಇದನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸಿದೆ ಮತ್ತು ನಾನು ಏನು ಕಲಿತೆ ಎಂಬುದು ಇಲ್ಲಿದೆ.

ವಾಸ್ತುಶಿಲ್ಪ (The Architecture)

ಮಾಡೆಲ್‌ಗೆ ಸಂದರ್ಭವನ್ನು (context) ನೀಡಲು ನಾನು RAG ಪೈಪ್‌ಲೈನ್ ಅನ್ನು ಬಳಸಿದೆ.

ಎಂಬೆಡ್ಡಿಂಗ್ಸ್ (Embeddings): OSM ಟ್ಯಾಗ್ ವಿವರಣೆಗಳನ್ನು ವೆಕ್ಟರ್‌ಗಳನ್ನಾಗಿ ಪರಿವರ್ತಿಸಲು ನಾನು bge-small-en-v1.5 ಅನ್ನು ಬಳಸಿದೆ. • ಡೇಟಾಬೇಸ್ (Database): ನಾನು ಈ ಎಂಬೆಡ್ಡಿಂಗ್‌ಗಳನ್ನು SQLite ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಿದೆ. • ರಿಟ್ರಿವಲ್ (Retrieval): ನೀವು ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳಿದಾಗ, ಸಿಸ್ಟಮ್ ಅತ್ಯಂತ ಪ್ರಸ್ತುತವಾದ OSM ಟ್ಯಾಗ್‌ಗಳು ಮತ್ತು ಫಿಲ್ಟರ್ ಉದಾಹರಣೆಗಳನ್ನು ಹುಡುಕುತ್ತದೆ. • ಜನರೇಷನ್ (Generation): LLM ನಿಮ್ಮ ಪ್ರಶ್ನೆ ಮತ್ತು ಹುಡುಕಿದ ಉದಾಹರಣೆಗಳನ್ನು ಪಡೆದು JSON ಅನ್ನು ರಚಿಸುತ್ತದೆ.

ವೈಫಲ್ಯಗಳು (The Failures)

ಇದನ್ನು ನಿರ್ಮಿಸುವುದು ಸುಲಭವಲ್ಲ. ನಾನು ಹಲವಾರು ಅಡೆತಡೆಗಳನ್ನು ಎದುರಿಸಿದೆ.

ಸ್ಟಾಪ್ ಟೋಕನ್ ಬಗ್ (The Stop Token Bug): ನನ್ನ ಮೊದಲ ಪ್ರಯತ್ನಗಳು ಖಾಲಿ ಫಲಿತಾಂಶಗಳನ್ನು ನೀಡಿದವು. ಮಾಡೆಲ್ JSON ಗೆ ಮೊದಲು ಒಂದು ಖಾಲಿ ಸಾಲನ್ನು ಸೇರಿಸುತ್ತಿತ್ತು. ಇದು ನನ್ನ ಸ್ಟಾಪ್ ಟೋಕನ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ ಔಟ್‌ಪುಟ್ ಅನ್ನು ಅರ್ಧಕ್ಕೆ ನಿಲ್ಲಿಸುತ್ತಿತ್ತು. ಇದನ್ನು ಸರಿಪಡಿಸಲು ನಾನು ಸ್ಟಾಪ್ ಟೋಕನ್ ಅನ್ನು ತೆಗೆದುಹಾಕಬೇಕಾಯಿತು. • ಅಂಧಾನುಕರಣೆ (Blind Copying): LLM ಹೆಚ್ಚಾಗಿ ಉದಾಹರಣೆಗಳನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುವ ಬದಲು ಅವುಗಳನ್ನು ಹಾಗೆಯೇ ನಕಲು ಮಾಡುತ್ತಿತ್ತು. ಮಾಡೆಲ್ ಹೊಸ ಫಿಲ್ಟರ್‌ಗಳನ್ನು ರೂಪಿಸಲು ಒತ್ತಾಯಿಸಲು ನಾನು ಪ್ರಾಂಪ್ಟ್‌ಗಳನ್ನು (prompts) ಮರುಬರೆಯಿದೆ. • ಡೊಮೇನ್ ಗೊಂದಲ (Domain Confusion): ಮಾಡೆಲ್ ಸಮುದ್ರಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಟ್ಯಾಗ್‌ಗಳನ್ನು ಭೂಮಿಗೆ ಸಂಬಂಧಿಸಿದ ಟ್ಯಾಗ್‌ಗಳೊಂದಿಗೆ ಗೊಂದಲ ಮಾಡಿಕೊಳ್ಳುತ್ತಿತ್ತು. ಪ್ರಸ್ತುತತೆಯನ್ನು ಆಧರಿಸಿ ಅಭ್ಯರ್ಥಿ ಟ್ಯಾಗ್‌ಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಲು ನಾನು ಒಂದು ವ್ಯಾಲಿಡೇಶನ್ ಹಂತವನ್ನು ಸೇರಿಸಿದೆ.

ಕಲಿಕೆಗಳು (The Lessons)

ಸ್ಟಾಪ್ ಟೋಕನ್‌ಗಳನ್ನು ತಪ್ಪಿಸಿ: ನೀವು ಖಚಿತವಾಗಿಲ್ಲದ ಹೊರತು ಅವುಗಳನ್ನು ಬಳಸಬೇಡಿ. ಅವು ಹೆಚ್ಚಾಗಿ ನಿಮ್ಮ ಔಟ್‌ಪುಟ್ ಅನ್ನು ಹಾಳುಮಾಡುತ್ತವೆ. • ಡೇಟಾ ಗುಣಮಟ್ಟವೇ ಮುಖ್ಯ: ಕಚ್ಚಾ JSON ಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು ಎಂಬೆಡ್ ಮಾಡುವುದಕ್ಕಿಂತ ನೈಸರ್ಗಿಕ ಭಾಷೆಯ ವಾಕ್ಯಗಳನ್ನು ಎಂಬೆಡ್ ಮಾಡುವುದು ಉತ್ತಮವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ. • ಲೂಪ್ (Loop) ಎಂಬುದು ಮ್ಯಾಜಿಕ್: ನಾನು ಒಂದು ಸರಳ ಲೂಪ್ ಅನ್ನು ಸೇರಿಸಿದೆ. ಒಂದು ಫಿಲ್ಟರ್ ಶೂನ್ಯ ಫಲಿತಾಂಶಗಳನ್ನು ನೀಡಿದರೆ, ಏಜೆಂಟ್ ವಿನಂತಿಯನ್ನು ವಿಸ್ತರಿಸಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ಇದು ಸ್ಥಿರವಾದ ಸಾಧನವನ್ನು ಅಡಾಪ್ಟಿವ್ (adaptive) ಸಿಸ್ಟಮ್ ಆಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ.

ಫಲಿತಾಂಶ (The Result)

ಈ ಸಿಸ್ಟಮ್ 8 GB ಗಿಂತ ಕಡಿಮೆ VRAM ಹೊಂದಿರುವ ಏಕೈಕ GPU ಮೇಲೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು ಹೆಚ್ಚಿನ ಸರಳ ಪ್ರಶ್ನೆಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ ಮತ್ತು ವಿಫಲವಾದಾಗ ಅಡಾಪ್ಟ್ ಆಗುತ್ತದೆ. ಸಂಕೀರ್ಣ ನಕಾರಾತ್ಮಕತೆ (complex negation) ಮತ್ತು ಟ್ಯಾಗ್ ಸಂಶ್ಲೇಷಣೆಯ (tag synthesis) ಮೇಲೆ ಇನ್ನೂ ಕೆಲಸ ಮಾಡಬೇಕಿದೆ, ಆದರೆ ಇದರ ಮೂಲ ತತ್ವವು ಕೆಲಸ ಮಾಡುತ್ತದೆ.

ನಿಮ್ಮ ಜಿಯೋಸ್ಪೇಷಿಯಲ್ (geospatial) ವರ್ಕ್‌ಫ್ಲೋಗಳಲ್ಲಿ ಟ್ಯಾಗ್ ಅಂಬಿಗ್ಯುಟಿ (tag ambiguity) ಅನ್ನು ನೀವು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತೀರಿ?

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

ಐಚ್ಛಿಕ ಕಲಿಕಾ ಸಮುದಾಯ: https://t.me/GyaanSetuAi