ನಿಮ್ಮ ಏಜೆಂಟ್‌ಗಳು ಸರಿಯಾಗಿವೆ. ಆದರೆ ಅವುಗಳ ನಡುವಿನ ಹ್ಯಾಂಡ್‌ಆಫ್ (handoff) ಸರಿಯಿಲ್ಲ.

ಹೆಚ್ಚಿನ ಮಲ್ಟಿ-ಏಜೆಂಟ್ (multi-agent) ಡೆಮೊಗಳು ಕೇವಲ ಒಂದು ಏಜೆಂಟ್‌ನ ಕಾರ್ಯವೈಖರಿಯನ್ನು ತೋರಿಸುತ್ತವೆ. ಏಜೆಂಟ್ A ಒಂದು ಕೆಲಸವನ್ನು ಮಾಡುವುದನ್ನು ಮತ್ತು ನಂತರ ಏಜೆಂಟ್ B ಮತ್ತೊಂದು ಕೆಲಸವನ್ನು ಮಾಡುವುದನ್ನು ಅವು ತೋರಿಸುತ್ತವೆ. ಆದರೆ ಏಜೆಂಟ್ A ಗೆ ಏಜೆಂಟ್ B ಗೆ ಬೇಕಾದ ಮಾಹಿತಿಯನ್ನು ನೀಡಲು ಸಾಧ್ಯವಾಗದಿದ್ದಾಗ ಏನಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ಅವು ತೋರಿಸುವುದಿಲ್ಲ.

ನಾನು ಈ ವರ್ಷ ಪ್ರೊಡಕ್ಷನ್‌ನಲ್ಲಿ ಮೂರು ಮಲ್ಟಿ-ಏಜೆಂಟ್ ಸಿಸ್ಟಮ್‌ಗಳನ್ನು ಬಿಡುಗಡೆ ಮಾಡಿದ್ದೇನೆ. ಏಜೆಂಟ್‌ಗಳು ಕಷ್ಟದ ಭಾಗವಾಗಿರಲಿಲ್ಲ. ಹ್ಯಾಂಡ್‌ಆಫ್‌ಗಳೇ (handoffs) ಕಷ್ಟವಾಗಿದ್ದವು.

ಹ್ಯಾಂಡ್‌ಆಫ್ ಎಂದರೆ ಕೇವಲ ಪಠ್ಯವನ್ನು (text) ವರ್ಗಾಯಿಸುವುದು ಮಾತ್ರವಲ್ಲ. ನೀವು ಇವುಗಳನ್ನು ನಿರ್ವಹಿಸಬೇಕು:

  • ಸ್ಕೀಮಾ ಅಲೈನ್‌ಮೆಂಟ್ (Schema alignment): ಏಜೆಂಟ್ B ಪ್ರತಿ ಬಾರಿಯೂ ಏಜೆಂಟ್ A ನ ಔಟ್‌ಪುಟ್ ಅನ್ನು ಪಾರ್ಸ್ (parse) ಮಾಡಲೇಬೇಕು.
  • ಫೈಲ್ಯೂರ್ ಪ್ರೊಪಗೇಶನ್ (Failure propagation): ಒಂದು ಏಜೆಂಟ್ ವಿಫಲವಾದಾಗ ಸಿಸ್ಟಮ್‌ಗೆ ತಿಳಿಯಬೇಕು.
  • ಕಾನ್ಟೆಕ್ಸ್ಟ್ ಹೈಜೀನ್ (Context hygiene): ಪ್ರತಿ ಹ್ಯಾಂಡ್‌ಆಫ್ ನಿಮ್ಮ ವಿಂಡೋಗೆ ಅನಗತ್ಯ ಮಾಹಿತಿಯನ್ನು (noise) ಸೇರಿಸುತ್ತದೆ.

