(ਇਸ ਪਾਠ ਦਾ ਵੀਡੀਓ ਦੇਖਣ ਲਈ ਉਪਰ ਦਿੱਤੀ ਤਸਵੀਰ ‘ਤੇ ਕਲਿੱਕ ਕਰੋ)
ਟੂਲ ਦਿਲਚਸਪ ਹੁੰਦੇ ਹਨ ਕਿਉਂਕਿ ਇਹ ਏਆਈ ਏਜੰਟਾਂ ਨੂੰ ਵੱਡੀ ਸੀਮਿਤਾ ਵਾਲੀਆਂ ਸਮਰੱਥਾਵਾਂ ਦੇਣ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ। ਏਜੰਟ ਕੋਲ ਜਿਹੜੇ ਕੰਮ ਕਰਨ ਦੀ ਸੀਮਿਤ ਸੈੱਟ ਹੁੰਦਾ ਹੈ, ਉਸ ਦੀ ਥਾਂ ਟੂਲ ਸ਼ਾਮਲ ਕਰਨ ਨਾਲ, ਏਜੰਟ ਹੁਣ ਵਿਆਪਕ ਕੰਮ ਕਰ ਸਕਦਾ ਹੈ। ਇਸ ਅਧਿਆਇ ਵਿਚ, ਅਸੀਂ ਟੂਲ ਉਪਯੋਗ ਡਿਜ਼ਾਈਨ ਪੈਟਰਨ ਨੂੰ ਦੇਖਾਂਗੇ, ਜੋ ਦਰਸਾਉਂਦਾ ਹੈ ਕਿ ਕਿਵੇਂ ਏਆਈ ਏਜੰਟ ਖਾਸ ਟੂਲ ਵਰਤ ਕੇ ਆਪਣੇ ਲਕੜਾਂ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹਨ।
ਇਸ ਪਾਠ ਵਿੱਚ ਅਸੀਂ ਹੇਠ ਲਿਖੇ ਸਵਾਲਾਂ ਦੇ ਜਵਾਬ ਲੱਭਣਗੇ:
ਇਸ ਪਾਠ ਨੂੰ ਪੂਰਾ ਕਰਨ ਤੋਂ ਬਾਅਦ, ਤੁਸੀਂ ਸਮਰੱਥ ਹੋਵੋਗੇ:
ਟੂਲ ਉਪਯੋਗ ਡਿਜ਼ਾਈਨ ਪੈਟਰਨ LLMs ਨੂੰ ਬਾਹਰੀ ਟੂਲਾਂ ਨਾਲ ਪਰਸਪਰ ਕਰ ਸਕਣ ਦੀ ਸਮਰੱਥਾ ਦੇਣ ‘ਤੇ ਧਿਆਨ ਕੇਂਦਰਤ ਕਰਦਾ ਹੈ ਤਾਂ ਜੋ ਖਾਸ ਲਕੜਾਂ ਪ੍ਰਾਪਤ ਕਰ ਸਕਣ। ਟੂਲ ਕੋਡ ਹੁੰਦੇ ਹਨ ਜੋ ਏਜੰਟ ਦੁਆਰਾ ਕਿਰਿਆ ਕਰਨ ਲਈ ਚਲਾਏ ਜਾ ਸਕਦੇ ਹਨ। ਇੱਕ ਟੂਲ ਇੱਕ ਸਧਾਰਨ ਫੰਕਸ਼ਨ ਜਿਵੇਂ ਕੁੱਲਕਾਕ (ਕੈਲਕੂਲੇਟਰ) ਹੋ ਸਕਦਾ ਹੈ, ਜਾਂ ਤੀਜੀ ਪੱਖੀ ਸੇਵਾ ਨਾਲ ਜੁੜੀ ਏਪੀਆਈ ਕਾਲ ਜਿਵੇਂ ਸਟਾਕ ਕੀਮਤ ਵੇਖਣਾ ਜਾਂ ਮੌਸਮ ਦੀ ਭਵਿੱਖਬਾਣੀ। ਏਆਈ ਏਜੰਟਾਂ ਦੇ ਸੰਦਰਭ ਵਿੱਚ, ਟੂਲਾਂ ਨੂੰ ਇਹ ਮੰਨ ਕੇ ਤਿਆਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਕਿ ਉਹ ਮਾਡਲ ਦੁਆਰਾ ਤਿਆਰ ਕੀਤੀਆਂ ਫੰਕਸ਼ਨ ਕਾਲਾਂ ਦੇ ਜਵਾਬ ਵਿੱਚ ਚਲਾਏ ਜਾਣਗੇ।
ਏਆਈ ਏਜੰਟ ਜਟਿਲ ਕੰਮ ਪੂਰੇ ਕਰਨ, ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰਨ ਜਾਂ ਫੈਸਲੇ ਕਰਨ ਲਈ ਟੂਲਾਂ ਨੂੰ ਵਰਤ ਸਕਦੇ ਹਨ। ਟੂਲ ਉਪਯੋਗ ਡਿਜ਼ਾਈਨ ਪੈਟਰਨ ਆਕਸਰ ਬਾਹਰੀ ਪ੍ਰਣਾਲੀਅਾਂ ਨਾਲ ਗਤੀਸ਼ੀਲ ਪਰਸਪਰਤਾ ਦੀ ਲੋੜ ਵਾਲੀਆਂ ਸਥਿਤੀਆਂ ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ, ਜਿਵੇਂ ਡੇਟਾ ਬੇਸ, ਵੈੱਬ ਸੇਵਾਵਾਂ ਜਾਂ ਕੋਡ ਅਨੁਵਾਦਕ। ਇਹ ਸਮਰੱਥਾ ਕਈ ਤਰ੍ਹਾਂ ਦੀਆਂ ਵਰਤੋਂਆਂ ਲਈ ਲਾਭਦਾਇਕ ਹੈ ਜਿਵੇਂ:
ਇਹ ਨਿਰਮਾਣ ਬਲਾਕ ਏਆਈ ਏਜੰਟ ਨੂੰ ਵਿਆਪਕ ਕੰਮ ਕਰਨ ਦੀ ਸਮਰੱਥਾ ਦਿੰਦੇ ਹਨ। ਆਓ ਮੁੱਖ ਤੱਤ ਦੇਖੀਏ ਜਿਨ੍ਹਾਂ ਨਾਲ ਟੂਲ ਉਪਯੋਗ ਡਿਜ਼ਾਈਨ ਪੈਟਰਨ ਲਾਗੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ:
ਫੰਕਸ਼ਨ/ਟੂਲ ਸਕੀਮਾਸ: ਉਪਲਬਧ ਟੂਲਾਂ ਦੇ ਵਿਸਥਾਰ ਨਾਲ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨਾ, ਜਿਸ ਵਿੱਚ ਫੰਕਸ਼ਨ ਦਾ ਨਾਮ, ਉਦੇਸ਼, ਲੋੜੀਂਦੇ ਪੈਰਾਮੀਟਰ ਅਤੇ ਉਮੀਦ ਕੀਤੀ ਗਈ ਆਉਟਪੁੱਟ ਸ਼ਾਮਲ ਹਨ। ਇਹ ਸਕੀਮਾਸ LLM ਨੂੰ ਸਮਝਾਉਂਦੀਆਂ ਹਨ ਕਿ ਕਿਹੜੇ ਟੂਲ ਉਪਲਬਧ ਹਨ ਅਤੇ ਕਿਵੇਂ ਸਹੀ ਅਰਜ਼ੀਆਂ ਬਣਾਉਣੀਆਂ ਹਨ।
ਫੰਕਸ਼ਨ ਚਲਾਉਣ ਦੀ ਲੋਜਿਕ: ਇਹ ਨਿਯੰਤ੍ਰਿਤ ਕਰਦਾ ਹੈ ਕਿ ਕਿਸ ਤਰ੍ਹਾਂ ਅਤੇ ਕਦੋਂ ਟੂਲ ਵਰਤੇ ਜਾਣਗੇ, ਯੂਜ਼ਰ ਦੀ ਨੀਅਤ ਅਤੇ ਗੱਲਬਾਤ ਦੇ ਸੰਦਰਭ ਦੇ ਅਧਾਰ ‘ਤੇ। इसमें ਯੋਜਨਾ ਬਣਾਉਣ ਵਾਲੇ ਮੌਡੀਊਲ, ਰੂਟਿੰਗ ਮਕੈਨਿਜ਼ਮ ਜਾਂ ਸ਼ਰਤੀ ਪ੍ਰਵਾਹ ਸ਼ਾਮਲ ਹੋ ਸਕਦੇ ਹਨ ਜੋ ਟੂਲ ਦੀ ਵਰਤੋਂ ਨੂੰ ਗਤੀਸ਼ੀਲ ਬਨਾਉਂਦੇ ਹਨ।
ਸੰਦੇਸ਼ ਭਾਲ ਸਿਸਟਮ: ਜਿਹੜੇ ਯੂਜ਼ਰ ਦੇ ਇਨਪੁੱਟ, LLM ਦੇ ਜਵਾਬ, ਟੂਲ ਕਾਲਾਂ ਅਤੇ ਟੂਲ ਆਉਟਪੁੱਟ ਦੇ ਵਿਚਕਾਰ ਗੱਲਬਾਤ ਦਾ ਪ੍ਰਬੰਧ ਕਰਦੇ ਹਨ।
ਟੂਲ ਇੰਟੀਗ੍ਰੇਸ਼ਨ ਫ੍ਰੇਮਵਰਕ: ਢਾਂਚਾ ਜੋ ਏਜੰਟ ਨੂੰ ਵੱਖ-ਵੱਖ ਟੂਲਾਂ ਨਾਲ ਜੋੜਦਾ ਹੈ, ਚਾਹੇ ਉਹ ਸਧਾਰਨ ਫੰਕਸ਼ਨ hon ਜਾਂ ਜਟਿਲ ਬਾਹਰੀ ਸੇਵਾਵਾਂ।
ਗਲਤੀ ਸੰਭਾਲਣ ਅਤੇ ਮਾਨਤਾ ਪ੍ਰਣਾਲੀ: ਫੰਕਸ਼ਨ ਚਲਾਓਂਦਿਆਂ ਆਉਣ ਵਾਲੀ ਗਲਤੀਆਂ ਨੂੰ ਸੰਭਾਲਣ, ਪੈਰਾਮੀਟਰਾਂ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਅਤੇ ਅਣਉਮੀਦਿਤ ਜਵਾਬ ਨੂੰ ਮੈਨੇਜ ਕਰਨ ਦੀ ਵਿਵਸਥਾ।
ਰਾਜ ਪ੍ਰਬੰਧਨ: ਗੱਲਬਾਤ ਦੇ ਸੰਦਰਭ, ਪਹਿਲਾਂ ਦੀਆਂ ਟੂਲ ਪਰਸਪਰਕ੍ਰਿਆਵਾਂ ਅਤੇ ਲੰਬੀ ਮਿਆਦ ਦਾ ਡੇਟਾ ਲਗਾਤਾਰ ਬਣਾਈ ਰੱਖਣ ਲਈ ਟ੍ਰੈਕ ਕਰਦਾ ਹੈ।
ਅਗਲੇ ਹਿੱਸੇ ਵਿੱਚ ਅਸੀਂ ਫੰਕਸ਼ਨ/ਟੂਲ ਕਾਲਿੰਗ ਨੂੰ ਵਧੇਰੇ ਵਿਸਥਾਰ ਨਾਲ ਦੇਖਾਂਗੇ।
ਫੰਕਸ਼ਨ ਕਾਲਿੰਗ ਹੇਠਾਂ ਦਿੱਤੇ ਤਰੀਕੇ ਨਾਲ LLMs ਨੂੰ ਟੂਲਾਂ ਨਾਲ ਪਰਸਪਰ ਕਰਨ ਦੀ ਮੁੱਖ ਸਾਡਾ ਰਾਹ ਹੈ। ‘ਫੰਕਸ਼ਨ’ ਅਤੇ ‘ਟੂਲ’ ਸ਼ਬਦ ਆਮ ਤੌਰ ‘ਤੇ ਬਦਲਕੇ ਵਰਤੇ ਜਾਂਦੇ ਹਨ ਕਿਉਂਕਿ ਫੰਕਸ਼ਨ (ਪੁਨਰਵਰਤਨੀਯੁਗ ਕੋਡ ਦੇ ਹਿੱਸੇ) ਟੂਲ ਸਮਝੇ ਜਾਂਦੇ ਹਨ ਜਿਹੜੇ ਏਜੰਟ ਕੰਮ ਕਰਨ ਲਈ ਵਰਤਦੇ ਹਨ। ਕਿਸੇ ਫੰਕਸ਼ਨ ਕੋਡ ਨੂੰ ਚਲਾਉਣ ਲਈ, LLM ਨੂੰ ਯੂਜ਼ਰ ਦੀ ਬੇਨਤੀ ਨੂੰ ਫੰਕਸ਼ਨ ਦੀ ਵਰਣਨਾ ਨਾਲ ਤੁਲਨਾ ਕਰਨੀ ਪੈਂਦੀ ਹੈ। ਇਸ ਲਈ ਓਹ ਸਭ ਫੰਕਸ਼ਨਾਂ ਦੀ ਵਰਣਨਾ ਵਾਲਾ ਇੱਕ ਸਕੀਮਾ LLM ਨੂੰ ਭੇਜਿਆ ਜਾਂਦਾ ਹੈ। ਫਿਰ LLM ਸਭ ਤੋਂ ਉਚਿਤ ਫੰਕਸ਼ਨ ਚੁਣਦਾ ਹੈ ਅਤੇ ਇਸਦਾ ਨਾਮ ਅਤੇ ਪੈਰਾਮੀਟਰ ਵਾਪਸ ਕਰਦਾ ਹੈ। ਚੁਣਿਆ ਹੋਇਆ ਫੰਕਸ਼ਨ ਚਲਾਇਆ ਜਾਂਦਾ ਹੈ, ਇਸਦਾ ਜਵਾਬ LLM ਨੂੰ ਵਾਪਸ ਭੇਜਿਆ ਜਾਂਦਾ ਹੈ ਜੋ ਉਸ ਜਾਣਕਾਰੀ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਯੂਜ਼ਰ ਦੀ ਬੇਨਤੀ ਦਾ ਜਵਾਬ ਦਿੰਦਾ ਹੈ।
ਦੇਵਲਪਰਾਂ ਲਈ ਫੰਕਸ਼ਨ ਕਾਲਿੰਗ ਲਾਗੂ ਕਰਨ ਲਈ, ਤੁਹਾਨੂੰ ਚਾਹੀਦਾ ਹੈ:
ਚੱਲੋ ਇੱਕ ਉਦਾਹਰਨ ਲੈਂਦੇ ਹਾਂ ਜੋ ਸ਼ਹਿਰ ਦਾ ਤਾਜ਼ਾ ਸਮਾਂ ਲਭਣ ਬਾਰੇ ਹੈ:
ਫੰਕਸ਼ਨ ਕਾਲਿੰਗ ਸਹਿਯੋਗੀ LLM ਨੂੰ ਇਨੀਸ਼ੀਅਲਾਈਜ਼ ਕਰੋ:
ਸਾਰੇ ਮਾਡਲ ਫੰਕਸ਼ਨ ਕਾਲਿੰਗ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੇ, ਇਸ ਲਈ ਇਹ ਜ਼ਰੂਰੀ ਹੈ ਕਿ ਤੁਸੀਂ ਵਰਤ ਰਹੇ LLM ਵਿੱਚ ਇਹ ਸਮਰਥਨ ਹੋਵੇ। Azure OpenAI ਫੰਕਸ਼ਨ ਕਾਲਿੰਗ ਨੂੰ ਸਹਿਯੋਗ ਦਿੰਦਾ ਹੈ। ਅਸੀਂ ਸ਼ੁਰੂਆਤ ਕਰ ਸਕਦੇ ਹਾਂ Azure OpenAI ਕਲਾਇੰਟ ਬਣਾਉਣ ਨਾਲ।
# ਏਜ਼ੂਰ ਓਪਨਏਆਈ ਕਲਾਇੰਟ ਨੂੰ ਸ਼ੁਰੂ ਕਰੋ
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-05-01-preview"
)
ਫੰਕਸ਼ਨ ਸਕੀਮਾ ਬਣਾਓ:
ਅਗਲੇ ਕਦਮ ਵਿੱਚ ਅਸੀਂ ਇੱਕ JSON ਸਕੀਮਾ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਾਂਗੇ ਜਿਸ ਵਿੱਚ ਫੰਕਸ਼ਨ ਦਾ ਨਾਮ, ਇਸ ਦਾ ਉਦੇਸ਼ ਅਤੇ ਫੰਕਸ਼ਨ ਪੈਰਾਮੀਟਰਾਂ ਦੇ ਨਾਮ ਅਤੇ ਵਰਣਨ ਸ਼ਾਮਲ ਹਨ। ਫਿਰ ਅਸੀਂ ਇਸ ਸਕੀਮਾ ਨੂੰ ਪਿਛਲੇ ਕਲਾਇੰਟ ਨੂੰ ਅਤੇ ਯੂਜ਼ਰ ਦੀ ਬੇਨਤੀ ਨੂੰ ਭੇਜਾਂਗੇ ਜਿਸ ਵਿੱਚ ਸੈਨ ਫ੍ਰਾਂਸਿਸਕੋ ਦਾ ਸਮਾਂ ਲੱਭਣਾ ਸ਼ਾਮਲ ਹੈ। ਇਹ ਗੱਲ ਮਹੱਤਵਪੂਰਨ ਹੈ ਕਿ ਇਹ ਇੱਕ ਟੂਲ ਕਾਲ ਵਾਪਸ ਕਰਦਾ ਹੈ, ਸਵਾਲ ਦਾ ਅੰਤੀਮ ਜਵਾਬ ਨਹੀਂ। ਜਿਸ ਤਰ੍ਹਾਂ ਪਹਿਲਾਂ ਦੱਸਿਆ ਗਿਆ ਸੀ, LLM ਉੱਤਰ ਵਿੱਚ ਉਸ ਫੰਕਸ਼ਨ ਦਾ ਨਾਮ ਅਤੇ ਉਸਦੇ ਆਰਗਿਊਮੈਂਟ ਦਿੰਦਾ ਹੈ ਜੋ ਕੰਮ ਲਈ ਵਿਹਾਰ ਕੀਤਾ ਗਿਆ।
# ਮਾਡਲ ਲਈ ਫੰਕਸ਼ਨ ਦਾ ਵਰਣਨ ਪੜ੍ਹਨ ਲਈ
tools = [
{
"type": "function",
"function": {
"name": "get_current_time",
"description": "Get the current time in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. San Francisco",
},
},
"required": ["location"],
},
}
}
]
# ਸ਼ੁਰੂਆਤੀ ਉਪਭੋਗਤਾ ਸੁਨੇਹਾ
messages = [{"role": "user", "content": "What's the current time in San Francisco"}]
# ਪਹਿਲਾ ਏਪੀਆਈ ਕਾਲ: ਮਾਡਲ ਨੂੰ ਫੰਕਸ਼ਨ ਵਰਤਣ ਲਈ ਕਹੋ
response = client.chat.completions.create(
model=deployment_name,
messages=messages,
tools=tools,
tool_choice="auto",
)
# ਮਾਡਲ ਦੇ ਜਵਾਬ ਨੂੰ ਪ੍ਰਕਿਰਿਆ ਕਰਨਾ
response_message = response.choices[0].message
messages.append(response_message)
print("Model's response:")
print(response_message)
Model's response:
ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_pOsKdUlqvdyttYB67MOj434b', function=Function(arguments='{"location":"San Francisco"}', name='get_current_time'), type='function')])
ਕੰਮ ਕਰਨ ਲਈ ਫੰਕਸ਼ਨ ਕੋਡ:
ਹੁਣ ਜਦ LLM ਨੇ ਚੁਣਿਆ ਹੈ ਕਿ ਕਿਹੜਾ ਫੰਕਸ਼ਨ ਚਲਾਉਣਾ ਹੈ, ਤਾਂ ਉਹ ਕੋਡ ਲਿਖਣਾ ਅਤੇ ਚਲਾਉਣਾ ਹੈ। ਅਸੀਂ Python ਵਿੱਚ ਤਾਜ਼ਾ ਸਮਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਦਾ ਕੋਡ ਲਿਖਾਂਗੇ। ਸਾਥ ਹੀ ਸਾਨੂੰ ਫੰਕਸ਼ਨ ਦੇ ਜਵਾਬ_message ‘ਚੋਂ ਨਾਮ ਅਤੇ ਆਰਗਿਊਮੈਂਟ ਕੱਢਣ ਦਾ ਕੋਡ ਵੀ ਲਿਖਣਾ ਪਵੇਗਾ ਤਾਂ ਜੋ ਅੰਤਮ ਨਤੀਜਾ ਮਿਲ ਸਕੇ।
def get_current_time(location):
"""Get the current time for a given location"""
print(f"get_current_time called with location: {location}")
location_lower = location.lower()
for key, timezone in TIMEZONE_DATA.items():
if key in location_lower:
print(f"Timezone found for {key}")
current_time = datetime.now(ZoneInfo(timezone)).strftime("%I:%M %p")
return json.dumps({
"location": location,
"current_time": current_time
})
print(f"No timezone data found for {location_lower}")
return json.dumps({"location": location, "current_time": "unknown"})
# ਫੰਕਸ਼ਨ ਕਾਲਾਂ ਨੂੰ ਸੰਭਾਲੋ
if response_message.tool_calls:
for tool_call in response_message.tool_calls:
if tool_call.function.name == "get_current_time":
function_args = json.loads(tool_call.function.arguments)
time_response = get_current_time(
location=function_args.get("location")
)
messages.append({
"tool_call_id": tool_call.id,
"role": "tool",
"name": "get_current_time",
"content": time_response,
})
else:
print("No tool calls were made by the model.")
# ਦੂਜੀ API ਕਾਲ: ਮਾਡਲ ਤੋਂ ਆਖਰੀ ਜਵਾਬ ਪ੍ਰਾਪਤ ਕਰੋ
final_response = client.chat.completions.create(
model=deployment_name,
messages=messages,
)
return final_response.choices[0].message.content
get_current_time called with location: San Francisco
Timezone found for san francisco
The current time in San Francisco is 09:24 AM.
ਫੰਕਸ਼ਨ ਕਾਲਿੰਗ ਸੰਭਵ ਤੌਰ ‘ਤੇ ਜ਼ਿਆਦਾਤਰ ਏਜੰਟ ਟੂਲ ਉਪਯੋਗ ਡਿਜ਼ਾਈਨ ਦਾ ਕੇਂਦਰ ਹੈ, ਪਰ ਇਸਨੂੰ ਬਿਲਕੁਲ ਖਦ ਤੋਂ ਲਾਗੂ ਕਰਨਾ ਕਦੇ-ਕਦੇ ਚੁਣੌਤੀਪੂਰਨ ਹੋ ਸਕਦਾ ਹੈ। ਜਿਵੇਂ ਅਸੀਂ ਪਾਠ 2 ਵਿੱਚ Sikhya, ਏਜੰਟਿਕ ਫ੍ਰੇਮਵਰਕ ਸਾਨੂੰ ਟੂਲ ਉਪਯੋਗ ਕਰਨ ਲਈ ਪਹਿਲਾਂ ਤੋਂ ਬਣਾਏ ਨਿਰਮਾਣ ਬਲਾਕ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ।
ਹੇਠਾਂ ਕੁਝ ਉਦਾਹਰਨਾਂ ਹਨ ਜਿਨ੍ਹਾਂ ਨਾਲ ਤੁਸੀਂ ਵੱਖ-ਵੱਖ ਏਜੰਟਿਕ ਫ੍ਰੇਮਵਰਕਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਟੂਲ ਉਪਯੋਗ ਡਿਜ਼ਾਈਨ ਪੈਟਰਨ ਲਾਗੂ ਕਰ ਸਕਦੇ ਹੋ:
ਸੈਮਾਂਟਿਕ ਕਰਨਲ .NET, Python, ਅਤੇ ਜਾਵਾ ਦੇ ਡੇਵਲਪਰਾਂ ਲਈ ਇੱਕ ਖੁੱਲ੍ਹਾ ਸਰੋਤ AI ਫ੍ਰੇਮਵਰਕ ਹੈ ਜੋ LLMs ਨਾਲ ਕੰਮ ਕਰਦਾ ਹੈ। ਇਹ ਤੁਹਾਡੇ ਫੰਕਸ਼ਨਾਂ ਅਤੇ ਉਨ੍ਹਾਂ ਦੇ ਪੈਰਾਮੀਟਰਾਂ ਨੂੰ ਮਾਡਲ ਨੂੰ ਸਵੈਚਾਲਿਤ ਤਰੀਕੇ ਨਾਲ ਵਰਣਨ ਕਰਕੇ, ਜੋੜ ਕੇ ਫੰਕਸ਼ਨ ਕਾਲਿੰਗ ਦੇ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਸੌਖਾ ਬਣਾਉਂਦਾ ਹੈ, ਜਿਸ ਨੂੰ ਸਿਰੀਅਲਾਈਜ਼ਿੰਗ ਕਹਿੰਦੇ ਹਨ। ਇਹ ਮਾਡਲ ਅਤੇ ਤੁਹਾਡੇ ਕੋਡ ਵਿਚਕਾਰ ਗੱਲਬਾਤ ਦਾ ਪਰਚਾਲਨ ਵੀ ਕਰਦਾ ਹੈ। ਸੈਮਾਂਟਿਕ ਕਰਨਲ ਵਰਗਾ ਏਜੰਟਿਕ ਫ੍ਰੇਮਵਰਕ ਵਰਤਣ ਦਾ ਇਕ ਹੋਰ ਫਾਇਦਾ ਇਹ ਹੈ ਕਿ ਇਹ ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ ਤੋਂ ਤਿਆਰ ਟੂਲਾਂ ਜਿਵੇਂ ਫਾਈਲ ਖੋਜ ਅਤੇ ਕੋਡ ਵਿਆਖਿਆਕਾਰ ਤੱਕ ਪਹੁੰਚ ਦਿੰਦਾ ਹੈ।
ਹੇਠਾਂ ਦਿੱਤੀ ਡਾਇਗ੍ਰਾਮ ਸੈਮਾਂਟਿਕ ਕਰਨਲ ਨਾਲ ਫੰਕਸ਼ਨ ਕਾਲਿੰਗ ਦੀ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਦਰਸਾਉਂਦੀ ਹੈ:

