ai-agents-for-beginners

How to Design Good AI Agents

(Klik imej di atas untuk menonton video pelajaran ini)

Corak Reka Bentuk Penggunaan Alat

Alat adalah menarik kerana ia membolehkan ejen AI mempunyai julat keupayaan yang lebih luas. Daripada ejen hanya mempunyai satu set tindakan terhad yang boleh dilakukannya, dengan menambah alat, ejen kini boleh melaksanakan pelbagai jenis tindakan. Dalam bab ini, kita akan lihat Corak Reka Bentuk Penggunaan Alat, yang menerangkan bagaimana ejen AI boleh menggunakan alat khusus untuk mencapai matlamat mereka.

Pengenalan

Dalam pelajaran ini, kita ingin menjawab soalan-soalan berikut:

Matlamat Pembelajaran

Selepas menamatkan pelajaran ini, anda akan dapat:

Apakah Corak Reka Bentuk Penggunaan Alat?

Corak Reka Bentuk Penggunaan Alat memberi tumpuan kepada memberikan LLM keupayaan untuk berinteraksi dengan alat luaran bagi mencapai matlamat tertentu. Alat adalah kod yang boleh dijalankan oleh ejen untuk melaksanakan tindakan. Alat boleh berupa fungsi mudah seperti kalkulator, atau panggilan API ke perkhidmatan pihak ketiga seperti pencarian harga saham atau ramalan cuaca. Dalam konteks ejen AI, alat direka untuk dijalankan oleh ejen sebagai tindak balas kepada panggilan fungsi yang dijana model.

Apakah kes penggunaan yang boleh ia digunakan?

Ejen AI boleh menggunakan alat untuk menyelesaikan tugasan kompleks, mendapatkan maklumat, atau membuat keputusan. Corak reka bentuk penggunaan alat sering digunakan dalam senario yang memerlukan interaksi dinamik dengan sistem luaran, seperti pangkalan data, perkhidmatan web, atau penterjemah kod. Keupayaan ini berguna untuk pelbagai kes penggunaan termasuk:

Apakah elemen/blok binaan yang diperlukan untuk melaksanakan corak reka bentuk penggunaan alat?

Blok binaan ini membolehkan ejen AI melaksanakan pelbagai jenis tugasan. Mari lihat elemen utama yang diperlukan untuk melaksanakan Corak Reka Bentuk Penggunaan Alat:

Seterusnya, mari kita lihat Panggilan Fungsi/Alat dengan lebih terperinci.

Panggilan Fungsi/Alat

Panggilan fungsi adalah cara utama kita membolehkan Model Bahasa Besar (LLM) berinteraksi dengan alat. Anda sering akan melihat ‘Fungsi’ dan ‘Alat’ digunakan secara bergantian kerana ‘fungsi’ (blok kod yang boleh digunakan semula) adalah ‘alat’ yang digunakan ejen untuk melaksanakan tugasan. Untuk kod fungsi dilaksanakan, LLM mesti membandingkan permintaan pengguna dengan keterangan fungsi. Untuk melakukan ini, satu skema yang mengandungi keterangan semua fungsi yang ada dihantar ke LLM. LLM kemudian memilih fungsi yang paling sesuai untuk tugasan tersebut dan mengembalikan namanya dan argumennya. Fungsi terpilih itu kemudian dijalankan, responsnya dihantar kembali ke LLM, yang menggunakan maklumat tersebut untuk membalas permintaan pengguna.

Untuk pembangun melaksanakan panggilan fungsi untuk ejen, anda memerlukan:

  1. Model LLM yang menyokong panggilan fungsi
  2. Skema yang mengandungi keterangan fungsi
  3. Kod untuk setiap fungsi yang diterangkan

