ai-agents-for-beginners

اچھے AI ایجنٹس کو ڈیزائن کرنے کا طریقہ

(اوپر دی گئی تصویر پر کلک کریں تاکہ اس سبق کی ویڈیو دیکھ سکیں)

ٹول استعمال کرنے کا ڈیزائن پیٹرن

ٹولز دلچسپ ہیں کیونکہ یہ AI ایجنٹس کو زیادہ وسیع صلاحیتیں فراہم کرتے ہیں۔ ایجنٹ کے محدود اعمال کے بجائے، ایک ٹول شامل کرنے سے ایجنٹ اب مختلف قسم کے اعمال انجام دے سکتا ہے۔ اس باب میں، ہم ٹول استعمال کرنے کے ڈیزائن پیٹرن پر غور کریں گے، جو بیان کرتا ہے کہ AI ایجنٹس مخصوص ٹولز کو اپنے مقاصد حاصل کرنے کے لیے کیسے استعمال کر سکتے ہیں۔

تعارف

اس سبق میں، ہم درج ذیل سوالات کے جوابات تلاش کریں گے:

سیکھنے کے اہداف

اس سبق کو مکمل کرنے کے بعد، آپ قابل ہوں گے:

ٹول استعمال کرنے کا ڈیزائن پیٹرن کیا ہے؟

ٹول استعمال کرنے کا ڈیزائن پیٹرن LLMs کو بیرونی ٹولز کے ساتھ تعامل کرنے کی صلاحیت فراہم کرنے پر مرکوز ہے تاکہ مخصوص مقاصد حاصل کیے جا سکیں۔ ٹولز وہ کوڈ ہیں جو ایجنٹ کے ذریعے اعمال انجام دینے کے لیے چلائے جا سکتے ہیں۔ ایک ٹول ایک سادہ فنکشن ہو سکتا ہے جیسے کیلکولیٹر، یا کسی تیسرے فریق کی سروس جیسے اسٹاک کی قیمت یا موسم کی پیش گوئی کے لیے API کال۔ AI ایجنٹس کے سیاق و سباق میں، ٹولز کو ایجنٹس کے ذریعے ماڈل سے پیدا شدہ فنکشن کالز کے جواب میں چلانے کے لیے ڈیزائن کیا گیا ہے۔

یہ کن استعمال کے معاملات میں لاگو ہو سکتا ہے؟

AI ایجنٹس ٹولز کا استعمال کرکے پیچیدہ کام مکمل کر سکتے ہیں، معلومات حاصل کر سکتے ہیں، یا فیصلے کر سکتے ہیں۔ ٹول استعمال کرنے کا ڈیزائن پیٹرن اکثر ایسے منظرناموں میں استعمال ہوتا ہے جن میں بیرونی نظاموں جیسے ڈیٹا بیس، ویب سروسز، یا کوڈ انٹرپریٹرز کے ساتھ متحرک تعامل کی ضرورت ہوتی ہے۔ یہ صلاحیت مختلف استعمال کے معاملات کے لیے مفید ہے، جن میں شامل ہیں:

ٹول استعمال کرنے کے ڈیزائن پیٹرن کو نافذ کرنے کے لیے کون سے عناصر/بنیادی اجزاء درکار ہیں؟

یہ بنیادی اجزاء AI ایجنٹ کو مختلف قسم کے کام انجام دینے کی اجازت دیتے ہیں۔ آئیے ٹول استعمال کرنے کے ڈیزائن پیٹرن کو نافذ کرنے کے لیے درکار کلیدی عناصر پر نظر ڈالیں:

اب، آئیے فنکشن/ٹول کالنگ کو مزید تفصیل سے دیکھتے ہیں۔

فنکشن/ٹول کالنگ

فنکشن کالنگ وہ بنیادی طریقہ ہے جس کے ذریعے ہم بڑے زبان کے ماڈلز (LLMs) کو ٹولز کے ساتھ تعامل کرنے کے قابل بناتے ہیں۔ آپ اکثر ‘فنکشن’ اور ‘ٹول’ کو ایک دوسرے کے ساتھ استعمال ہوتا ہوا دیکھیں گے کیونکہ ‘فنکشنز’ (دوبارہ استعمال کے قابل کوڈ کے بلاکس) وہ ‘ٹولز’ ہیں جنہیں ایجنٹس کام انجام دینے کے لیے استعمال کرتے ہیں۔ کسی فنکشن کے کوڈ کو چلانے کے لیے، LLM کو صارف کی درخواست کو فنکشن کی وضاحت کے خلاف موازنہ کرنا ہوگا۔ ایسا کرنے کے لیے، تمام دستیاب فنکشنز کی وضاحتوں پر مشتمل ایک اسکیمہ LLM کو بھیجا جاتا ہے۔ پھر LLM اس کام کے لیے سب سے موزوں فنکشن کا انتخاب کرتا ہے اور اس کا نام اور دلائل واپس کرتا ہے۔ منتخب کردہ فنکشن کو چلایا جاتا ہے، اس کا جواب LLM کو واپس بھیجا جاتا ہے، جو صارف کی درخواست کا جواب دینے کے لیے معلومات کا استعمال کرتا ہے۔

