Gemini'da İşlev Çağrısı'nı Kullanarak API'lerle Etkileşimde Bulunma

1. Genel Bakış

Gemini'da işlev çağrısı nedir?

Vertex AI Gemini API, Google DeepMind tarafından geliştirilen ve çok modlu kullanım alanları için tasarlanmış bir üretken yapay zeka modeli ailesidir. İşlev çağırma, Gemini modellerinin bir özelliğidir ve geliştiricilerin üretken modellerden yapılandırılmış veri çıkışları almasını kolaylaştırır.

Geliştiriciler daha sonra bu çıkışları kullanarak diğer API'leri çağırabilir ve ilgili yanıt verilerini modele döndürebilirler. Başka bir deyişle, işlev çağrısı, üretken modellerinizi harici sistemlere bağlamanıza yardımcı olur. Böylece, oluşturulan içerik en güncel ve doğru bilgileri içerir.

İşlev çağrısının işleyiş şekli

İşlevler, işlev bildirimleri kullanılarak açıklanır. Bu bildirimler, üretken modelin bir işlevin amacını ve parametreleri anlamasına yardımcı olur. Bir sorgudaki 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ında modelin, aslında işlevi çağırmadığını unutmayın. Bunun yerine, döndürülen işlevi ve parametreleri kullanarak işlevi istediğiniz dilde, kitaplıkta veya çerçevede çağırabilirsiniz.

API Arayüzü

Neler oluşturacaksınız?

Bu codelab'de, Vertex AI Gemini API ve Python ile üretken yapay zeka ardışık düzeni derleyeceksiniz. Kullanıcılar uygulamanızı kullanarak döviz kurlarını sorabilirler. Sistem de harici bir API'den en son verileri getirip kullanıcıya yanıtla yanıt verir.

Neler öğreneceksiniz?

  • Python istemci kitaplığını kullanarak Gemini modeliyle etkileşim kurma
  • İşlev tanımını tanımlama ve 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

Gerekenler

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ştir

Vertex AI API'yi etkinleştirmek için aşağıdaki adımları uygulayın:

  1. Tarayıcınızda Vertex AI API Service Details (Vertex AI API Hizmet Ayrıntıları) sayfasına gidin.
  2. 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 için aşağıdaki adımları uygulayın:

  1. Geliştirme ortamınızda bir terminal açın.
  2. Geçerli bir Python geliştirme ortamınız olduğunu doğrulayın ve gerekirse bu kurallara bakın.
  3. Vertex AI için Python istemci kitaplığını yüklemek amacıyla şu komutu çalıştırın:
    pip install --upgrade google-cloud-aiplatform
    
  4. Bir not defteri ortamında çalıştırıyorsanız yeni yüklenen paketleri kullanmak için çalışma zamanınızı/çekirdekinizi yeniden başlatmanız gerekebilir.

Artık Vertex AI API'yi kullanmaya hazırsınız.

3. Sorunu anlama

Sadece eski tarihli veya yanlış bilgilerle yanıt almak amacıyla büyük bir dil modeli ya da üretken yapay zeka modeliyle etkileşimde bulunup gerçek zamanlı veya güncel bilgileri sorduğunuz oldu mu?

Haydi hemen deneyelim! İlk olarak ilgili Python paketlerini içe aktarıp 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, bugünkü farklı para birimlerinin döviz kuru hakkında bir soru soralım:

response = model.generate_content(
    "What's the exchange rate for euros to dollars today?"
)
print(response.text)

Modelin sizin için şuna benzer sınırlı veya güncel olmayan bir yanıt oluşturması gerekir:

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.

[...]

Bir son kullanıcı bu tür bir yanıt aldıysa ilgilendiği para birimlerini aramak, en son döviz kurunu almak ve dönüşümleri kendi başına gerçekleştirmek için bağlamları değiştirmesi gerekir.

İdeal olarak, üretken model ardışık düzeni kullanıcıların bu görevlerin bir kısmını veya tamamını kullanıcı için yönetebilir. 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ğırıp sonuçları, yanıtında kullanması için üretken modele geri gönderebilirsiniz.

Harici bir sistemi çağırmadan önce kullanılacak doğru işlevi belirlemeniz, kullanıcıdan ilgili parametreleri çıkarmanız ve bu parametreleri yapılandırılmış bir veri nesnesine yerleştirmeniz gerekir. Bu, genellikle üretken modeli geçerli yapılandırılmış veriler üretmeye zorlamak için kapsamlı istem mühendisliğini içerir.

Şimdi, önceki bölümde sorduğumuz soruya tekrar bakalım ve model için ek talimatlar ekleyelim. 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 olmayan ve çalışmamız zor olacak 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ı, kod bloğunu sınırlamak için vurgu işaretleri içerir, ilk satırda bir dil tanımlayıcısı bulunur ve JSON nesnesindeki değerler, bir döviz bürolarının giriş parametreleri olarak beklediği üç harfli standart para birimi kısaltmaları değildir.