ਸੈਮਾਂਟਿਕ ਕਰਨਲ ਵਿੱਚ ਫੰਕਸ਼ਨ/ਟੂਲਾਂ ਨੂੰ ਪਲੱਗਇਨਾਂ ਕਿਹਾ ਜਾਂਦਾ ਹੈ। ਅਸੀਂ ਪਹਿਲਾਂ ਦਿਖਾਏ get_current_time ਫੰਕਸ਼ਨ ਨੂੰ ਇੱਕ ਕਲਾਸ ਵਿੱਚ ਬਦਲ ਕੇ ਪਲੱਗਇਨ ਬਣਾ ਸਕਦੇ ਹਾਂ ਜਿਸ ਵਿੱਚ ਇਹ ਫੰਕਸ਼ਨ ਸ਼ਾਮਲ ਹੋਵੇ। ਅਸੀਂ kernel_function ਡੈਕਰੇਟਰ ਨੂੰ ਵੀ ਇੰਪੋਰਟ ਕਰ ਸਕਦੇ ਹਾਂ, ਜੋ ਫੰਕਸ਼ਨ ਦੀ ਵਰਣਨਾ ਲੈਂਦਾ ਹੈ। ਜਦ ਤੁਸੀਂ GetCurrentTimePlugin ਨਾਲ ਇੱਕ ਕਰਨਲ ਬਣਾਉਦੇ ਹੋ, ਕਰਨਲ ਆਪਣੇ ਆਪ ਫੰਕਸ਼ਨ ਅਤੇ ਪੈਰਾਮੀਟਰਾਂ ਨੂੰ ਸਿਰੀਅਲਾਈਜ਼ ਕਰਦਾ ਹੈ ਅਤੇ ਪ੍ਰਕਿਰਿਆ ਦੌਰਾਨ LLM ਨੂੰ ਭੇਜਣ ਲਈ ਸਕੀਮਾ ਬਣਾਉਂਦਾ ਹੈ।
from semantic_kernel.functions import kernel_function
class GetCurrentTimePlugin:
async def __init__(self, location):
self.location = location
@kernel_function(
description="Get the current time for a given location"
)
def get_current_time(location: str = ""):
...
from semantic_kernel import Kernel
# ਕਰਨਲ ਬਣਾਓ
kernel = Kernel()
# ਪਲੱਗਇਨ ਬਣਾਓ
get_current_time_plugin = GetCurrentTimePlugin(location)
# ਪਲੱਗਇਨ ਨੂੰ ਕਰਨਲ ਵਿੱਚ ਜੋੜੋ
kernel.add_plugin(get_current_time_plugin)
Azure AI ਏਜੰਟ ਸਰਵਿਸ ਇੱਕ ਨਵਾਂ ਏਜੰਟਿਕ ਫ੍ਰੇਮਵਰਕ ਹੈ ਜੋ ਡੇਵਲਪਰਾਂ ਨੂੰ ਸੁਤੰਤਰ, ਸੁਰੱਖਿਅਤ ਅਤੇ ਵਿਸਥਾਰਯੋਗ ਬਹੂਗੁਣਵੱਤਾ ਵਾਲੇ ਏਆਈ ਏਜੰਟ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਦਿੰਦਾ ਹੈ, ਜਿੱਥੇ ਹੇਠਲਾ ਕੰਪਿਊਟ ਅਤੇ ਸਟੋਰੇਜ ਸਰੋਤ ਪ੍ਰਬੰਧਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ। ਇਹ ਖਾਸ ਤੌਰ ‘ਤੇ ਕਾਰੋਬਾਰੀ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਮੁਹੱਈਆ ਹੈ ਕਿਉਂਕਿ ਇਹ ਇੱਕ ਪੂਰੀ ਤਰ੍ਹਾਂ ਪ੍ਰਬੰਧਿਤ ਸਰਵਿਸ ਹੈ ਜਿਸ ਵਿੱਚ ਉੱਚ ਸੁਰੱਖਿਆ ਮਿਆਰ ਹੈ।
ਸਿੱਧੇ LLM API ਨਾਲ ਵਿਕਾਸ ਕਰਨ ਨਾਲ ਤੁਲਨਾ ਕਰਨ ‘ਤੇ, Azure AI ਏਜੰਟ ਸਰਵਿਸ ਕੁਝ ਫਾਇਦੇ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ:
Azure AI ਏਜੰਟ ਸਰਵਿਸ ਵਿੱਚ ਉਪਲਬਧ ਟੂਲੋ ਨੂੰ ਦੋ ਵਰਗਾਂ ਵਿੱਚ ਵੰਡਿਆ ਜਾ ਸਕਦਾ ਹੈ:
ਏਜੰਟ ਸਰਵਿਸ ਸਾਨੂੰ ਇਨ੍ਹਾਂ ਟੂਲਾਂ ਨੂੰ ਇੱਕ ‘ਟੂਲਸੈੱਟ’ ਵੱਜੋਂ ਵਰਤਣ ਦਿੰਦੀ ਹੈ। ਇਹ ‘ਥ੍ਰੇਡ’ ਬਰਤਦਾ ਹੈ ਜੋ ਕਿਸੇ ਖਾਸ ਗੱਲਬਾਤ ਤੋਂ ਸੁਨੇਹਿਆਂ ਦਾ ਇਤਿਹਾਸ ਰੱਖਦਾ ਹੈ।
ਕਲਪਨਾ ਕਰੋ ਕਿ ਤੁਸੀਂ ਇੱਕ ਕੰਪਨੀ Contoso ਵਿੱਚ ਸੇਲਜ਼ ਏਜੰਟ ਹੋ। ਤੁਸੀਂ ਇੱਕ ਗੱਲਬਾਤੀ ਏਜੰਟ ਵਿਕਸਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ ਜੋ ਤੁਹਾਡੇ ਸੇਲਜ਼ ਡੇਟਾ ਬਾਰੇ ਪ੍ਰਸ਼ਨਾਂ ਦੇ ਜਵਾਬ ਦੇ ਸਕੇ।
ਹੇਠਾਂ ਦੀ ਤਸਵੀਰ ਦਰਸਾਂਦੀ ਹੈ ਕਿ ਤੁਸੀਂ Azure AI ਏਜੰਟ ਸਰਵਿਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਆਪਣੀ ਸੇਲਜ਼ ਡੇਟਾ ਦਾ ਵਿਸ਼ਲੇਸ਼ਣ ਕਿਵੇਂ ਕਰ ਸਕਦੇ ਹੋ:

