1. Genel Bakış
Gemini'da işlev çağrısı nedir?
Vertex AI Gemini API, çok formatlı kullanım alanları için tasarlanmış ve Google DeepMind tarafından geliştirilen bir üretken yapay zeka modeli ailesidir. İşlev çağrısı, geliştiricilerin üretken modellerden yapılandırılmış veri çıkışları almasını kolaylaştıran bir Gemini modeli özelliğidir.
Geliştiriciler daha sonra bu çıkışları kullanarak diğer API'leri çağırabilir ve ilgili yanıt verilerini modele döndürebilir. Diğer bir deyişle, işlev çağrısı, üretilen içeriğin en güncel ve doğru bilgileri içermesi için üretken modellerinizi harici sistemlere bağlamanıza yardımcı olur.
İşlev çağrısının işleyiş şekli
İşlevler, işlev bildirimleri kullanılarak açıklanır. Bu, üretken modelin bir işlevdeki amacı ve parametreleri anlamasına yardımcı olur. Bir sorguda işlev bildirimlerini üretken modele ilettikten sonra model, kullanıcının sorgusuna göre alakalı işlevlerin adlarını ve bağımsız değişkenlerini içeren yapılandırılmış bir nesne döndürür. İşlev çağrısıyla modelin işlevi gerçekten çağırmadığını unutmayın. Bunun yerine, döndürülen işlevi ve parametreleri kullanarak istediğiniz herhangi bir dilde, kitaplıkta veya çerçevede işlevi çağırabilirsiniz.