Bu metni geçerli bir JSON'a ve sözlüğe dönüştürmek için Python'u kullanmayı deneyebilir, isteme daha fazla talimat ekleyebilir, istenen çıkışla ilgili bir veya daha fazla örnek sağlayabilir, modelde ince ayar yapabilir ya da üretken modele JSON'u temizlemesini isteyen başka bir çağrı yapabiliriz.

Ancak daha deterministik bir yol var. Harici hizmetlerdeki bilgileri sorgulamak ve son kullanıcılara alakalı yanıtlar döndürmek için Gemini'daki işlev çağrısının nasıl kullanılacağını öğrenelim.

5. İşlev çağrısının işleyiş şekli

Parametre ayıklama ve işlev çağırmaya başlamadan önce işlev çağrısının adımlarına ve çalışma zamanında hangi bileşenlerin kullanıldığını inceleyelim.

Gemini'da işlev çağrısına genel bakış

Gemini API için kullanıcı girişi

Kullanıcıdan gelen istem Gemini API'ye gönderilir ve Gemini modeline yapılan bu API çağrısında geliştirici, bir araç içinde bir veya daha fazla işlev bildirimi tanımlar. Bu sayede, Gemini modelinin hangi işlevleri çağırabileceğini ve bunları nasıl çağıracağını bilir.

Gemini API, bir İşlev Çağrısı döndürür.

Gemini, kullanıcı girişinin ve istemin içeriğine bağlı olarak, çağrılacak işlevin adını ve kullanılacak ilgili parametreleri içeren yapılandırılmış verilerin bulunduğu bir İşlev Çağrısı yanıtı döndürür.

API isteğinde bulunma

Ardından, harici bir sistem veya API'den bilgi almak üzere API isteğinde bulunmak için işlev adını ve parametreleri kullanacaksınız. Bu API isteği ve yanıtı, geliştirici tarafından uygulama kodunda uygulanır ve Gemini API ve SDK'nın kapsamı dışında gerçekleşir. Örneğin, REST API ç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 geri verme

Son olarak, son kullanıcının ilk istemine yanıt oluşturabilmesi veya Gemini modelinin ek bilgiye ihtiyaç duyduğunu belirlerse başka bir İşlev Çağrısı yanıtını başlatabilmesi için API yanıtını Gemini modeline geri gönderirsiniz.

6. API'nizi seçin

İşlev çağrısındaki genel akışı ve belirli adımları anladığınıza göre artık en güncel döviz kurlarını getiren bir üretken yapay zeka hattı oluşturabilirsiniz. Öncelikle, bilgi kaynağı olarak kullanmak istediğimiz API'yi seçmemiz gerekir.

Döviz kurları uygulamamızda, küresel döviz kurlarıyla ilgili en güncel bilgileri getirmek için https://www.frankfurter.app/ adresindeki REST API'sini kullanacağız.

Bu REST API ile etkileşime geçmek 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 şu gibi bir cURL isteği:

curl https://api.frankfurter.app/latest

ş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'daki işlev çağrısı sizin için harici API çağrısı yapmadığından, kullandığınız API türünde bu tür bir kısıtlama yoktur. Cloud Run Hizmeti, Cloud Functions işlevi, Google Cloud hizmetine API isteği veya harici REST API kullanabilirsiniz.

7. Fonksiyon ve araç tanımlama

Kullanılacak REST API'yi seçtiğinize göre artık API spesifikasyonu tanımlayabilir ve işlevi bir araca kaydedebiliriz.

Python için Vertex AI SDK'sının en son sürümünü yüklediğinizden emin olun.

Ardından, Python SDK'sından 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 baktığımızda aşağıdaki giriş parametrelerini kabul ettiğini görebiliriz:

Parametre

Tür

Açıklama

from

Dize

Para birimi dönüştürülecek

to

Dize

Dönüştürülecek para birimi

date

Dize

Döviz kurunun alınacağı tarih

Bu parametreleri kullanarak bu REST API için YAML biçimindeki 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 de Gemini için Python SDK'sını kullanarak bunu bir 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, seçilecek işlevi ve işlev çağrısında parametrelerin nasıl doldurulacağını belirlemek için bu bilgilerden yararlanacağı için işlev ve parametre açıklamalarında mümkün olduğunca fazla ayrıntı kullandığınızdan emin olun.

Son olarak, işlev bildirimini içeren bir Tool tanımlayın:

exchange_rate_tool = Tool(
    function_declarations=[get_exchange_rate_func],
)

