உங்கள் ஏஜெண்டுகள் சரியாக உள்ளன. ஆனால் அவற்றுக்கிடையேயான ஒப்படைப்பு (Handoff) சரியாக இல்லை.
பெரும்பாலான மல்டி-ஏஜென்ட் (multi-agent) டெமோக்கள் ஒரு ஏஜென்ட் மட்டும் ஒரு வேடமிட்டு நடிப்பது போலக் காட்டுகின்றன. ஏஜென்ட் A ஒரு வேலையைச் செய்வதையும், பின்னர் ஏஜென்ட் B மற்றொரு வேலையைச் செய்வதையும் அவை காட்டுகின்றன. ஏஜென்ட் A, ஏஜென்ட் B-க்குத் தேவையானதை வழங்கத் தவறும்போது என்ன நடக்கிறது என்பதை அவை காட்டுவதில்லை.
இந்த ஆண்டு நான் மூன்று மல்டி-ஏஜென்ட் அமைப்புகளைத் தயாரிப்பில் (production) வெளியிட்டேன். ஏஜெண்டுகள் கடினமான பகுதி அல்ல. ஒப்படைப்புகளே (handoffs) கடினமானவை.
ஒரு ஒப்படைப்பு என்பது வெறும் உரையை (text) மாற்றுவது மட்டுமல்ல. நீங்கள் இவற்றை நிர்வகிக்க வேண்டும்:
- ஸ்கீமா சீரமைப்பு (Schema alignment): ஏஜென்ட் B ஒவ்வொரு முறையும் ஏஜென்ட் A-வின் வெளியீட்டைப் பகுப்பாய்வு (parse) செய்ய வேண்டும்.
- தோல்வி பரவல் (Failure propagation): ஒரு ஏஜென்ட் தோல்வியடையும் போது அதை அமைப்பு (system) அறிய வேண்டும்.
- சூழல் தூய்மை (Context hygiene): ஒவ்வொரு ஒப்படைப்பும் உங்கள் விண்டோவிற்கு (window) தேவையற்ற இரைச்சலை (noise) சேர்க்கிறது.
ஏஜெண்டுகளை ஒரு நூலால் இணைக்கப்பட்ட கருப்புப் பெட்டிகளாக (black boxes) கருதுவதே மிகப்பெரிய தவறு. நீங்கள் ஏஜென்ட் A-விற்கு ஒரு ப்ராம்ப்ட் (prompt) கொடுத்து, அதன் முடிவைப் பெற்று, அதை அப்படியே ஏஜென்ட் B-க்குள் திணிக்கிறீர்கள். இது உடைக்கப்படும் வரை வேலை செய்யும். அது உடைந்துவிடும்போது, ஏன் என்று உங்களுக்குத் தெரியாது.
இந்த மூன்று பொதுவான தோல்வி முறைகளைத் தவிர்க்கவும்:
அமைதியான குறைப்பு (Silent truncation): ஏஜென்ட் A அதிகப்படியான தரவை உருவாக்குகிறது. ஏஜென்ட் B அதன் முடிவை வெட்டிவிடுகிறது. பின்னர் ஏஜென்ட் B முழுமையற்ற தரவைச் செயலாக்கி உங்களுக்குப் புரியாததொரு முடிவைத் தருகிறது. ஒவ்வொரு நிலையிலும் உங்கள் டோக்கன் எண்ணிக்கையை (token counts) அளவிடுங்கள்.
ஸ்கீமா விலகல் (Schema drift): நீங்கள் ஏஜென்ட் A-விற்கான ப்ராம்ப்ட்டை மாற்றுகிறீர்கள். இப்போது அது ஒரு வேறுபட்ட வடிவத்தைத் தருகிறது. ஏஜென்ட் B பழைய வடிவத்தையே எதிர்பார்க்குவதால் அது செயலிழக்கிறது. ப்ராம்ப்ட்களை மட்டும் நம்பியிருக்காமல் Pydantic போன்ற கட்டமைக்கப்பட்ட வெளியீட்டைப் (structured output) பயன்படுத்துங்கள்.
ரேஸ் கண்டிஷன்கள் (Race conditions): நீங்கள் ஒரே நேரத்தில் ஐந்து பணியாளர்களை (workers) இயக்குகிறீர்கள். மூன்று முடிந்துவிடுகின்றன, ஆனால் இரண்டு இன்னும் ஓடிக்கொண்டிருக்கின்றன. உங்கள் அக்ரிகேட்டர் (aggregator) முழுமையற்ற தரவுடன் முன்கூட்டியே தொடங்குகிறது. இது சோதனைகளில் (tests) வேலை செய்யும் ஆனால் தயாரிப்பில் (production) தோல்வியடையும். அனைத்துப் பணிகளுக்காகவும் காத்திருக்க ஒரு பேரியரை (barrier) பயன்படுத்துங்கள்.
எனது முதல் அமைப்பு புத்திசாலித்தனமாக இருந்தது ஆனால் குழப்பமாக இருந்தது. அது டைனமிக் ரூட்டிங் (dynamic routing) மற்றும் மறைமுக ஒப்படைப்புகளைப் (implicit handoffs) பயன்படுத்தியது. அது உண்மையான டிராஃபிக்கைச் (real traffic) சந்திக்கத் தொடங்கும் வரை நன்றாகச் செயல்பட்டது, பின்னர் அமைதியாகத் தோல்வியடைந்தது.
எனது இரண்டாவது அமைப்பு பார்ப்பதற்குச் சரியாக இல்லாவிட்டாலும் துல்லியமாக இருந்தது. ஒவ்வொரு ஒப்படைப்பும் ஒரு வகைப்படுத்தப்பட்ட ஒப்பந்தத்தைப் (typed contract) பயன்படுத்தியது. ஒவ்வொரு தோல்வியும் வெளிப்படையானது. ஒவ்வொரு ஏஜென்ட்டும் தனிமைப்படுத்தப்பட்டது (isolated).
எனது தற்போதைய அமைப்பு இரண்டையும் இணைக்கிறது. இது இரண்டாவது பதிப்பின் ஒழுக்கத்தைப் பயன்படுத்துகிறது, ஆனால் சலிப்பூட்டும் குறியீட்டை (boring code) ஒரு கட்டமைப்பிற்குப் (framework) பின்னால் மறைக்கிறது.
நீங்கள் மல்டி-ஏஜென்ட் அமைப்புகளை உருவாக்கினால், பார்ப்பதற்குச் சரியாக இல்லாத ஆனால் துல்லியமான பதிப்பிலிருந்து தொடங்குங்கள். முதலில் புத்திசாலித்தனமாக இருக்க முயற்சிக்காதீர்கள். தயாரிப்பில் அதைச் சரியாகச் செய்யுங்கள், பின்னர் அதை நேர்த்தியாக்குங்கள்.
ஒப்படைப்புப் பிரச்சனை எளிதாகாது. ஆனால் அது உங்களை ஆச்சரியப்பட வைப்பதைக் குறைத்துவிடும்.
Source: https://dev.to/mrclaw207/your-agents-are-fine-the-handoff-between-them-isnt-2dij
Optional learning community: https://t.me/GyaanSetuAi
