இப்போதெல்லாம் RAG சில நேரங்களில் குறைத்து மதிப்பிடப்படுகிறது. அதைத் தொடங்குவது எளிது என்பதால் முற்றிலும் சாதாரணமானது என்று சிலர் நினைக்கிறார்கள்; ஆனால் விரிவாக்குவது அவ்வளவு எளிதல்ல. வேறு சிலர், அதை ‘முகவர் சார்ந்த அமைப்புகள்’ முந்திவிட்டதாக நினைக்கிறார்கள்; ஆனால் பல சந்தர்ப்பங்களில் மேற்பரப்பைச் சற்றே ஆராய்ந்தாலே அவையும் RAG போலவே தோன்றத் தொடங்குகின்றன.
பொதுவான சில சவால்களை நாங்கள் எவ்வாறு கையாள்கிறோம் என்பதைக் காட்ட, செயல்முறை விளக்கத்துடன் கூடிய ஓரிரு எடுத்துக்காட்டுகளை இந்த வலைப்பதிவு வழங்குகிறது. அவை:
உரையும் எண் தரவும் கலந்த உள்ளடக்கத்தைக் கையாளுதல், மேலும் அது எளிய RAG முறையை ஏன் தோல்வியடையச் செய்கிறது: முக்கியச் சொற்கள் ஒன்றுடன் ஒன்று மோதுகின்றன; எண்களுக்குத் தனியாகப் பொருள்சார் அர்த்தம் இல்லை.
முதலில் சுருக்கத்தை உருவாக்கி உட்பொதிவுகளை வடிவமைப்பது ஏன் உதவுகிறது: ஒவ்வொரு துண்டுக்கும் ஒரு சிறிய விளக்கச் சுருக்கத்தை உருவாக்கி, பின்னர் அந்தச் சுருக்கத்தை உட்பொதித்து அதில் வினவுங்கள்.
சூழலுடன் கூடிய சுருக்கங்களை உருவாக்குவது எப்படி: ஒரே மாதிரி அமைந்த புள்ளிவிவரங்களைத் தெளிவாக வேறுபடுத்த, மூல ஆவணத்தின் சூழலைச் சேருங்கள்.
நிரலையும் Pydantic மாடல்களையும் எப்போது நம்புவது: உள்ளடக்கம் அப்படியே இருக்க வேண்டிய இடங்களில், நம்பகத்தன்மைக்காகத் தனிப்பயன் நிரல் அல்லது Pydantic மாடலை LLM அழைப்புகளுடன் இணைத்துப் பயன்படுத்துங்கள்.
அடிப்படைகள்
ஆதரவு அரட்டைப் பொறிகள் முதல் நிறுவனத்தின் உள் அறிவு உதவியாளர்கள் வரை பலவற்றை RAG அமைப்புகள் இயக்குகின்றன.
பின்னணியில், பொதுவாக நீங்கள் செய்வது:
உங்கள் மூல ஆவணங்களைத் துண்டுகளாகப் பிரித்தல்.
ஒவ்வொரு துண்டையும் திசையன் வெளியில் உட்பொதித்தல்.
வினவலின்போது மிகப் பொருத்தமான முதல் K துண்டுகளை மீட்டெடுத்தல்.
அந்தத் துண்டுகளைச் சார்ந்த பதிலை உருவாக்குதல்.
LangChain, LlamaIndex, OpenAI Filestore போன்ற பிரபலக் கருவித்தொகுப்புகள் இந்தப் படிகளை ஏறக்குறைய மிக எளிதாக்குகின்றன. ஆனால் நடைமுறைச் செயலாக்கத் தொடர்களில் அடர்த்தியான உரையாக மட்டும் இல்லாத தரவைச் சந்திப்பீர்கள்; அடிப்படை RAG அதைச் சமாளிக்கத் தடுமாறலாம். அடுத்த பகுதிகளில், தரவு சார்ந்த சவால்களைத் தெளிவான எடுத்துக்காட்டுகளுடன் காட்டி, சிக்கல் அதிகரிக்க அதிகரிக்கத் தீர்வையும் படிப்படியாக உருவாக்குவோம்.
உங்கள் தரவு வெறும் உரையாக இல்லாதபோது. உண்மையில் இது அரிதானதல்ல.
விளையாட்டுச் சூழலில் பின்வரும் தரவுத் துண்டைக் கவனியுங்கள்:
JSON
பொருள்சார் அர்த்தம் மற்றும் இலக்கணத்தின் வழியாகச் சொற்களுக்கு இடையே கற்றுக்கொள்ளப்பட்ட தொடர்புகளால்தான் உட்பொதிவுகள் செயல்படுகின்றன. மேலுள்ள தரவில் உரையும் எண்களும் கலந்துள்ளன. இந்தக் குறிப்பிட்ட சூழலுக்கு வெளியே, அந்த எண்களுக்கும் சொற்களுக்கும் எந்தத் தொடர்பும் இல்லை. எனவே, இந்தத் தரவுத் துண்டு ஓரளவு விளக்கமான சொற்களையும் அவற்றைத் தொடரும் சில தொடர்பற்ற எண்களையும் கொண்ட கலவை என்று கூறலாம்.
நம்மிடம் இந்த வகைத் தரவு மட்டுமே இருந்தால் இது ஒரு சிக்கலாக இருக்காது. கிடைக்கின்ற சில விளக்கச் சொற்களின் உட்பொதிவுகளைக் கொண்டு மீட்டெடுக்கலாம் அல்லது உரையிலிருந்து SQL உருவாக்கும் முறையைப் பயன்படுத்தலாம். ஆனால் இதே சொற்கள் இடம்பெறும் ஏராளமான அடர்த்தியான உரைத் துண்டுகளுக்குள் இந்தத் துண்டு புதைந்திருந்தால் என்ன செய்வது? எடுத்துக்காட்டாக:
JSON
இப்போது, “Draconic Ascension செயல்பாட்டில் இருக்கும்போது தாக்குதல் வரம்பு என்ன?” என்ற வினவலுக்கான தகவலை மீட்டெடுக்க விரும்புகிறோம் என்று வைத்துக்கொள்ளுங்கள். அதே முக்கியச் சொற்களைக் கொண்ட மற்ற துண்டுகளின் இரைச்சலில் அது புதைந்திருப்பதால், நமக்குத் தேவையான துண்டை மீட்டெடுக்க முடியாமல் போக அதிக வாய்ப்புள்ளது.
ஒரே தலைப்பைப் பற்றிய வெவ்வேறு வகைத் தகவல்கள் இந்தத் துண்டுகளில் இருந்தாலும், அவற்றைச் சரியாக வேறுபடுத்த முடியாததே அடிப்படைச் சிக்கல். அதை ஏதேனும் வகையில் செறிவூட்டி மேம்படுத்த முடியுமா? நிச்சயமாக முடியும்:smile:
உங்கள் தரவைச் சுருக்கி செறிவூட்டுங்கள். ஆம், நீங்கள் சரியாகத்தான் படித்தீர்கள்.
துண்டையே நேரடியாக உட்பொதிப்பதற்குப் பதிலாக, அந்தத் தரவு எதைப் பற்றியது என்பதை விளக்கும் சுருக்கத்தை முதலில் உருவாக்கி, பின்னர் அந்தச் சுருக்கத்தை உட்பொதித்து அதிலிருந்து மீட்டெடுக்கலாம். பதிலை உருவாக்கும் கட்டத்தில், சுருக்கத்துடன் இணைக்கப்பட்டுள்ள அசல் தரவையே பயன்படுத்துவோம்.
மேலே காட்டப்பட்ட இரண்டு துண்டுகளுக்கும் பின்வருவது போன்ற சுருக்கங்களை உருவாக்கலாம்:
தாக்குதல் வரம்பு, வேகம், சேதம் ஆகியவற்றின் புள்ளிவிவரங்கள். இயல்புநிலையிலும் Draconic Ascension செயல்பாட்டிலும் உள்ள மதிப்புகள்.
செயல்படுத்தும் நிபந்தனைகள், காட்சித் தோற்றங்கள் மற்றும் பின்னணிக் கதை உள்ளிட்ட Draconic Ascension பற்றிய விளக்கமும் விவரங்களும்.
அடுத்து, சுருக்கத்துடன் “ஒத்திசையுமாறு” வினவலையும் விரிவுபடுத்துவோம். எடுத்துக்காட்டாக, “Draconic Ascension செயல்பாட்டில் இருக்கும்போது தாக்குதல் வரம்பு என்ன?” என்பதை “Draconic Ascension செயல்பாட்டில் இருக்கும்போது தாக்குதல் வரம்பின் புள்ளிவிவரம் என்ன?” என்று மாற்றுவோம். தொழில்நுட்பத் துறைக்கு வெளியே உள்ள பயனர்கள் ~~“தங்கள் விருப்பப்படி”~~ இயல்பான மனித மொழியில் கேட்கும்போது இது மிகவும் முக்கியம். ஏனெனில் துல்லியத்தையும் மீட்பு முழுமையையும் அதிகரிக்க RAG எவ்வாறு செயல்படுகிறது என்பதை அறிந்திருப்பது அவர்களின் பொறுப்போ அக்கறையோ அல்ல.


