(Klik gambar di atas untuk menonton video pelajaran ini)
Alat menarik karena memungkinkan agen AI memiliki rentang kemampuan yang lebih luas. Alih-alih agen memiliki seperangkat tindakan terbatas yang dapat dilakukan, dengan menambahkan alat, agen kini dapat melakukan berbagai tindakan. Dalam bab ini, kita akan melihat Pola Desain Penggunaan Alat, yang menjelaskan bagaimana agen AI dapat menggunakan alat spesifik untuk mencapai tujuan mereka.
Dalam pelajaran ini, kami berusaha menjawab pertanyaan berikut:
Setelah menyelesaikan pelajaran ini, Anda akan dapat:
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. 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.
Agen AI dapat memanfaatkan alat untuk menyelesaikan tugas kompleks, mengambil informasi, atau membuat keputusan. Pola desain penggunaan alat sering dipakai dalam skenario yang membutuhkan interaksi dinamis dengan sistem eksternal, seperti basis data, layanan web, atau interpreter kode. Kemampuan ini berguna untuk sejumlah kasus penggunaan berbeda termasuk:
Blok bangunan ini memungkinkan agen AI melakukan berbagai tugas. Mari kita lihat elemen kunci yang dibutuhkan untuk menerapkan Pola Desain Penggunaan Alat:
Skema Fungsi/Alat: Definisi rinci alat yang tersedia, termasuk nama fungsi, tujuan, parameter yang diperlukan, dan keluaran yang diharapkan. Skema ini memungkinkan LLM memahami alat apa saja yang tersedia dan bagaimana menyusun permintaan yang valid.
Logika Eksekusi Fungsi: Mengatur bagaimana dan kapan alat dipanggil berdasarkan niat pengguna dan konteks percakapan. Ini mungkin mencakup modul perencana, mekanisme pengalihan, atau alur kondisional yang menentukan penggunaan alat secara dinamis.
Sistem Penanganan Pesan: Komponen yang mengelola alur percakapan antara input pengguna, respons LLM, panggilan alat, dan keluaran alat.
Kerangka Integrasi Alat: Infrastruktur yang menghubungkan agen dengan berbagai alat, baik itu fungsi sederhana atau layanan eksternal yang kompleks.
Penanganan Kesalahan & Validasi: Mekanisme untuk menangani kegagalan eksekusi alat, memvalidasi parameter, dan mengelola respons tak terduga.
Manajemen Status: Melacak konteks percakapan, interaksi alat sebelumnya, dan data persisten untuk memastikan konsistensi dalam interaksi multi-gilir.
Selanjutnya, mari kita lihat lebih rinci tentang Pemanggilan Fungsi/Alat.
Pemanggilan fungsi adalah cara utama kita memungkinkan Large Language Models (LLM) untuk berinteraksi dengan alat. Anda akan sering melihat ‘Fungsi’ dan ‘Alat’ digunakan secara bergantian karena ‘fungsi’ (blok kode yang dapat dipakai ulang) adalah ‘alat’ yang digunakan agen untuk menjalankan tugas. Agar kode fungsi dapat dipanggil, LLM harus membandingkan permintaan pengguna dengan deskripsi fungsi tersebut. Untuk ini, sebuah skema yang berisi deskripsi seluruh fungsi yang tersedia dikirim ke LLM. LLM kemudian memilih fungsi paling tepat untuk tugas tersebut dan mengembalikan nama serta argumennya. Fungsi yang dipilih dijalankan, responsnya dikirim kembali ke LLM, yang menggunakan informasi itu untuk menanggapi permintaan pengguna.
Untuk pengembang yang ingin menerapkan pemanggilan fungsi bagi agen, Anda akan membutuhkan:
Mari kita pakai contoh mendapatkan waktu saat ini di sebuah kota untuk ilustrasi:
Inisialisasi LLM yang mendukung pemanggilan fungsi:
Tidak semua model mendukung pemanggilan fungsi, jadi penting memeriksa apakah LLM yang Anda gunakan melakukannya. Azure OpenAI mendukung pemanggilan fungsi. Kita bisa mulai dengan menginisiasi klien Azure OpenAI.
# Inisialisasi klien 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"
)
Buat Skema Fungsi:
Selanjutnya kita akan mendefinisikan skema JSON yang berisi nama fungsi, deskripsi apa yang dilakukan fungsi tersebut, serta nama dan deskripsi parameter fungsi. Skema ini kemudian kita kirim ke klien yang dibuat sebelumnya, bersama dengan permintaan pengguna untuk mencari waktu di San Francisco. Yang penting dicatat adalah panggilan alat yang dikembalikan, bukan jawaban akhir atas pertanyaan. Seperti yang disebutkan sebelumnya, LLM mengembalikan nama fungsi yang dipilih untuk tugas tersebut, serta argumen yang akan diteruskan kepadanya.
# Deskripsi fungsi untuk dibaca model
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 respons 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')])
Kode fungsi yang diperlukan untuk menjalankan tugas:
Setelah LLM memilih fungsi yang perlu dijalankan, kode yang menjalankan tugas harus diimplementasikan dan dieksekusi. Kita bisa mengimplementasikan kode untuk mendapatkan waktu saat ini menggunakan Python. Kita juga perlu menulis kode untuk mengekstrak nama dan argumen dari response_message guna memperoleh 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"})
# Menangani pemanggilan 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.
Pemanggilan Fungsi adalah inti dari sebagian besar, jika tidak semua, desain penggunaan alat agen, namun mengimplementasikannya dari awal kadang bisa menjadi tantangan. Seperti yang kita pelajari di Pelajaran 2, kerangka kerja agen memberikan blok bangunan yang sudah jadi untuk menerapkan penggunaan alat.
Berikut beberapa contoh bagaimana Anda dapat menerapkan Pola Desain Penggunaan Alat menggunakan kerangka kerja agen berbeda:
Semantic Kernel adalah kerangka AI open-source untuk pengembang .NET, Python, dan Java yang bekerja dengan Large Language Models (LLM). Ini menyederhanakan proses menggunakan pemanggilan fungsi dengan secara otomatis mendeskripsikan fungsi dan parameternya kepada model melalui proses yang disebut serialisasi. Ia juga menangani komunikasi bolak-balik antara model dan kode Anda. Keunggulan lain menggunakan kerangka agen seperti Semantic Kernel adalah memungkinkan Anda mengakses alat yang sudah jadi seperti Pencarian File dan Interpreter Kode.
Diagram berikut mengilustrasikan proses pemanggilan fungsi dengan Semantic Kernel:

Dalam Semantic Kernel fungsi/alat disebut Plugin. Kita dapat mengonversi fungsi get_current_time yang kita lihat sebelumnya menjadi plugin dengan mengubahnya menjadi kelas yang berisi fungsi tersebut. Kita juga bisa mengimpor dekorator kernel_function, yang menerima deskripsi fungsi. Saat Anda 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
# Buat kernel
kernel = Kernel()
# Buat plugin
get_current_time_plugin = GetCurrentTimePlugin(location)
# Tambahkan plugin ke kernel
kernel.add_plugin(get_current_time_plugin)
Layanan Agen Azure AI adalah kerangka agen baru yang dirancang untuk memberdayakan pengembang membangun, menyebarkan, dan menskalakan agen AI berkualitas tinggi dan dapat diperluas dengan aman tanpa perlu mengelola sumber daya komputasi dan penyimpanan dasar. Ini sangat berguna untuk aplikasi perusahaan karena merupakan layanan yang sepenuhnya dikelola dengan keamanan berkelas perusahaan.
Jika dibandingkan dengan pengembangan langsung menggunakan API LLM, Layanan Agen Azure AI menawarkan beberapa keuntungan, antara lain:
Alat yang tersedia di Layanan Agen Azure AI dapat dibagi menjadi dua kategori:
Layanan Agen memungkinkan kita menggunakan alat-alat ini bersama sebagai toolset. Layanan ini juga memanfaatkan thread 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 mengilustrasikan bagaimana Anda bisa menggunakan Layanan Agen Azure AI untuk menganalisis data penjualan Anda:

Untuk menggunakan salah satu alat ini dengan layanan, kita dapat membuat klien dan menentukan alat atau toolset. Untuk menerapkannya secara praktis, kita dapat menggunakan kode Python berikut. LLM akan dapat melihat toolset dan memutuskan apakah 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 # 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 pemanggil 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 Code Interpreter dan menambahkannya ke toolset.
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
)
Kekhawatiran umum dengan SQL yang dihasilkan dinamis oleh LLM adalah keamanan, khususnya risiko injeksi SQL atau tindakan berbahaya, seperti menghapus atau mengubah basis data. Walaupun kekhawatiran ini valid, hal tersebut dapat diatasi secara efektif dengan mengonfigurasi hak 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 diberikan peran hanya baca (SELECT). Menjalankan aplikasi di lingkungan yang aman semakin meningkatkan perlindungan. Dalam skenario perusahaan, data biasanya diambil dan diubah dari sistem operasional ke dalam basis data atau gudang data yang hanya dapat dibaca dengan skema yang ramah pengguna. Pendekatan ini memastikan bahwa data aman, dioptimalkan untuk kinerja dan aksesibilitas, serta aplikasi memiliki akses terbatas hanya untuk membaca.
Bergabunglah dengan Azure AI Foundry Discord untuk bertemu dengan pelajar lain, mengikuti jam kantor, dan mendapatkan jawaban atas pertanyaan tentang AI Agents Anda.
Penafian:
Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI Co-op Translator. Meskipun kami berupaya menjaga akurasi, harap diperhatikan bahwa terjemahan otomatis dapat mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang salah yang timbul dari penggunaan terjemahan ini.