LangGraph agents ಕೊನೆಗೂ ತಮ್ಮ ಸ್ಟೇಟ್ ಅನ್ನು ಕಾಪಾಡಿಕೊಳ್ಳಲು ವಿಶ್ವಾಸಾರ್ಹ ಮಾರ್ಗವನ್ನು ಕಂಡುಕೊಂಡಿವೆ. SQLite, ರೊ (raw) ಆಬ್ಜೆಕ್ಟ್ ಸ್ಟೋರೇಜ್ ಮತ್ತು ಪ್ರತಿಯೊಂದರ ವಿಫಲವಾದ ವರ್ಷನ್ ಎಂಬ ಮೂರು ಪ್ರಯತ್ನಗಳ ನಂತರ, ಲೇಖಕರು ಅಟಾಮಿಕ್-ಅಪ್‌ಡೇಟ್ (atomic-update) ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಕಂಡುಕೊಂಡಿದ್ದಾರೆ. ಇದು ಪ್ರತಿ ಬಾರಿ ವಿನಂತಿ (request) ಬಂದಾಗ ಏಜೆಂಟ್‌ಗಳು ಮೊದಲಿನಿಂದಲೇ ಪ್ರಾರಂಭಿಸುವುದನ್ನು ತಪ್ಪಿಸುತ್ತದೆ.

LangGraph ಗೆ ಚೆಕ್‌ಪಾಯಿಂಟಿಂಗ್ ಏಕೆ ಮುಖ್ಯ

LangGraph ಡೆವಲಪರ್‌ಗಳಿಗೆ LLM ಕರೆಗಳನ್ನು ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ "agents" ಆಗಿ ಜೋಡಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ, ಇವು ಸಂಭಾಷಣೆಯಲ್ಲಿ ಮೊದಲು ಏನಾಯಿತು ಎಂಬುದನ್ನು ನೆನಪಿಟ್ಟುಕೊಳ್ಳಬಲ್ಲವು. ಈ agents ಬಳಕೆದಾರರ ವಿನಂತಿಯನ್ನು ಉಪ-ಕಾರ್ಯಗಳಾಗಿ (sub-tasks) ವಿಂಗಡಿಸುತ್ತವೆ, ಮಧ್ಯಂತರ ಫಲಿತಾಂಶಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತವೆ ಮತ್ತು ಮುಂದಿನ ಕರೆಯಲ್ಲಿ ಎಲ್ಲಿ ಬಿಟ್ಟಿದ್ದರೋ ಅಲ್ಲಿಂದಲೇ ಮುಂದುವರಿಯುತ್ತವೆ. ಒಂದು ವೇಳೆ ಸಂಗ್ರಹಿಸಲಾದ ಸ್ಟೇಟ್ ಕಣ್ಮರೆಯಾದರೆ, ಏಜೆಂಟ್ ಎಲ್ಲವನ್ನೂ ಮರು-ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ, ಇದರಿಂದ ಕಂಪ್ಯೂಟ್ ವ್ಯರ್ಥವಾಗುತ್ತದೆ, ವಿಳಂಬ (latency) ಹೆಚ್ಚಾಗುತ್ತದೆ ಮತ್ತು ಬಳಕೆದಾರರಿಗೆ ಕಳಪೆ ಅನುಭವ ನೀಡುತ್ತದೆ. Telegram ಸಂದೇಶಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಪ್ರೊಡಕ್ಷನ್ ಬಾಟ್‌ನಲ್ಲಿ, ಈ ದತ್ತಾಂಶ ಕಳೆದುಹೋಗುವಿಕೆಯಿಂದ ವಾರಗಟ್ಟಲೆ ಸಂಭಾಷಣೆಯ ಇತಿಹಾಸವು ಅಳಿಸಿಹೋಯಿತು.

ಮೊದಲ ಪರಿಹಾರ: SQLite saver