சூழலிலிருந்து எதையும் பிரித்துப் பார்க்காதீர்கள். பொதுவாக வாழ்க்கைக்கும் இது பொருந்தும்.
அடுத்ததாக, கீழே உள்ளதைப் போல ஒரே மாதிரி தோன்றும் ஏராளமான தரவுத் துண்டுகளைக் கையாள வேண்டிய சூழலைப் பார்ப்போம்:
Plain Text
இதே அணுகுமுறையைத் தொடர்ந்தால், “கதாபாத்திரம் X-இன் தாக்குதல் வரம்பு என்ன?” என்று கேட்பதாகக் கற்பனை செய்யுங்கள். நாம் உருவாக்கிய சுருக்கங்களும் ஒன்றுபோலவே தெரிவதால், அதிர்ஷ்டத்தை நம்பி ஊகிக்க வேண்டியிருக்கும். அவற்றை எப்படி வேறுபடுத்துவது?
எளிய பதில்: சூழலை வழங்குங்கள். தரவுத் துண்டில் அதன் மூல ஆவணத்திற்கான குறிப்பைச் சேர்க்கலாம். இந்தச் சூழலில், எடுத்துக்காட்டாக {”character”: “X”} என்பதைச் சேர்க்கலாம். இப்போது கதாபாத்திரங்கள் Y மற்றும் Z பற்றிய அதே தரவு இருந்தாலும், கதாபாத்திரம் X-க்கான சரியான தரவைத் துல்லியமாக மீட்டெடுக்க முடியும்.
ஆனால் துண்டுக்குச் சூழலுடன் கூடிய சுருக்கத்தை உருவாக்குவது இன்னும் சிறந்ததும் பரவலாகப் பயன்படுத்தக்கூடியதுமான அணுகுமுறை. அதாவது, தரவுத் துண்டை மட்டும் சுருக்குவதற்குப் பதிலாக, அதன் மூல ஆவணத்தையும் துண்டையும் சேர்த்து வழங்கி, பொதுவான சூழல் சுருக்கத்தை உருவாக்கலாம். அந்தத் துண்டு மூல ஆவணத்தில் எவ்வாறு பொருந்துகிறது என்பதையும் சுருக்கத்தில் சேர்க்கலாம். எடுத்துக்காட்டாக:
இந்தத் துண்டு கதாபாத்திரம் X-க்கான … பற்றிய விரிவான புள்ளிவிவரங்களை வழங்குகிறது. தாக்குதல் வேகத்தில் X-இன் வலிமையைக் காட்டுவதன் மூலம் இந்தத் துண்டு முழு ஆவணத்துடன் பொருந்துகிறது.
இந்தத் துண்டு கதாபாத்திரம் Y-க்கான … பற்றிய விரிவான புள்ளிவிவரங்களை வழங்குகிறது. Y-இன் சிறப்புத் திறனால் மேம்படும் புள்ளிவிவரங்களைக் காட்டுவதன் மூலம் இந்தத் துண்டு முழு ஆவணத்துடன் பொருந்துகிறது.
இந்தத் துண்டு கதாபாத்திரம் Z-க்கான … பற்றிய விரிவான புள்ளிவிவரங்களை வழங்குகிறது. அணிப் போட்டிகளில் முன்னணித் தடுப்புப் பாத்திரத்திற்கு ஏற்ற Z-இன் புள்ளிவிவரங்களைக் காட்டுவதன் மூலம் இந்தத் துண்டு முழு ஆவணத்துடன் பொருந்துகிறது.
Anthropic அணுகுமுறையால் ஓரளவு ஈர்க்கப்பட்ட இந்த முறை, மேலுள்ள எடுத்துக்காட்டிற்கு அளவுக்கு மீறியதாகத் தோன்றலாம். ஆனால் “சூழலுக்கு வெளியே” தவறாகப் புரிந்துகொள்ளப்படக்கூடிய துண்டுகளுக்கு இது மிகவும் பயனுள்ளதாகும். மேலும், அனைத்துத் துண்டுகளுக்கும் பொருந்தும் ஒருங்கிணைந்த அணுகுமுறையை வழங்குவதால், பொறியியல் செயலாக்கத் தொடர் ஒழுங்காக இருக்கும்.