Ne oluşturacaksınız?
Bu codelab'de, Vertex AI Gemini API ve Python ile üretken yapay zeka işlem hattı oluşturacaksınız. Kullanıcılar, uygulamanızı kullanarak döviz kurları hakkında soru sorabilir. Sistem, harici bir API'den en son verileri getirir ve kullanıcıya yanıt verir.
Neler öğreneceksiniz?
- Python istemci kitaplığını kullanarak Gemini modeliyle etkileşim kurma
- İşlev bildirimi tanımlama ve bunu araç olarak kaydetme
- Gemini'ı çağırma ve işlev çağrısı yanıtı alma
- İşlev yanıtını Gemini'a döndürme ve kullanıcıya yanıt verme
İhtiyacınız olanlar
- Google Cloud projesi
- Chrome gibi bir tarayıcı
- Colab veya Colab Enterprise gibi bir Python geliştirme ortamı
2. Kurulum ve şartlar
Gemini'da işlev çağrısını kullanmaya başlamadan önce Vertex AI API'yi etkinleştirmeniz ve Vertex AI Python istemci kitaplığının en son sürümünü yüklemeniz gerekir.
Vertex AI API'yi etkinleştirme
Vertex AI API'yi etkinleştirmek için aşağıdaki adımları uygulayın:
- Tarayıcınızda Vertex AI API Hizmet Ayrıntıları sayfasına gidin.
- Google Cloud projenizde Vertex AI API'yi etkinleştirmek için Etkinleştir düğmesini tıklayın.
Vertex AI için Python istemci kitaplığını yükleme
Vertex AI için Python istemci kitaplıklarını yüklemek üzere aşağıdaki adımları uygulayın:
- Geliştirme ortamınızda bir terminal açın.
- Geçerli bir Python geliştirme ortamınızın olduğunu doğrulayın ve gerekirse bu kurallara bakın.
- Vertex AI için Python istemci kitaplığını yüklemek üzere aşağıdaki komutu çalıştırın:
pip install --upgrade google-cloud-aiplatform - Not defteri ortamında çalışıyorsanız yeni yüklenen paketleri kullanmak için çalışma zamanınızı/çekirdeğinizi yeniden başlatmanız gerekebilir.
Artık Vertex AI API'yi kullanmaya hazırsınız.
3. Sorunu anlama
Hiç büyük bir dil modeli veya üretken yapay zeka modeliyle etkileşime girip güncel bilgiler hakkında soru sordunuz mu? Bu durumda, güncel olmayan veya yanlış bilgiler içeren bir yanıt aldınız mı?
Hemen deneyin. Öncelikle ilgili Python paketlerini içe aktaracağız ve Gemini modelini başlatacağız. Aşağıdaki kodu Colab veya Colab Enterprise gibi bir Python geliştirme ortamında ve Python için Vertex AI SDK'nın en son sürümünü yükleyerek çalıştırabilirsiniz:
import vertexai
from vertexai.generative_models import GenerativeModel
model = GenerativeModel("gemini-1.5-pro-001")
Şimdi de farklı para birimlerinin bugünkü döviz kuruyla ilgili bir soru soralım:
response = model.generate_content(
"What's the exchange rate for euros to dollars today?"
)
print(response.text)
Model, aşağıdakine benzer sınırlı veya eski bir yanıt oluşturmalıdır:
As an AI language model, I don't have access to real-time currency exchange rates. However, as of my last update in September 2021, the approximate exchange rate between euros (EUR) and US dollars (USD) was: 1 EUR ≈ 1.18 USD Please note that currency exchange rates constantly fluctuate and can vary depending on various factors such as economic conditions, supply and demand, political events, and more. To obtain the most up-to-date and accurate exchange rate, I recommend using a reliable currency converter or financial website that provides live rates. [...]
Bu tür bir yanıt alan bir son kullanıcının, ilgilendiği para birimlerini aramak, en son döviz kurunu getirmek ve dönüşümleri kendi başına gerçekleştirmek için bağlam değiştirmesi gerekir.
İdeal olarak, üretken model işlem hattı kullanıcının bu görevlerinden bazılarını veya tamamını gerçekleştirebilir. Bir sonraki bölümde, harici sistemleri çağırabilmeniz için üretken modellerden yapılandırılmış yanıtlar almayla ilgili bazı yaygın geçici çözümleri deneyeceksiniz.
4. Sık kullanılan geçici çözümleri deneyin
Güncel bilgilere veya harici kaynaklardan alınan verilere ihtiyaç duyduğunuz senaryolarda üretken modellerle çalışırken harici bir API çağırabilir, ardından sonuçları yanıtında kullanması için üretken modele geri iletebilirsiniz.
Harici bir sistemi çağırmadan önce kullanılacak doğru işlevi belirlemeniz, kullanıcıdan ilgili parametreleri çıkarmanız ve parametreleri yapılandırılmış bir veri nesnesine yerleştirmeniz gerekir. Bu genellikle, üretken modeli geçerli yapılandırılmış veriler çıkışına zorlamak için kapsamlı istem mühendisliği yapmayı içerir.
Önceki bölümde sorduğumuz soruya geri dönelim ve modele bazı ek talimatlar verelim. Gemini modeline aşağıdaki isteği göndermeyi deneyin:
user_prompt = "What's the exchange rate from euros to US dollars today?"
response = model.generate_content("""
Your task is to extract parameters from the user's input and return it as a
structured JSON payload. The user will ask about the exchange rate and which
currency they are converting from and converting to.
User input: {user_prompt}
Please extract the currencies as parameters and put them in a JSON object.
""".format(user_prompt=user_prompt))
print(response.text)
Bu sonuç, geçerli JSON biçiminde olmayan ve üzerinde çalışmamızın zor olacağı aşağıdaki metin yanıtıdır:
```json
{
"currency_from": "euros",
"currency_to": "US dollars"
}
```
Özellikle, metin yanıtının ilk ve son satırlarında kod bloğunu sınırlamak için ters tırnaklar bulunur, ilk satırda dil belirleyici yer alır ve JSON nesnesindeki değerler, döviz kuru API'sinin giriş parametreleri olarak bekleyeceği standart üç harfli para birimi kısaltmaları değildir.
Bu metni geçerli JSON ve sözlük biçimine dönüştürmek için Python'ı kullanmayı, isteme daha fazla talimat eklemeyi, istenen çıkışla ilgili bir veya daha fazla örnek vermeyi, modeli ince ayar yapmayı ya da üretken modele JSON'ı temizlemesini isteyen başka bir çağrı yapmayı deneyebiliriz.
Ancak daha deterministik bir yol var. Gemini'da harici hizmetlerdeki bilgileri sorgulamak ve son kullanıcılara alakalı yanıtlar döndürmek için işlev çağrısını nasıl kullanacağımızı öğrenelim.
5. İşlev çağrısının işleyiş şekli
Parametre çıkarma ve işlev çağrısıyla ilgili işlemlere başlamadan önce işlev çağrısının adımlarını ve çalışma zamanında kullanılan bileşenleri inceleyelim.

