1. Fonksiyon Çağrısına Giriş
GPT modelinde, Fonksiyon Çağrısı, bir API aracılığıyla modele açıklamalı işlevler sağlayarak, modelin akıllıca bir şekilde bir veya daha fazla işlevi çağırmak için kullanabileceği ve parametreleri içeren bir JSON nesnesi üretebileceği anlamına gelir. Önemli bir not olarak, Sohbet Tamamlama API'sı doğrudan işlev çağrıları gerçekleştirmez, ancak kod içindeki işlevleri çalıştırmak için kullanılabilecek bir JSON üretir.
Basitçe, Fonksiyon Çağrısı özelliği, GPT modeline bir dizi işlev tanımı (işlev açıklamaları ve parametre açıklamaları dahil) sağlamayı içerir. Model daha sonra kullanıcının sorgusuna bağlı olarak hangi işlevi çağıracağına karar verir. Model harici işlevleri çalıştıramadığı için yalnızca hangi işlevi çağırması gerektiğini (işlev çağrısı parametreleriyle birlikte) yanıtlayabilir. Modelin istek sonucunu aldıktan sonra, programımız işlev çağrısını yerel olarak çalıştırır. İşlev çağrısının sonucu ardından prompt ile birleştirilir ve sonucu kullanıcıya ulaşmadan önce model'e geri gönderilir.
2. Fonksiyon Çağrısının Uygulama Senaryoları
İşte pratik uygulamalarının bazı örnekleri:
- Harici API'ları çağırarak soruları yanıtlayan bir asistan oluşturmak, örneğin
send_email(to: string, body: string)
veyaget_current_weather(location: string, unit: 'celsius' | 'fahrenheit')
gibi işlev tanımları oluşturmak. - Doğal dilin API çağrılarına dönüştürülmesi, örneğin "En iyi müşterilerim kim?" ifadesinin
get_customers(min_revenue: int, created_before: string, limit: int)
çevrilmesi ve ardından iç API çağrısının yapılması. - Metinden yapılandırılmış verilerin çıkarılması, örneğin
extract_data(name: string, birthday: string)
veyasql_query(query: string)
gibi işlevleri tanımlama.
Fonksiyon Çağrısı özelliğini kullanarak, yerel sistemlerimiz ve veritabanlarımızla etkileşimde bulunan yapay zeka ajanları uygulayabiliriz, örneğin yapay zekanın son hava durumunu sorması, stok fiyatlarını kontrol etmesi, paket yemek siparişi vermesi ya da uçuş rezervasyonu yapması gibi.
3. Fonksiyon Çağrısını Destekleyen Modeller
Tüm model sürümleri fonksiyon çağrısı verileri ile eğitilmemiştir. Şu anda, fonksiyon çağrısını destekleyen modeller şunlardır: gpt-4
, gpt-4-turbo-preview
, gpt-4-0125-preview
, gpt-4-1106-preview
, gpt-4-0613
, gpt-3.5-turbo
, gpt-3.5-turbo-1106
ve gpt-3.5-turbo-0613
.
Ayrıca, gpt-4-turbo-preview
, gpt-4-0125-preview
, gpt-4-1106-preview
ve gpt-3.5-turbo-1106
modelleri paralel fonksiyon çağrısını destekler, böylece aynı anda birden fazla fonksiyonu çalıştırabilir ve bu fonksiyon çağrılarını eş zamanlı olarak işleyerek etkili ve verimli sonuçlar üretebilir.
Not: Fonksiyon Çağrısı özelliğinin potansiyel riski, modelin yanlış parametreler üretmesine (yani hayalet parametreler) yol açabileceğidir. Bu nedenle, e-posta gönderme, çevrimiçi yayınlama, alışveriş yapma vb. gibi gerçek dünyayı etkileyen herhangi bir eylemi gerçekleştirmeden önce, kullanıcı onay sürecini ürün düzeyinde dahil etmek, işlevlerin yalnızca kullanıcı onayından sonra yürütülmesini sağlamak tavsiye edilir.
4. Fonksiyon Çağrısı Örnekleri
4.1 Python Örneği
OpenAI platformunda Fonksiyon Çağrısını uygulamak genellikle aşağıda belirtilen temel adımları izler. Aşağıdaki, Python kodu örneği kullanarak adımların tüm sürecini detaylandıracaktır. Bu örnek, hava durumunu sorgulama odaklı olup, aşağıda temel adımlar yer almaktadır.
Adım 1: Model için çağrılabilir işlevleri ve işlev tanımlarını hazırlama
İlk olarak, GPT modeli tarafından çağrılabilecek bir işlev tanımlamamız gerekmektedir. Genellikle bu, üçüncü taraf bir API ile iletişim kurabilen belirli işlemleri gerçekleştirebilen kendi işlevimizi hazırlamayı gerektirir.
import json
def get_current_weather(location, unit="fahrenheit"):
return json.dumps({
"location": location,
"temperature": "18",
"unit": unit
})
Adım 2: Sorguya ve araç parametresine dayalı olarak modeli çağırma
Sıradaki adım, Kullanıcı Sorgusu (örneğin: "Mevcut hava durumu nedir") ve hemen önce tanımladığımız get_current_weather
işlevinin açıklamasını içeren tools
parametresini içeren Chat Tamamlama API'si aracılığıyla GPT modelini çağırmaktır.
from openai import OpenAI
client = OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Belirli bir konum için mevcut hava durumunu al",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "Örneğin şehir adı: 'İstanbul'"
},
"unit": {
"type": "string",
"enum": ["santigrat", "fahrenheit"]
}
},
"required": ["location"]
}
}
}]
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "kullanıcı", "content": "San Francisco'da mevcut hava durumu nedir?"}],
tools=tools
)
Adım 3: İşlevi yerel olarak çalıştırma
Model tarafından döndürülen sonuç, genellikle tool_calls
yanıt parametresinde açıklanan işlevi çağırmak için kullanılabilir. Ardından, tool_calls
parametresinde tanımlanan işlev çağrı bilgilerine göre ilgili işlev çağrısını yerel olarak gerçekleştirebiliriz.
tool_calls = response.choices[0].message.tool_calls
if tool_calls:
arguments = json.loads(tool_calls[0].function.arguments)
weather_info = get_current_weather(**arguments)
print(weather_info) # Burada işlev çağrısı ile sorgulanan hava bilgilerini görebiliriz
Adım 4: İşlevin dönüş sonucu ile tekrar modeli çağırma
Şimdi, işlevin dönüş sonucunu modeldeki yeni bir mesaj olarak gönderebiliriz, böylece model bu sonuçları işleyebilir ve kullanıcıya özel bir yanıt üretebilir.
follow_up_response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "kullanıcı", "content": "San Francisco'da mevcut hava durumu nedir?"},
{"role": "fonksiyon", "name": "get_current_weather", "content": weather_info}
],
tools=tools
)
Açıklama: Yukarıdaki örnekte, işlev dönüş içeriği aşağıdaki gibi işlev mesajı aracılığıyla GPT modeline gönderilir:
{"role": "fonksiyon", "name": "get_current_weather", "content": weather_info}
Pratikte, AI'nın soruları yanıtlarken kullanacağı referans içeriği olarak işlevin dönüş içeriğini basitçe sistem mesajı önerisine yerleştirebilirsiniz.
Adım 5: Modelden nihai yanıtı alın
Son olarak, modelin nihai yanıtını alabilir ve kullanıcıya sunabiliriz. Bu adımda, model verdiğimiz hava durumu bilgilerine dayalı olarak kullanıcı dostu bir yanıt çıkaracaktır.
final_output = follow_up_response.choices[0].message.content
print(final_output) # Bu çıktı, kullanıcıya göstermek istediğimiz hava durumu bilgisidir
Yukarıdaki adımları takip ederek, GPT modelini ve işlev çağrılarını kullanarak hava durumunu sorgulamanın tam bir örneğini tamamlamış olduk.
4.2. İşlev çağrısı işlev tanımı açıklaması
4.2.1 'Araçlar' Parametre Alanlarının Anlamı
Bir işlev çağrısı yaparken, araçlar
parametresinde işlevle ilgili bilgileri tanımlamanız gerekmektedir. araçlar
parametresi, çoklu işlev tanımlarını içeren bir dizi olarak tanımlanmaktadır; her işlev tanımı aşağıdaki alanları içermektedir:
-
tip
: Bu alan, aracın tipini temsil etmektedir. Bir işlev çağrısında bu alan"işlev"
olarak ayarlanmalıdır. -
işlev
: Bu alan, işlevin detaylı bilgilerini içermekte olup aşağıdaki belirli alanlara sahip bir nesnedir:-
ad
: İşlevin adı, bir dizedir. -
açıklama
: İşlevin amacını açıklayan bir açıklama; bu, modelin kullanıcı beklentilerini karşılayan parametreler oluşturmasına yardımcı olabilir. -
parametreler
: İşlevin parametre tanımlarını açıklayan ve aşağıdaki alt alanları içeren bir nesnedir:-
tip
: Parametrenin tipini tanımlar; çoğunlukla"nesne"
olarak ayarlanmalıdır. -
özellikler
: Her işlev parametresinin belirli tanımları, genellikle aşağıdaki alt alanları içeren bir nesne olarak tanımlanmaktadır:-
tip
: Parametrenin veri tipi ("dize"
,"tamsayı"
,"mantıksal"
vb.). -
açıklama
: Parametrenin amacını modelin anlamasına yardımcı olacak açıklama. -
enum
(isteğe bağlı):tip
"dize"
olduğunda,enum
alanı geçerli değerler kümesini temsil eden bir dize dizisini belirleyebilir.
-
-
gereken
: Gerekli parametrelerin adlarını içeren bir dize dizisi.
-
-
4.2.2 Araçlar Tanımı Örnekleri
Şimdi, her alanın nasıl kullanıldığını anlamak için bazı araçlar
tanımları örneklerini sağlayalım.
Örnek 1: Mevcut Hava Durumu Bilgisi Al
{
"tip": "işlev",
"işlev": {
"ad": "mevcut_hava_durumu_al",
"açıklama": "Belirtilen konum için mevcut hava durumu bilgisini al",
"parametreler": {
"tip": "nesne",
"özellikler": {
"konum": {
"tip": "dize",
"açıklama": "Sorgulanmak istenen şehir, ör. 'San Francisco, CA'"
},
"birim": {
"tip": "dize",
"enum": ["santigrat", "fahrenheit"],
"açıklama": "Sıcaklık birimi, 'santigrat' için Celsius, 'fahrenheit' için Fahrenheit"
}
},
"gereken": ["konum", "birim"]
}
}
}
Yukarıdaki örnekte, belirli bir konumun mevcut hava durumunu almak için mevcut_hava_durumu_al
adında bir işlev tanımladık. Parametreler, konum
ve birim
olup, birim
alanında iki geçerli değer: "santigrat" (Celsius) ve "fahrenheit" (Fahrenheit) bulunmaktadır.
Örnek 2: Belirli Bir Sanatçı İçin Albümleri Bul
{
"tip": "işlev",
"işlev": {
"ad": "sanatçı_albümlerini_bul",
"açıklama": "Belirli bir sanatçı için tüm albümleri bul",
"parametreler": {
"tip": "nesne",
"özellikler": {
"sanatçı_adı": {
"tip": "dize",
"açıklama": "Sanatçının adı"
}
},
"gereken": ["sanatçı_adı"]
}
}
}
Bu örnekte, belirli bir sanatçı için tüm albümleri bulmak için sanatçı_albümlerini_bul
adında bir işlev oluşturduk. Bu işlev yalnızca bir parametre olan sanatçı_adı
nı (sanatçının adı) gerektirmektedir.
4.3. Bir HTTP İstek İşlev Çağrısı Örneği
OpenAI, HTTP protokolü aracılığıyla erişilebilen bir API sağlamaktadır. Aşağıda, HTTP API üzerinden işlev çağrısı özelliğini nasıl kullanılacağını açıklayacağız. Diğer programlama dillerinin geliştiricileri bu örneğe başvurabilir.
4.3.1. Adım 1: Kullanıcı Sorgusu ve Fonksiyon Tanımıyla Modeli Arama
İlk olarak, kullanıcının sorgusunu ve desteklediğimiz fonksiyonların listesini GPT modeline göndermemiz gerekiyor, böylece model kullanıcının sorusuna göre hangi fonksiyonu arayarak kullanıcının sorgusunu cevaplayacağını otomatik olarak analiz edebilir.
Aşağıdaki örnekte, GPT'ye belirli bir şehrin hava durumu bilgisini sorgulamak için kullanılabilecek get_current_weather
fonksiyonuna sahip olduğumuzu bildiriyoruz.
curl --location 'https://api.aiproxy.io/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {OPENAI_KEY}' \
--data '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "Shanghai'da bugün hava nasıl?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Belirtilen konum için mevcut hava durumu bilgisini al",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "Hava sorgulanacak şehir, ör. 'İstanbul, Türkiye'"
},
"unit": {
"type": "string",
"enum": [
"celsius",
"fahrenheit"
],
"description": "Sıcaklık birimi, 'celsius' için Celsius, 'fahrenheit' için Fahrenheit"
}
},
"required": [
"location",
"unit"
]
}
}
}
]
}'
İstek parametreleri açıklaması:
{
"model": "gpt-3.5-turbo", // Aranacak GPT modeli
"messages": [ // Bu, GPT için kullanıcı sorgusunu içeren mesaj listesi
{
"role": "user",
"content": "Shanghai'da bugün hava nasıl?"
}
],
"tools": [
// Bu, kullanılabilir fonksiyonları GPT'ye bildiren fonksiyon tanımınız
]
}
tools
parametresinin tanımı için 4.2.2 bölümüne bakınız.
GPT modeli tarafından normal işleme alındığında, benzer bir API yanıtı alırsınız:
{
"model": "gpt-3.5-turbo-0613",
"object": "chat.completion",
"usage": {
"prompt_tokens": 122,
"completion_tokens": 27,
"total_tokens": 149
},
"id": "chatcmpl-8mL4hS4zNMocyR2ajKyAvSTcbNaao",
"created": 1706531447,
"choices": [
{
"index": 0,
"delta": null,
"message": {
"role": "assistant",
"tool_calls": [ // tool_calls parametresi, GPT'nin çağırmak istediği fonksiyon listesini temsil eder
{
"id": "call_1iF09ttX1R9ESR18Ul2nLe1R",
"type": "function",
"function": {
"name": "get_current_weather", // GPT'nin kullanıcının sorgusunu cevaplamak için get_current_weather fonksiyonunu çağırmak istediğini gösterir
"arguments": "{\n \"location\": \"Shanghai, Çin\",\n \"unit\": \"celsius\"\n}" // Bu, get_current_weather fonksiyonunu çağırmak için giriş parametresidir
}
}
]
},
"finish_reason": "tool_calls"
}
]
}
4.3.2. Adım 2: Yerel Fonksiyon Çağrısı Yürütme
Çünkü GPT modeli kendisi belirli fonksiyon çağrılarını yürütemez, yalnızca hangi fonksiyonu çağırmak istediğini bildirir, yerel programımızın model tarafından döndürülen tool_calls
parametresine dayanarak belirli fonksiyon çağrısını gerçekleştirmesi gerekmektedir. Yerel fonksiyonları yürütme şekli farklı programlama dillerinde farklılık gösterir. Örneğin, Python'da daha önceki bölüme bakabilirsiniz.
4.3.3. Adım 3: Fonksiyonun Dönüş Sonucunu Kullanarak Modeli Yeniden Çağırma
Fonksiyon çağrısı yerel olarak yürütüldüğü için, fonksiyonun yürütme sonucunu ve kullanıcının sorusunu GPT modeline geri iletmemiz gerekiyor. Böylece nihai yanıtı alabiliriz.
curl --location 'https://api.aiproxy.io/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer sk-Roc5MX1zEuVxiuaMaETV6wZ2jXcCehjUCzwP9AcNErUiwppQ' \
--data '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "Bugün Şanghay'da hava nasıl?"
},
{
"role": "function",
"name": "get_current_weather",
"content": "{\"city\":\"Shanghai\", \"temperature\":\"25 derece Santigrat\"}"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Belirtilen konum için mevcut hava durumu bilgisini alır",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "Hava durumunu sorgulamak için şehir, örn., 'İstanbul, Türkiye'"
},
"unit": {
"type": "string",
"enum": [
"santigrat",
"fahrenheit"
],
"description": "Sıcaklık birimi, 'santigrat' için Santigrat, 'fahrenheit' için Fahrenheit"
}
},
"required": [
"location",
"unit"
]
}
}
}
]
}'
Not: Yukarıdaki istek ek bir fonksiyon iletişimini içerir ve GPT modeline fonksiyonun dönüş değerini bildirir. GPT, fonksiyonun dönüş bilgilerine dayanarak kullanıcının sorusunu doğrudan cevaplayacak ve fonksiyonu tekrar çağırmayacaktır.
Fonksiyon iletişimi, fonksiyonun dönüş değerini temsil eder ve aşağıdaki formata uygun olarak gelir:
{
"role": "function", // Mesaj tipi fonksiyon, fonksiyonun dönüş değerini temsil eder
"name": "get_current_weather", // Mevcut iletişimin get_current_weather fonksiyonunun dönüş değeri olduğunu GPT'ye bildirir
"content": "{\"city\":\"Shanghai\", \"temperature\":\"25 derece Santigrat\"}" // Fonksiyonun dönüş içeriği, JSON formatında veya diğer metin içeriği olabilir.
}
Aşağıda GPT tarafından oluşturulan nihai yanıt bulunmaktadır:
{
"model": "gpt-3.5-turbo-0613",
"object": "chat.completion",
"usage": {
"prompt_tokens": 144,
"completion_tokens": 17,
"total_tokens": 161
},
"id": "chatcmpl-8mLmvvKAjSql7rGF8fvQeddKhWYvr",
"created": 1706534189,
"choices": [
{
"index": 0,
"delta": null,
"message": {
"role": "assistant",
"content": "Bugün Şanghay'da hava 25 derece Santigrat."
},
"finish_reason": "stop"
}
]
}