ai-agents-for-beginners

Jinsi ya Kubuni Mawakala wa AI Wenye Ufanisi

(Bofya picha hapo juu kutazama video ya somo hili)

Muundo wa Matumizi ya Zana

Zana ni za kuvutia kwa sababu zinawapa mawakala wa AI uwezo mpana zaidi. Badala ya wakala kuwa na seti ndogo ya vitendo anavyoweza kutekeleza, kwa kuongeza zana, wakala sasa anaweza kutekeleza vitendo mbalimbali. Katika sura hii, tutachunguza Muundo wa Matumizi ya Zana, unaoelezea jinsi mawakala wa AI wanavyoweza kutumia zana maalum kufanikisha malengo yao.

Utangulizi

Katika somo hili, tunatafuta kujibu maswali yafuatayo:

Malengo ya Kujifunza

Baada ya kukamilisha somo hili, utaweza:

Muundo wa Matumizi ya Zana ni nini?

Muundo wa Matumizi ya Zana unalenga kuwapa LLMs uwezo wa kuingiliana na zana za nje ili kufanikisha malengo maalum. Zana ni msimbo unaoweza kutekelezwa na wakala ili kutekeleza vitendo. Zana inaweza kuwa kazi rahisi kama kalkuleta, au ombi la API kwa huduma ya nje kama kutafuta bei za hisa au utabiri wa hali ya hewa. Katika muktadha wa mawakala wa AI, zana zimeundwa kutekelezwa na mawakala kwa kujibu miito ya kazi inayozalishwa na modeli.

Ni hali gani za matumizi ambapo unaweza kutumika?

Mawakala wa AI wanaweza kutumia zana kukamilisha kazi ngumu, kupata taarifa, au kufanya maamuzi. Muundo wa matumizi ya zana mara nyingi hutumika katika hali zinazohitaji mwingiliano wa nguvu na mifumo ya nje, kama vile hifadhidata, huduma za wavuti, au wakalimani wa msimbo. Uwezo huu ni muhimu kwa hali mbalimbali za matumizi, ikiwa ni pamoja na:

Ni vipengele/vijengo gani vinavyohitajika kutekeleza muundo wa matumizi ya zana?

Vipengele hivi vinamwezesha wakala wa AI kutekeleza kazi mbalimbali. Hebu tuangalie vipengele muhimu vinavyohitajika kutekeleza Muundo wa Matumizi ya Zana:

Sasa, hebu tuangalie kwa undani zaidi kuhusu Miito ya Kazi/Zana.

Miito ya Kazi/Zana

Miito ya kazi ni njia kuu tunayotumia kuwezesha Large Language Models (LLMs) kuingiliana na zana. Mara nyingi utaona ‘Kazi’ na ‘Zana’ zikitumika kwa kubadilishana kwa sababu ‘kazi’ (vitalu vya msimbo vinavyoweza kutumika tena) ni ‘zana’ ambazo mawakala hutumia kutekeleza majukumu. Ili msimbo wa kazi utekelezwe, LLM lazima linganishe ombi la mtumiaji na maelezo ya kazi. Ili kufanya hivyo, muundo unaojumuisha maelezo ya kazi zote zinazopatikana hutumwa kwa LLM. LLM kisha huchagua kazi inayofaa zaidi kwa jukumu na kurudisha jina lake na vigezo. Kazi iliyochaguliwa inatekelezwa, majibu yake yanarudishwa kwa LLM, ambayo hutumia taarifa hiyo kujibu ombi la mtumiaji.

Kwa watengenezaji kutekeleza miito ya kazi kwa mawakala, utahitaji:

  1. Modeli ya LLM inayounga mkono miito ya kazi
  2. Muundo unaojumuisha maelezo ya kazi
  3. Msimbo wa kila kazi iliyoelezwa

Hebu tutumie mfano wa kupata muda wa sasa katika jiji fulani kuonyesha:

  1. Anzisha LLM inayounga mkono miito ya kazi:

    Sio modeli zote zinazounga mkono miito ya kazi, kwa hivyo ni muhimu kuhakikisha kwamba LLM unayotumia inafanya hivyo. Azure OpenAI inaunga mkono miito ya kazi. Tunaweza kuanza kwa kuanzisha mteja wa 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. Unda Muundo wa Kazi:

    Kisha tutafafanua muundo wa JSON unaojumuisha jina la kazi, maelezo ya kazi hiyo, na majina na maelezo ya vigezo vya kazi. Tutachukua muundo huu na kuupitisha kwa mteja aliyeundwa awali, pamoja na ombi la mtumiaji la kutafuta muda huko San Francisco. Jambo muhimu la kuzingatia ni kwamba miito ya zana ndicho kinachorudishwa, sio jibu la mwisho la swali. Kama ilivyotajwa awali, LLM inarudisha jina la kazi iliyochaguliwa kwa jukumu, na vigezo vitakavyopitishwa kwake.

     # 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. Msimbo wa kazi unaohitajika kutekeleza jukumu:

    Sasa kwa kuwa LLM imechagua kazi gani inahitaji kutekelezwa, msimbo unaotekeleza jukumu unahitaji kuandikwa na kutekelezwa. Tunaweza kutekeleza msimbo wa kupata muda wa sasa kwa kutumia Python. Pia tutahitaji kuandika msimbo wa kutoa jina na vigezo kutoka kwa response_message ili kupata matokeo ya mwisho.

       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.
    

Miito ya Kazi ni msingi wa muundo wa matumizi ya zana kwa mawakala, hata hivyo kuitekeleza kutoka mwanzo inaweza kuwa changamoto wakati mwingine. Kama tulivyojifunza katika Somo la 2 mifumo ya wakala inatupatia vijengo vilivyotengenezwa awali kutekeleza matumizi ya zana.

