ਕਿਚਨ ਨਾਈਟਮੇਅਰਜ਼: LangChain Agents Edition
ਮੈਂ ਰੈਸਿਪੀਜ਼ (recipes) ਨੂੰ ਪੜ੍ਹਨ ਅਤੇ ਮੀਲ ਪਲਾਨ ਬਣਾਉਣ ਲਈ ਇੱਕ ਹੈਲਥ ਐਪ ਬਣਾਈ ਹੈ।
ਮੈਂ ਵੈੱਬ ਐਪ ਲਈ FastAPI ਅਤੇ React ਦੀ ਵਰਤੋਂ ਕੀਤੀ। ਮੈਂ agents ਲਈ LangChain ਦੀ ਵਰਤੋਂ ਕੀਤੀ। ਮੈਂ ਮੇਰੇ agents ਕੀ ਕਰ ਰਹੇ ਹਨ ਇਹ ਦੇਖਣ ਲਈ LangSmith ਦੀ ਵਰਤੋਂ ਕੀਤੀ।
ਟੀਚਾ ਸਧਾਰਨ ਸੀ। ਇੱਕ ਯੂਜ਼ਰ ਇੱਕ URL ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਐਪ ਰੈਸਿਪੀ ਨੂੰ ਫੈਚ (fetch) ਕਰਦੀ ਹੈ ਅਤੇ ਇਸਨੂੰ mains, sides, ਅਤੇ sauces ਵਰਗੇ ਹਿੱਸਿਆਂ ਵਿੱਚ ਵੰਡ ਦਿੰਦੀ ਹੈ। ਯੂਜ਼ਰਸ ਫਿਰ ਭੋਜਨ ਬਣਾਉਣ ਜਾਂ ਕੈਲੋਰੀਆਂ ਨੂੰ ਟ੍ਰੈਕ ਕਰਨ ਲਈ ਇਹਨਾਂ ਨੂੰ ਮਿਕਸ ਅਤੇ ਮੈਚ ਕਰ ਸਕਦੇ ਹਨ।
ਮੈਨੂੰ agent ਦੀ ਭਰੋਸੇਯੋਗਤਾ (reliability) ਨਾਲ ਇੱਕ ਵੱਡੀ ਸਮੱਸਿਆ ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪਿਆ।
ਸ਼ੁਰੂ ਵਿੱਚ, ਮੈਂ ਰੈਸਿਪੀ ਨੂੰ ਗਰੁੱਪ ਕਰਨ ਅਤੇ ਆਉਟਪੁੱਟ ਨੂੰ ਫਾਰਮੈਟ ਕਰਨ ਲਈ ਇੱਕ agent ਦੀ ਵਰਤੋਂ ਕੀਤੀ। ਇਹ ਲਗਾਤਾਰ ਫੇਲ ਹੋ ਰਿਹਾ ਸੀ। ਇਸਨੇ ਡੁਪਲੀਕੇਟ ਆਈਟਮਾਂ ਬਣਾਈਆਂ। ਇਸਨੇ ਹਦਾਇਤਾਂ (instructions) ਨੂੰ ਛੱਡ ਦਿੱਤਾ। ਇਸਨੇ ਸਭ ਕੁਝ ਇੱਕ ਵੱਡੇ ਬਲਾਕ ਵਿੱਚ ਜੋੜ ਦਿੱਤਾ।
ਮੈਂ ਇਸਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ਇੱਕ ਡਿਊਲ (dual) agent ਸੈੱਟਅੱਪ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ:
- Agent 1 (Grouping): ਵੱਖ-ਵੱਖ ਰੈਸਿਪੀ ਕੰਪੋਨੈਂਟਸ ਲੱਭਦਾ ਹੈ ਅਤੇ ਸਮੱਗਰੀ (ingredients) ਅਤੇ ਹਦਾਇਤਾਂ ਨੂੰ ਸੰਗਠਿਤ ਕਰਦਾ ਹੈ।
- Agent 2 (Structuring): ਉਸ ਸੰਗਠਿਤ ਟੈਕਸਟ ਨੂੰ ਲੈਂਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਇੱਕ ਸਾਫ਼ JSON ਫਾਰਮੈਟ ਵਿੱਚ ਬਦਲ ਦਿੰਦਾ ਹੈ।
ਇਹ ਇੱਕ ਦਿਨ ਲਈ ਕੰਮ ਕਰਦਾ ਰਿਹਾ। ਅਗਲੇ ਦਿਨ, ਗਲਤੀਆਂ ਵਾਪਸ ਆ ਗਈਆਂ। structuring agent ਅਜਿਹਾ JSON ਦੇਣਾ ਸ਼ੁਰੂ ਕਰ ਦਿੱਤਾ ਜਿਸ ਵਿੱਚ ਸਾਰੀ ਸਮੱਗਰੀ ਅਤੇ ਹਦਾਇਤਾਂ ਗਾਇਬ ਸਨ।
ਮੈਂ print statements ਦੀ ਵਰਤੋਂ ਬੰਦ ਕਰ ਦਿੱਤੀ ਅਤੇ LangSmith ਦੀ ਵਰਤੋਂ ਸ਼ੁਰੂ ਕਰ ਦਿੱਤੀ।
LangSmith ਮੈਨੂੰ latency, token usage, ਅਤੇ ਲਾਗਤ (cost) ਦਿਖਾਉਂਦਾ ਹੈ। ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਗੱਲ ਇਹ ਹੈ ਕਿ ਇਹ ਮੈਨੂੰ ਬਿਲਕੁਲ ਸਹੀ ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਚੇਨ (chain) ਕਿੱਥੇ ਟੁੱਟ ਰਹੀ ਹੈ।
ਮੇਰੇ ਮਾਮਲੇ ਵਿੱਚ, grouping agent ਬਿਲਕੁਲ ਸਹੀ ਕੰਮ ਕਰ ਰਿਹਾ ਸੀ। ਇਸਨੇ ਸਾਰੀ ਜਾਣਕਾਰੀ ਦੇ ਨਾਲ ਵਧੀਆ markdown ਤਿਆਰ ਕੀਤਾ। ਫੇਲ੍ਹ ਹੋਣਾ ਦੂਜੇ agent ਵਿੱਚ ਹੋਇਆ। ਇਹ ਟ੍ਰਾਂਸਫੋਰਮੇਸ਼ਨ (transformation) ਦੌਰਾਨ ਡਾਟਾ ਗੁਆ ਰਿਹਾ ਸੀ।
ਹੁਣ ਮੈਂ ਤਿੰਨ ਸੁਧਾਰਾਂ 'ਤੇ ਕੰਮ ਕਰ ਰਿਹਾ ਹਾਂ:
- Agent ਦੀ ਭਰੋਸੇਯੋਗਤਾ ਵਿੱਚ ਸੁਧਾਰ: ਮੈਂ ਦੇਖਿਆ ਕਿ structuring agent ਇੱਕ ਅਜਿਹੇ cuisine ਫੀਲਡ ਦਾ ਅੰਦਾਜ਼ਾ ਲਗਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ ਜੋ ਅਸਲ ਪ੍ਰੋਂਪਟ (prompt) ਵਿੱਚ ਨਹੀਂ ਸੀ। ਇਸ ਉਲਝਣ ਕਾਰਨ ਗਲਤੀਆਂ ਹੁੰਦੀਆਂ ਹਨ।
- Validation ਜੋੜਨਾ: ਮੈਂ ਆਉਟਪੁੱਟ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ Python functions ਦੀ ਵਰਤੋਂ ਕਰਾਂਗਾ। ਮੈਂ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਚਾਹੁੰਦਾ ਹਾਂ ਕਿ markdown ਸਹੀ ਹੈ ਅਤੇ ਕੋਈ ਡੁਪਲੀਕੇਟ ਨਹੀਂ ਹਨ।
- ਬਿਹਤਰ observability: ਮੈਂ ਆਸਾਨੀ ਨਾਲ ਟ੍ਰੇਸਿੰਗ (tracing) ਕਰਨ ਲਈ ਹਰ agent execution ਨੂੰ ਇੱਕ ਖਾਸ ਯੂਜ਼ਰ ਰਿਕਵੈਸਟ ਨਾਲ ਜੋੜਨਾ ਚਾਹੁੰਦਾ ਹਾਂ।
Agents ਦੇ ਨਾਲ ਬਣਾਉਣਾ ਕੋਈ ਇੱਕ ਵਾਰ ਦਾ ਕੰਮ ਨਹੀਂ ਹੈ। ਇਹ ਟੈਸਟਿੰਗ ਅਤੇ ਸੁਧਾਰਨ ਦਾ ਇੱਕ ਲਗਾਤਾਰ ਚੱਕਰ ਹੈ।
Source: https://dev.to/kristianroopnarine/kitchen-nightmares-langchain-agents-edition-45co
Optional learning community: https://t.me/GyaanSetuAi
