ai-agents-for-beginners

Cara Merancang Agen AI yang Baik

(Klik gambar di atas untuk menonton video pelajaran ini)

Pola Desain Penggunaan Alat

Alat menarik karena memungkinkan agen AI memiliki kemampuan yang lebih luas. Alih-alih agen hanya memiliki sejumlah tindakan terbatas yang dapat dilakukan, dengan menambahkan alat, agen kini dapat melakukan berbagai macam tindakan. Dalam bab ini, kita akan membahas Pola Desain Penggunaan Alat, yang menjelaskan bagaimana agen AI dapat menggunakan alat tertentu untuk mencapai tujuannya.

Pendahuluan

Dalam pelajaran ini, kita akan menjawab pertanyaan-pertanyaan berikut:

Tujuan Pembelajaran

Setelah menyelesaikan pelajaran ini, Anda akan dapat:

Apa itu Pola Desain Penggunaan Alat?

Pola Desain Penggunaan Alat berfokus pada memberikan kemampuan kepada LLM untuk berinteraksi dengan alat eksternal guna mencapai tujuan tertentu. Alat adalah kode yang dapat dijalankan oleh agen untuk melakukan tindakan. Sebuah alat bisa berupa fungsi sederhana seperti kalkulator, atau panggilan API ke layanan pihak ketiga seperti pencarian harga saham atau prakiraan cuaca. Dalam konteks agen AI, alat dirancang untuk dijalankan oleh agen sebagai respons terhadap panggilan fungsi yang dihasilkan model.

Apa saja kasus penggunaan yang dapat diterapkan?

Agen AI dapat memanfaatkan alat untuk menyelesaikan tugas-tugas kompleks, mengambil informasi, atau membuat keputusan. Pola desain penggunaan alat sering digunakan dalam skenario yang memerlukan interaksi dinamis dengan sistem eksternal, seperti basis data, layanan web, atau interpreter kode. Kemampuan ini berguna untuk berbagai kasus penggunaan, termasuk:

Apa saja elemen/blok bangunan yang diperlukan untuk mengimplementasikan pola desain penggunaan alat?

Blok bangunan ini memungkinkan agen AI untuk melakukan berbagai macam tugas. Mari kita lihat elemen kunci yang diperlukan untuk mengimplementasikan Pola Desain Penggunaan Alat:

Selanjutnya, mari kita lihat Panggilan Fungsi/Alat secara lebih rinci.

Panggilan Fungsi/Alat

Panggilan fungsi adalah cara utama untuk memungkinkan Model Bahasa Besar (LLM) berinteraksi dengan alat. Anda sering melihat istilah ‘Fungsi’ dan ‘Alat’ digunakan secara bergantian karena ‘fungsi’ (blok kode yang dapat digunakan kembali) adalah ‘alat’ yang digunakan agen untuk melaksanakan tugas. Agar kode fungsi dapat dijalankan, LLM harus membandingkan permintaan pengguna dengan deskripsi fungsi. Untuk melakukan ini, sebuah skema yang berisi deskripsi semua fungsi yang tersedia dikirim ke LLM. LLM kemudian memilih fungsi yang paling sesuai untuk tugas tersebut dan mengembalikan nama serta argumennya. Fungsi yang dipilih dijalankan, responsnya dikirim kembali ke LLM, yang menggunakan informasi tersebut untuk merespons permintaan pengguna.

Untuk mengimplementasikan panggilan fungsi bagi pengembang, Anda memerlukan:

  1. Model LLM yang mendukung panggilan fungsi
  2. Skema yang berisi deskripsi fungsi
  3. Kode untuk setiap fungsi yang dijelaskan

Mari kita gunakan contoh mendapatkan waktu saat ini di sebuah kota untuk mengilustrasikan:

  1. Inisialisasi LLM yang mendukung panggilan fungsi:

    Tidak semua model mendukung panggilan fungsi, jadi penting untuk memeriksa apakah LLM yang Anda gunakan mendukungnya. Azure OpenAI mendukung panggilan fungsi. Kita dapat memulai dengan menginisialisasi klien 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. Buat Skema Fungsi:

    Selanjutnya, kita akan mendefinisikan skema JSON yang berisi nama fungsi, deskripsi tentang apa yang dilakukan fungsi, serta nama dan deskripsi parameter fungsi. Kita kemudian akan mengambil skema ini dan mengirimkannya ke klien yang telah dibuat sebelumnya, bersama dengan permintaan pengguna untuk menemukan waktu di San Francisco. Yang penting untuk dicatat adalah bahwa yang dikembalikan adalah panggilan alat, bukan jawaban akhir untuk pertanyaan tersebut. Seperti yang disebutkan sebelumnya, LLM mengembalikan nama fungsi yang dipilih untuk tugas tersebut, dan argumen yang akan diteruskan kepadanya.

     # 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. Kode fungsi yang diperlukan untuk melaksanakan tugas:

    Sekarang setelah LLM memilih fungsi mana yang perlu dijalankan, kode yang melaksanakan tugas tersebut perlu diimplementasikan dan dijalankan. Kita dapat mengimplementasikan kode untuk mendapatkan waktu saat ini dalam Python. Kita juga perlu menulis kode untuk mengekstrak nama dan argumen dari response_message untuk mendapatkan hasil 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"})
    
      # 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.
    

