Building a Local AI Agent for OSM

ஒரு உள்ளூர் AI ஏஜென்ட்டை உருவாக்க நான் 21 நாட்கள் செலவிட்டேன். இது இயற்கை மொழியை (natural language) OSM filter JSON ஆக மாற்றுகிறது.

இது முற்றிலும் ஒரு உள்ளூர் GPU-வில் இயங்க வேண்டும் என்று நான் விரும்பினேன். API அழைப்புகள் இல்லை. தனியுரிமை அபாயங்கள் இல்லை. வரம்புகள் (rate limits) இல்லை.

நான் இதை எப்படி உருவாக்கினேன் மற்றும் என்ன கற்றுக்கொண்டேன் என்பது இதோ.

The Architecture

மாடலுக்குத் தேவையான சூழலை (context) வழங்க நான் ஒரு RAG pipeline-ஐப் பயன்படுத்தினேன்.

• Embeddings: OSM டேக் (tag) விளக்கங்களை வெக்டர்களாக (vectors) மாற்ற நான் bge-small-en-v1.5-ஐப் பயன்படுத்தினேன். • Database: இந்த embeddings-களை SQLite-இல் சேமித்தேன். • Retrieval: நீங்கள் ஒரு கேள்வியைக் கேட்கும்போது, சிஸ்டம் மிகவும் பொருத்தமான OSM டேக்குகளையும் ஃபில்டர் உதாரணங்களையும் கண்டறியும். • Generation: LLM உங்கள் வினாவையும் (query) பெறப்பட்ட உதாரணங்களையும் பெற்று JSON-ஐ உருவாக்குகிறது.

The Failures

இதை உருவாக்குவது எளிதாக இருக்கவில்லை. நான் பல தடைகளைச் சந்தித்தேன்.

• The Stop Token Bug: எனது முதல் முயற்சிகள் காலியான முடிவுகளையே அளித்தன. மாடல் JSON-க்கு முன்னால் ஒரு வெற்று வரியைச் சேர்த்தது. இது எனது stop token-ஐத் தூண்டி, வெளியீட்டை பாதியிலேயே நிறுத்திவிட்டது. இதைச் சரிசெய்ய நான் stop token-ஐ நீக்க வேண்டியிருந்தது. • Blind Copying: LLM பெரும்பாலும் உதாரணங்களை மாற்றியமைப்பதற்குப் பதிலாக அப்படியே நகலெடுத்தது. மாடல் புதிய ஃபில்டர்களை உருவாக்கத் தூண்டும் வகையில் நான் ப்ராம்ப்ட்களை (prompts) மீண்டும் எழுதினேன். • Domain Confusion: மாடல் கடல்சார் (maritime) டேக்குகளையும் நிலம் சார்ந்த (land) டேக்குகளையும் குழப்பிக் கொண்டது. பொருத்தமான டேக்குகளை மட்டும் வடிகட்ட நான் ஒரு சரிபார்ப்புப் படிநிலையை (validation step) சேர்த்தேன்.

The Lessons

• Stop tokens-ஐத் தவிர்க்கவும்: நீங்கள் உறுதியாக இல்லாதவரை அவற்றைப்பயன்படுத்த வேண்டாம். அவை பெரும்பாலும் உங்கள் வெளியீட்டைப் பாதிக்கும். • தரமே முதன்மையானது (Data quality is king): வெறும் JSON சரங்களை (strings) embedding செய்வதை விட, இயற்கை மொழி வாக்கியங்களை embedding செய்வது சிறப்பாகச் செயல்படுகிறது. • லூப் (loop) தான் மந்திரம்: நான் ஒரு எளிய லூப்பைச் சேர்த்தேன். ஒரு ஃபில்டர் பூஜ்ஜிய முடிவுகளைத் தந்தால், ஏஜென்ட் தனது கோரிக்கையை விரிவுபடுத்தி மீண்டும் முயற்சிக்கும். இது ஒரு நிலையான கருவியை (static tool) ஒரு தகவமைப்பு அமைப்பாக (adaptive system) மாற்றுகிறது.

The Result

இந்த சிஸ்டம் 8 GB-க்கும் குறைவான VRAM கொண்ட ஒரு தனி GPU-வில் இயங்குகிறது. இது பெரும்பாலான எளிய வினைகளைக் கையாள்கிறது மற்றும் தோல்வியடையும் போது தன்னைத் தகவமைத்துக் கொள்கிறது. சிக்கலான negation மற்றும் tag synthesis ஆகியவற்றில் இன்னும் வேலை செய்ய வேண்டியுள்ளது, ஆனால் இதன் அடிப்படைச் செயல்பாடு சரியாக உள்ளது.

உங்கள் புவிசார் (geospatial) பணிப்பாய்வுகளில் (workflows) டேக் தெளிவற்ற தன்மையை (tag ambiguity) எவ்வாறு கையாளுகிறீர்கள்?

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

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