Mari gunakan contoh mendapatkan waktu semasa di sebuah bandar untuk menggambarkan:

  1. Inisialisasi LLM yang menyokong panggilan fungsi:

    Tidak semua model menyokong panggilan fungsi, jadi penting untuk memeriksa bahawa LLM yang anda gunakan menyokongnya. Azure OpenAI menyokong panggilan fungsi. Kita boleh mulakan dengan memulakan klien Azure OpenAI.

     # Inisialisasi klien 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. Buat Skema Fungsi:

    Seterusnya kita akan mentakrifkan skema JSON yang mengandungi nama fungsi, penerangan apa yang dibuat oleh fungsi itu, dan nama serta penerangan parameter fungsi tersebut. Kita kemudian akan mengambil skema ini dan memberikannya kepada klien yang dibuat tadi, bersama permintaan pengguna untuk mencari waktu di San Francisco. Yang penting untuk diperhatikan ialah panggilan alat adalah apa yang dikembalikan, bukan jawapan akhir kepada soalan. Seperti yang disebutkan sebelum ini, LLM mengembalikan nama fungsi yang dipilih untuk tugasan itu dan argumen yang akan dipassing kepadanya.

     # Penerangan fungsi untuk model baca
     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"],
                 },
             }
         }
     ]
    
      
     # Mesej pengguna awal
     messages = [{"role": "user", "content": "What's the current time in San Francisco"}] 
      
     # Panggilan API pertama: Minta model menggunakan fungsi
       response = client.chat.completions.create(
           model=deployment_name,
           messages=messages,
           tools=tools,
           tool_choice="auto",
       )
      
       # Proses jawapan model
       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. Kod fungsi yang diperlukan untuk melaksanakan tugasan:

    Kini LLM telah memilih fungsi yang perlu dijalankan, kod yang melaksanakan tugasan perlu diterapkan dan dilaksanakan. Kita boleh melaksanakan kod untuk mendapatkan waktu semasa dalam Python. Kita juga perlu menulis kod untuk mengekstrak nama dan argumen daripada response_message untuk mendapatkan keputusan akhir.

       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"})
    
      # Mengendalikan panggilan fungsi
       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.")  
      
       # Panggilan API kedua: Dapatkan respons akhir dari 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.
    

Panggilan Fungsi adalah teras kepada kebanyakan, jika tidak semua, reka bentuk penggunaan alat ejen, namun melaksanakannya dari awal boleh menjadi mencabar. Seperti yang kita pelajari dalam Pelajaran 2, rangka kerja agentic menyediakan kita dengan blok binaan siap pakai untuk melaksanakan penggunaan alat.

Contoh Penggunaan Alat dengan Rangka Kerja Agentic

Berikut adalah beberapa contoh bagaimana anda boleh melaksanakan Corak Reka Bentuk Penggunaan Alat menggunakan rangka kerja agentic yang berbeza:

Rangka Kerja Ejen Microsoft

Rangka Kerja Ejen Microsoft adalah rangka kerja AI sumber terbuka untuk membina ejen AI. Ia mempermudah proses penggunaan panggilan fungsi dengan membenarkan anda mentakrifkan alat sebagai fungsi Python dengan penghias @tool. Rangka kerja ini mengendalikan komunikasi dua hala antara model dan kod anda. Ia juga menyediakan akses kepada alat siap guna seperti Carian Fail dan Penafsir Kod melalui AzureAIProjectAgentProvider.

Rajah berikut menggambarkan proses panggilan fungsi dengan Rangka Kerja Ejen Microsoft:

function calling

