𝗠𝘆 𝗖𝗼𝗱𝗶𝗻𝗴 𝗔𝗴𝗲𝗻𝘁 𝗙𝗶𝗻𝗶𝘀𝗵𝗲𝗱 𝗧𝗵𝗲 𝗧𝗮𝘀𝗸. 𝗪𝗵𝘆 𝗗𝗶𝗱 𝗧𝗵𝗲 𝗧𝗵𝗿𝗲𝗮𝗱 𝗗𝗶𝗲?
ಕೋಡಿಂಗ್ ಏಜೆಂಟ್ನಲ್ಲಿನ ಅತ್ಯಂತ ಕೆಟ್ಟ ಬಗ್ (bug) ಕ್ರ್ಯಾಶ್ ಆಗುವುದು ಅಲ್ಲ.
ಮೊದಲ ಕೆಲಸ ಯಶಸ್ವಿಯಾದ ನಂತರ, ಮುಂದಿನ ಸಂದೇಶವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದಂತೆ (amnesia) ಭಾಸವಾಗುವುದು ನಿಜವಾದ ಸಮಸ್ಯೆಯಾಗಿದೆ. ನೀವು ಒಂದು ಕೆಲಸವನ್ನು ಕೇಳುತ್ತೀರಿ. ಏಜೆಂಟ್ ಅದನ್ನು ಮುಗಿಸುತ್ತದೆ. ನಂತರ ನೀವು: "ಬಟನ್ ಅನ್ನು ಹಸಿರು ಬಣ್ಣಕ್ಕೆ ಬದಲಾಯಿಸು" ಎಂದು ಹೇಳುತ್ತೀರಿ.
ನಿಮಗೆ ಇದು ಒಂದೇ ಸಂಭಾಷಣೆಯಂತೆ ಕಾಣುತ್ತದೆ. ಆದರೆ ಸಿಸ್ಟಮ್ಗೆ, ಒಂದು ಕೆಲಸ ಪೂರ್ಣಗೊಂಡಿತು ಎಂದರೆ ಸೆಷನ್ (session) ಮುಗಿದಿದೆ ಎಂದರ್ಥ. ಸಿಸ್ಟಮ್ ಮತ್ತೆ ಮೊದಲಿನಿಂದಲೇ ಪ್ರಾರಂಭಿಸುತ್ತದೆ.
CliGate ಅನ್ನು ನಿರ್ಮಿಸುವಾಗ, ನಾನು ಮೂರು ವಿಭಿನ್ನ ಪದರಗಳನ್ನು (layers) ಬೆರೆಸಿದ್ದೇನೆ ಎಂದು ನನಗೆ ಅರಿವಾಯಿತು:
- ಚಾಟ್ ಸಂಭಾಷಣೆ (The chat conversation)
- ರನ್ಟೈಮ್ ಸೆಷನ್ (The runtime session)
- ಪ್ರಸ್ತುತ ಎಕ್ಸಿಕ್ಯೂಷನ್ ಟರ್ನ್ (The current execution turn)
ಇವು ಒಂದೇ ಅಲ್ಲ.
ಸಂಭಾಷಣೆಯು ಮಾತನಾಡುವುದಕ್ಕಾಗಿ ಇರುವ ದೀರ್ಘಕಾಲದ ಸ್ಥಳವಾಗಿದೆ. ರನ್ಟೈಮ್ ಸೆಷನ್ ಎಂಬುದು ಆ ಸಂಭಾಷಣೆಯ ಕೆಲಸ ಮಾಡುವ ಥ್ರೆಡ್ ಆಗಿದೆ. ಟರ್ನ್ ಎಂಬುದು ಆ ಸೆಷನ್ನ ಒಳಗಿನ ಒಂದು ಏಕೈಕ ರನ್ ಆಗಿದೆ.
ಒಂದು ಕೆಲಸ ಪೂರ್ಣಗೊಂಡಾಗ, ಕೇವಲ ಟರ್ನ್ ಮಾತ್ರ ಮುಕ್ತಾಯಗೊಳ್ಳಬೇಕು. ಸೆಷನ್ ಸಕ್ರಿಯವಾಗಿರಬೇಕು.
ದೋಷಪೂರಿತ ಪ್ರಕ್ರಿಯೆಯು ಹೀಗಿರುತ್ತದೆ: ಬಳಕೆದಾರ ಕೆಲಸವನ್ನು ಕೇಳುತ್ತಾರೆ -> ರನ್ಟೈಮ್ ಸೆಷನ್ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ -> ಕೆಲಸ ಪೂರ್ಣಗೊಳ್ಳುತ್ತದೆ -> ಸಂಭಾಷಣೆಯು ಸಕ್ರಿಯ ಸೆಷನ್ ಅನ್ನು ಕ್ಲಿಯರ್ ಮಾಡುತ್ತದೆ -> ಮುಂದಿನ ಫಾಲೋ-ಅಪ್ ಹೊಸ ಸೆಷನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ.
ಇದು ಈ ಕೆಳಗಿನಂತಹ ಸಣ್ಣ ಫಾಲೋ-ಅಪ್ಗಳನ್ನು ಅಡ್ಡಿಪಡಿಸುತ್ತದೆ:
- ಅದನ್ನು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸು (retry that)
- ಇದೇ ಕೆಲಸವನ್ನು ಈ ಫೈಲ್ಗೂ ಮಾಡು (do the same for this file)
- ದೋಷವನ್ನು ವಿವರಿಸು (explain the error)
- ಮುಂದುವರಿಸು (continue)
ಸಿಸ್ಟಮ್ ತಕ್ಷಣವೇ ಸೆಷನ್ ಅನ್ನು ಕಡಿತಗೊಳಿಸಿದರೆ, ನೀವು ಎಲ್ಲವನ್ನೂ ಮತ್ತೆ ಹೇಳಬೇಕಾಗುತ್ತದೆ. ಏಜೆಂಟ್ ಕೆಲಸ ಮಾಡುತ್ತದೆ, ಆದರೆ ಸಂಭಾಷಣೆಯು ಕೃತಕವಾಗಿ ಭಾಸವಾಗುತ್ತದೆ.
ನಾನು ಮಾಡೆಲ್ ಅನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಮಾಡುವ ಮೂಲಕ ಇದನ್ನು ಸರಿಪಡಿಸಿದೆ:
- ಸಂಭಾಷಣೆಗಳು ಸ್ಥಿರವಾಗಿರುತ್ತವೆ (persistent).
- ರನ್ಟೈಮ್ ಸೆಷನ್ಗಳು ಡಿಫಾಲ್ಟ್ ಆಗಿ ಸ್ಥಿರವಾಗಿರುತ್ತವೆ (sticky).
- ಪೂರ್ಣಗೊಂಡ ಅಥವಾ ವಿಫಲವಾದ ಕೆಲಸಗಳು ಪ್ರಸ್ತುತ ಟರ್ನ್ ಅನ್ನು ಮಾತ್ರ ಮುಚ್ಚುತ್ತವೆ.
- ಬಳಕೆದಾರ ಕೇಳಿದಾಗ ಅಥವಾ ಮಾಡೆಲ್ ಬದಲಾದಾಗ ಮಾತ್ರ ಹೊಸ ಸೆಷನ್ಗಳು ಪ್ರಾರಂಭವಾಗುತ್ತವೆ.
ಕೆಲಸ ಪೂರ್ಣಗೊಂಡಿದ್ದನ್ನು ಸೆಷನ್ನ ಅಂತ್ಯವೆಂದು ಪರಿಗಣಿಸುವುದನ್ನು ನಾನು ನಿಲ್ಲಿಸಿದೆ. ಈ ಸಣ್ಣ ಬದಲಾವಣೆಯು ಇಡೀ ಉತ್ಪನ್ನದ ಅನುಭವವನ್ನು ಸುಧಾರಿಸುತ್ತದೆ.
CliGate ನಲ್ಲಿ, ಹೊಸ ಸೆಷನ್ ಈ ಕೆಳಗಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ ಮಾತ್ರ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ:
- ಇನ್ನೂ ಯಾವುದೇ ಸೆಷನ್ ಇಲ್ಲದಿದ್ದರೆ.
- ಬಳಕೆದಾರ ಹೊಸದಕ್ಕಾಗಿ ಕೇಳಿದರೆ.
- ಮಾಡೆಲ್ ಬದಲಾವಣೆಯು ಹಳೆಯ ಸೆಷನ್ ಅನ್ನು ಅಸಮರ್ಪಕವಾಗಿಸಿದರೆ (incompatible).
ಇದು ಮನುಷ್ಯರ ಆಲೋಚನಾ ಕ್ರಮಕ್ಕೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆ. ಬಳಕೆದಾರರು ಒಂದು ಚಾಟ್ ಟ್ಯಾಬ್ ಒಂದೇ ನಿರಂತರ ಥ್ರೆಡ್ನಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸಬೇಕೆಂದು ನಿರೀಕ್ಷಿಸುತ್ತಾರೆ. Telegram ಅಥವಾ Feishu ನಂತಹ ಮೊಬೈಲ್ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಇದು ಬಹಳ ಮುಖ್ಯವಾಗಿದೆ.
ಹೊಸ ತರ್ಕವು ಸರಳವಾಗಿದೆ:
- ಮೊದಲ ಸಂದೇಶವು ರನ್ಟೈಮ್ ಸೆಷನ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ.
- ನಂತರದ ಸಂದೇಶಗಳು ಅದೇ ಸೆಷನ್ ಅನ್ನು ಬಳಸುತ್ತವೆ.
- ಕೆಲಸ ಪೂರ್ಣಗೊಂಡರೂ ಥ್ರೆಡ್ ಸ್ಥಗಿತಗೊಳ್ಳುವುದಿಲ್ಲ.
- ಕೇವಲ ಸ್ಪಷ್ಟವಾದ ಆದೇಶಗಳು ಮಾತ್ರ ಹೊಸ ಸೆಷನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತವೆ.
ಇದು ಏಜೆಂಟ್ ಅನ್ನು ಕೇವಲ ಕಮಾಂಡ್ ಲಾಂಚರ್ ಆಗಿ ಕಾಣುವ ಬದಲು, ಒಬ್ಬ ಸಹೋದ್ಯೋಗಿಯಂತೆ ಭಾಸವಾಗುವಂತೆ ಮಾಡುತ್ತದೆ.
ನೀವು ಕೋಡಿಂಗ್ ಏಜೆಂಟ್ಗಳನ್ನು ನಿರ್ಮಿಸುತ್ತಿದ್ದರೆ, ಇದನ್ನು ನೆನಪಿಡಿ: ಸಂಭಾಷಣೆಯು ಸುಸ್ಥಿರ ಘಟಕವಾಗಿದೆ (durable unit). ರನ್ಟೈಮ್ ಸೆಷನ್ ಎಂಬುದು ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ಕೆಲಸಗಾರ (reusable worker). ಟರ್ನ್ ಎಂಬುದು ಯಶಸ್ಸು ಅಥವಾ ವೈಫಲ್ಯದ ನಂತರ ಕೊನೆಗೊಳ್ಳುವ ಪ್ರಕ್ರಿಯೆ.
ಈ ಮೂರು ಪದರಗಳನ್ನು ಪ್ರತ್ಯೇಕಿಸಿ. ನಿಮ್ಮ ಫಾಲೋ-ಅಪ್ಗಳು ಅಂತಿಮವಾಗಿ ಸಂಭಾಷಣೆಯಂತೆ ಅನಿಸುತ್ತವೆ.
ಮೂಲ: https://dev.to/codekingai/my-coding-agent-finished-the-task-why-did-the-thread-die-2jk2
ಐಚ್ಛಿಕ ಕಲಿಕಾ ಸಮುದಾಯ: https://t.me/GyaanSetuAi