ai-agents-for-beginners

कसे चांगले AI एजंट डिझाइन करावे

(वरील प्रतिमा क्लिक करून या धड्याचा व्हिडिओ पहा)

टूल वापर डिझाइन पॅटर्न

टूल्स मनोरंजक आहेत कारण ते AI एजंट्सना अधिक विस्तृत क्षमतांची अनुमती देतात. एजंटकडे केवळ मर्यादित क्रिया करण्याची करण्याची क्षमता असण्याऐवजी, एका टूलची भर घालून एजंट आता विविध प्रकारच्या क्रिया करू शकतो. या अध्यायात, आपण Tool Use Design Pattern पाहणार आहोत, जे वर्णन करते की AI एजंट्स विशिष्ट टूल्सचा वापर करून त्यांच्या उद्दिष्टांची कशी पूर्तता करू शकतात.

परिचय

या धड्यात, आपण खालील प्रश्नांची उत्तरे शोधणार आहोत:

शिकण्याचे उद्दिष्ट

हा धडा पूर्ण केल्यानंतर, आपण सक्षम असाल:

टूल वापर डिझाइन पॅटर्न म्हणजे काय?

The Tool Use Design Pattern LLMs ला बाह्य टूल्सशी संवाद साधण्याची क्षमता देण्यावर लक्ष केंद्रित करते जेणेकरून विशिष्ट उद्दिष्टे साध्य करता येतील. टूल्स म्हणजे असे कोड जे एजन्टद्वारे क्रिया करण्यासाठी चालवले जाऊ शकतात. टूल हे साधे फंक्शन जसे की कॅलक्युलेटर असू शकते, किंवा तृतीय-पक्ष सेवेकडे API कॉल असू शकते जसे स्टॉक किंमत शोधणे किंवा हवामान अंदाज. AI एजंट्सच्या संदर्भात, टूल्सना model-generated function calls च्या प्रतिसादात एजंटद्वारे चालवण्यासाठी डिझाइन केले जाते.

कोणत्या उपयोगप्रकरणांवर हे लागू होते?

AI एजंट्स जटिल कार्ये पूर्ण करण्यासाठी, माहिती प्राप्त करण्यासाठी किंवा निर्णय घेण्यासाठी टूल्सचा लाभ घेऊ शकतात. टूल वापर डिझाइन पॅटर्न बहुधा असे परिदृश्यात वापरले जाते ज्यांना बाह्य प्रणालींबरोबर डायनॅमिक संवादाची आवश्यकता असते, जसे डेटाबेस, वेब सेवा किंवा कोड इंटरप्रेटर. ही क्षमता अनेक वेगळ्या उपयोगप्रकरणांसाठी उपयुक्त आहे ज्यात समावेश आहे:

टूल वापर डिझाइन पॅटर्न अमलात आणण्यासाठी कोणते घटक/बिल्डिंग ब्लॉक्स आवश्यक आहेत?

हे बिल्डिंग ब्लॉक्स AI एजंटला विस्तृत कार्ये करण्यास परवानगी देतात. Tool Use Design Pattern अमलात आणण्यासाठी आवश्यक प्रमुख घटक पाहूया:

पुढे, Function/Tool Calling ची अधिक तफावत पाहूया.

Function/Tool Calling

Function calling हा मुख्य मार्ग आहे ज्याद्वारे आम्ही Large Language Models (LLMs) ना टूल्सशी संवाद साधण्यासाठी सक्षम करतो. आपण अनेकदा ‘Function’ आणि ‘Tool’ या शब्दांचा परस्परवापर होताना पाहू कारण ‘functions’ (पुन्हा वापरता येण्यायोग्य कोडचे ब्लॉक्स) हेच एजंट्स कार्ये पार पाडण्यासाठी वापरत असलेले ‘tools’ असतात. एखाद्या फंक्शनचा कोड invoke होण्यासाठी, LLM ला वापरकर्त्याच्या विनंतीची तुलना फंक्शनच्या वर्णनाशी करावी लागते. हे करण्यासाठी उपलब्ध सर्व फंक्शन्सच्या वर्णनांचा समावेश असलेली स्कीमा LLM कडे पाठवली जाते. मग LLM कार्यासाठी सर्वात योग्य फंक्शन निवडते आणि त्याचे नाव आणि आर्ग्युमेंट्स परत करते. निवडलेले फंक्शन invoke केले जाते, त्याचा प्रतिसाद LLM कडे परत पाठवला जातो, आणि LLM त्या माहितीचा वापर करून वापरकर्त्याच्या विनंतीला उत्तर देते.

डेव्हलपर्सना एजंट्ससाठी function calling अमलात आणण्यासाठी, आपल्याला आवश्यक आहे:

  1. Function calling ला समर्थन करणारे LLM मॉडेल
  2. फंक्शन वर्णन असलेली स्कीमा
  3. वर्णन केलेल्या प्रत्येक फंक्शनसाठी कोड

