ai-agents-for-beginners

Cara Merancang Agen AI yang Baik

(Klik gambar di atas untuk menonton video tentang pelajaran ini)

Pola Desain Penggunaan Alat

Alat menarik karena memungkinkan agen AI memiliki rentang kemampuan yang lebih luas. Alih-alih agen hanya memiliki seperangkat tindakan terbatas yang bisa dilakukan, dengan menambahkan alat, agen kini dapat melakukan berbagai tindakan yang lebih luas. Dalam bab ini, kita akan melihat Pola Desain Penggunaan Alat, yang menggambarkan bagaimana agen AI dapat menggunakan alat-alat spesifik untuk mencapai tujuan mereka.

Pendahuluan

Dalam pelajaran ini, kita ingin 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 kemampuan LLM untuk berinteraksi dengan alat-alat eksternal guna mencapai tujuan tertentu. Alat adalah kode yang dapat dijalankan oleh agen untuk melakukan aksi. 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.

Pada kasus penggunaan apa saja pola ini dapat diterapkan?

Agen AI dapat memanfaatkan alat untuk menyelesaikan tugas kompleks, mengambil informasi, atau mengambil 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 beberapa kasus penggunaan termasuk:

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

Blok bangunan berikut memungkinkan agen AI melakukan berbagai tugas. Mari kita lihat elemen-elemen utama yang diperlukan untuk mengimplementasikan Pola Desain Penggunaan Alat:

Selanjutnya, mari kita bahas lebih detail tentang Panggilan Fungsi/Alat.

Panggilan Fungsi/Alat

Panggilan fungsi adalah cara utama kita memungkinkan Model Bahasa Besar (LLM) berinteraksi dengan alat. Anda akan sering melihat istilah ‘Function’ dan ‘Tool’ digunakan secara bergantian karena ‘fungsi’ (blok kode yang dapat digunakan kembali) adalah ‘alat’ yang digunakan agen untuk melaksanakan tugas. Agar kode fungsi dapat dipanggil, LLM harus mencocokkan permintaan pengguna dengan deskripsi fungsi. Untuk itu, 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 kemudian dijalankan, responsnya dikirim kembali ke LLM yang menggunakan informasi tersebut untuk menanggapi permintaan pengguna.

Untuk pengembang yang ingin mengimplementasikan panggilan fungsi untuk agen, Anda memerlukan:

  1. Model LLM yang mendukung panggilan fungsi
  2. Skema yang memuat deskripsi fungsi
  3. Kode untuk setiap fungsi yang dideskripsikan

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

  1. Inisialisasi LLM yang mendukung panggilan fungsi:

    Tidak semua model mendukung panggilan fungsi, jadi penting untuk memeriksa LLM yang Anda gunakan. Azure OpenAI mendukung panggilan fungsi. Kita mulai dengan membuat 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. Membuat Skema Fungsi:

    Selanjutnya kita akan mendefinisikan skema JSON yang berisi nama fungsi, deskripsi fungsi tersebut, serta nama dan deskripsi parameter fungsi. Kemudian skema ini akan dikirim ke klien yang dibuat sebelumnya, bersama permintaan pengguna untuk mengetahui waktu di San Francisco. Yang penting dicatat adalah panggilan alat yang dikembalikan, bukan jawaban akhir dari pertanyaan. Seperti yang disebutkan sebelumnya, LLM mengembalikan nama fungsi yang dipilih untuk tugas tersebut beserta argumen yang akan diteruskan.

     # Deskripsi fungsi untuk model agar dapat membaca
     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"],
                 },
             }
         }
     ]
    
      
     # Pesan awal pengguna
     messages = [{"role": "user", "content": "What's the current time in San Francisco"}] 
      
     # Panggilan API pertama: Minta model untuk menggunakan fungsi
       response = client.chat.completions.create(
           model=deployment_name,
           messages=messages,
           tools=tools,
           tool_choice="auto",
       )
      
       # Proses respon 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. Kode fungsi yang diperlukan untuk menjalankan tugas:

    Setelah LLM memilih fungsi yang akan dijalankan, kode pelaksanaannya perlu dibuat 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"})
    
      # Tangani 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 inti dari sebagian besar, jika tidak semua, desain penggunaan alat agen, namun mengimplementasikannya dari awal terkadang bisa menantang. Seperti yang kita pelajari di Pelajaran 2, kerangka kerja agenis menyediakan blok bangunan yang sudah jadi untuk mengimplementasikan penggunaan alat.

