ai-agents-for-beginners

Jinsi ya Kubuni Wakala Bora wa AI

(Bonyeza picha iliyo juu kutazama video ya somo hili)

Mfumo wa Ubunifu wa Matumizi ya Zana

Vifaa ni vya kuvutia kwa sababu huwapa wakala wa AI uwezo mpana zaidi wa kufanya mambo. Badala ya wakala kuwa na seti ndogo ya vitendo anavyoweza kutekeleza, kwa kuongeza kifaa, wakala sasa anaweza kufanya vitendo mbalimbali. Katika sura hii, tutaangalia Mfumo wa Ubunifu wa Matumizi ya Zana, unaoelezea jinsi wakala wa AI wanavyoweza kutumia zana maalum kufikia malengo yao.

Utangulizi

Katika somo hili, tunatafuta kujibu maswali yafuatayo:

Malengo ya Kujifunza

Baada ya kumaliza somo hili, utakuwa na uwezo wa:

Ni Nini Mfumo wa Ubunifu wa Matumizi ya Zana?

Mfumo wa Ubunifu wa Matumizi ya Zana unalenga kuwapa LLMs uwezo wa kuingiliana na zana za nje ili kufikia malengo maalum. Zana ni nambari inayoweza kutekelezwa na wakala kufanya vitendo. Kifaa kinaweza kuwa kazi rahisi kama kielezi hesabu, au wito wa API kwa huduma ya mtu wa tatu kama kupatia bei ya hisa au utabiri wa hali ya hewa. Katika muktadha wa wakala wa AI, zana zimebuniwa kutekelezwa na wakala kama jibu la miito ya kazi inayotungwa na mfano.

Ni Matukio Gani ya Matumizi Yanayoweza Kutumika?

Wakala wa AI wanaweza kutumia zana kukamilisha kazi ngumu, kupata taarifa, au kufanya maamuzi. Mfumo wa ubunifu wa matumizi ya zana hutumika mara nyingi katika hali zinazohitaji mwingiliano wa moja kwa moja na mifumo ya nje, kama vile hifadhidata, huduma za mtandao, au tafsiri ya nambari. Uwezo huu ni muhimu kwa matukio mbalimbali ya matumizi ikiwa ni pamoja na:

Ni Vipengele/Vinare Gani Vinavyohitajika Kutekeleza Mfumo wa Ubunifu wa Matumizi ya Zana?

Vinara hivi huwasaidia wakala wa AI kutekeleza kazi mbalimbali. Tuchunguze vipengele muhimu vinavyohitajika kutekeleza Mfumo wa Ubunifu wa Matumizi ya Zana:

Sasa, tuchunguze zaidi kuhusu Miito ya Kazi/Zana.

Miito ya Kazi/Zana

Miito ya kazi ni njia kuu tunayowezesha LLM kuingiliana na zana. Mara nyingi utaona ‘Kazi’ na ‘Zana’ zikitumika sawa kwa sababu ‘kazi’ (vibao vya nambari vinavyoweza kutumika tena) ni ‘zana’ wakala wanazotumia kutekeleza kazi. Ili nambari ya kazi itekelezwe, LLM inapaswa kulinganisha ombi la mtumiaji na maelezo ya kazi. Ili kufanya hivyo, sura ina maelezo ya kazi zote zinazopatikana hutumwa kwa LLM. Kisha LLM huchagua kazi inayofaa zaidi kwa kazi hiyo na kurudisha jina na hoja zake. Kazi iliyochaguliwa huamuliwa, jibu lake hurudishiwa kwa LLM, ambayo hutumia taarifa hiyo kujibu ombi la mtumiaji.

Kwa waendelezaji kutekeleza miito ya kazi kwa wakala, utahitaji:

  1. Mfano wa LLM unaounga mkono miito ya kazi
  2. Sura yenye maelezo ya kazi
  3. Nambari ya kila kazi iliyoelezwa