ಏಕೈಕ ಇನ್‌ಸ್ಟೆನ್ಸ್ ಏಜೆಂಟ್ ಅನ್ನು ರನ್ ಮಾಡಿದ್ದಾಗ ಇನ್‌ಬಿಲ್ಟ್ SqliteSaver ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ. ಇದು ಪ್ರತಿಯೊಂದು ಚೆಕ್‌ಪಾಯಿಂಟ್ ಅನ್ನು ಸ್ಥಳೀಯ SQLite ಫೈಲ್‌ನಲ್ಲಿ JSON ಬ್ಲಾಬ್ ಆಗಿ ಬರೆಯುತ್ತದೆ. ಡೆವಲಪರ್ AgentState ಟೈಪ್‌ಗೆ ಹೊಸ ಫೀಲ್ಡ್ ಅನ್ನು ಸೇರಿಸಿ ಮರು-배ದployed (redeployed) ಮಾಡಿದಾಗ ತೊಂದರೆ ಪ್ರಾರಂಭವಾಯಿತು. ಸ್ಕೀಮಾ ಬದಲಾವಣೆಯ ಮೊದಲು ರಚಿಸಲಾದ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಚೆಕ್‌ಪಾಯಿಂಟ್‌ಗಳಲ್ಲಿ ಹೊಸ ಫೀಲ್ಡ್ ಇರಲಿಲ್ಲ. SqliteSaver ಎಂದಿಗೂ ಮೈಗ್ರೇಷನ್ ಅನ್ನು ನಡೆಸದ ಕಾರಣ, LangGraph ಅಪೂರ್ಣ JSON ಅನ್ನು ಲೋಡ್ ಮಾಡಿತು, ಕಾಣೆಯಾದ ಡೇಟಾವನ್ನು ಬಿಟ್ಟುಬಿಟ್ಟಿತು ಮತ್ತು ಏಜೆಂಟ್ ಮೊದಲಿನಿಂದಲೇ ಪ್ರಾರಂಭವಾಯಿತು.

ಪ್ರಮುಖ ಅಂಶ: ಸ್ಕೀಮಾ ವಿಕಸನ (schema evolution) ಅಗತ್ಯವಿರುವಾಗ, SQLite ಸ್ಟೋರೇಜ್ ಎಂಬುದು ಕೇವಲ ಡೆಮೊ ಸಾಧನವೇ ಹೊರತು ಪ್ರೊಡಕ್ಷನ್-ರೆಡಿ ಪರಿಹಾರವಲ್ಲ.

ಎರಡನೇ ಪರಿಹಾರ: Object storage

ಸೀರಿಯಲೈಸೇಶನ್ ಫಾರ್ಮ್ಯಾಟ್ ಮೇಲೆ ನಿಯಂತ್ರಣ ಸಾಧಿಸಲು, ಲೇಖಕರು Oracle Cloud Object Storage ಗೆ JSON ಚೆಕ್‌ಪಾಯಿಂಟ್ ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡುವ ಕಸ್ಟಮ್ ಸೇವರ್ ಅನ್ನು ಬರೆದರು. ಈ ಕ್ರಮವು ಸ್ಕೀಮಾವನ್ನು ಮ್ಯಾನುಯಲ್ ಆಗಿ ವರ್ಷನ್ ಮಾಡಲು ನಮ್ಯತೆಯನ್ನು ನೀಡಿತು, ಆದರೆ ಇದು ಹೊಸ ವೈಫಲ್ಯದ ವಿಧಾನವನ್ನು ಪರಿಚಯಿಸಿತು. ಎರಡು ವಿನಂತಿಗಳು ಏಕಕಾಲದಲ್ಲಿ ಒಂದೇ ಸಂಭಾಷಣೆಯ ಥ್ರೆಡ್‌ಗೆ ಬಂದಾಗ, ಎರಡೂ ಒಂದೇ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಓವರ್‌ರೈಟ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿದವು. ಆಬ್ಜೆಕ್ಟ್ ಸ್ಟೋರೇಜ್ ಸೇವೆಗಳು 'write-once, read-many' ಮಾದರಿಗಳಿಗೆ ಅನುಗುಣವಾಗಿ ರೂಪಿತವಾಗಿವೆ; ಅವು ಅಟಾಮಿಕ್ ಓವರ್‌ರೈಟ್ ಸೆಮ್ಯಾಂಟಿಕ್ಸ್ ಅನ್ನು ಒದಗಿಸುವುದಿಲ್ಲ. ಈ ರೇಸ್ ಕಂಡೀಷನ್ (race condition) ತಪ್ಪಾದ ಅಥವಾ ಅಪೂರ್ಣವಾದ JSON ಫೈಲ್‌ಗಳನ್ನು ಸೃಷ್ಟಿಸಿತು ಮತ್ತು ಏಜೆಂಟ್ ಮತ್ತೊಮ್ಮೆ ತನ್ನ ಸಂದರ್ಭವನ್ನು (context) ಕಳೆದುಕೊಂಡಿತು.

ಪ್ರಮುಖ ಅಂಶ: ಏಕಕಾಲದಲ್ಲಿ ಅನೇಕ ವರ್ಕರ್ಸ್‌ಗಳು ಒಂದೇ ಕೀಯನ್ನು (key) ಬಳಸಬಹುದಾದಾಗ, ಆಬ್ಜೆಕ್ಟ್ ಸ್ಟೋರೇಜ್‌ನಲ್ಲಿ ಸರಳ ಓವರ್‌ರೈಟ್‌ಗಳು ಸುರಕ್ಷಿತವಲ್ಲ.