நீங்கள் ~~அனைத்தையும் கட்டுப்படுத்துபவராக~~ மிகத் துல்லியமாக இருக்க வேண்டியபோது
பொதுவாகத் தரவை முழுமையான பகுதிகளாகப் பெற்று, RAG அமைப்புக்காக அவற்றைத் துண்டுகளாகப் பிரிப்போம். இந்த எடுத்துக்காட்டில் சற்று மாறுபட்ட ஒன்றைக் காட்டுகிறோம். தரவு ஏற்கெனவே துண்டுகளாகப் பிரிக்கப்பட்டுள்ளது; ஆனால் அவை மோசமான துண்டுகள். இயல்பாக ஒன்றாக இருக்க வேண்டிய தர்க்கரீதியான துண்டிலிருந்து தொடர்பின்றி வெட்டப்பட்ட பகுதிகள் என்பதால், அவற்றை மீண்டும் ஒன்றாகத் தொகுக்க வேண்டும். தர்க்கரீதியான துண்டு என்பது இயல்பாக ஒன்றாக இருக்க வேண்டிய உள்ளடக்கப் பகுதி. எடுத்துக்காட்டாக, ஓர் ஆவணத்தின் உட்பிரிவு அல்லது கருத்துத் தொடர்ச்சியுள்ள பத்தி.