Panggilan Fungsi adalah inti dari sebagian besar, jika tidak semua, desain penggunaan alat agen, namun mengimplementasikannya dari awal terkadang bisa menjadi tantangan. Seperti yang kita pelajari di Pelajaran 2, kerangka kerja agentic menyediakan blok bangunan yang sudah dibuat sebelumnya untuk mengimplementasikan penggunaan alat.

Contoh Penggunaan Alat dengan Kerangka Kerja Agentic

Berikut adalah beberapa contoh bagaimana Anda dapat mengimplementasikan Pola Desain Penggunaan Alat menggunakan berbagai kerangka kerja agentic:

Semantic Kernel

Semantic Kernel adalah kerangka kerja AI open-source untuk pengembang .NET, Python, dan Java yang bekerja dengan Model Bahasa Besar (LLM). Kerangka ini menyederhanakan proses penggunaan panggilan fungsi dengan secara otomatis mendeskripsikan fungsi Anda dan parameternya ke model melalui proses yang disebut serialisasi. Kerangka ini juga menangani komunikasi bolak-balik antara model dan kode Anda. Keuntungan lain dari menggunakan kerangka kerja agentic seperti Semantic Kernel adalah Anda dapat mengakses alat yang sudah dibuat sebelumnya seperti Pencarian File dan Interpreter Kode.

Diagram berikut mengilustrasikan proses panggilan fungsi dengan Semantic Kernel:

panggilan fungsi

Dalam Semantic Kernel, fungsi/alat disebut Plugin. Kita dapat mengonversi fungsi get_current_time yang kita lihat sebelumnya menjadi plugin dengan mengubahnya menjadi kelas dengan fungsi di dalamnya. Kita juga dapat mengimpor dekorator kernel_function, yang menerima deskripsi fungsi. Ketika Anda kemudian membuat kernel dengan GetCurrentTimePlugin, kernel akan secara otomatis melakukan serialisasi fungsi dan parameternya, membuat skema untuk dikirim ke LLM dalam prosesnya.

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 Agent Service

Azure AI Agent Service adalah kerangka kerja agentic baru yang dirancang untuk memberdayakan pengembang agar dapat membangun, menerapkan, dan menskalakan agen AI berkualitas tinggi dan dapat diperluas tanpa perlu mengelola sumber daya komputasi dan penyimpanan yang mendasarinya. Layanan ini sangat berguna untuk aplikasi perusahaan karena merupakan layanan yang sepenuhnya dikelola dengan keamanan tingkat perusahaan.

Dibandingkan dengan pengembangan langsung menggunakan API LLM, Azure AI Agent Service menawarkan beberapa keuntungan, termasuk:

Alat yang tersedia di Azure AI Agent Service dapat dibagi menjadi dua kategori:

  1. Alat Pengetahuan:
  2. Alat Tindakan:

Agent Service memungkinkan kita untuk menggunakan alat-alat ini bersama-sama sebagai toolset. Layanan ini juga memanfaatkan thread yang melacak riwayat pesan dari percakapan tertentu.

Bayangkan Anda adalah agen penjualan di sebuah perusahaan bernama Contoso. Anda ingin mengembangkan agen percakapan yang dapat menjawab pertanyaan tentang data penjualan Anda.

Gambar berikut mengilustrasikan bagaimana Anda dapat menggunakan Azure AI Agent Service untuk menganalisis data penjualan Anda:

Agentic Service In Action

Untuk menggunakan alat-alat ini dengan layanan, kita dapat membuat klien dan mendefinisikan alat atau toolset. Untuk mengimplementasikan ini secara praktis, kita dapat menggunakan kode Python berikut. LLM akan dapat melihat toolset dan memutuskan apakah akan menggunakan fungsi buatan pengguna, fetch_sales_data_using_sqlite_query, atau Interpreter Kode bawaan tergantung 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 # 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
)

Apa saja pertimbangan khusus dalam menggunakan Pola Desain Penggunaan Alat untuk membangun agen AI yang dapat dipercaya?

Salah satu kekhawatiran umum dengan SQL yang dihasilkan secara dinamis oleh LLM adalah keamanan, terutama risiko injeksi SQL atau tindakan berbahaya, seperti menghapus atau merusak basis data. Meskipun kekhawatiran ini valid, kekhawatiran tersebut dapat diatasi secara efektif dengan mengonfigurasi izin akses basis data dengan benar. Untuk sebagian besar basis data, ini melibatkan pengaturan basis data sebagai hanya-baca. Untuk layanan basis data seperti PostgreSQL atau Azure SQL, aplikasi harus diberi peran hanya-baca (SELECT).

Menjalankan aplikasi di lingkungan yang aman lebih meningkatkan perlindungan. Dalam skenario perusahaan, data biasanya diekstraksi dan diubah dari sistem operasional ke dalam basis data hanya-baca atau gudang data dengan skema yang ramah pengguna. Pendekatan ini memastikan bahwa data aman, dioptimalkan untuk kinerja dan aksesibilitas, dan bahwa aplikasi memiliki akses terbatas, hanya-baca.

Punya Pertanyaan Lebih Lanjut tentang Pola Desain Penggunaan Alat?

Bergabunglah dengan Azure AI Foundry Discord untuk bertemu dengan pelajar lainnya, menghadiri sesi tanya jawab, dan mendapatkan jawaban atas pertanyaan Anda tentang AI Agents.

Sumber Daya Tambahan

Pelajaran Sebelumnya

Memahami Pola Desain Agentic

Pelajaran Selanjutnya

Agentic RAG


Penafian:
Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI Co-op Translator. Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.