ಮೂರನೇ ಪರಿಹಾರ: Versioning ನೊಂದಿಗೆ ಅಟಾಮಿಕ್ ಅಪ್‌ಡೇಟ್‌ಗಳು

ಅಂತಿಮ ಮತ್ತು ಸ್ಥಿರವಾದ ವಿನ್ಯಾಸವು ಎರಡು ವಿಚಾರಗಳನ್ನು ಸಂಯೋಜಿಸುತ್ತದೆ: ಸ್ಪಷ್ಟವಾದ ವರ್ಷನ್ ಸಂಖ್ಯೆಗಳು ಮತ್ತು ಆಬ್ಜೆಕ್ಟ್‌ನ ETag (ಸ್ಟೋರೇಜ್ ಸೇವೆಯ ಚೆಕ್‌ಸಮ್ ಐಡೆಂಟಿಫೈಯರ್) ಆಧಾರಿತ ಕಂಡೀಷನಲ್ ರೈಟ್ಸ್.

  1. ಪ್ರಸ್ತುತ ಚೆಕ್‌ಪಾಯಿಂಟ್ ಅನ್ನು ಓದಿ (Read) ಮತ್ತು ಅದರ ETag ಅನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ.
  2. ಚೆಕ್‌ಪಾಯಿಂಟ್ ಎನ್ವಲಪ್‌ನ ಒಳಗಿರುವ ವರ್ಷನ್ ಫೀಲ್ಡ್ ಅನ್ನು ಹೆಚ್ಚಿಸಿ (Increment).
  3. ಮೊದಲು ಓದಿದ ETag ಹೊಂದಾಣಿಕೆಯಾದರೆ ಮಾತ್ರ ಯಶಸ್ವಿಯಾಗುವ ಕಂಡೀಷನಲ್ ರಿಕ್ವೆಸ್ಟ್ ಬಳಸಿ ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾದ ಚೆಕ್‌ಪಾಯಿಂಟ್ ಅನ್ನು ಬರೆಯಿರಿ (Write).
  4. ಬೇರೆ ಪ್ರಕ್ರಿಯೆಯೊಂದು ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಬದಲಾಯಿಸಿದ ಕಾರಣ ಕಂಡೀಷನಲ್ ರೈಟ್ ವಿಫಲವಾದರೆ, ಇಡೀ ಓದು-ಹೆಚ್ಚಿಸು-ಬರೆಯುವ (read-increment-write) ಲೂಪ್ ಅನ್ನು ಮರುಪ್ರಯತ್ನಿಸಿ (Retry).

ಬರೆಯುವ ಪ್ರಕ್ರಿಯೆಯು ಬೇರೆ ಯಾವುದೇ ಪ್ರಕ್ರಿಯೆಯು ಫೈಲ್ ಅನ್ನು ಬದಲಾಯಿಸದಿದ್ದಾಗ ಮಾತ್ರ ಯಶಸ್ವಿಯಾಗುವುದರಿಂದ, ಏಕಕಾಲದಲ್ಲಿ ಕೇವಲ ಒಂದು ವರ್ಕರ್ ಮಾತ್ರ ಹೊಸ ಸ್ಟೇಟ್ ಅನ್ನು ಕಮಿಟ್ ಮಾಡಬಲ್ಲದು. ವರ್ಷನ್ ಫೀಲ್ಡ್ ಕೂಡ ಹಳೆಯದಾದ (stale) ಚೆಕ್‌ಪಾಯಿಂಟ್‌ಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಮತ್ತು ಸ್ಕೀಮಾ ಬದಲಾದಾಗ ಅವುಗಳನ್ನು ಮೈಗ್ರೇಟ್ ಮಾಡಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ.

ETag ಆಧಾರಿತ ಕಂಡೀಷನಲ್ ರೈಟ್ಸ್‌ಗಳನ್ನು ಬೆಂಬಲಿಸುವ ಆಬ್ಜೆಕ್ಟ್ ಸ್ಟೋರೇಜ್‌ನೊಂದಿಗೆ ಈ ಪ್ಯಾಟರ್ನ್ ಕೆಲಸ ಮಾಡುತ್ತದೆ.