Tuchukue mfano wa kupata saa kwa sasa katika jiji kuonesha:

  1. anzisha LLM inayounga mkono miito ya kazi:

    Sio mifano yote inayo support miito ya kazi, hivyo ni muhimu kuhakikisha LLM unayotumia inaiunga mkono. Azure OpenAI ina support miito ya kazi. Tunaweza kuanza kwa kuanzisha mteja wa Azure OpenAI.

     # Anzisha mteja wa 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"
     )
    
  2. Unda Sura ya Kazi:

    Ifuatayo, tutaelezea sura ya JSON inayojumuisha jina la kazi, maelezo ya kile kazi hufanya, na majina na maelezo ya vigezo vya kazi. Kisha tutapitisha sura hii kwa mteja tuliyemuumba awali, pamoja na ombi la mtumiaji kupata saa katika San Francisco. Kile muhimu kukumbuka ni kwamba miito ya zana ndicho kinachorejeshwa, sio jibu la mwisho kwa swali. Kama ilivyotajwa awali, LLM hurudisha jina la kazi aliyyochagua kwa kazi hiyo, na hoja zitakazotumwa kwa kazi hiyo.

     # Maelezo ya kazi kwa mfano kusoma
     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"],
                 },
             }
         }
     ]
    
      
     # Ujumbe wa kwanza wa mtumiaji
     messages = [{"role": "user", "content": "What's the current time in San Francisco"}] 
      
     # Mitoo wa kwanza wa API: Muulize modeli kutumia kazi hiyo
       response = client.chat.completions.create(
           model=deployment_name,
           messages=messages,
           tools=tools,
           tool_choice="auto",
       )
      
       # Weka kazi jibu la modeli
       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. Nambari ya kazi inayohitajika kutekeleza kazi:

    Sasa LLM imechagua kazi ambayo inahitaji kuendeshwa, nambari inayotekeleza kazi hiyo inahitaji kutekelezwa. Tunaweza kuandika nambari ya kupata saa ya sasa kwa lugha ya Python. Pia tunahitaji kuandika nambari ya kutoa jina na hoja kutoka kwenye response_message 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"})
    
      # Shughulikia simu za kazi
       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.")  
      
       # Simu ya pili ya API: Pata jibu la mwisho kutoka kwa modeli
       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 iko katika moyo wa mtindo mkubwa wa matumizi ya zana kwa wakala wengi, ingawa kutekeleza kutoka mwanzo kunaweza kuwa changamoto wakati mwingine. Kama tulivyojifunza katika Somo la 2 mifumo ya wakala hutupatia vinara vilivyoandaliwa tayari kutekeleza matumizi ya zana.

Mifano ya Matumizi ya Zana kwa Mifumo ya Wakala

Hapa kuna mifano ya jinsi unavyoweza kutekeleza Mfumo wa Ubunifu wa Matumizi ya Zana kwa kutumia mifumo mbalimbali ya wakala:

Semantic Kernel

Semantic Kernel ni mfumo wa AI wa wazi kwa watengenezaji wa .NET, Python, na Java wanaofanya kazi na LLMs. Unarahisisha mchakato wa kutumia miito ya kazi kwa kuelezea kazi zako na vigezo vyake kwa mfano kupitia mchakato unaojulikana kama serialization. Pia hushughulikia mawasiliano ya mizunguko kati ya mfano na nambari yako. Faida nyingine ya kutumia mfumo wa wakala kama Semantic Kernel ni kwamba unakuwezesha kufikia zana zilizojengwa tayari kama Utafutaji wa Faili na Mfasiri wa Nambari.

Mchoro unaofuata unaonyesha mchakato wa miito ya kazi kwa Semantic Kernel:

kuitwa kwa kazi

Katika Semantic Kernel kazi/zana huitwa Viongezi. Tunaweza kubadilisha kazi get_current_time tuliyoiona hapo awali kuwa kiongezi kwa kuiweka kuwa darasa lenye kazi hiyo ndani. Pia tunaweza kuleta dekoreta kernel_function inayochukua maelezo ya kazi. Unapounda kernel na GetCurrentTimePlugin, kernel itaenda moja kwa moja kuserialize kazi na vigezo vyake, ikitengeneza sura ya kutumwa 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

# Unda kernel
kernel = Kernel()

# Unda plugin
get_current_time_plugin = GetCurrentTimePlugin(location)

# Ongeza plugin kwenye kernel
kernel.add_plugin(get_current_time_plugin)

Huduma ya Wakala wa Azure AI