Bu aşamada araç içinde bir işlev bildirimi kullanıyorsunuz. Ancak bir araçta bir veya daha fazla işlev bildirimi kaydedebilirsiniz. Bu durumda model, çalışma zamanında kullanılacak uygun işlevi seçecektir. Gemini API'de İşlev Çağrısı bölümündeki belgelere göz atarak Python için Gemini SDK'sındaki FunctionDeclaration, Tool ve ilgili sınıflarla ilgili daha fazla bilgi edinebilirsiniz.

İşlev ve araç tanımlarınızın yapılandırmasını tamamladınız. Bir sonraki bölümde, bu araçla üretken modeli çağıracak ve REST API'yi çağırmak için kullanabileceğimiz bir işlev çağrısını geri alacağız.

8. İşlev çağrısı oluşturma

Artık üretken modele istem ekleyebilir 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],
)

Yanıt nesnesine bakalı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"
        }
      }
    }
  }
}

Modelin mevcut bir işlevi seçtiği ve parametrelerle birlikte get_exchange_rate işlevi için bir işlev çağrısı döndürdüğü anlaşılıyor. Parametreler istediğimiz doğru biçimde. Üretken modellerden yapılandırılmış yanıtlar aldığınız için tebrikler.

Sonraki bölümde, yanıttaki bilgileri API isteğinde bulunmak için kullanacaksınız.

9. API isteğinde bulunma

Gemini'da işlev çağrısının, sizin için harici API çağrısı yapmadığını unutmayın. Bunun yerine, istediğiniz dili, kitaplığı veya çerçeveyi kullanabilirsiniz.

Döviz kuru REST API'sini çağırmak için Python'da requests kitaplığını kullanırsınız.

Yanıtı Python sözlüğüne açalım:

params = {}
for key, value in response.candidates[0].content.parts[0].function_call.args.items():
    params[key[9:]] = value
params

Artık requests yöntemini veya başka bir yöntemi çağırabiliriz:

import requests
url = f"https://api.frankfurter.app/{params['date']}"
api_response = requests.get(url, params=params)
api_response.text

Bu durumda aşağıdakine benzer bir yanıt alınır:

'{"amount":1.0,"base":"AUD","date":"2024-01-16","rates":{"SEK":6.8682}}'

REST API'den bugünkü en güncel döviz kuru bilgilerini içeren yanıtımızı aldık. Sonraki bölümde, kullanıcı için alakalı bir yanıt oluşturabilmesi için bu bilgileri modele geri göndereceğiz.

10. Yanıt oluşturun

Son olarak, işlev yanıtını bir sonraki konuşma sırasında modele geri vererek 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ı modele geri aktarıldıktan sonra, 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öster

Bu noktada Python kodunuzu Cloud Run hizmeti, Cloud Functions işlevi veya başka bir Cloud hizmeti kullanarak 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.

Nihai çözümümüz için kod örneğinin tamamını 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 modele iki istek kullandık: Bir istek işlev çağrısı oluşturma, diğeri ise işlev yanıtını döndürme isteği. Bunun, Gemini ile işlev çağrılarını ve işlev yanıtlarını işlemenin yalnızca bir yöntemi olduğunu unutmayın. Sorgunuzla ilgili daha fazla bilgi almak için ek işlev çağrıları yapabilir veya işlev çağrısını sohbet ve eşzamansız yöntemlerle kullanabilirsiniz.

Daha fazla kod örneği için Gemini'da işlev çağırmayla ilgili örnek not defterine göz atın.

12. Tebrikler

Gemini'daki işlev çağrısından yararlanarak Vertex AI Gemini API ve Python ile birlikte çalışan bir üretken yapay zeka ardışık düzenini başarıyla derlediniz. Kullanıcılar döviz kurlarını sorabilir. Sistem, harici bir API'den en son verileri alıp bir yanıtla yanıt verir.

Gemini'daki işlev çağrısı, son kullanıcıdan gelen bir istem üzerine uygun işlevi seçme, istemden parametreleri çıkarma ve harici API çağrısı yapmanız için yapılandırılmış bir veri nesnesi döndürme işlemlerini yapar.

Gemini'daki işlev çağrısının tasarımı, parametreleri belirleyici bir şekilde çıkarmak için size en iyi özellikleri sunmayı amaçlar. Aynı zamanda, özetleme ve içerik üretimini üretken modele bırakır. Ardışık düzeninizdeki diğer API'leri ve istemleri deneyebilir, Vertex AI Gemini API ile ilgili diğer işlevleri keşfedebilirsiniz.

API Arayüzü

Temizleme

Bu codelab'de kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek amacıyla aşağıdaki temizleme işlemini yapabilirsiniz:

  • Gereksiz Google Cloud ücretlerinden kaçınmak için, ihtiyacınız yoksa projenizi silmek üzere Google Cloud Console'u kullanın.
  • Vertex AI için API'leri devre dışı bırakmak istiyorsanız Vertex AI API Service Details (Vertex AI API Hizmeti Ayrıntıları sayfasına) gidip API'yi devre dışı bırak'ı tıklayıp 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:

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.