ಏಜೆಂಟ್‌ಗಳನ್ನು ಒಂದು ದಾರದಿಂದ ಜೋಡಿಸಿದ 'ಬ್ಲಾಕ್ ಬಾಕ್ಸ್'ಗಳಂತೆ (black boxes) ಪರಿಗಣಿಸುವುದು ದೊಡ್ಡ ತಪ್ಪು. ನೀವು ಏಜೆಂಟ್ A ಗೆ ಪ್ರಾಂಪ್ಟ್ ನೀಡುತ್ತೀರಿ, ಫಲಿತಾಂಶವನ್ನು ಪಡೆಯುತ್ತೀರಿ ಮತ್ತು ಅದನ್ನು ಏಜೆಂಟ್ B ಗೆ ತಳ್ಳುತ್ತೀರಿ. ಇದು ವ್ಯವಸ್ಥೆಯು ಮುರಿಯುವವರೆಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ. ಅದು ಮುರಿದಾಗ, ಏಕೆ ಎಂದು ನಿಮಗೆ ತಿಳಿಯುವುದಿಲ್ಲ.

ಈ ಮೂರು ಸಾಮಾನ್ಯ ವೈಫಲ್ಯದ ವಿಧಾನಗಳನ್ನು ತಪ್ಪಿಸಿ:

  1. ಸೈಲೆಂಟ್ ಟ್ರಂಕೇಶನ್ (Silent truncation): ಏಜೆಂಟ್ A ಅತಿಯಾದ ಡೇಟಾವನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ. ಏಜೆಂಟ್ B ಅದರ ಅಂತ್ಯವನ್ನು ಕತ್ತರಿಸುತ್ತದೆ. ನಂತರ ಏಜೆಂಟ್ B ಅಪೂರ್ಣ ಡೇಟಾವನ್ನು ಪ್ರೊಸೆಸ್ ಮಾಡಿ ನಿಮಗೆ ಅರ್ಥಹೀನ ಮಾಹಿತಿಯನ್ನು ನೀಡುತ್ತದೆ. ಪ್ರತಿ ಹಂತದಲ್ಲೂ ನಿಮ್ಮ ಟೋಕನ್ ಸಂಖ್ಯೆಯನ್ನು (token counts) ಅಳೆಯಿರಿ.

  2. ಸ್ಕೀಮಾ ಡ್ರಿಫ್ಟ್ (Schema drift): ನೀವು ಏಜೆಂಟ್ A ಗಾಗಿ ಪ್ರಾಂಪ್ಟ್ ಬದಲಾಯಿಸುತ್ತೀರಿ. ಈಗ ಅದು ವಿಭಿನ್ನ ಫಾರ್ಮ್ಯಾಟ್ ಅನ್ನು ನೀಡುತ್ತದೆ. ಏಜೆಂಟ್ B ಹಳೆಯ ಫಾರ್ಮ್ಯಾಟ್ ಅನ್ನು ನಿರೀಕ್ಷಿಸುವುದರಿಂದ ಅದು ಕೆಲಸ ಮಾಡುವುದಿಲ್ಲ. ಪ್ರಾಂಪ್ಟ್‌ಗಳ ಮೇಲೆ ಅವಲಂಬಿತವಾಗುವ ಬದಲು Pydantic ನಂತಹ ಸ್ಟ್ರಕ್ಚರ್ಡ್ ಔಟ್‌ಪುಟ್ (structured output) ಬಳಸಿ.

  3. ರೇಸ್ ಕಂಡೀಷನ್ಸ್ (Race conditions): ನೀವು ಏಕಕಾಲದಲ್ಲಿ ಐದು ವರ್ಕರ್ಸ್‌ಗಳನ್ನು ರನ್ ಮಾಡಿದ್ದೀರಿ ಎಂದು ಭಾವಿಸೋಣ. ಮೂರು ಮುಗಿದವು, ಆದರೆ ಇಬ್ಬರು ಇನ್ನೂ ರನ್ ಆಗುತ್ತಿದ್ದಾರೆ. ನಿಮ್ಮ ಅಗ್ரிகೇಟರ್ (aggregator) ಅಪೂರ್ಣ ಡೇಟಾದೊಂದಿಗೆ ಬೇಗನೆ ಪ್ರಾರಂಭಿಸುತ್ತದೆ. ಇದು ಟೆಸ್ಟ್‌ಗಳಲ್ಲಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಆದರೆ ಪ್ರೊಡಕ್ಷನ್‌ನಲ್ಲಿ ವಿಫಲವಾಗುತ್ತದೆ. ಎಲ್ಲಾ ಕಾರ್ಯಗಳಿಗಾಗಿ ಕಾಯಲು 'ಬ್ಯಾರಿಯರ್' (barrier) ಬಳಸಿ.