Huduma ya Wakala wa Azure AI ni mfumo wa wakala wa hivi karibuni ulioundwa kuwasaidia waendelezaji kujenga, kupeleka, na kupanua wakala wa AI wa hali ya juu, salama, na yanayoweza kupanuliwa bila kuhitaji kusimamia rasilimali za msingi kama kompyuta na hifadhi. Ni muhimu hasa kwa programu za shirika kwa kuwa ni huduma inayosimamiwa kabisa yenye usalama wa daraja la shirika.

Ukilinganisha na maendeleo ya moja kwa moja kwa API za LLM, Huduma ya Wakala wa Azure AI inatoa faida zifuatazo:

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

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

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

Fikiria wewe ni wakala wa mauzo katika kampuni iitwayo Contoso. Unataka kuendeleza wakala wa mazungumzo ambao unaweza kujibu maswali kuhusu data zako za mauzo.

Picha ifuatayo inaonyesha jinsi unavyoweza kutumia Huduma ya Wakala wa Azure AI kuchambua data zako za mauzo:

Huduma ya Wakala Katika Utekelezaji

Ili kutumia zana yoyote kati ya hizi na huduma, tunaweza kuunda mteja na kufafanua kifaa au seti ya zana. Kutekeleza hii vitendo tunaweza kutumia nambari ya Python ifuatayo. LLM itakuwa na uwezo wa kuangalia seti ya zana na kuamua ikiwa itatumia kazi iliyoundwa na mtumiaji, fetch_sales_data_using_sqlite_query, au Mfasiri wa Nambari aliyejengwa tayari 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 # kazi ya fetch_sales_data_using_sqlite_query ambayo inaweza kupatikana katika faili la 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"],
)

# Anzisha seti ya zana
toolset = ToolSet()

# Anzisha wakala wa kuita kazi na kazi ya fetch_sales_data_using_sqlite_query na kuiongeza kwenye seti ya zana
fetch_data_function = FunctionTool(fetch_sales_data_using_sqlite_query)
toolset.add(fetch_data_function)

# Anzisha zana ya Mtafsiri wa Msimbo na kuiongeza kwenye seti ya zana.
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
)

Ni Masharti Maalum Yapi ya Kutumia Mfumo wa Ubunifu wa Matumizi ya Zana Kujenga Wakala wa AI wa Kuaminika?

Shaka ya kawaida kuhusu SQL inayotolewa kikamilifu na LLM ni usalama, hasa hatari ya sindano ya SQL au vitendo vya uovu, kama kubomoa au kuhujumu hifadhidata. Ingawa wasiwasi huu ni halali, unaweza kupunguzwa kwa ufanisi kwa kusanidi vibali vya ufikiaji wa hifadhidata ipasavyo. Kwa hifadhidata nyingi hii inajumuisha kusanidi hifadhidata kama ya kusoma tu. Kwa huduma za hifadhidata kama PostgreSQL au Azure SQL, programu inapaswa kuteuliwa kuwa na nafasi ya kusoma tu (SELECT). Kukimbia programu katika mazingira salama kunaboresha zaidi ulinzi. Katika hali za biashara, data kawaida huchukuliwa na kubadilishwa kutoka kwa mifumo ya uendeshaji kwenda kwenye hifadhidata isiyoweza kuandikwa au kwenye ghala la data lenye skimu rafiki kwa mtumiaji. Njia hii inahakikisha kuwa data iko salama, imeboreshwa kwa utendaji na upatikanaji, na kwamba programu ina upatikanaji mdogo wa kusoma pekee.

Sample Codes

Got More Questions about the Tool Use Design Patterns?

Join the Azure AI Foundry Discord to meet with other learners, attend office hours and get your AI Agents questions answered.

Additional Resources

Previous Lesson

Understanding Agentic Design Patterns

Next Lesson

Agentic RAG


Sehemu ya Kukataa: Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kufanikisha usahihi, tafadhali fahamu kwamba tafsiri za kiotomatiki zinaweza kuwa na makosa au upungufu wa usahihi. Hati ya asili katika lugha yake ya asili inapaswa kuchukuliwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu inayofanywa na binadamu inashauriwa. Hatubebwi dhima kwa kutoelewana au tafsiri potofu zinazotokana na matumizi ya tafsiri hii.