(Bu dersin videosunu izlemek için yukarıdaki görsele tıklayın)
Araçlar ilginçtir çünkü AI ajanlarının daha geniş bir yetenek yelpazesine sahip olmasını sağlar. Ajanın gerçekleştirebileceği sınırlı bir eylem seti yerine, bir araç ekleyerek ajan artık çok çeşitli eylemler gerçekleştirebilir. Bu bölümde, AI ajanlarının belirli araçları kullanarak hedeflerine nasıl ulaşabileceğini açıklayan Araç Kullanımı Tasarım Deseni’ni inceleyeceğiz.
Bu derste şu soruları yanıtlamayı hedefliyoruz:
Bu dersi tamamladıktan sonra:
Araç Kullanımı Tasarım Deseni, LLM’lere belirli hedeflere ulaşmak için harici araçlarla etkileşim kurma yeteneği kazandırmaya odaklanır. Araçlar, bir ajanın eylemleri gerçekleştirmek için çalıştırabileceği kodlardır. Bir araç, bir hesap makinesi gibi basit bir fonksiyon veya bir üçüncü taraf hizmetine yapılan bir API çağrısı (örneğin, hisse senedi fiyatı sorgulama veya hava durumu tahmini) olabilir. AI ajanları bağlamında, araçlar model tarafından oluşturulan fonksiyon çağrılarına yanıt olarak ajanlar tarafından çalıştırılmak üzere tasarlanmıştır.
AI ajanları, karmaşık görevleri tamamlamak, bilgi almak veya kararlar vermek için araçlardan yararlanabilir. Araç kullanımı tasarım deseni, genellikle veritabanları, web hizmetleri veya kod yorumlayıcılar gibi harici sistemlerle dinamik etkileşim gerektiren senaryolarda kullanılır. Bu yetenek, aşağıdaki gibi çeşitli kullanım durumları için faydalıdır:
Bu yapı taşları, AI ajanının çok çeşitli görevleri gerçekleştirmesini sağlar. Araç Kullanımı Tasarım Deseni’ni uygulamak için gereken temel unsurlara bakalım:
Fonksiyon/Arac Şemaları: Kullanılabilir araçların ayrıntılı tanımları, fonksiyon adı, amacı, gerekli parametreler ve beklenen çıktılar dahil. Bu şemalar, LLM’nin hangi araçların mevcut olduğunu ve geçerli istekleri nasıl oluşturacağını anlamasını sağlar.
Fonksiyon Çalıştırma Mantığı: Kullanıcının niyetine ve konuşma bağlamına göre araçların nasıl ve ne zaman çağrılacağını yönetir. Bu, planlayıcı modüller, yönlendirme mekanizmaları veya araç kullanımını dinamik olarak belirleyen koşullu akışları içerebilir.
Mesaj İşleme Sistemi: Kullanıcı girdileri, LLM yanıtları, araç çağrıları ve araç çıktıları arasındaki konuşma akışını yöneten bileşenler.
Araç Entegrasyon Çerçevesi: Ajanı basit fonksiyonlardan karmaşık harici hizmetlere kadar çeşitli araçlara bağlayan altyapı.
Hata Yönetimi ve Doğrulama: Araç çalıştırma hatalarını yönetmek, parametreleri doğrulamak ve beklenmeyen yanıtları ele almak için mekanizmalar.
Durum Yönetimi: Konuşma bağlamını, önceki araç etkileşimlerini ve çoklu dönüşlü etkileşimlerde tutarlılığı sağlamak için kalıcı verileri izler.
Şimdi Fonksiyon/Arac Çağrısını daha ayrıntılı inceleyelim.
Fonksiyon çağrısı, Büyük Dil Modelleri’nin (LLM’ler) araçlarla etkileşim kurmasını sağlamanın birincil yoludur. ‘Fonksiyon’ ve ‘Araç’ terimlerini genellikle birbirinin yerine kullanıldığını göreceksiniz çünkü ‘fonksiyonlar’ (yeniden kullanılabilir kod blokları), ajanların görevleri yerine getirmek için kullandığı ‘araçlardır’. Bir fonksiyonun kodunun çalıştırılabilmesi için, LLM’nin kullanıcı isteğini fonksiyon açıklamasına karşı karşılaştırması gerekir. Bunun için, mevcut tüm fonksiyonların açıklamalarını içeren bir şema LLM’ye gönderilir. LLM, görev için en uygun fonksiyonu seçer ve adını ve argümanlarını döndürür. Seçilen fonksiyon çalıştırılır, yanıtı LLM’ye geri gönderilir ve LLM bu bilgiyi kullanıcının isteğine yanıt vermek için kullanır.
Ajanlar için fonksiyon çağrısını uygulamak isteyen geliştiriciler şunlara ihtiyaç duyar:
San Francisco’daki mevcut zamanı almak örneğini kullanarak açıklayalım:
Fonksiyon çağrısını destekleyen bir LLM başlatın:
Tüm modeller fonksiyon çağrısını desteklemez, bu yüzden kullandığınız LLM’nin bunu desteklediğinden emin olmak önemlidir. Azure OpenAI fonksiyon çağrısını destekler. Azure OpenAI istemcisini başlatarak başlayabiliriz.
# 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"
)
Bir Fonksiyon Şeması Oluşturun:
Ardından, fonksiyon adı, fonksiyonun ne yaptığına dair açıklama ve fonksiyon parametrelerinin adları ve açıklamalarını içeren bir JSON şeması tanımlayacağız. Bu şemayı, San Francisco’daki zamanı bulmak için kullanıcının isteğiyle birlikte daha önce oluşturulan istemciye ileteceğiz. Önemli olan, dönen şeyin araç çağrısı olduğu, sorunun nihai cevabı olmadığıdır. Daha önce belirtildiği gibi, LLM görev için seçtiği fonksiyonun adını ve ona iletilecek argümanları döndürür.
# 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')])
Görevi yerine getirmek için gereken fonksiyon kodu:
Artık LLM hangi fonksiyonun çalıştırılması gerektiğini seçtiğine göre, görevi yerine getirecek kodun uygulanması ve çalıştırılması gerekiyor. Python’da mevcut zamanı almak için kodu uygulayabiliriz. Ayrıca, nihai sonucu almak için response_message’dan ad ve argümanları çıkarmak için kod yazmamız gerekecek.
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.
Fonksiyon Çağrısı, ajan araç kullanımı tasarımının çoğunun, hatta tamamının merkezindedir, ancak sıfırdan uygulamak bazen zor olabilir. 2. Derste öğrendiğimiz gibi, ajan çerçeveleri bize araç kullanımını uygulamak için önceden oluşturulmuş yapı taşları sağlar.
Farklı ajan çerçevelerini kullanarak Araç Kullanımı Tasarım Deseni’ni nasıl uygulayabileceğinize dair bazı örnekler:
Semantic Kernel, Büyük Dil Modelleri (LLM’ler) ile çalışan .NET, Python ve Java geliştiricileri için açık kaynaklı bir AI çerçevesidir. Fonksiyon çağrısını kullanma sürecini, fonksiyonlarınızı ve parametrelerini modele otomatik olarak açıklayan bir süreç olan serileştirme yoluyla basitleştirir. Ayrıca model ile kodunuz arasındaki iletişimi yönetir. Semantic Kernel gibi bir ajan çerçevesi kullanmanın bir diğer avantajı, Dosya Arama ve Kod Yorumlayıcı gibi önceden oluşturulmuş araçlara erişim sağlamasıdır.
Aşağıdaki diyagram, Semantic Kernel ile fonksiyon çağrısı sürecini göstermektedir:

