(Klik imej di atas untuk menonton video pelajaran ini)
Alat menarik kerana ia membolehkan ejen AI mempunyai keupayaan yang lebih luas. Daripada ejen hanya mempunyai set tindakan terhad, dengan menambah alat, ejen kini boleh melaksanakan pelbagai tindakan. Dalam bab ini, kita akan melihat Corak Reka Bentuk Penggunaan Alat, yang menerangkan bagaimana ejen AI boleh menggunakan alat tertentu untuk mencapai matlamat mereka.
Dalam pelajaran ini, kita akan cuba menjawab soalan-soalan berikut:
Selepas menyelesaikan pelajaran ini, anda akan dapat:
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 dilaksanakan oleh ejen untuk melaksanakan tindakan. Alat boleh menjadi fungsi mudah seperti kalkulator, atau panggilan API kepada perkhidmatan pihak ketiga seperti carian harga saham atau ramalan cuaca. Dalam konteks ejen AI, alat direka untuk dilaksanakan oleh ejen sebagai tindak balas kepada panggilan fungsi yang dijana model.
Ejen AI boleh memanfaatkan alat untuk menyelesaikan tugas yang 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 jurubahasa kod. Keupayaan ini berguna untuk pelbagai kes penggunaan termasuk:
Blok binaan ini membolehkan ejen AI melaksanakan pelbagai tugas. Mari kita lihat elemen utama yang diperlukan untuk melaksanakan Corak Reka Bentuk Penggunaan Alat:
Skema Fungsi/Alat: Definisi terperinci tentang alat yang tersedia, termasuk nama fungsi, tujuan, parameter yang diperlukan, dan output yang dijangka. Skema ini membolehkan LLM memahami alat yang tersedia dan cara membina permintaan yang sah.
Logik Pelaksanaan Fungsi: Mengawal bagaimana dan bila alat dipanggil berdasarkan niat pengguna dan konteks perbualan. Ini mungkin termasuk modul perancang, mekanisme penghalaan, atau aliran bersyarat yang menentukan penggunaan alat secara dinamik.
Sistem Pengendalian Mesej: Komponen yang menguruskan aliran perbualan antara input pengguna, respons LLM, panggilan alat, dan output alat.
Rangka Kerja Integrasi Alat: Infrastruktur yang menghubungkan ejen kepada pelbagai alat, sama ada fungsi mudah atau perkhidmatan luaran yang kompleks.
Pengendalian Ralat & Pengesahan: Mekanisme untuk menangani kegagalan dalam pelaksanaan alat, mengesahkan parameter, dan mengurus respons yang tidak dijangka.
Pengurusan Keadaan: Menjejaki konteks perbualan, interaksi alat sebelumnya, dan data berterusan untuk memastikan konsistensi dalam interaksi berbilang giliran.
Seterusnya, mari kita lihat Panggilan Fungsi/Alat dengan lebih terperinci.
Panggilan fungsi adalah cara utama untuk membolehkan Model Bahasa Besar (LLM) berinteraksi dengan alat. Anda sering melihat ‘Fungsi’ dan ‘Alat’ digunakan secara bergantian kerana ‘fungsi’ (blok kod yang boleh digunakan semula) adalah ‘alat’ yang digunakan oleh ejen untuk melaksanakan tugas. Untuk kod fungsi dilaksanakan, LLM mesti membandingkan permintaan pengguna dengan penerangan fungsi. Untuk melakukannya, skema yang mengandungi penerangan semua fungsi yang tersedia dihantar kepada LLM. LLM kemudian memilih fungsi yang paling sesuai untuk tugas tersebut dan mengembalikan nama dan argumennya. Fungsi yang dipilih dilaksanakan, responsnya dihantar kembali kepada LLM, yang menggunakan maklumat tersebut untuk menjawab permintaan pengguna.
Untuk pembangun melaksanakan panggilan fungsi untuk ejen, anda memerlukan:
Mari kita gunakan contoh mendapatkan waktu semasa di sebuah bandar untuk ilustrasi:
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 memulakan dengan memulakan 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"
)
Cipta Skema Fungsi:
Seterusnya, kita akan mentakrifkan skema JSON yang mengandungi nama fungsi, penerangan tentang apa yang dilakukan oleh fungsi, dan nama serta penerangan parameter fungsi. Kita kemudian akan mengambil skema ini dan menghantarnya kepada klien yang telah dibuat sebelum ini, bersama dengan permintaan pengguna untuk mencari waktu di San Francisco. Perkara penting yang perlu diperhatikan ialah panggilan alat yang dikembalikan, bukan jawapan akhir kepada soalan. Seperti yang dinyatakan sebelum ini, LLM mengembalikan nama fungsi yang dipilih untuk tugas tersebut, dan argumen yang akan dihantar 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')])
Kod fungsi yang diperlukan untuk melaksanakan tugas:
Setelah LLM memilih fungsi yang perlu dijalankan, kod yang melaksanakan tugas tersebut perlu 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 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 teras kepada kebanyakan, jika tidak semua, reka bentuk penggunaan alat ejen, namun melaksanakannya dari awal kadangkala boleh mencabar. Seperti yang kita pelajari dalam Pelajaran 2, rangka kerja ejen menyediakan kita dengan blok binaan yang telah sedia ada untuk melaksanakan penggunaan alat.
Berikut adalah beberapa contoh bagaimana anda boleh melaksanakan Corak Reka Bentuk Penggunaan Alat menggunakan pelbagai rangka kerja ejen:
Semantic Kernel adalah rangka kerja AI sumber terbuka untuk pembangun .NET, Python, dan Java yang bekerja dengan Model Bahasa Besar (LLM). Ia memudahkan proses penggunaan panggilan fungsi dengan secara automatik menerangkan fungsi anda dan parameternya kepada model melalui proses yang dipanggil serializing. Ia juga menguruskan komunikasi antara model dan kod anda. Satu lagi kelebihan menggunakan rangka kerja ejen seperti Semantic Kernel ialah ia membolehkan anda mengakses alat yang telah sedia ada seperti Carian Fail dan Jurubahasa Kod.
Rajah berikut menggambarkan proses panggilan fungsi dengan Semantic Kernel:
Dalam Semantic Kernel, fungsi/alat dipanggil Plugin. Kita boleh menukar fungsi get_current_time
yang kita lihat sebelum ini menjadi plugin dengan menjadikannya kelas dengan fungsi di dalamnya. Kita juga boleh mengimport dekorator kernel_function
, yang mengambil penerangan fungsi. Apabila anda kemudian mencipta kernel dengan GetCurrentTimePlugin
, kernel akan secara automatik mensasarkan fungsi dan parameternya, mencipta skema untuk dihantar kepada LLM dalam proses tersebut.
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 adalah rangka kerja ejen yang lebih baru yang direka untuk memperkasakan pembangun untuk membina, menyebarkan, dan menskalakan ejen AI berkualiti tinggi dan boleh diperluaskan dengan selamat tanpa perlu menguruskan sumber pengkomputeran dan storan asas. Ia amat berguna untuk aplikasi perusahaan kerana ia adalah perkhidmatan yang diurus sepenuhnya dengan keselamatan gred perusahaan.
Berbanding dengan pembangunan menggunakan API LLM secara langsung, Azure AI Agent Service menyediakan beberapa kelebihan, termasuk:
threads
untuk menyimpan semua maklumat yang anda perlukanAlat yang tersedia dalam Azure AI Agent Service boleh dibahagikan kepada dua kategori:
Agent Service membolehkan kita menggunakan alat ini bersama-sama sebagai toolset
. Ia juga menggunakan threads
yang menjejaki sejarah mesej daripada perbualan tertentu.
Bayangkan anda seorang ejen jualan di sebuah syarikat bernama Contoso. Anda ingin membangunkan ejen perbualan yang boleh menjawab soalan tentang data jualan anda.
Imej berikut menggambarkan bagaimana anda boleh menggunakan Azure AI Agent Service untuk menganalisis data jualan anda:
Untuk menggunakan mana-mana alat ini dengan perkhidmatan, kita boleh mencipta klien dan mentakrifkan alat atau toolset
. Untuk melaksanakannya secara praktikal, kita boleh menggunakan kod Python berikut. LLM akan dapat melihat toolset
dan memutuskan sama ada untuk menggunakan fungsi yang dicipta pengguna, fetch_sales_data_using_sqlite_query
, atau Jurubahasa Kod sedia ada 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 # 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
)
Kebimbangan biasa dengan SQL yang dijana secara dinamik oleh LLM adalah keselamatan, terutamanya risiko suntikan SQL atau tindakan berniat jahat, seperti memadam atau mengubah pangkalan data. Walaupun kebimbangan ini sah, ia boleh dikurangkan dengan berkesan dengan mengkonfigurasi kebenaran akses pangkalan data dengan betul. Untuk kebanyakan pangkalan data, ini melibatkan mengkonfigurasi pangkalan data sebagai hanya baca. Untuk perkhidmatan pangkalan data seperti PostgreSQL atau Azure SQL, aplikasi harus diberikan peranan hanya baca (SELECT).
Menjalankan aplikasi dalam persekitaran yang selamat meningkatkan lagi perlindungan. Dalam senario perusahaan, data biasanya diekstrak dan diubah daripada sistem operasi ke dalam pangkalan data hanya baca atau gudang data dengan skema mesra pengguna. Pendekatan ini memastikan bahawa data adalah selamat, dioptimumkan untuk prestasi dan kebolehcapaian, dan aplikasi mempunyai akses terhad, hanya baca.
Sertai Azure AI Foundry Discord untuk berhubung dengan pelajar lain, menghadiri sesi soal jawab, dan mendapatkan jawapan kepada soalan anda tentang AI Agents.
Memahami Corak Reka Bentuk Agentic
Penafian:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.