सॅन फ्रान्सिस्कोमधील सध्याचा वेळ मिळवण्याचे उदाहरण घेऊया:

  1. Function calling ला समर्थन करणारे LLM इनिशियलाइझ करा:

    सर्व मॉडेल्स function calling ला समर्थन करत नाहीत, त्यामुळे आपण वापरत असलेले LLM हे समर्थन करते का ते तपासणे महत्वाचे आहे. Azure OpenAI function calling ला समर्थन करते. आपण Azure OpenAI क्लायंट इनिशिएट करून सुरुवात करू शकतो.

     # Azure OpenAI क्लायंट प्रारंभ करा
     client = AzureOpenAI(
         azure_endpoint = os.getenv("AZURE_AI_PROJECT_ENDPOINT"), 
         api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
         api_version="2024-05-01-preview"
     )
    
  2. Function Schema तयार करा:

    पुढे आपण JSON स्कीमा परिभाषित करू ज्यात फंक्शनचे नाव, फंक्शन काय करते याचे वर्णन, आणि फंक्शन पॅरामीटर्सची नावे व वर्णने असतील. नंतर ही स्कीमा आपण पूर्वी तयार केलेल्या क्लायंटकडे पास करू आणि वापरकर्ता San Francisco मधील वेळ शोधण्याची विनंती करेल. महत्वाचे लक्षात घ्यायचे म्हणजे tool call परत केला जातो, प्रश्नाचे अंतिम उत्तर नाही. जसे आधी सांगितले, 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"}] 
      
     # पहिला API कॉल: मॉडेलला फंक्शन वापरण्यास विचारा
       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')])
    
  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"})
    
      # फंक्शन कॉल्स हाताळा
       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.
    

Function Calling हे बहुसंख्य, किंवा सर्व एजंट टूल वापर डिझाइनचा हृदयस्थान आहे, परंतु ते स्क्रॅचपासून अंमलात आणणे कधीकधी आव्हानात्मक असू शकते. जसे आपण Lesson 2 मध्ये शिकलो, agentic frameworks आम्हाला टूल वापर अंमलबजावणीसाठी पूर्व-निर्मित बिल्डिंग ब्लॉक्स पुरवतात.

Agentic फ्रेमवर्क्ससह टूल वापर उदाहरणे

येथे विविध agentic frameworks वापरून आपण Tool Use Design Pattern कशी अमलात आणू शकतो याची काही उदाहरणे आहेत:

Microsoft Agent Framework

Microsoft Agent Framework हा AI एजंट्स तयार करण्यासाठी एक open-source AI फ्रेमवर्क आहे. हे function calling वापरण्याची प्रक्रिया सुलभ करते कारण आपण @tool डेकोरेटरसह Python फंक्शन्स म्हणून टूल्स परिभाषित करू शकता. फ्रेमवर्क मॉडेल आणि आपल्या कोडमधील परत-फिरतीचे संवाद हाताळते. तसेच ते AzureAIProjectAgentProvider मार्फत File Search आणि Code Interpreter सारखी पूर्व-निर्मित टूल्स वापरण्याची सुविधा देते.

खालील आलेख Microsoft Agent Framework सह function calling प्रक्रिया दर्शवितो:

function calling

Microsoft Agent Framework मध्ये, टूल्स decorated फंक्शन्स म्हणून परिभाषित केले जातात. आपण आधी बघितलेले get_current_time फंक्शन @tool डेकोरेटर वापरून टूलमध्ये रूपांतर करू शकतो. फ्रेमवर्क आपोआप फंक्शन आणि त्याच्या पॅरामीटर्सची सिरीअलायझेशन करून LLM कडे पाठवण्यासाठी स्कीमा तयार करेल.

from agent_framework import tool
from agent_framework.azure import AzureAIProjectAgentProvider
from azure.identity import AzureCliCredential

@tool
def get_current_time(location: str) -> str:
    """Get the current time for a given location"""
    ...

# क्लायंट तयार करा
provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())

# एजंट तयार करा आणि साधनासह चालवा
agent = await provider.create_agent(name="TimeAgent", instructions="Use available tools to answer questions.", tools=get_current_time)
response = await agent.run("What time is it?")

Azure AI Agent Service

Azure AI Agent Service हा एक नवीन agentic फ्रेमवर्क आहे जो डेव्हलपर्सना सुरक्षितपणे उच्च-गुणवत्तेचे, वर्धनीय AI एजंट तयार, तैनात आणि स्केल करण्यास सक्षम बनवण्यासाठी डिझाइन केले गेले आहे, ज्यासाठी बेसिक compute आणि storage resources व्यवस्थापित करण्याची गरज नाही. हे एंटरप्राइझ अनुप्रयोगांसाठी विशेषतः उपयुक्त आहे कारण हे पूर्णपणे managed सेवा असून एंटरप्राइझ दर्जाच्या सुरक्षा सुविधांसह येते.