இந்தத் தரவை முதலில் கையாள முயன்றபோது, அனைத்தையும் ஓர் LLM அழைப்புக்கு வழங்கி, பொருத்தமான முறையில் தொகுத்து, தொகுக்கப்பட்ட உள்ளடக்கத்தைத் திருப்பித் தருமாறு கேட்டோம். LLM இதை நன்றாகச் செய்ய வேண்டும்தானே? ஆம் என்றும் சொல்லலாம், இல்லை என்றும் சொல்லலாம்.
முழுமையான, துல்லியமான உள்ளடக்கம் தேவைப்படும்போது, குறிப்பாகச் சூழல் நீளமாக இருந்தால், LLM-கள் சோம்பலாகச் செயல்படுவதையும் நம்பகமற்றவையாக இருப்பதையும் வேறு பல சந்தர்ப்பங்களிலும் கண்டுள்ளோம். அது முற்றிலும் புரிந்துகொள்ளக்கூடியதே. ஆனால் இந்தக் குறிப்பிட்ட பயன்பாட்டிற்கு அது ஏற்க முடியாத குறையாக இருந்தது. ஒவ்வொரு சொல்லும் அப்படியே தேவைப்பட்டது; சுருக்கங்களோ அசல் உள்ளடக்கத்தின் பகுதிகளைத் தவிர்ப்பதோ கூடாது. எந்த விவரத்தையும் தவறவிட முடியாது.
அதே நேரத்தில், சிதைந்த துண்டுகளின் பொருளையும் கட்டமைப்பையும் புரிந்துகொள்வதில் அது சிறப்பாகச் செயல்பட்டதே இதிலுள்ள சாதகமான பகுதி. ஆனால் துல்லியமான உள்ளடக்கத்தை அப்படியே திருப்பித் தர மறுக்காமல் இருந்தால் மட்டுமே அது பயனளிக்கும். அடடா:/
அப்படியானால், LLM சிறப்பாகச் செய்யக்கூடியதைப் பயன்படுத்திக்கொண்டு, அது நம்பகமற்றதாக இருக்கும் பணிகளை எவ்வாறு தவிர்ப்பது? நமது பழைய நம்பகமான நண்பரான நிரலிடம் திரும்பினோம். அதாவது, தனிப்பயன் Python சார்பு. அத்துடன், “இதைவிட எளிமையாக்க முடியாது” என்ற அளவுக்கு எளிய Pydantic மாடலையும் பயன்படுத்தினோம். தீர்வு இதோ:
தற்போதைய தர்க்கரீதியான துண்டைப் பராமரித்தபடி பிரிவுகள் அனைத்தையும் ஒவ்வொன்றாகச் செயலாக்குங்கள்.
ஒவ்வொரு பிரிவிலும், “இந்தப் பிரிவு தற்போதைய தர்க்கரீதியான துண்டைச் சேர்ந்ததா?” என்று LLM-இடம் கேட்டு, Pydantic மாடலின்படி ஆம் அல்லது இல்லை எனப் பதிலளிக்கச் சொல்லுங்கள்.
ஆம் என்றால், அந்தப் பிரிவைத் துண்டுடன் இணைக்கவும். இல்லை என்றால், தற்போதைய தர்க்கரீதியான துண்டு நிறைவடைந்ததால் அதை வெளியிட்டு, அந்தப் பிரிவைக் கொண்டு புதிய துண்டைத் தொடங்கவும்.