ನನ್ನ ಮೊದಲ ಸಿಸ್ಟಮ್ ಚತುರವಾಗಿತ್ತು ಆದರೆ ಅಸ್ತವ್ಯಸ್ತವಾಗಿತ್ತು. ಅದು ಡೈನಾಮಿಕ್ ರೂಟಿಂಗ್ (dynamic routing) ಮತ್ತು ಇಂಪ್ಲಿಸಿಟ್ ಹ್ಯಾಂಡ್‌ಆಫ್‌ಗಳನ್ನು (implicit handoffs) ಬಳಸುತ್ತಿತ್ತು. ಅದು ನೈಜ ಟ್ರಾಫಿಕ್ ಎದುರಿಸುವವರೆಗೆ ಚೆನ್ನಾಗಿ ಕೆಲಸ ಮಾಡಿತು ಮತ್ತು ನಂತರ ಸೈಲೆಂಟ್ ಆಗಿ ವಿಫಲವಾಯಿತು.

ನನ್ನ ಎರಡನೇ ಸಿಸ್ಟಮ್ ನೋಡಲು ಅಷ್ಟೊಂದು ಚೆನ್ನಾಗಿರಲಿಲ್ಲ ಆದರೆ ಸರಿಯಾಗಿತ್ತು. ಪ್ರತಿ ಹ್ಯಾಂಡ್‌ಆಫ್ ಒಂದು ಟೈಪ್ಡ್ ಕಾಂಟ್ರಾಕ್ಟ್ (typed contract) ಬಳಸುತ್ತಿತ್ತು. ಪ್ರತಿ ವೈಫಲ್ಯವು ಸ್ಪಷ್ಟವಾಗಿತ್ತು (explicit). ಪ್ರತಿ ಏಜೆಂಟ್ ಅನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ (isolated) ಇರಿಸಲಾಗಿತ್ತು.

ನನ್ನ ಪ್ರಸ್ತುತ ಸಿಸ್ಟಮ್ ಎರಡನ್ನೂ ಒಳಗೊಂಡಿದೆ. ಇದು ಎರಡನೇ ಆವೃತ್ತಿಯ ಶಿಸ್ತನ್ನು ಬಳಸುತ್ತದೆ ಆದರೆ ಬೋರಿಂಗ್ ಕೋಡ್ ಅನ್ನು ಫ್ರೇಮ್‌ವರ್ಕ್‌ನ (framework) ಹಿಂದೆ ಮರೆಮಾಚುತ್ತದೆ.

ನೀವು ಮಲ್ಟಿ-ಏಜೆಂಟ್ ಸಿಸ್ಟಮ್‌ಗಳನ್ನು ನಿರ್ಮಿಸುತ್ತಿದ್ದರೆ, ಮೊದಲು ಅಸಹಜವಾಗಿದ್ದರೂ ಸರಿಯಾದ ಆವೃತ್ತಿಯೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಿ. ಮೊದಲು ಚತುರರಾಗಲು ಪ್ರಯತ್ನಿಸಬೇಡಿ. ಪ್ರೊಡಕ್ಷನ್‌ನಲ್ಲಿ ಅದನ್ನು ಸರಿಯಾಗಿ ಮಾಡಿಕೊಳ್ಳಿ, ನಂತರ ಅದನ್ನು ಸುಂದರಗೊಳಿಸಿ.

ಹ್ಯಾಂಡ್‌ಆಫ್ ಸಮಸ್ಯೆ ಸುಲಭವಾಗುವುದಿಲ್ಲ. ಆದರೆ ಅದು ನಿಮ್ಮನ್ನು ಅಚ್ಚರಿಗೊಳಿಸುವುದನ್ನು ನೀವು ನಿಲ್ಲಿಸುತ್ತೀರಿ.

Source: https://dev.to/mrclaw207/your-agents-are-fine-the-handoff-between-them-isnt-2dij

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