ایجنٹس کے لیے فنکشن کالنگ کو نافذ کرنے کے لیے، ڈویلپرز کو درج ذیل کی ضرورت ہوگی:

  1. ایک LLM ماڈل جو فنکشن کالنگ کو سپورٹ کرتا ہو
  2. فنکشن کی وضاحتوں پر مشتمل ایک اسکیمہ
  3. ہر بیان کردہ فنکشن کے لیے کوڈ

آئیے سان فرانسسکو میں موجودہ وقت حاصل کرنے کی مثال استعمال کریں:

  1. فنکشن کالنگ کو سپورٹ کرنے والے LLM کو شروع کریں:

    تمام ماڈلز فنکشن کالنگ کو سپورٹ نہیں کرتے، اس لیے یہ چیک کرنا ضروری ہے کہ آپ جو LLM استعمال کر رہے ہیں وہ کرتا ہے۔ Azure OpenAI فنکشن کالنگ کو سپورٹ کرتا ہے۔ ہم Azure OpenAI کلائنٹ کو شروع کرکے آغاز کر سکتے ہیں۔

     # Initialize the Azure OpenAI client
     client = AzureOpenAI(
         azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
         api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
         api_version="2024-05-01-preview"
     )
    
  2. فنکشن اسکیمہ بنائیں:

    اگلا، ہم ایک JSON اسکیمہ کی وضاحت کریں گے جس میں فنکشن کا نام، فنکشن کے کام کی وضاحت، اور فنکشن پیرامیٹرز کے نام اور وضاحتیں شامل ہوں گی۔ ہم اس اسکیمہ کو پہلے سے بنائے گئے کلائنٹ کے ساتھ، اور صارف کی درخواست کے ساتھ سان فرانسسکو میں وقت معلوم کرنے کے لیے پاس کریں گے۔ اہم بات یہ ہے کہ جو ٹول کال واپس آتی ہے، وہ سوال کا حتمی جواب نہیں ہوتا۔ جیسا کہ پہلے ذکر کیا گیا ہے، LLM اس کام کے لیے منتخب کردہ فنکشن کا نام اور اس کے دلائل واپس کرتا ہے۔

     # Function description for the model to read
     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"],
                 },
             }
         }
     ]
    
      
     # Initial user message
     messages = [{"role": "user", "content": "What's the current time in San Francisco"}] 
      
     # First API call: Ask the model to use the function
       response = client.chat.completions.create(
           model=deployment_name,
           messages=messages,
           tools=tools,
           tool_choice="auto",
       )
      
       # Process the model's response
       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')])
    
  3. کام انجام دینے کے لیے مطلوبہ فنکشن کوڈ:

    اب جب کہ LLM نے منتخب کیا ہے کہ کون سا فنکشن چلایا جانا چاہیے، کام انجام دینے کے لیے کوڈ کو نافذ اور چلانے کی ضرورت ہے۔ ہم موجودہ وقت حاصل کرنے کے لیے Python میں کوڈ نافذ کر سکتے ہیں۔ ہمیں response_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"})
    
      # Handle function calls
       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.")  
      
       # Second API call: Get the final response from the model
       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 میں سیکھا، ایجنٹک فریم ورک ہمیں ٹول استعمال کو نافذ کرنے کے لیے پہلے سے بنے ہوئے بنیادی اجزاء فراہم کرتے ہیں۔

ایجنٹک فریم ورک کے ساتھ ٹول استعمال کی مثالیں

یہاں کچھ مثالیں ہیں کہ آپ مختلف ایجنٹک فریم ورک کا استعمال کرتے ہوئے ٹول استعمال کرنے کے ڈیزائن پیٹرن کو کیسے نافذ کر سکتے ہیں:

سیمینٹک کرنل

سیمینٹک کرنل .NET، Python، اور Java ڈویلپرز کے لیے ایک اوپن سورس 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

# Create the kernel
kernel = Kernel()

# Create the plugin
get_current_time_plugin = GetCurrentTimePlugin(location)

# Add the plugin to the kernel
kernel.add_plugin(get_current_time_plugin)

Azure AI ایجنٹ سروس

Azure AI ایجنٹ سروس ایک نیا ایجنٹک فریم ورک ہے جو ڈویلپرز کو اعلیٰ معیار کے، اور قابل توسیع AI ایجنٹس کو محفوظ طریقے سے بنانے، تعینات کرنے، اور پیمانے پر لانے کے لیے ڈیزائن کیا گیا ہے، بغیر بنیادی کمپیوٹ اور اسٹوریج وسائل کا انتظام کیے۔ یہ خاص طور پر انٹرپرائز ایپلیکیشنز کے لیے مفید ہے کیونکہ یہ ایک مکمل طور پر منظم سروس ہے جس میں انٹرپرائز گریڈ سیکیورٹی ہے۔