Dalam Rangka Kerja Ejen Microsoft, alat ditakrifkan sebagai fungsi yang dihias. Kita boleh menukar fungsi get_current_time yang kita lihat sebelum ini menjadi alat dengan menggunakan penghias @tool. Rangka kerja akan secara automatik menserialkan fungsi dan parameternya, mencipta skema untuk dihantar ke 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"""
    ...

# Cipta klien
provider = AzureAIProjectAgentProvider(credential=AzureCliCredential())

# Cipta agen dan jalankan dengan alat tersebut
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?")

Perkhidmatan Ejen AI Azure

Perkhidmatan Ejen AI Azure adalah rangka kerja agentic yang lebih baru yang direka untuk memberi kuasa kepada pembangun untuk membina, menggulung keluar, dan menskalakan ejen AI berkualiti tinggi dan boleh diperluas dengan selamat tanpa perlu mengurus sumber pengkomputeran dan storan asas. Ia amat berguna untuk aplikasi perusahaan kerana ia adalah perkhidmatan yang dikendalikan sepenuhnya dengan keselamatan bertaraf perusahaan.

Jika dibandingkan dengan pembangunan menggunakan API LLM secara langsung, Perkhidmatan Ejen AI Azure menyediakan beberapa kelebihan, termasuk:

Alat yang tersedia dalam Perkhidmatan Ejen AI Azure boleh dibahagikan kepada dua kategori:

  1. Alat Pengetahuan:
  2. Alat Tindakan:

Perkhidmatan Ejen membolehkan kita menggunakan alat ini bersamaan sebagai toolset. Ia juga menggunakan threads yang menjejaki sejarah mesej dari perbualan tertentu.

Bayangkan anda adalah ejen jualan di sebuah syarikat bernama Contoso. Anda ingin membangunkan ejen perbualan yang boleh menjawab soalan mengenai data jualan anda.

Imej berikut menggambarkan bagaimana anda boleh menggunakan Perkhidmatan Ejen AI Azure untuk menganalisis data jualan anda:

Agentic Service In Action

Untuk menggunakan mana-mana alat ini dengan perkhidmatan, kita boleh mencipta klien dan mentakrifkan alat atau toolset. Untuk melaksanakan ini secara praktikal, kita boleh menggunakan kod Python berikut. LLM akan dapat melihat toolset ini dan memutuskan sama ada untuk menggunakan fungsi pengguna fetch_sales_data_using_sqlite_query, atau Penafsir Kod siap guna bergantung pada permintaan pengguna.

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 # fungsi fetch_sales_data_using_sqlite_query yang boleh didapati dalam fail 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"],
)

# Inisialisasi set alat
toolset = ToolSet()

# Inisialisasi agen pemanggil fungsi dengan fungsi fetch_sales_data_using_sqlite_query dan menambahkannya ke set alat
fetch_data_function = FunctionTool(fetch_sales_data_using_sqlite_query)
toolset.add(fetch_data_function)

# Inisialisasi Alat Interpreter Kod dan menambahkannya ke set alat.
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
)

Apakah pertimbangan khas untuk menggunakan Corak Reka Bentuk Penggunaan Alat bagi membina ejen AI yang boleh dipercayai?

Kebimbangan biasa dengan SQL yang dijana secara dinamik oleh LLM adalah keselamatan, terutamanya risiko suntikan SQL atau tindakan berniat jahat, seperti menjatuhkan atau memanipulasi pangkalan data. Walaupun kebimbangan ini sah, ia boleh diatasi dengan berkesan dengan mengkonfigurasi kebenaran akses pangkalan data dengan betul. Untuk kebanyakan pangkalan data, ini melibatkan menetapkan pangkalan data sebagai baca sahaja. Untuk perkhidmatan pangkalan data seperti PostgreSQL atau Azure SQL, aplikasi harus diberikan peranan baca sahaja (SELECT).

Menjalankan aplikasi dalam persekitaran yang selamat juga meningkatkan perlindungan. Dalam senario perusahaan, data biasanya diekstrak dan diubah dari sistem operasi ke dalam pangkalan data baca sahaja atau gudang data dengan skema yang mesra pengguna. Pendekatan ini memastikan data selamat, dioptimumkan untuk prestasi dan kebolehcapaian, dan aplikasi mempunyai akses terhad, baca sahaja.

Kod Contoh

Ada Soalan Lagi tentang Corak Reka Bentuk Penggunaan Alat?

Sertai Microsoft Foundry Discord untuk berjumpa dengan pelajar lain, menghadiri sesi office hours dan mendapatkan jawapan mengenai soalan AI Agen anda.

Sumber Tambahan

Pelajaran Sebelumnya

Memahami Corak Reka Bentuk Agentic

Pelajaran Seterusnya

Agentic RAG


Penafian: Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil maklum bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan oleh manusia profesional adalah disyorkan. Kami tidak bertanggungjawab terhadap sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.