Agents ਲਈ ਇੱਕ ਸੁਰੱਖਿਅਤ ਡਿਲੀਵਰੀ ਪਾਈਪਲਾਈਨ ਬਣਾਉਣਾ
ਜ਼ਿਆਦਾਤਰ ਏਜੰਟ ਡੈਮੋ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਸਵਾਲ ਨੂੰ ਛੱਡ ਦਿੰਦੇ ਹਨ। ਤੁਸੀਂ ਇੱਕ ਖੁਦਮੁਖਤਿਆਰ (autonomous) ਸਿਸਟਮ ਨੂੰ ਆਪਣੀ ਤਰਫੋਂ ਚੀਜ਼ਾਂ ਭੇਜਣ ਦੀ ਇਜਾਜ਼ਤ ਕਿਵੇਂ ਦਿੰਦੇ ਹੋ, ਬਿਨਾਂ ਦੁਬਾਰਾ ਭੇਜਣ (double-sending) ਜਾਂ ਅਣਵਰਗੀਕਰਨ ਕੀਤੇ ਕੰਮ ਨੂੰ ਭੇਜਣ ਦੇ?
ਡਬਲ-ਸੈਂਡ (double-send) ਕੋਈ ਦੁਰਲੱਭ ਗਲਤੀ ਨਹੀਂ ਹੈ। ਜਦੋਂ ਕੋਈ ਵਰਕਰ ਕੰਮ ਦੇ ਵਿਚਕਾਰ ਹੀ ਅਸਫਲ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਇਹ ਇੱਕ ਸਾਧਾਰਨ ਕਿਊ (queue) ਦਾ ਡਿਫੌਲਟ ਵਿਵਹਾਰ ਹੁੰਦਾ ਹੈ। ਇੱਕ ਵਰਕਰ ਸੁਨੇਹਾ ਭੇਜਦਾ ਹੈ ਅਤੇ ਫਿਰ ਸਫਲਤਾ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਕ੍ਰੈਸ਼ ਹੋ ਜਾਂਦਾ ਹੈ। ਸਿਸਟਮ ਨੂੰ ਲੱਗਦਾ ਹੈ ਕਿ ਕੰਮ ਅਸਫਲ ਰਿਹਾ ਹੈ ਅਤੇ ਇਹ ਇੱਕ ਨਵੇਂ ਵਰਕਰ ਨੂੰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਕਹਿੰਦਾ ਹੈ। ਗਾਹਕ ਨੂੰ ਦੋ ਈਮੇਲ ਮਿਲਦੀਆਂ ਹਨ ਅਤੇ ਤੁਹਾਨੂੰ ਇੱਕ ਸਪੋਰਟ ਟਿਕਟ ਮਿਲਦੀ ਹੈ।
ਤੁਸੀਂ ਹਰ ਕ੍ਰੈਸ਼ ਨੂੰ ਰੋਕ ਨਹੀਂ ਸਕਦੇ। ਤੁਹਾਨੂੰ ਐਕਸ਼ਨ (action) ਅਤੇ ਰਿਕਾਰਡ ਦੇ ਵਿਚਕਾਰਲੇ ਅੰਤਰ ਵਿੱਚ ਹੋਣ ਵਾਲੇ ਕ੍ਰੈਸ਼ ਲਈ ਡਿਜ਼ਾਈਨ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।
ਅਸਲ ਨਤੀਜੇ ਵਾਲੇ ਕਿਸੇ ਵੀ ਏਜੰਟ ਆਉਟਪੁੱਟ ਲਈ ਇਸ ਛੇ-ਪੜਾਵੀ ਪਾਈਪਲਾਈਨ ਦੀ ਵਰਤੋਂ ਕਰੋ:
• Produce: ਏਜੰਟ ਪੂਰਾ ਆਰਟੀਫੈਕਟ (artifact) ਤਿਆਰ ਕਰਦਾ ਹੈ। ਇਹ ਅਜੇ ਕੁਝ ਵੀ ਨਹੀਂ ਭੇਜਦਾ। • Persist: ਪਹਿਲਾਂ ਇਰਾਦੇ (intent) ਅਤੇ ਆਰਟੀਫੈਕਟ ਨੂੰ ਟਿਕਾਊ ਸਟੋਰੇਜ (durable storage) ਵਿੱਚ ਲਿਖੋ। • Score: ਆਉਟਪੁੱਟ ਨਾਲ ਇੱਕ ਵਿਸ਼ਵਾਸ ਸਕੋਰ (confidence score) ਜੋੜੋ। • Review: ਘੱਟ ਵਿਸ਼ਵਾਸ ਵਾਲੀਆਂ ਚੀਜ਼ਾਂ ਨੂੰ ਮਨੁੱਖੀ ਸਮੀਖਿਆ ਲਈ ਭੇਜੋ। • Approve: ਇੱਕ fail-closed ਗੇਟ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਜਦੋਂ ਤੱਕ ਕੋਈ ਮਨੁੱਖ ਸਪੱਸ਼ਟ ਅਧਿਕਾਰ (authorization) ਨਹੀਂ ਦਿੰਦਾ, ਸਿਸਟਮ ਸਾਰੇ ਭੇਜਣ ਦੇ ਕੰਮਾਂ ਨੂੰ ਰੋਕ ਦਿੰਦਾ ਹੈ। • Send and Attest: ਕਿਸੇ ਲੀਜ਼ (lease) ਦੇ ਅਧੀਨ ਚੀਜ਼ ਭੇਜੋ, ਫਿਰ ਇੱਕ ਸਬੂਤ ਦੀ ਰਸੀਦ ਲਿਖੋ।
ਹਰ ਪੜਾਅ ਇੱਕ ਵੱਖਰਾ ਟਿਕਾਊ ਤਬਦੀਲੀ (durable transition) ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਸਟੇਟ (state) ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ ਵਿੱਚ ਰਹਿੰਦੀ ਹੈ, ਵਰਕਰ ਦੀ ਮੈਮੋਰੀ ਵਿੱਚ ਨਹੀਂ।
ਡੁਪਲੀਕੇਟਾਂ ਨੂੰ ਰੋਕਣ ਲਈ, ਰੋ-ਲੈਵਲ ਲੀਜ਼ਿੰਗ (row-level leasing) ਦੀ ਵਰਤੋਂ ਕਰੋ। Postgres ਵਿੱਚ, SELECT ... FOR UPDATE SKIP LOCKED ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਇੱਕ ਸਮੇਂ ਵਿੱਚ ਸਿਰਫ ਇੱਕ ਹੀ ਵਰਕਰ ਕੋਲ ਕੰਮ ਹੋਵੇ।
ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਨਿਯਮ ਇਹ ਹੈ ਕਿ ਤੁਸੀਂ ਖਤਮ ਹੋ ਚੁੱਕੀਆਂ ਲੀਜ਼ਾਂ (expired leases) ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਦੇ ਹੋ। ਜੇਕਰ ਕੋਈ ਵਰਕਰ ਬਾਹਰੀ ਸੁਨੇਹਾ ਭੇਜਦੇ ਸਮੇਂ ਅਸਫਲ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਇਸਨੂੰ ਆਪਣੇ ਆਪ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਨਾ ਕਰੋ। ਇਸ ਦੀ ਬਜਾਏ, ਮਨੁੱਖੀ ਸਮੀਖਿਆ ਲਈ ਕੰਮ ਨੂੰ ਅਲੱਗ ਰੱਖ ਦਿਓ। ਇੱਕ ਦਿਖਾਈ ਦੇਣ ਵਾਲਾ ਅਟਕਿਆ ਹੋਇਆ ਕੰਮ, ਇੱਕ ਅਦਿੱਖ ਡਬਲ-ਸੈਂਡ ਨਾਲੋਂ ਬਿਹਤਰ ਹੈ।
ਤੁਹਾਨੂੰ fail-closed ਸਿਧਾਂਤਾਂ ਦੀ ਵੀ ਪਾਲਣਾ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ:
- ਭੇਜਣਾ ਡਿਫੌਲਟ ਰੂਪ ਵਿੱਚ ਬੰਦ ਹੁੰਦਾ ਹੈ। ਇੱਕ ਸਿੰਗਲ ਫਲੈਗ ਸਾਰੇ ਆਊਟਬਾਊਂਡ ਟ੍ਰੈਫਿਕ ਨੂੰ ਚਾਲੂ ਕਰ ਸਕਦਾ ਹੈ।
- ਪਛਾਣ ਦੀ ਜਾਂਚ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਸਿਸਟਮ ਨੂੰ ਭੇਜਣ ਦੇ ਸਮੇਂ ਭੇਜਣ ਵਾਲੇ ਦੇ ਪਤੇ ਅਤੇ ਟ੍ਰਾਂਸਪੋਰਟ ਸੁਰੱਖਿਆ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ।
- ਹਰ ਚੀਜ਼ ਦੀ ਇੱਕ ਰਸੀਦ ਹੁੰਦੀ ਹੈ। ਇੱਕ ਅਣ-ਰਿਕਾਰਡ ਕੀਤਾ ਭੇਜਣਾ ਇੱਕ ਅਸਫਲਤਾ ਹੈ।
ਇਸਨੂੰ ਅੰਦਰੂਨੀ ਲੌਗਸ (internal logs) ਵਰਗੇ ਘੱਟ ਜੋਖਮ ਵਾਲੇ ਕੰਮਾਂ ਲਈ ਨਾ ਬਣਾਓ। ਇਸਦੀ ਵਰਤੋਂ ਉਦੋਂ ਕਰੋ ਜਦੋਂ ਕੋਈ ਗਲਤੀ ਪੈਸੇ ਦਾ ਨੁਕਸਾਨ ਕਰਦੀ ਹੈ, ਕਾਨੂੰਨੀ ਮੁੱਦਾ ਪੈਦਾ ਕਰਦੀ ਹੈ, ਜਾਂ ਸਪੋਰਟ ਟਿਕਟ ਦੀ ਲੋੜ ਪੈਂਦੀ ਹੈ।
Optional learning community: https://t.me/GyaanSetuAi