AI ಇಂಜಿನಿಯರ್‌ಗಳಿಗೆ ಪಾಠಗಳು

  • ಪ್ರೊಟೊಟೈಪ್‌ಗಳಿಗಾಗಿ ಮಾತ್ರ SQLite ಬಳಸಿ. ಪ್ರೊಡಕ್ಷನ್ ಏಜೆಂಟ್‌ಗಳಿಗೆ ಸ್ಕೀಮಾ ಬದಲಾವಣೆಗಳು ಮತ್ತು ಏಕಕಾಲಿಕ ರೈಟ್‌ಗಳನ್ನು (concurrent writes) ನಿಭಾಯಿಸಬಲ್ಲ ಸ್ಟೋರ್ ಅಗತ್ಯವಿದೆ.
  • ಸ್ಕೀಮಾ ಮೈಗ್ರೇಷನ್‌ಗಳನ್ನು ನೀವೇ ಯೋಜಿಸಿ. ಟೈಪ್ಡ್ ಡಿಕ್ಷನರಿಗಳು ಸ್ಟ್ಯಾಟಿಕ್ ಅನಾಲಿಸಿಸ್‌ಗಾಗಿ ರೂಪಗಳನ್ನು ವಿವರಿಸುತ್ತವೆ ಆದರೆ ರನ್‌ಟೈಮ್ ರಚನೆಯನ್ನು ಜಾರಿಗೊಳಿಸುವುದಿಲ್ಲ.
  • ಸ್ಟೇಟ್ ಅನ್ನು ಹಂಚಿಕೆಯ ಸಂಪನ್ಮೂಲವಾಗಿ ಪರಿಗಣಿಸಿ. ಕನ್ಕರನ್ಸಿ (concurrency) ದೋಷಗಳು ಮೌನವಾಗಿ ದತ್ತಾಂಶ ಕಳೆದುಹೋಗುವ ರೂಪದಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ; ಇವುಗಳನ್ನು ಡಿಬಗ್ ಮಾಡುವುದು ನೇರವಾದ ಎಕ್ಸೆಪ್ಶನ್‌ಗಳಿಗಿಂತ ಕಷ್ಟಕರವಾಗಿದೆ.
  • ಕ್ಲೌಡ್ ಪ್ರಿಮಿಟಿವ್ಸ್ ಬಳಸಿ. ETag ಆಧಾರಿತ ಕಂಡೀಷನಲ್ ರೈಟ್ಸ್, ಪ್ರತ್ಯೇಕ ಲಾಕ್ ಸೇವೆಯಿಲ್ಲದೆ ಅಗ್ಗದ ಆಪ್ಟಿಮಿಸ್ಟಿಕ್ ಲಾಕಿಂಗ್ ಅನ್ನು ನೀಡುತ್ತವೆ.
  • ಪ್ರತಿ ಹಂತವನ್ನೂ ಲಾಗ್ ಮಾಡಿ. LangGraph ನಿರ್ಲಕ್ಷಿಸುವ ಕಾಣೆಯಾದ ಫೀಲ್ಡ್‌ನಂತಹ ಮೌನ ವೈಫಲ್ಯಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುವುದು ಅತ್ಯಂತ ಕಷ್ಟಕರ.

LangGraph ಚೆಕ್‌ಪಾಯಿಂಟಿಂಗ್‌ನ ಮುಂದಿನ ಹಂತವೇನು?

ಅದೇ ಅಡೆತಡೆಗಳನ್ನು ಎದುರಿಸಿದ ತಂಡಗಳಿಗೆ, ಈ ಅಟಾಮಿಕ್-ಅಪ್‌ಡೇಟ್ ವಿಧಾನವು ವೇಗವಾದ ಮತ್ತು ಕಡಿಮೆ ವೆಚ್ಚದ ಪರಿಹಾರವನ್ನು ನೀಡುತ್ತದೆ. ವಿಶ್ವಾಸಾರ್ಹ ಪ್ರೊಡಕ್ಷನ್ ಪೈಪ್‌ಲೈನ್‌ಗೆ ಭಾರೀ ಸ್ಟೇಟ್ ಸ್ಟೋರ್ ಅಗತ್ಯವಿಲ್ಲ—ಕೇವಲ ಕನ್ಕರನ್ಸಿ ಮತ್ತು ವರ್ಷನಿಂಗ್ ಅನ್ನು ಎಚ್ಚರಿಕೆಯಿಂದ ನಿರ್ವಹಿಸಿದರೆ ಸಾಕು ಎಂಬುದನ್ನು ಇದು ತೋರಿಸುತ್ತದೆ.

ಸಾರಾಂಶ: ಒಂದು ಸರಳ ವರ್ಷನ್ಡ್ ಎನ್ವಲಪ್ ಮತ್ತು ಕಂಡೀಷನಲ್ ರೈಟ್ಸ್ ಅಸ್ಥಿರವಾದ ಸಿಸ್ಟಮ್ ಅನ್ನು ವಿಶ್ವಾಸಾರ್ಹವನ್ನಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ, ಇದು AI ಇಂಜಿನಿಯರ್‌ಗಳು ಅಂತ್ಯವಿಲ್ಲದ ಡೇಟಾ-ಲಾಸ್ ಡಿಬಗ್ ಮಾಡುವ ಬದಲು ಏಜೆಂಟ್ ಲಾಜಿಕ್ ಮೇಲೆ ಗಮನ ಕೇಂದ್ರೀಕರಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.