Semantic Kernel’de fonksiyonlar/araçlar Eklentiler olarak adlandırılır. Daha önce gördüğümüz get_current_time fonksiyonunu bir sınıfa dönüştürerek bir eklentiye dönüştürebiliriz. Ayrıca, fonksiyonun açıklamasını alan kernel_function dekoratörünü içe aktarabiliriz. GetCurrentTimePlugin ile bir çekirdek oluşturduğunuzda, çekirdek fonksiyonu ve parametrelerini otomatik olarak serileştirir ve sürecin bir parçası olarak LLM’ye gönderilecek şemayı oluşturur.
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, geliştiricilerin yüksek kaliteli ve genişletilebilir AI ajanlarını güvenli bir şekilde oluşturmasını, dağıtmasını ve ölçeklendirmesini sağlayan, temel hesaplama ve depolama kaynaklarını yönetme gereksinimi olmadan tasarlanmış daha yeni bir ajan çerçevesidir. Özellikle kurumsal uygulamalar için kullanışlıdır çünkü tamamen yönetilen bir hizmettir ve kurumsal düzeyde güvenlik sunar.
LLM API ile doğrudan geliştirmeye kıyasla, Azure AI Agent Service bazı avantajlar sağlar, bunlar arasında:
Azure AI Agent Service’deki araçlar iki kategoriye ayrılabilir:
Agent Service, bu araçları bir araç seti olarak birlikte kullanmamıza olanak tanır. Ayrıca, belirli bir konuşmadan gelen mesajların geçmişini takip eden diyalogları kullanır.
Contoso adlı bir şirkette satış temsilcisi olduğunuzu hayal edin. Satış verilerinizle ilgili soruları yanıtlayabilecek bir konuşma ajanı geliştirmek istiyorsunuz.
Aşağıdaki görsel, Azure AI Agent Service’i kullanarak satış verilerinizi nasıl analiz edebileceğinizi göstermektedir:

Bu hizmetle herhangi bir aracı kullanmak için bir istemci oluşturabilir ve bir araç veya araç seti tanımlayabilirsiniz. Bunu pratikte uygulamak için aşağıdaki Python kodunu kullanabiliriz. LLM, araç setine bakarak kullanıcı tarafından oluşturulan fetch_sales_data_using_sqlite_query fonksiyonunu veya önceden oluşturulmuş Kod Yorumlayıcıyı kullanıcı isteğine bağlı olarak kullanıp kullanmayacağına karar verebilir.
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
)
LLM’ler tarafından dinamik olarak oluşturulan SQL ile ilgili yaygın bir endişe, özellikle SQL enjeksiyonu veya veritabanını silme veya değiştirme gibi kötü niyetli eylemler riskidir. Bu endişeler geçerli olsa da, veritabanı erişim izinlerini doğru bir şekilde yapılandırarak etkili bir şekilde azaltılabilir. Çoğu veritabanı için bu, veritabanını salt okunur olarak yapılandırmayı içerir. PostgreSQL veya Azure SQL gibi veritabanı hizmetleri için uygulamaya salt okunur (SELECT) rol atanmalıdır. Uygulamayı güvenli bir ortamda çalıştırmak, korumayı daha da artırır. Kurumsal senaryolarda, veriler genellikle operasyonel sistemlerden alınır ve kullanıcı dostu bir şema ile salt okunur bir veritabanına veya veri ambarına dönüştürülür. Bu yaklaşım, verilerin güvenli, performans ve erişilebilirlik açısından optimize edilmiş olmasını ve uygulamanın sınırlı, salt okunur erişime sahip olmasını sağlar.
Diğer öğrenicilerle tanışmak, ofis saatlerine katılmak ve AI Agents ile ilgili sorularınızı yanıtlamak için Azure AI Foundry Discord topluluğuna katılın.
Agentic Tasarım Kalıplarını Anlamak
Feragatname:
Bu belge, Co-op Translator adlı yapay zeka çeviri hizmeti kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dilindeki hali yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlama veya yanlış yorumlamalardan sorumlu değiliz.