ਇਹਨਾਂ ਟੂਲਾਂ ਵਿੱਚੋਂ ਕਿਸੇ ਇੱਕ ਨੂੰ ਸਰਵਿਸ ਨਾਲ ਵਰਤਣ ਲਈ ਅਸੀਂ ਕਲਾਇੰਟ ਬਣਾਈਏਗਾ ਅਤੇ ਟੂਲ ਜਾਂ ਟੂਲਸੈੱਟ ਪਰਿਭਾਸ਼ਿਤ ਕਰਾਂਗੇ। ਹਕੀਕਤ ਵਿੱਚ ਲਾਗੂ ਕਰਨ ਲਈ ਅਸੀਂ ਹੇਠਾਂ ਦਿੱਤਾ Python ਕੋਡ ਵਰਤ ਸਕਦੇ ਹਾਂ। LLM ਟੂਲਸੈੱਟ ਨੂੰ ਵੇਖ ਕੇ ਨਿਰਣਾ ਕਰ ਸਕਦਾ ਹੈ ਕਿ ਯੂਜ਼ਰ ਬਣਾਇਆ ਫੰਕਸ਼ਨ fetch_sales_data_using_sqlite_query ਵਰਤਣਾ ਹੈ ਜਾਂ ਪਹਿਲਾਂ ਤਿਆਰ Code Interpreter ਨੂੰ ਵਰਤਣਾ ਹੈ, ਯੂਜ਼ਰ ਦੀ ਬੇਨਤੀ ਦੇ ਅਨੁਸਾਰ।
import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from fetch_sales_data_functions import fetch_sales_data_using_sqlite_query # fetch_sales_data_using_sqlite_query ਫੰਕਸ਼ਨ ਜੋ fetch_sales_data_functions.py ਫਾਈਲ ਵਿੱਚ ਮਿਲ ਸਕਦਾ ਹੈ।
from azure.ai.projects.models import ToolSet, FunctionTool, CodeInterpreterTool
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=os.environ["PROJECT_CONNECTION_STRING"],
)
# ਟੂਲਸੈੱਟ ਨੂੰ ਸ਼ੁਰੂ ਕਰੋ
toolset = ToolSet()
# function calling ਏਜੰਟ ਨੂੰ fetch_sales_data_using_sqlite_query ਫੰਕਸ਼ਨ ਨਾਲ ਸ਼ੁਰੂ ਕਰੋ ਅਤੇ ਇਸਨੂੰ ਟੂਲਸੈੱਟ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ
fetch_data_function = FunctionTool(fetch_sales_data_using_sqlite_query)
toolset.add(fetch_data_function)
# ਕੋਡ ਇੰਟਰਪ੍ਰੇਟਰ ਟੂਲ ਨੂੰ ਸ਼ੁਰੂ ਕਰੋ ਅਤੇ ਇਸਨੂੰ ਟੂਲਸੈੱਟ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ।
code_interpreter = code_interpreter = CodeInterpreterTool()
toolset.add(code_interpreter)
agent = project_client.agents.create_agent(
model="gpt-4o-mini", name="my-agent", instructions="You are helpful agent",
toolset=toolset
)
LLMs ਦੁਆਰਾ ਡਾਇਨਾਮਿਕ ਤੌਰ ‘ਤੇ ਬਣਾਈ ਗਈ SQL ਸੰਬੰਧੀ ਇੱਕ ਆਮ ਚਿੰਤਾ ਸੁਰੱਖਿਆ ਹੈ, ਖਾਸ ਕਰ ਕੇ SQL Injection ਜਾਂ ਨੁਕਸਾਨ ਪੁੱਜਾਉਣ ਵਾਲੇ ਕੰਮਾਂ ਦੀ ਚਿੰਤਾ, ਜਿਵੇਂ ਡੇਟਾਬੇਸ ਡ੍ਰਾਪ ਕਰਨਾ ਜਾਂ ਛੇੜਛਾੜ ਕਰਨਾ। ਜਿਵੇਂ ਕਿ ਇਹ ਚਿੰਤਾਵਾਂ ਬਿਲਕੁਲ ਸਹੀ ਹਨ, ਇਹਨਾਂ ਨੂੰ ਵਧੀਆ ਤਰੀਕੇ ਨਾਲ ਡੇਟਾਬੇਸ ਪਹੁੰਚ ਅਧਿਕਾਰ ਸੈਟ ਕਰਕੇ ਕਾਬੂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਜ਼ਿਆਦਾਤਰ ਡੇਟਾਬੇਸ ਲਈ ਇਹ ਮਤਲਬ ਹੈ ਕਿ ਡੇਟਾਬੇਸ ਨੂੰ ਰੀਡ-ਓਨਲੀ ਬਣਾਇਆ ਜਾਵੇ। PostgreSQL ਜਾਂ Azure SQL ਵਰਗੀਆਂ ਡੇਟਾਬੇਸ ਸੇਵਾਵਾਂ ਲਈ, ਐਪ ਨੂੰ ਇੱਕ ਰੀਡ-ਓਨਲੀ (SELECT) ਭੂਮਿਕਾ ਦਿੱਤੀ ਜਾ ਸਕਦੀ ਹੈ। ਐਪ ਨੂੰ ਇੱਕ ਸੁਰੱਖਿਅਤ ਮਾਹੌਲ ਵਿੱਚ ਚਲਾਉਣਾ ਸੁਰੱਖਿਆ ਨੂੰ ਹੋਰ ਵਧਾਉਂਦਾ ਹੈ। ਉਦਯੋਗਿਕ ਸੰਦਰਭਾਂ ਵਿੱਚ, ਡਾਟਾ ਅਮਲੀ ਪ੍ਰਣਾਲੀਆਂ ਤੋਂ ਆਮ ਤੌਰ ‘ਤੇ ਬਾਹਰ ਕੱਢਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਇੱਕ ਰੀਡ-ਓਨਲੀ ਡਾਟਾਬੇਸ ਜਾਂ ਡਾਟਾ ਵੇਅਰਹਾਊਸ ਵਿੱਚ ਵਰਤੋਂਕਾਰ-ਮਿੱਤਰ ਸਕੀਮਾ ਦੇ ਨਾਲ ਤਬਦੀਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਇਸ ਤਰੀਕੇ ਨਾਲ ਇਹ ਯਕੀਨੀ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ ਕਿ ਡਾਟਾ ਸੁਰੱਖਿਅਤ ਹੈ, ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਪੁੱਜ ਲਈ ਅਨੁਕੂਲਿਤ ਹੈ, ਅਤੇ ਐਪ ਦੀ ਪਹੁੰਚ ਸੀਮਿਤ, ਸਿਰਫ਼-ਰੀਡ ਹੈ।
Join the Azure AI Foundry Discord to meet with other learners, attend office hours and get your AI Agents questions answered.
Understanding Agentic Design Patterns
ਅਸਵੀਕਾਰਾਂ:
ਇਸ ਦਸਤਾਵੇਜ਼ ਦਾ ਅਨੁਵਾਦ AI ਅਨੁਵਾਦ ਸੇਵਾ Co-op Translator ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਅਤ ਲਈ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਵਿੱਚ ਰੱਖੋ ਕਿ ਆਟੋਮੈਟਿਕ ਅਨੁਵਾਦ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸਮਤੋਲਨ ਹੋ ਸਕਦੇ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ जिसकी ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਹੈ, ਉਹ ਅਧਿਕਾਰਕ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਗੰਭੀਰ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਹੋਣ ਵਾਲੀਆਂ ਕਿਸੇ ਵੀ ਗਲਤਫਹਮੀਆਂ ਜਾਂ ਭ੍ਰਮਾਂ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।