Gemini API'ye kullanıcı girişi
Kullanıcının istemi Gemini API'ye gönderilir. Geliştirici, Gemini modeline yapılan bu API çağrısında bir araç içinde bir veya daha fazla işlev bildirimi tanımlar. Böylece Gemini modeli, hangi işlevleri çağırabileceğini ve bunları nasıl çağıracağını bilir.
Gemini API, işlev çağrısı döndürüyor
Gemini, kullanıcı girişi ve isteminin içeriğine göre, çağrılacak işlevin adını ve kullanılacak ilgili parametreleri içeren yapılandırılmış verilerle bir Function Call yanıtı döndürür.
API isteğinde bulunma
Ardından, harici bir sistemden veya API'den bilgi almak için API isteği oluşturmak üzere işlev adını ve parametreleri kullanırsınız. Bu API isteği ve yanıtı, geliştirici tarafından uygulama kodunda uygulanır ve Gemini API ile SDK'nın kapsamı dışında gerçekleşir. Örneğin, bir REST API'yi çağırmak ve JSON yanıtı almak için Python'da requests kitaplığını kullanabilirsiniz. Alternatif olarak, tercih ettiğiniz yaklaşımı ve istemci kitaplığını kullanarak işlevi çağırabilirsiniz.
API yanıtını Gemini'a döndürme
Son olarak, API yanıtını Gemini modeline geri iletirsiniz. Böylece model, son kullanıcının ilk istemine yanıt oluşturabilir veya Gemini modeli ek bilgiye ihtiyaç duyduğunu belirlerse başka bir işlev çağrısı yanıtı çağırabilir.
6. API'nizi seçin
İşlev çağrısındaki genel akışı ve belirli adımları anladığınıza göre artık en son döviz kurlarını getirmek için bir üretken yapay zeka işlem hattı oluşturacaksınız. Öncelikle, bilgi kaynağı olarak kullanmak istediğimiz API'yi seçmemiz gerekir.
Döviz kuru uygulamamızda, küresel döviz kurlarıyla ilgili en son bilgileri almak için https://www.frankfurter.app/ adresindeki REST API'yi kullanacağız.
Bu REST API ile etkileşim kurmak için Python'da requests ile şu şekilde bir REST API çağrısı yapabiliriz:
import requests
url = "https://api.frankfurter.app/latest"
response = requests.get(url)
response.text
veya cURL gibi bir istekte bulunabilirsiniz:
curl https://api.frankfurter.app/latest
Bu komut, şuna benzer bir yanıt döndürür:
{
"amount": 1,
"base": "EUR",
"date": "2023-12-20",
"rates": {
"AUD": 1.6186, "BGN": 1.9558, "BRL": 5.3287,
"CAD": 1.4609, "CHF": 0.946, "CNY": 7.8121,
"CZK": 24.538, "DKK": 7.4565, "GBP": 0.86555,
"HKD": 8.5439, "HUF": 385.23, "IDR": 16994,
"ILS": 3.9983, "INR": 91.06, "ISK": 150.3,
"JPY": 157.12, "KRW": 1425.62, "MXN": 18.6867,
"MYR": 5.0977, "NOK": 11.2895, "NZD": 1.7421,
"PHP": 60.991, "PLN": 4.3413, "RON": 4.9699,
"SEK": 11.129, "SGD": 1.4562, "THB": 38.252,
"TRY": 31.883, "USD": 1.0944, "ZAR": 20.111
}
}
Gemini'da işlev çağrısı, sizin için harici API çağrısı yapmadığından kullandığınız API türüyle ilgili herhangi bir kısıtlama yoktur. Cloud Run hizmeti, Cloud Function, Google Cloud hizmetine yönelik bir API isteği veya herhangi bir harici REST API'si kullanabilirsiniz.
7. İşlev ve araç tanımlama
Kullanılacak bir REST API seçtiğinize göre artık bir API spesifikasyonu tanımlayabilir ve işlevi bir araca kaydedebiliriz.
Python için Vertex AI SDK'nın en son sürümünü yüklediğinizden emin olun.
Ardından, Python SDK'dan gerekli modülleri içe aktarın ve Gemini modelini başlatın:
from vertexai.generative_models import (
Content,
FunctionDeclaration,
GenerativeModel,
Part,
Tool,
)
model = GenerativeModel("gemini-1.5-pro-001")
https://api.frankfurter.app/ adresindeki REST API'ye geri dönersek aşağıdaki giriş parametrelerini kabul ettiğini görebiliriz:
Parametre | Tür | Açıklama |
| Dize | Dönüştürülecek para birimi |
| Dize | Dönüştürülecek para birimi |
| Dize | Döviz kurunun getirileceği tarih |
Bu parametreler kullanılarak, YAML biçimindeki bu REST API'nin kısmi OpenAPI spesifikasyonu şu şekilde görünür:
openapi: 3.0.0
info:
title: Frankfurter Exchange Rate API
description: This API provides current and historical exchange rates
version: 1.0.0
servers:
- url: https://api.frankfurter.app
paths:
/{date}:
get:
summary: Get the latest currency exchange rates.
parameters:
- name: date
in: path
description: Get currency rates for a specific date or 'latest' if a date is not specified
required: true
schema:
type: string
- name: from
in: query
description: The currency to convert from.
required: true
schema:
type: string
- name: to
in: query
description: The currency to convert to.
schema:
type: string
Şimdi bunu Gemini için Python SDK'yı kullanarak FunctionDeclaration olarak kaydedelim:
get_exchange_rate_func = FunctionDeclaration(
name="get_exchange_rate",
description="Get the exchange rate for currencies between countries",
parameters={
"type": "object",
"properties": {
"currency_date": {
"type": "string",
"description": "A date that must always be in YYYY-MM-DD format or the value 'latest' if a time period is not specified"
},
"currency_from": {
"type": "string",
"description": "The currency to convert from in ISO 4217 format"
},
"currency_to": {
"type": "string",
"description": "The currency to convert to in ISO 4217 format"
}
},
"required": [
"currency_from",
"currency_date",
]
},
)
Üretken model, hangi işlevin seçileceğini ve işlev çağrısında parametrelerin nasıl doldurulacağını belirlemek için bu bilgileri kullanacağından işlev ve parametre açıklamalarında mümkün olduğunca ayrıntılı bilgi verdiğinizden emin olun.
Son olarak, işlev tanımlamasını içeren bir Tool tanımlayacaksınız:
exchange_rate_tool = Tool(
function_declarations=[get_exchange_rate_func],
)
Burada bir araçta tek bir işlev bildirimi kullanıyorsunuz ancak bir araçta bir veya daha fazla işlev bildirimi kaydedebileceğinizi ve modelin çalışma zamanında kullanılacak uygun işlevi seçeceğini unutmayın. Python için Gemini SDK'daki FunctionDeclaration, Tool ve ilgili sınıflar hakkında daha fazla bilgi için Gemini API'de İşlev Çağırma ile ilgili belgelere bakın.
İşlev ve araç tanımlarınızın yapılandırmasını tamamlamış olmanız gerekir. Sonraki bölümde, bu araçla üretken modeli çağırıp REST API'yi çağırmak için kullanabileceğimiz bir işlev çağrısı yanıtı alacağız.
8. İşlev çağrısı oluşturma
Artık üretken modele istem girebilir ve tanımladığınız tool öğesini ekleyebilirsiniz:
prompt = """What is the exchange rate from Australian dollars to Swedish krona?
How much is 500 Australian dollars worth in Swedish krona?"""
response = model.generate_content(
prompt,
tools=[exchange_rate_tool],
)
Şimdi yanıt nesnesine göz atalım:
print(response.candidates[0].content)
role: "model"
parts {
function_call {
name: "get_exchange_rate"
args {
fields {
key: "currency_to"
value {
string_value: "SEK"
}
}
fields {
key: "currency_from"
value {
string_value: "AUD"
}
}
fields {
key: "currency_date"
value {
string_value: "latest"
}
}
}
}
}
Model, kullanılabilen işlevi seçmiş ve parametrelerle birlikte get_exchange_rate işlevi için bir işlev çağrısı döndürmüş. Parametreler de istediğimiz doğru biçimde. Üretken modellerden yapılandırılmış yanıtlar almanın keyfini çıkarın.
Sonraki bölümde, yanıttaki bilgileri kullanarak bir API isteği göndereceksiniz.
9. API isteğinde bulunma
Gemini'da işlev çağrısının, harici API çağrısını sizin için yapmadığını unutmayın. Bunun yerine, istediğiniz dili, kitaplığı veya çerçeveyi kullanabilirsiniz.
Burada, döviz kuru REST API'sini çağırmak için Python'daki requests kitaplığını kullanacaksınız.
Yanıtı Python sözlüğüne dönüştürelim:
params = {}
for key, value in response.candidates[0].content.parts[0].function_call.args.items():
params[key[9:]] = value
params
Şimdi requests numaralı telefonu arayabilir veya başka bir yöntem kullanabiliriz:
import requests
url = f"https://api.frankfurter.app/{params['date']}"
api_response = requests.get(url, params=params)
api_response.text
Bu durumda şuna benzer bir yanıt alırsınız:
'{"amount":1.0,"base":"AUD","date":"2024-01-16","rates":{"SEK":6.8682}}'
REST API'den yanıtımızı aldık. Yanıt, bugüne ait en son döviz kuru bilgilerini içeriyor. Bir sonraki bölümde, bu bilgileri modele geri ileterek kullanıcı için alakalı bir yanıt oluşturmasını sağlayacağız.
10. Yanıt oluşturma
Son olarak, bir sonraki sohbet adımında işlev yanıtını modele geri ileterek kullanıcı için bir yanıt oluşturalım:
response = model.generate_content(
[
Content(role="user", parts=[
Part.from_text(prompt + """Give your answer in steps with lots of detail
and context, including the exchange rate and date."""),
]),
Content(role="function", parts=[
Part.from_dict({
"function_call": {
"name": "get_exchange_rate",
}
})
]),
Content(role="function", parts=[
Part.from_function_response(
name="get_exchange_rate",
response={
"content": api_response.text,
}
)
]),
],
tools=[exchange_rate_tool],
)
response.candidates[0].content.parts[0].text
İşlev yanıtını modele geri ilettiğimizde model, kullanıcının istemine API yanıtındaki alakalı bilgilerle birlikte yanıt verir.
The exchange rate from Australian dollars to Swedish krona on January 16, 2024, is 1 Australian dollar is equal to 6.8663 Swedish krona. So, 500 Australian dollars would be worth 500 * 6.8663 = 3,433.15 Swedish krona.
11. Tam kod örneğini görüntüleme
Bu noktada, Cloud Run hizmeti, Cloud Function veya başka bir Cloud hizmeti kullanarak Python kodunuzu bir arka uç API'sine yerleştirebilir ve model sorguları ile API çağrıları gerçekleştirmek için bu arka uç API'sini kullanan bir ön uç uygulaması dağıtabilirsiniz.
Son çözümümüzün tam kod örneğini aşağıda bulabilirsiniz:
import requests
from vertexai.generative_models import (
Content,
FunctionDeclaration,
GenerativeModel,
Part,
Tool,
)
model = GenerativeModel("gemini-1.5-pro-001")
get_exchange_rate_func = FunctionDeclaration(
name="get_exchange_rate",
description="Get the exchange rate for currencies between countries",
parameters={
"type": "object",
"properties": {
"currency_date": {
"type": "string",
"description": "A date that must always be in YYYY-MM-DD format or the value 'latest' if a time period is not specified"
},
"currency_from": {
"type": "string",
"description": "The currency to convert from in ISO 4217 format"
},
"currency_to": {
"type": "string",
"description": "The currency to convert to in ISO 4217 format"
}
},
"required": [
"currency_from",
"currency_date",
]
},
)
exchange_rate_tool = Tool(
function_declarations=[get_exchange_rate_func],
)
prompt = """What is the exchange rate from Australian dollars to Swedish krona?
How much is 500 Australian dollars worth in Swedish krona?"""
response = model.generate_content(
prompt,
tools=[exchange_rate_tool],
)
response.candidates[0].content
params = {}
for key, value in response.candidates[0].content.parts[0].function_call.args.items():
params[key[9:]] = value
params
import requests
url = f"https://api.frankfurter.app/{params['date']}"
api_response = requests.get(url, params=params)
api_response.text
response = model.generate_content(
[
Content(role="user", parts=[
Part.from_text(prompt + """Give your answer in steps with lots of detail
and context, including the exchange rate and date."""),
]),
Content(role="function", parts=[
Part.from_dict({
"function_call": {
"name": "get_exchange_rate",
}
})
]),
Content(role="function", parts=[
Part.from_function_response(
name="get_exchange_rate",
response={
"content": api_response.text,
}
)
]),
],
tools=[exchange_rate_tool],
)
response.candidates[0].content.parts[0].text
Bu uygulamada, üretken model için iki istek kullandık: biri işlev çağrısı oluşturmak, diğeri ise işlev yanıtını döndürmek için. Bu yöntemin, Gemini ile işlev çağrılarını ve işlev yanıtlarını işlemek için kullanılan yöntemlerden yalnızca biri olduğunu unutmayın. Sorgunuzla ilgili daha fazla bilgi edinmek için ek işlev çağrıları da yapabilir veya işlev çağrısını sohbet ve eşzamansız yöntemlerle birlikte kullanabilirsiniz.
Ek kod örnekleri için Gemini'da işlev çağırmayla ilgili örnek not defterine bakın.
12. Tebrikler
Gemini'da işlev çağrısını kullanarak Vertex AI Gemini API ve Python ile çalışan bir üretken yapay zeka işlem hattı oluşturmayı başardınız. Kullanıcılar döviz kurları hakkında soru sorabilir. Sistem, harici bir API'den en son verileri getirir ve yanıt verir.
Gemini'daki işlev çağırma, son kullanıcıdan gelen bir istemi temel alarak uygun işlevi seçer, istemden parametreleri çıkarır ve harici bir API çağrısı yapabilmeniz için yapılandırılmış bir veri nesnesi döndürür.
Gemini'daki işlev çağrısı tasarımı, parametreleri deterministik olarak ayıklarken özetleme ve içerik oluşturma işlemlerini üretken modele bırakarak her iki dünyanın da en iyisini sunmayı amaçlar. İşlem hattınızda diğer API'leri ve istemleri denemekten çekinmeyin. Ayrıca, Vertex AI Gemini API ile ilgili diğer işlevleri de keşfedebilirsiniz.

Temizleme
Bu codelab'de kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek amacıyla aşağıdaki temizleme işlemlerini gerçekleştirebilirsiniz:
- Gereksiz Google Cloud ücretlerinden kaçınmak için projenize ihtiyacınız yoksa Google Cloud Console'u kullanarak projenizi silin.
- Vertex AI için API'leri devre dışı bırakmak istiyorsanız Vertex AI API Hizmeti Ayrıntıları sayfasına gidin, API'yi devre dışı bırak'ı tıklayın ve işlemi onaylayın.
Daha Fazla Bilgi
Aşağıdaki kılavuzlar ve kaynaklarla etkileşimli yapay zeka ve üretken yapay zeka hakkında bilgi edinmeye devam edin:
- Gemini modellerine genel bakış
- Gemini'da işlev çağrısıyla ilgili dokümanlar
- Gemini'da işlev çağırma için örnek not defteri
- Gemini için örnek not defterleri
- Google Cloud'da üretken yapay zeka
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.