LLM API کے ساتھ براہ راست ترقی کرنے کے مقابلے میں، Azure AI ایجنٹ سروس کچھ فوائد فراہم کرتی ہے، جن میں شامل ہیں:

Azure AI ایجنٹ سروس میں دستیاب ٹولز کو دو اقسام میں تقسیم کیا جا سکتا ہے:

  1. نالج ٹولز:
  2. ایکشن ٹولز:

ایجنٹ سروس ہمیں ان ٹولز کو toolset کے طور پر ایک ساتھ استعمال کرنے کی اجازت دیتی ہے۔ یہ threads کا بھی استعمال کرتی ہے جو کسی خاص گفتگو سے پیغامات کی تاریخ کو ٹریک کرتی ہیں۔

تصور کریں کہ آپ Contoso نامی کمپنی میں ایک سیلز ایجنٹ ہیں۔ آپ ایک گفتگو ایجنٹ تیار کرنا چاہتے ہیں جو آپ کے سیلز ڈیٹا کے بارے میں سوالات کے جواب دے سکے۔

مندرجہ ذیل تصویر ظاہر کرتی ہے کہ آپ Azure AI ایجنٹ سروس کا استعمال کرکے اپنے سیلز ڈیٹا کا تجزیہ کیسے کر سکتے ہیں:

ایجنٹک سروس ایکشن میں

ان ٹولز کو سروس کے ساتھ استعمال کرنے کے لیے ہم ایک کلائنٹ بنا سکتے ہیں اور ایک ٹول یا ٹول سیٹ کی وضاحت کر سکتے ہیں۔ اسے عملی طور پر نافذ کرنے کے لیے ہم درج ذیل Python کوڈ استعمال کر سکتے ہیں۔ LLM ٹول سیٹ کو دیکھ سکے گا اور صارف کے بنائے گئے فنکشن، fetch_sales_data_using_sqlite_query، یا پہلے سے بنے ہوئے کوڈ انٹرپریٹر کو صارف کی درخواست کے مطابق استعمال کرنے کا فیصلہ کرے گا۔

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 function which can be found in a fetch_sales_data_functions.py file.
from azure.ai.projects.models import ToolSet, FunctionTool, CodeInterpreterTool

project_client = AIProjectClient.from_connection_string(
    credential=DefaultAzureCredential(),
    conn_str=os.environ["PROJECT_CONNECTION_STRING"],
)

# Initialize function calling agent with the fetch_sales_data_using_sqlite_query function and adding it to the toolset
fetch_data_function = FunctionTool(fetch_sales_data_using_sqlite_query)
toolset = ToolSet()
toolset.add(fetch_data_function)

# Initialize Code Interpreter tool and adding it to the toolset. 
code_interpreter = code_interpreter = CodeInterpreterTool()
toolset = ToolSet()
toolset.add(code_interpreter)

agent = project_client.agents.create_agent(
    model="gpt-4o-mini", name="my-agent", instructions="You are helpful agent", 
    toolset=toolset
)

قابل اعتماد AI ایجنٹس بنانے کے لیے ٹول استعمال کرنے کے ڈیزائن پیٹرن کے استعمال کے لیے کون سے خاص پہلوؤں پر غور کرنا چاہیے؟

LLMs کے ذریعے متحرک طور پر تیار کردہ SQL کے ساتھ ایک عام تشویش سیکیورٹی ہے، خاص طور پر SQL انجیکشن یا نقصان دہ اعمال کا خطرہ، جیسے ڈیٹا بیس کو حذف کرنا یا چھیڑ چھاڑ کرنا۔ اگرچہ یہ خدشات جائز ہیں، انہیں ڈیٹا بیس تک رسائی کی اجازتوں کو مناسب طریقے سے ترتیب دے کر ایپ کو محفوظ ماحول میں چلانا تحفظ کو مزید بہتر بناتا ہے۔ کاروباری منظرناموں میں، ڈیٹا عام طور پر آپریشنل سسٹمز سے نکالا جاتا ہے اور ایک ریڈ-اونلی ڈیٹا بیس یا ڈیٹا ویئرہاؤس میں تبدیل کیا جاتا ہے جس میں صارف دوست اسکیمہ ہوتا ہے۔ یہ طریقہ یقینی بناتا ہے کہ ڈیٹا محفوظ ہے، کارکردگی اور رسائی کے لیے بہتر ہے، اور ایپ کو محدود، ریڈ-اونلی رسائی حاصل ہے۔

ٹول کے استعمال کے ڈیزائن پیٹرنز کے بارے میں مزید سوالات ہیں؟

Azure AI Foundry Discord میں شامل ہوں تاکہ دوسرے سیکھنے والوں سے ملاقات کریں، آفس آورز میں شرکت کریں اور اپنے AI Agents کے سوالات کے جوابات حاصل کریں۔

اضافی وسائل

پچھلا سبق

Agentic Design Patterns کو سمجھنا

اگلا سبق

Agentic RAG


ڈسکلیمر:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