Mifano ya Matumizi ya Zana na Mifumo ya Wakala

Hapa kuna mifano ya jinsi unavyoweza kutekeleza Muundo wa Matumizi ya Zana kwa kutumia mifumo tofauti ya wakala:

Semantic Kernel

Semantic Kernel ni mfumo wa AI wa chanzo huria kwa watengenezaji wa .NET, Python, na Java wanaofanya kazi na Large Language Models (LLMs). Unarahisisha mchakato wa kutumia miito ya kazi kwa kuelezea kazi zako na vigezo vyake kwa modeli moja kwa moja kupitia mchakato unaoitwa serializing. Pia hushughulikia mawasiliano ya kurudi na kurudi kati ya modeli na msimbo wako. Faida nyingine ya kutumia mfumo wa wakala kama Semantic Kernel ni kwamba inakuruhusu kufikia zana zilizotengenezwa awali kama File Search na Code Interpreter.

Mchoro ufuatao unaonyesha mchakato wa miito ya kazi na Semantic Kernel:

miito ya kazi

Katika Semantic Kernel kazi/zana zinaitwa Plugins. Tunaweza kubadilisha kazi ya get_current_time tuliyoiona awali kuwa plugin kwa kuibadilisha kuwa darasa lenye kazi ndani yake. Tunaweza pia kuingiza kivinjari cha kernel_function, ambacho kinachukua maelezo ya kazi. Unapounda kernel na GetCurrentTimePlugin, kernel itaserialize kazi na vigezo vyake moja kwa moja, ikitengeneza muundo wa kutuma kwa LLM katika mchakato.

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)

Huduma ya Mawakala ya AI ya Azure

Huduma ya Mawakala ya AI ya Azure ni mfumo mpya wa wakala ulioundwa kuwawezesha watengenezaji kujenga, kupeleka, na kupanua mawakala wa AI wa hali ya juu na wa kupanuka bila hitaji la kusimamia rasilimali za msingi za kompyuta na hifadhi. Ni muhimu hasa kwa matumizi ya biashara kwa kuwa ni huduma inayosimamiwa kikamilifu yenye usalama wa daraja la biashara.

Ikilinganishwa na kuendeleza moja kwa moja na API ya LLM, Huduma ya Mawakala ya AI ya Azure inatoa faida kadhaa, ikiwa ni pamoja na:

Zana zinazopatikana katika Huduma ya Mawakala ya AI ya Azure zinaweza kugawanywa katika makundi mawili:

  1. Zana za Maarifa:
  2. Zana za Vitendo:

Huduma ya Mawakala inatuwezesha kutumia zana hizi pamoja kama toolset. Pia hutumia threads ambazo hufuatilia historia ya ujumbe kutoka kwa mazungumzo fulani.

Fikiria wewe ni wakala wa mauzo katika kampuni inayoitwa Contoso. Unataka kuunda wakala wa mazungumzo ambaye anaweza kujibu maswali kuhusu data yako ya mauzo.

Picha ifuatayo inaonyesha jinsi unavyoweza kutumia Huduma ya Mawakala ya AI ya Azure kuchambua data yako ya mauzo:

Huduma ya Mawakala Katika Matumizi

Ili kutumia zana yoyote na huduma hii tunaweza kuunda mteja na kufafanua zana au seti ya zana. Ili kutekeleza hili kwa vitendo tunaweza kutumia msimbo wa Python ufuatao. LLM itaweza kuangalia seti ya zana na kuamua kutumia kazi iliyoundwa na mtumiaji, fetch_sales_data_using_sqlite_query, au Code Interpreter iliyotengenezwa awali kulingana na ombi la mtumiaji.

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
)

Ni mambo gani maalum ya kuzingatia wakati wa kutumia Muundo wa Matumizi ya Zana kujenga mawakala wa AI wanaoaminika?

Shida ya kawaida na SQL inayotengenezwa kwa nguvu na LLMs ni usalama, hasa hatari ya sindano ya SQL au vitendo vya uharibifu, kama vile kufuta au kuharibu hifadhidata. Ingawa wasiwasi huu ni halali, unaweza kupunguzwa kwa ufanisi kwa kusanidi vibali vya ufikiaji wa hifadhidata ipasavyo. Kwa hifadhidata nyingi, hii inahusisha kusanidi hifadhidata kama ya kusoma tu. Kwa huduma za hifadhidata kama PostgreSQL au Azure SQL, programu inapaswa kupewa jukumu la kusoma tu (SELECT). Kuendesha programu katika mazingira salama kunaboresha zaidi ulinzi. Katika hali za biashara, data kwa kawaida hutolewa na kubadilishwa kutoka mifumo ya uendeshaji hadi hifadhidata ya kusoma tu au ghala la data lenye mpangilio rahisi wa mtumiaji. Njia hii inahakikisha kuwa data ni salama, imeboreshwa kwa utendaji na upatikanaji, na kwamba programu ina ufikiaji uliozuiliwa wa kusoma tu.

Una Maswali Zaidi Kuhusu Matumizi ya Mitindo ya Ubunifu wa Zana?

Jiunge na Azure AI Foundry Discord ili kukutana na wanafunzi wengine, kuhudhuria masaa ya ofisi, na kupata majibu ya maswali yako kuhusu AI Agents.

Rasilimali za Ziada

Somo la Awali

Kuelewa Mitindo ya Ubunifu wa Wakala

Somo Linalofuata

Agentic RAG


Kanusho:
Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kwa usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, inashauriwa kutumia huduma ya mtafsiri wa kibinadamu mtaalamu. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.