Contoh Penggunaan Alat dengan Kerangka Kerja Agen

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

Kerangka Kerja Agen Microsoft

Kerangka Kerja Agen Microsoft adalah kerangka AI sumber terbuka untuk membangun agen AI. Ini menyederhanakan proses panggilan fungsi dengan memungkinkan Anda menentukan alat sebagai fungsi Python menggunakan dekorator @tool. Kerangka ini menangani komunikasi dua arah antara model dan kode Anda. Ia juga menyediakan akses ke alat bawaan seperti Pencarian Berkas dan Interpreter Kode melalui AzureAIProjectAgentProvider.

Diagram berikut menggambarkan proses panggilan fungsi dengan Kerangka Kerja Agen Microsoft:

function calling

Dalam Kerangka Kerja Agen Microsoft, alat didefinisikan sebagai fungsi yang dihias. Kita dapat mengubah fungsi get_current_time yang kita lihat sebelumnya menjadi alat dengan menggunakan dekorator @tool. Kerangka secara otomatis akan menyerialkan fungsi dan parameternya, membuat skema untuk dikirim 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"""
    ...

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

# Buat 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?")

Layanan Azure AI Agent

Layanan Azure AI Agent adalah kerangka kerja agenis terbaru yang dirancang untuk memberdayakan pengembang membangun, menjalankan, dan menskalakan agen AI berkualitas tinggi dan dapat diperluas secara aman tanpa perlu mengelola sumber daya compute dan penyimpanan di bawahnya. Ini sangat berguna untuk aplikasi enterprise karena merupakan layanan terkelola penuh dengan keamanan tingkat enterprise.

Dibandingkan mengembangkan langsung dengan API LLM, Layanan Azure AI Agent memberikan beberapa keuntungan, termasuk:

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

  1. Alat Pengetahuan:
  2. Alat Aksi:

Layanan Agen memungkinkan kita menggunakan alat-alat ini bersama-sama sebagai sebuah toolset. Ia juga memanfaatkan threads yang melacak riwayat pesan dari percakapan tertentu.

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

Gambar berikut menggambarkan bagaimana Anda bisa menggunakan Layanan Azure AI Agent untuk menganalisis data penjualan Anda:

Agentic Service In Action

Untuk menggunakan alat-alat ini dengan layanan tersebut, kita dapat membuat klien dan mendefinisikan alat atau set alat. Untuk mengimplementasikannya secara praktis kita bisa menggunakan kode Python berikut. LLM akan dapat melihat toolset dan memutuskan apakah menggunakan fungsi yang dibuat pengguna, fetch_sales_data_using_sqlite_query, atau Interpreter Kode bawaan tergantung 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 dapat ditemukan di file 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 toolset
toolset = ToolSet()

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

# Inisialisasi alat Interpreter Kode dan menambahkannya ke toolset.
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
)

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

Kekhawatiran umum dengan SQL yang dihasilkan secara dinamis oleh LLM adalah keamanan, khususnya risiko injeksi SQL atau tindakan jahat lainnya, seperti menghapus atau merusak basis data. Walaupun kekhawatiran ini valid, hal tersebut bisa diatasi dengan mengonfigurasi izin akses basis data dengan benar. Untuk sebagian besar basis data, ini melibatkan pengaturan basis data hanya-baca. Untuk layanan basis data seperti PostgreSQL atau Azure SQL, aplikasi harus diberikan peran hanya-baca (SELECT).

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

Contoh Kode

Punya Pertanyaan Lebih Lanjut tentang Pola Desain Penggunaan Alat?

Bergabunglah dengan Microsoft Foundry Discord untuk bertemu dengan pelajar lain, menghadiri sesi tanya jawab, dan mendapatkan jawaban atas pertanyaan Anda tentang Agen AI.

Sumber Daya Tambahan

Pelajaran Sebelumnya

Memahami Pola Desain Agen

Pelajaran Selanjutnya

Agentik RAG


Penafian: Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI Co-op Translator. Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.