LLM API शी थेट विकसित करण्याच्या तुलनेत, Azure AI Agent Service काही फायदे प्रदान करते, ज्यात समावेश आहे:

Azure AI Agent Service मधील उपलब्ध टूल्स दोन श्रेण्यांमध्ये विभागले जाऊ शकतात:

  1. Knowledge Tools:
  2. Action Tools:

Agent Service आम्हाला हे टूल्स एकत्र toolset म्हणून वापरण्याची परवानगी देते. ते threads देखील वापरते जे विशिष्ट संभाषणाच्या संदेश इतिहासाला ट्रॅक करतात.

कल्पना करा आपण Contoso नावाच्या कंपनीतील सेल्स एजंट आहात. आपण असा संभाषणात्मक एजंट विकसित करू इच्छिता जो आपल्या विक्री डेटाबद्दल प्रश्नांची उत्तरे देऊ शकेल.

खालील प्रतिमा दर्शवते की आपण Azure AI Agent Service वापरून आपल्या विक्री डेटाचे विश्लेषण कसे करु शकता:

Agentic Service In Action

या सेवा सोबत कोणतेही टूल वापरण्यासाठी आपण क्लायंट तयार करू आणि टूल किंवा toolset परिभाषित करू शकतो. व्यावहारिकपणे हे अमलात आणण्यासाठी आपण खालील 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_functions.py फाईलमध्ये उपलब्ध असलेले fetch_sales_data_using_sqlite_query फंक्शन.
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()

# 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 = 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
)

विश्वासार्ह AI एजंट बनवण्यासाठी Tool Use Design Pattern वापरताना कोणत्या विशेष बाबी विचारात घ्याव्यात?

LLMs द्वारा डायनॅमिकली जनरेट केलेल्या SQL बाबत सामान्य चिंता म्हणजे सुरक्षा, विशेषत: SQL injection किंवा डेटाबेस ड्रॉप/छेडछाड सारख्या दुर्भावनापूर्ण क्रियांचे धोके. जरी या चिंता बरोबर असल्या तरी त्या योग्यरित्या डेटाबेस प्रवेश परवानग्या कॉन्फिगर करून प्रभावीपणे कमी करता येऊ शकतात. बहुतेक डेटाबेससाठी हे डेटाबेसचे read-only म्हणून कॉन्फिगरेशन करणे समाविष्ट करते. PostgreSQL किंवा Azure SQL सारख्या डेटाबेस सेवांसाठी, अॅपला read-only (SELECT) भूमिका दिली गेली पाहिजे.

अॅप सुरक्षित वातावरणात चालविल्यास संरक्षण अधिक वाढते. एंटरप्राइझ परिदृश्यांमध्ये, डेटाला सामान्यपणे ऑपरेशनल सिस्टम्समधून काढून read-only डेटाबेस किंवा डेटा वेअरहाऊसमध्ये रूपांतरित केले जाते ज्याचा स्कीमा वापरकर्ता-अनुकूल असतो. हा दृष्टिकोन सुनिश्चित करतो की डेटा सुरक्षित आहे, कार्यक्षमता व प्रवेशयोग्यता optimized आहे, आणि अॅपला मर्यादित, read-only प्रवेश आहे.

नमुना कोड्स

Tool Use Design Patterns बद्दल अजून प्रश्न आहेत का?

इतर शिक्षार्थींशी भेटण्यासाठी, office hours attended करण्यासाठी आणि आपले AI Agents सम्बन्धी प्रश्न विचारण्यासाठी Microsoft Foundry Discord मध्ये सामील व्हा.

अतिरिक्त संसाधने

मागील धडा

Understanding Agentic Design Patterns

पुढील धडा

एजेन्टिक RAG


अस्वीकरण: हा दस्तऐवज AI अनुवाद सेवा Co-op Translator (https://github.com/Azure/co-op-translator) वापरून अनुवादित केला आहे. आम्ही अचूकतेसाठी प्रयत्न करतो, परंतु कृपया लक्षात घ्या की स्वयंचलित अनुवादांमध्ये त्रुटी किंवा चुकीची माहिती असू शकते. मूळ दस्तऐवज त्याच्या मूळ भाषेत अधिकृत स्रोत समजावा. महत्वाच्या माहितीसाठी व्यावसायिक मानवी अनुवाद शिफारसीय आहे. या अनुवादाच्या वापरामुळे उद्भवणाऱ्या कोणत्याही गैरसमजुतीं किंवा चुकीच्या अर्थलावाबद्दल आम्ही जबाबदार नाही.