முழு உள்ளடக்கத்தையும் ஒரே முறையில் செயலாக்குவதைவிட இங்கு சற்றுக் கூடுதலான சொற்கூறுகளைப் பயன்படுத்துகிறோம். ஆனால் துல்லியமான உள்ளடக்கத்தை அப்படியே தக்கவைப்பதே முதன்மையான இந்தப் பயன்பாட்டிற்கு, அந்தச் சிறிய கூடுதல் செலவு முழுமையாகப் பயனளித்தது.
இது மிகவும் எளிய தீர்வு என்றாலும், ஒரு முக்கியக் கொள்கையைப் பின்பற்றுகிறது. துல்லியம் தேவைப்படும்போது, இயல்பிலேயே நிகழ்தகவு சார்ந்த LLM-களை மட்டும் நம்பக்கூடாது.
LLM-களின் திறன்களை முழுமையாகப் பயன்படுத்திக்கொண்டே, கணிக்கக்கூடிய மற்றும் நம்பகமான முடிவைப் பெறத் தனிப்பயன் நிரல் அல்லது சார்புகளையும் Pydantic மாடல்களையும் பயன்படுத்தலாம்.
உருவாக்கும் AI தீர்வை உருவாக்குவது AI சார்ந்த சவாலாக இருப்பதைப் போலவே பொறியியல் சார்ந்த சவாலாகவும் இருக்கிறது. உங்களுக்கே உரிய சவால்களை எதிர்கொள்ள இந்த எடுத்துக்காட்டுகள் உங்களுக்கு ஊக்கமளித்திருக்கும் என்று நம்புகிறோம். பொறியியலுக்கு முன்னுரிமை அளிக்கும் உருவாக்கும் AI தீர்வுகளைப் பற்றி மேலும் அறிய, வழிப்படுத்தி அடிப்படையிலான முகவர் சார்ந்த அமைப்பு வடிவமைப்பு குறித்த எங்கள் வலைப்பதிவைப் படியுங்கள்.