Eğitim: Gemini API'yi kullanmaya başlama


Google Yapay Zeka'da görüntüle Google Colab'de çalıştır Kaynağı GitHub'da görüntüleyin

Bu hızlı başlangıç kılavuzunda, Gemini API için Python SDK'nın nasıl kullanılacağı gösterilmektedir. Bu sayede Google'ın Gemini büyük dil modellerine erişebilirsiniz. Bu hızlı başlangıç kılavuzunda şunları öğreneceksiniz:

  1. Gemini'ı kullanmak için geliştirme ortamınızı ve API erişiminizi ayarlayın.
  2. Metin girişlerinden metin yanıtları oluşturun.
  3. Çok modlu girişlerden (metin ve resimler) metin yanıtları oluşturun.
  4. Çok dönüşlü görüşmeler (sohbet) için Gemini'ı kullanın.
  5. Büyük dil modelleri için yerleştirmeleri kullanın.

Ön koşullar

Bu hızlı başlangıç kılavuzunu, not defterini doğrudan tarayıcıda çalıştıran ve ek ortam yapılandırması gerektirmeyen Google Colab'de çalıştırabilirsiniz.

Alternatif olarak, bu hızlı başlangıç kılavuzunu yerel olarak tamamlamak için geliştirme ortamınızın aşağıdaki gereksinimleri karşıladığından emin olun:

  • Python 3.9 ve üzeri
  • Not defterini çalıştırmak için jupyter yüklemesi.

Kurulum

Python SDK'yı yükleme

Gemini API için Python SDK'sı google-generativeai paketinde yer alır. Pip kullanarak bağımlılığı yükleyin:

pip install -q -U google-generativeai

Paketleri içe aktar

Gerekli paketleri içe aktarın.

import pathlib
import textwrap

import google.generativeai as genai

from IPython.display import display
from IPython.display import Markdown


def to_markdown(text):
  text = text.replace('•', '  *')
  return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))
# Used to securely store your API key
from google.colab import userdata

API anahtarınızı ayarlama

Gemini API'yi kullanabilmek için önce bir API anahtarı edinmeniz gerekir. Anahtarınız yoksa Google AI Studio'da tek tıklamayla oluşturun.

API anahtarı alma

Colab'de, anahtarı sol paneldeki "🔑" simgesinin altında gizli anahtar yöneticisine ekleyin. GOOGLE_API_KEY adını verin.

API anahtarınızı aldıktan sonra SDK'ya iletin. Bunu iki şekilde yapabilirsiniz:

  • Anahtarı, GOOGLE_API_KEY ortam değişkenine yerleştirin (SDK otomatik olarak oradan alır).
  • Anahtarı genai.configure(api_key=...) adlı cihaza verin
# Or use `os.getenv('GOOGLE_API_KEY')` to fetch an environment variable.
GOOGLE_API_KEY=userdata.get('GOOGLE_API_KEY')

genai.configure(api_key=GOOGLE_API_KEY)

Modelleri listeleme

Artık Gemini API'yi çağırmaya hazırsınız. Kullanılabilir Gemini modellerini görmek için list_models öğesini kullanın:

  • gemini-1.5-flash: en hızlı çok modlu modelimiz
  • gemini-1.5-pro: En yetenekli ve akıllı çok modlu modelimiz
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

Metin girişlerinden metin oluşturma

Yalnızca metin içeren istemler için Gemini 1.5 veya Gemini 1.0 Pro modelini kullanın:

model = genai.GenerativeModel('gemini-1.5-flash')

generate_content yöntemi, temel modelin neyi desteklediğine bağlı olarak çok yönlü sohbet ve çok modlu giriş gibi çeşitli kullanım durumlarını karşılayabilir. Mevcut modeller yalnızca metin ve resimleri giriş, çıkış olarak ise metin destekler.

En basit durumda, GenerativeModel.generate_content yöntemine bir istem dizesi aktarabilirsiniz:

%%time
response = model.generate_content("What is the meaning of life?")
CPU times: user 110 ms, sys: 12.3 ms, total: 123 ms
Wall time: 8.25 s

Bazı durumlarda yalnızca response.text erişimcisine ihtiyacınız vardır. Biçimlendirilmiş Markdown metnini görüntülemek için to_markdown işlevini kullanın:

to_markdown(response.text)

Yaşam amacının ne olduğu sorusu farklı yüzyıllar, kültürler ve kıtalar genelinde insanların kafasını karıştırdı. Tüm dünyada kabul gören bir yanıt olmasa da birçok fikir ortaya çıkmıştır ve bu sorunun yanıtı genellikle bireysel fikirlere, inançlara ve yaşam deneyimlerine bağlıdır.

  1. Mutluluk ve Mutluluk: Çoğu kişi, yaşam hedefinin kişisel mutluluğa ve dengeye ulaşmak olduğuna inanır. Bu, neşe veren aktiviteler bulmayı, önemli bağlantılar kurmayı, kişinin fiziksel ve zihinsel sağlığını korumayı ve kişisel hedefleri ile ilgi alanlarını sürdürmeyi içerebilir.

  2. Anlamlı Katkı: Bazıları, hayatın amacının dünyaya anlamlı bir katkı yapmak olduğuna inanır. Bu, başkalarına fayda sağlayan bir mesleğin peşinden gitmeyi, gönüllü olarak veya hayır işleriyle uğraşmayı, sanat veya edebiyat üretmeyi ya da icat etmeyi içerebilir.

  3. Kendini gerçekleştirme ve kişisel gelişim: Kendini gerçekleştirme ve kişisel gelişim, hayattaki bir başka yaygın hedeftir. Bu durum yeni beceriler öğrenmeyi, sınırları zorlamayı, kişisel engellerle yüzleşmeyi ve bir kişi olarak gelişmeyi içerebilir.

  4. Etik ve Ahlaksal Davranış: Bazıları hayatın amacının etik ve ahlaki olarak hareket etmek olduğuna inanır. Bu, kişinin ahlaki ilkelerine bağlı kalmayı, zor zamanlarda bile doğru olanı yapmayı ve dünyayı daha iyi bir yer haline getirmeye çalışmayı içerebilir.

  5. Ruhsal Mutluluk: Bazı kişiler için yaşam amacı manevi veya dini inançlarla bağlantılıdır. Bunun için daha güçlü bir bağ kurmak, dini ritüeller uygulamak veya manevi öğretileri uygulamak gerekebilir.

  6. Hayatı Dolu Dolu Bir Deneyim: Bazı kişiler, yaşamın amacının sunulan her şeyi deneyimlemek olduğuna inanır. Bu da seyahat etmeyi, yeni şeyler denemeyi, risk almayı ve yeni insanlarla tanışmayı içerebilir.

  7. Eskiler ve Etki: Bazılarıysa hayatın amacının kalıcı bir iz bırakmak ve dünya üzerinde etki bırakmak olduğuna inanır. Bu, kayda değer bir şey yapmayı, katkılarından dolayı hatırlanmayı veya başkalarına ilham vermeyi ve onları motive etmeyi içerebilir.

  8. Dengeli ve Uyumu Bulma: Bazı kişiler için hayatın amacı, hayatlarının her alanında denge ve uyum bulmaktır. Bu durum; kişisel, mesleki ve sosyal yükümlülükleri yerine getirmeyi, iç huzuru ve mutluluğu amaçlamayı ve kişinin değerleri ve inançlarına uygun bir hayat sürmeyi içerebilir.

Sonuç olarak hayatın anlamı kişisel bir yolculuktur ve farklı kişiler deneyimleri, düşünceleri ve çevrelerindeki dünyayla etkileşimleri yoluyla kendi benzersiz amaçlarını keşfedebilirler.

API bir sonuç döndüremediyse istemle ilgili güvenlik endişeleri nedeniyle engellenip engellenmediğini görmek için GenerateContentResponse.prompt_feedback adresini kullanın.

response.prompt_feedback
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}

Gemini, tek bir istem için birden fazla olası yanıt oluşturabilir. Bu olası yanıtlara candidates adı verilir. Bunları inceleyerek en uygun yanıtı yanıt olarak seçebilirsiniz.

GenerateContentResponse.candidates ile yanıt adaylarını görüntüleyin:

response.candidates
[content {
  parts {
    text: "The query of life\'s purpose has perplexed people across centuries, cultures, and continents. While there is no universally recognized response, many ideas have been put forth, and the response is frequently dependent on individual ideas, beliefs, and life experiences.\n\n1. **Happiness and Well-being:** Many individuals believe that the goal of life is to attain personal happiness and well-being. This might entail locating pursuits that provide joy, establishing significant connections, caring for one\'s physical and mental health, and pursuing personal goals and interests.\n\n2. **Meaningful Contribution:** Some believe that the purpose of life is to make a meaningful contribution to the world. This might entail pursuing a profession that benefits others, engaging in volunteer or charitable activities, generating art or literature, or inventing.\n\n3. **Self-realization and Personal Growth:** The pursuit of self-realization and personal development is another common goal in life. This might entail learning new skills, pushing one\'s boundaries, confronting personal obstacles, and evolving as a person.\n\n4. **Ethical and Moral Behavior:** Some believe that the goal of life is to act ethically and morally. This might entail adhering to one\'s moral principles, doing the right thing even when it is difficult, and attempting to make the world a better place.\n\n5. **Spiritual Fulfillment:** For some, the purpose of life is connected to spiritual or religious beliefs. This might entail seeking a connection with a higher power, practicing religious rituals, or following spiritual teachings.\n\n6. **Experiencing Life to the Fullest:** Some individuals believe that the goal of life is to experience all that it has to offer. This might entail traveling, trying new things, taking risks, and embracing new encounters.\n\n7. **Legacy and Impact:** Others believe that the purpose of life is to leave a lasting legacy and impact on the world. This might entail accomplishing something noteworthy, being remembered for one\'s contributions, or inspiring and motivating others.\n\n8. **Finding Balance and Harmony:** For some, the purpose of life is to find balance and harmony in all aspects of their lives. This might entail juggling personal, professional, and social obligations, seeking inner peace and contentment, and living a life that is in accordance with one\'s values and beliefs.\n\nUltimately, the meaning of life is a personal journey, and different individuals may discover their own unique purpose through their experiences, reflections, and interactions with the world around them."
  }
  role: "model"
}
finish_reason: STOP
index: 0
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}
]

Varsayılan olarak model, oluşturma işleminin tamamını tamamladıktan sonra bir yanıt döndürür. Ayrıca, yanıtı oluştururken de akış olarak ayarlayabilirsiniz. Model, oluşturulur oluşturulmaz yanıt parçalarını döndürür.

Yanıtları canlı yayınlamak için GenerativeModel.generate_content(..., stream=True) bağlantısını kullanın.

%%time
response = model.generate_content("What is the meaning of life?", stream=True)
CPU times: user 102 ms, sys: 25.1 ms, total: 128 ms
Wall time: 7.94 s
for chunk in response:
  print(chunk.text)
  print("_"*80)
The query of life's purpose has perplexed people across centuries, cultures, and
________________________________________________________________________________
 continents. While there is no universally recognized response, many ideas have been put forth, and the response is frequently dependent on individual ideas, beliefs, and life experiences
________________________________________________________________________________
.

1. **Happiness and Well-being:** Many individuals believe that the goal of life is to attain personal happiness and well-being. This might entail locating pursuits that provide joy, establishing significant connections, caring for one's physical and mental health, and pursuing personal goals and aspirations.

2. **Meaning
________________________________________________________________________________
ful Contribution:** Some believe that the purpose of life is to make a meaningful contribution to the world. This might entail pursuing a profession that benefits others, engaging in volunteer or charitable activities, generating art or literature, or inventing.

3. **Self-realization and Personal Growth:** The pursuit of self-realization and personal development is another common goal in life. This might entail learning new skills, exploring one's interests and abilities, overcoming obstacles, and becoming the best version of oneself.

4. **Connection and Relationships:** For many individuals, the purpose of life is found in their relationships with others. This might entail building
________________________________________________________________________________
 strong bonds with family and friends, fostering a sense of community, and contributing to the well-being of those around them.

5. **Spiritual Fulfillment:** For those with religious or spiritual beliefs, the purpose of life may be centered on seeking spiritual fulfillment or enlightenment. This might entail following religious teachings, engaging in spiritual practices, or seeking a deeper understanding of the divine.

6. **Experiencing the Journey:** Some believe that the purpose of life is simply to experience the journey itself, with all its joys and sorrows. This perspective emphasizes embracing the present moment, appreciating life's experiences, and finding meaning in the act of living itself.

7. **Legacy and Impact:** For others, the goal of life is to leave a lasting legacy or impact on the world. This might entail making a significant contribution to a particular field, leaving a positive mark on future generations, or creating something that will be remembered and cherished long after one's lifetime.

Ultimately, the meaning of life is a personal and subjective question, and there is no single, universally accepted answer. It is about discovering what brings you fulfillment, purpose, and meaning in your own life, and living in accordance with those values.
________________________________________________________________________________

Akış sırasında, tüm yanıt parçalarında iterasyon yani yineleme gerçekleştirmeden bazı yanıt özellikleri kullanılamaz. Bu, aşağıda gösterilmiştir:

response = model.generate_content("What is the meaning of life?", stream=True)

prompt_feedback özelliği şu şekilde çalışır:

response.prompt_feedback
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}

Ancak text gibi özellikler şunları yapmaz:

try:
  response.text
except Exception as e:
  print(f'{type(e).__name__}: {e}')
IncompleteIterationError: Please let the response complete iteration before accessing the final accumulated
attributes (or call `response.resolve()`)

Resim ve metin girişlerinden metin oluşturma

Gemini, çok modlu girişleri (Gemini 1.5 modelleri ve Gemini 1.0 Pro Vision) işleyebilen çeşitli modeller sunar. Böylece hem metin hem de resim girebilirsiniz. İstemler için resim gereksinimlerini incelediğinizden emin olun.

İstem girişi hem metin hem de resim içeriyorsa metin çıkışı oluşturmak için GenerativeModel.generate_content yöntemiyle bir Gemini 1.5 modelini veya Gemini 1.0 Pro Vision modelini kullanın:

Bir resim ekleyelim:

curl -o image.jpg https://t0.gstatic.com/licensed-image?q=tbn:ANd9GcQ_Kevbk21QBRy-PgB4kQpS79brbmmEG7m3VOTShAn4PecDU5H5UxrJxE3Dw1JiaG17V88QIol19-3TM2wCHw
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  405k  100  405k    0     0  6982k      0 --:--:-- --:--:-- --:--:-- 7106k
import PIL.Image

img = PIL.Image.open('image.jpg')
img

png

Gemini 1.5 modelini kullanın ve resmi generate_content ile modele iletin.

model = genai.GenerativeModel('gemini-1.5-flash')
response = model.generate_content(img)

to_markdown(response.text)

Kahverengi pirinç, kavrulmuş brokoli ve biberli tavuk Teriyaki Yemek Hazırlama Kaseleri.

Bir istemde hem metin hem de resim sağlamak için dizeleri ve resimleri içeren bir liste iletin:

response = model.generate_content(["Write a short, engaging blog post based on this picture. It should include a description of the meal in the photo and talk about my journey meal prepping.", img], stream=True)
response.resolve()
to_markdown(response.text)

Yemek hazırlama, zamandan ve paradan tasarruf etmenin yanı sıra daha sağlıklı beslenmenize de yardımcı olabilir. Bu öğün, önceden kolayca hazırlayabileceğiniz sağlıklı ve lezzetli bir yemeğin mükemmel bir örneği.

Bu yemekte kahverengi pirinç, kavrulmuş sebze ve teriyaki soslu tavuk kullanılır. Kahverengi pirinç, lif ve besin değeri yüksek tam tahıllı bir pirinçtir. Kavrulmuş sebzeler günlük vitamin ve mineral dozunuzu almanın mükemmel bir yoludur. Teriyaki adlı tavuk, çok lezzetli bir protein kaynağıdır.

Bu yemeği önceden hazırlamak kolaydır. Kahverengi pirinci ve sebzeleri pişirip teriyaki soslu tavuk pişirin. Sonra yemeği ayrı kaplara bölüp buzdolabında saklayın. Yemeye hazır olduğunuzda bir kabı alın ve ısıtın.

Bu yemek, sağlıklı ve lezzetli bir yemek arayan yoğun kişiler için mükemmel bir seçenektir. Aynı zamanda kilo vermeye veya sağlıklı bir kiloyu korumaya çalışan kişiler için de mükemmel bir yemektir.

Önceden kolayca hazırlanabilen sağlıklı ve lezzetli bir yemek arıyorsanız bu yemek mükemmel bir seçenektir. Hemen deneyin!

Sohbetler

Gemini, birden fazla aşamada serbest biçimli görüşmeler yapmanıza olanak tanır. ChatSession sınıfı, ileti dizisinin durumunu yöneterek işlemi basitleştirir. Bu nedenle, generate_content sınıfının aksine, sohbet geçmişini liste olarak depolamanız gerekmez.

Sohbeti ilk kullanıma hazırlayın:

model = genai.GenerativeModel('gemini-1.5-flash')
chat = model.start_chat(history=[])
chat
<google.generativeai.generative_models.ChatSession at 0x7b7b68250100>

ChatSession.send_message yöntemi, GenerativeModel.generate_content ile aynı GenerateContentResponse türünü döndürür. Ayrıca, iletinizi ve yanıtını sohbet geçmişine de ekler:

response = chat.send_message("In one sentence, explain how a computer works to a young child.")
to_markdown(response.text)

Bilgisayar, talimatlarımızı anlayıp uygulayabilen, işimiz konusunda bize yardımcı olabilen, hatta bizimle oyun oynayabilen çok akıllı bir makineye benzer.

chat.history
[parts {
   text: "In one sentence, explain how a computer works to a young child."
 }
 role: "user",
 parts {
   text: "A computer is like a very smart machine that can understand and follow our instructions, help us with our work, and even play games with us!"
 }
 role: "model"]

Görüşmeyi sürdürmek için mesaj göndermeye devam edebilirsiniz. Sohbeti canlı yayınlamak için stream=True bağımsız değişkenini kullanın:

response = chat.send_message("Okay, how about a more detailed explanation to a high schooler?", stream=True)

for chunk in response:
  print(chunk.text)
  print("_"*80)
A computer works by following instructions, called a program, which tells it what to
________________________________________________________________________________
 do. These instructions are written in a special language that the computer can understand, and they are stored in the computer's memory. The computer's processor
________________________________________________________________________________
, or CPU, reads the instructions from memory and carries them out, performing calculations and making decisions based on the program's logic. The results of these calculations and decisions are then displayed on the computer's screen or stored in memory for later use.

To give you a simple analogy, imagine a computer as a
________________________________________________________________________________
 chef following a recipe. The recipe is like the program, and the chef's actions are like the instructions the computer follows. The chef reads the recipe (the program) and performs actions like gathering ingredients (fetching data from memory), mixing them together (performing calculations), and cooking them (processing data). The final dish (the output) is then presented on a plate (the computer screen).

In summary, a computer works by executing a series of instructions, stored in its memory, to perform calculations, make decisions, and display or store the results.
________________________________________________________________________________

genai.protos.Content nesneleri, her biri bir metin (dize) veya satır içi_veri (genai.protos.Blob) içeren genai.protos.Part nesnelerinin bir listesini içerir. Burada blob, ikili veriler ve bir mime_type içerir. Sohbet geçmişi, ChatSession.history içinde genai.protos.Content nesnelerinin bir listesi olarak sunulur:

for message in chat.history:
  display(to_markdown(f'**{message.role}**: {message.parts[0].text}'))

user: Küçük bir çocuk için bilgisayarın nasıl çalıştığını tek cümleyle açıklayın.

model: Bilgisayar, talimatlarımızı anlayıp uygulayabilen, işimiz konusunda bize yardımcı olabilen, hatta bizimle oyun oynayabilen çok akıllı bir makine gibidir!

user: Peki, bir lise öğrencisi için daha ayrıntılı bir açıklamaya ne dersiniz?

model: Bilgisayar, program olarak adlandırılan talimatları uygulayarak çalışır ve ona ne yapması gerektiğini söyler. Bu talimatlar bilgisayarın anlayabileceği özel bir dilde yazılmıştır ve bilgisayarın belleğinde saklanır. Bilgisayarın işlemcisi veya CPU'su, bellekteki talimatları okur ve bunları yürüterek hesaplamalar yapar ve programın mantığına göre kararlar verir. Bu hesaplamaların ve kararların sonuçları daha sonra bilgisayar ekranında görüntülenir veya daha sonra kullanılmak üzere bellekte saklanır.

Basit bir benzetme yapacak şekilde, bir bilgisayarı yemek tarifi uygulayan bir şef olarak düşünün. Tarif, program gibidir ve şefin eylemleri, bilgisayarın izlediği talimatlar gibidir. Şef tarifi (program) okur ve malzemeleri toplama (hafızadan veri getirme), karıştırma (hesaplamalar) ve pişirme (veri işleme) gibi işlemler gerçekleştirir. Daha sonra, son yemek (çıktı) bir tabak üzerinde (bilgisayar ekranı) sunulur.

Özetle, bir bilgisayar hesaplamalar yapmak, kararlar almak ve sonuçları görüntülemek ya da depolamak için belleğinde saklanan bir dizi talimatı yürüterek çalışır.

Jetonları say

Büyük dil modellerinde bir bağlam penceresi bulunur ve bağlam uzunluğu genellikle jeton sayısına göre ölçülür. Gemini API ile herhangi bir genai.protos.Content nesnesi başına jeton sayısını belirleyebilirsiniz. En basit durumda, bir sorgu dizesini GenerativeModel.count_tokens yöntemine aşağıdaki gibi aktarabilirsiniz:

model.count_tokens("What is the meaning of life?")
total_tokens: 7

Benzer şekilde, ChatSession için token_count adresini kontrol edebilirsiniz:

model.count_tokens(chat.history)
total_tokens: 501

Yerleştirmeleri kullanma

Yerleştirme, bir dizideki kayan nokta sayıları listesi olarak bilgiyi temsil etmek için kullanılan bir tekniktir. Gemini ile metinleri (kelimeler, cümleler ve metin blokları) vektörleştirilmiş biçimde gösterebilir, böylece yerleştirilmiş öğeleri karşılaştırmayı ve ayırt etmeyi daha kolay hale getirebilirsiniz. Örneğin, benzer konuyu veya duyguyu paylaşan iki metin, kosinüs benzerliği gibi matematiksel karşılaştırma teknikleriyle tanımlanabilecek benzer yerleştirilmiş öğelere sahip olmalıdır. Yerleştirmeleri nasıl ve neden kullanmanız gerektiği hakkında daha fazla bilgi için Yerleştirme kılavuzuna bakın.

Yerleştirme oluşturmak için embed_content yöntemini kullanın. Yöntem aşağıdaki görevler için yerleştirmeyi işler (task_type):

Görev Türü Açıklama
RETRIEVAL_QUERY Belirtilen metnin, arama/alma ayarında sorgu olduğunu belirtir.
RETRIEVAL_DOCUMENT Belirtilen metnin, arama/alma ayarında doküman olduğunu belirtir. Bu görev türünü kullanmak için title gerekir.
SEMANTIC_SIMILARITY Belirtilen metnin Semantik Metin Benzerliği (STS) için kullanılacağını belirtir.
SINIFLANDIRMA Yerleştirmelerin sınıflandırma için kullanılacağını belirtir.
KÜMELEME Yerleştirmelerin kümeleme için kullanılacağını belirtir.

Aşağıda, doküman almak üzere tek bir dize için yerleştirme oluşturulur:

result = genai.embed_content(
    model="models/embedding-001",
    content="What is the meaning of life?",
    task_type="retrieval_document",
    title="Embedding of single string")

# 1 input > 1 vector output
print(str(result['embedding'])[:50], '... TRIMMED]')
[-0.003216741, -0.013358698, -0.017649598, -0.0091 ... TRIMMED]

Dize gruplarını işlemek için content ürününde dize listesi iletin:

result = genai.embed_content(
    model="models/embedding-001",
    content=[
      'What is the meaning of life?',
      'How much wood would a woodchuck chuck?',
      'How does the brain work?'],
    task_type="retrieval_document",
    title="Embedding of list of strings")

# A list of inputs > A list of vectors output
for v in result['embedding']:
  print(str(v)[:50], '... TRIMMED ...')
[0.0040260437, 0.004124458, -0.014209415, -0.00183 ... TRIMMED ...
[-0.004049845, -0.0075574904, -0.0073463684, -0.03 ... TRIMMED ...
[0.025310587, -0.0080734305, -0.029902633, 0.01160 ... TRIMMED ...

genai.embed_content işlevi basit dizeleri veya dize listelerini kabul etse de aslında genai.protos.Content türü (GenerativeModel.generate_content gibi) etrafında oluşturulmuştur. genai.protos.Content nesneleri API'deki birincil iletişim birimleridir.

genai.protos.Content nesnesi çok modlu olsa da embed_content yöntemi yalnızca metin yerleştirmeyi destekler. Bu tasarım, API'ye çok modlu yerleştirmelere genişleme olasılığı kazandırır.

response.candidates[0].content
parts {
  text: "A computer works by following instructions, called a program, which tells it what to do. These instructions are written in a special language that the computer can understand, and they are stored in the computer\'s memory. The computer\'s processor, or CPU, reads the instructions from memory and carries them out, performing calculations and making decisions based on the program\'s logic. The results of these calculations and decisions are then displayed on the computer\'s screen or stored in memory for later use.\n\nTo give you a simple analogy, imagine a computer as a chef following a recipe. The recipe is like the program, and the chef\'s actions are like the instructions the computer follows. The chef reads the recipe (the program) and performs actions like gathering ingredients (fetching data from memory), mixing them together (performing calculations), and cooking them (processing data). The final dish (the output) is then presented on a plate (the computer screen).\n\nIn summary, a computer works by executing a series of instructions, stored in its memory, to perform calculations, make decisions, and display or store the results."
}
role: "model"
result = genai.embed_content(
    model = 'models/embedding-001',
    content = response.candidates[0].content)

# 1 input > 1 vector output
print(str(result['embedding'])[:50], '... TRIMMED ...')
[-0.013921871, -0.03504407, -0.0051786783, 0.03113 ... TRIMMED ...

Benzer şekilde, sohbet geçmişinde genai.protos.Content nesnelerinin bir listesi bulunur. Bu listeyi doğrudan embed_content işlevine iletebilirsiniz:

chat.history
[parts {
   text: "In one sentence, explain how a computer works to a young child."
 }
 role: "user",
 parts {
   text: "A computer is like a very smart machine that can understand and follow our instructions, help us with our work, and even play games with us!"
 }
 role: "model",
 parts {
   text: "Okay, how about a more detailed explanation to a high schooler?"
 }
 role: "user",
 parts {
   text: "A computer works by following instructions, called a program, which tells it what to do. These instructions are written in a special language that the computer can understand, and they are stored in the computer\'s memory. The computer\'s processor, or CPU, reads the instructions from memory and carries them out, performing calculations and making decisions based on the program\'s logic. The results of these calculations and decisions are then displayed on the computer\'s screen or stored in memory for later use.\n\nTo give you a simple analogy, imagine a computer as a chef following a recipe. The recipe is like the program, and the chef\'s actions are like the instructions the computer follows. The chef reads the recipe (the program) and performs actions like gathering ingredients (fetching data from memory), mixing them together (performing calculations), and cooking them (processing data). The final dish (the output) is then presented on a plate (the computer screen).\n\nIn summary, a computer works by executing a series of instructions, stored in its memory, to perform calculations, make decisions, and display or store the results."
 }
 role: "model"]
result = genai.embed_content(
    model = 'models/embedding-001',
    content = chat.history)

# 1 input > 1 vector output
for i,v in enumerate(result['embedding']):
  print(str(v)[:50], '... TRIMMED...')
[-0.014632266, -0.042202696, -0.015757175, 0.01548 ... TRIMMED...
[-0.010979066, -0.024494737, 0.0092659835, 0.00803 ... TRIMMED...
[-0.010055617, -0.07208932, -0.00011750793, -0.023 ... TRIMMED...
[-0.013921871, -0.03504407, -0.0051786783, 0.03113 ... TRIMMED...

Gelişmiş kullanım alanları

Aşağıdaki bölümlerde, Gemini API için Python SDK'nın gelişmiş kullanım alanları ve alt düzey ayrıntıları ele alınmaktadır.

Güvenlik ayarları

safety_settings bağımsız değişkeni, modelin hem istemlerde hem de yanıtlarda neleri engellediğini ve nelere izin verdiğini yapılandırmanıza olanak tanır. Güvenlik ayarları, varsayılan olarak orta ve/veya güvenli olmayan içerik olma olasılığı yüksek olan içerikleri tüm boyutlarda engeller. Güvenlik ayarları hakkında daha fazla bilgi edinin.

Şüpheli bir istem girip modeli varsayılan güvenlik ayarlarıyla çalıştırırsanız hiçbir öneri döndürmez:

response = model.generate_content('[Questionable prompt here]')
response.candidates
[content {
  parts {
    text: "I\'m sorry, but this prompt involves a sensitive topic and I\'m not allowed to generate responses that are potentially harmful or inappropriate."
  }
  role: "model"
}
finish_reason: STOP
index: 0
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}
]

prompt_feedback, istemi hangi güvenlik filtresinin engellediğini size bildirir:

response.prompt_feedback
safety_ratings {
  category: HARM_CATEGORY_SEXUALLY_EXPLICIT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HATE_SPEECH
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_HARASSMENT
  probability: NEGLIGIBLE
}
safety_ratings {
  category: HARM_CATEGORY_DANGEROUS_CONTENT
  probability: NEGLIGIBLE
}

Şimdi, yeni yapılandırılan güvenlik ayarlarını kullanarak aynı istemi modele sağlarsanız yanıt alabilirsiniz.

response = model.generate_content('[Questionable prompt here]',
                                  safety_settings={'HARASSMENT':'block_none'})
response.text

Ayrıca, istemin başarılı olup her bir adayın güvenlik kontrollerinde başarısız olması ihtimaline karşı her adayın kendi safety_ratings sahibi olduğunu unutmayın.

Mesajları kodlama

Önceki bölümlerde, API'ye istem göndermeyi kolaylaştırmak için SDK kullanılıyordu. Bu bölümde, önceki örnekle tam olarak yazılmış bir eşdeğeri sunulmaktadır. Bu sayede, SDK'nın mesajları nasıl kodladığıyla ilgili alt düzey ayrıntıları daha iyi anlayabilirsiniz.

google.ai.generativelanguage istemci kitaplığı, Python SDK'nın temelini oluşturur:

SDK, mesajınızı her biri aşağıdakilerden birini içeren genai.protos.Part nesnelerinin listesini içeren bir genai.protos.Content nesnesine dönüştürmeye çalışır:

  1. a text (dize)
  2. inline_data (genai.protos.Blob); burada bir blob, data ikili programı ve mime_type içerir.

Ayrıca, bu sınıflardan herhangi birini eşdeğer bir sözlük olarak geçirebilirsiniz.

Dolayısıyla, önceki örnekle tam olarak yazılmış eşdeğeri şudur:

model = genai.GenerativeModel('gemini-1.5-flash')
response = model.generate_content(
    genai.protos.Content(
        parts = [
            genai.protos.Part(text="Write a short, engaging blog post based on this picture."),
            genai.protos.Part(
                inline_data=genai.protos.Blob(
                    mime_type='image/jpeg',
                    data=pathlib.Path('image.jpg').read_bytes()
                )
            ),
        ],
    ),
    stream=True)
response.resolve()

to_markdown(response.text[:100] + "... [TRIMMED] ...")

Yemek hazırlama, zamandan ve paradan tasarruf etmenin yanı sıra daha sağlıklı beslenmenize de yardımcı olabilir. Oluşturan: ... [TRIMMED] ...

Çok dönüşlü görüşmeler

Daha önce gösterilen genai.ChatSession sınıfı birçok kullanım alanını ele alabilir ancak bazı varsayımlarda bulunabilir. Kullanım alanınız bu sohbet uygulamasına uymuyorsa genai.ChatSession öğesinin, GenerativeModel.generate_content için bir sarmalayıcı olduğunu hatırlatmak isteriz. Tek isteklerin yanı sıra çok dönüşlü görüşmeleri de işleyebilir.

Tek tek iletiler, önceki bölümlerde görüldüğü gibi genai.protos.Content nesneleri veya uyumlu sözlüklerdir. Sözlük olarak mesaj için role ve parts anahtarları gerekir. Bir ileti dizisindeki role, istemleri sağlayan user veya yanıtları sağlayan model olabilir.

genai.protos.Content nesne içeren bir liste iletin. Bu liste çok dönüşlü sohbet olarak değerlendirilir:

model = genai.GenerativeModel('gemini-1.5-flash')

messages = [
    {'role':'user',
     'parts': ["Briefly explain how a computer works to a young child."]}
]
response = model.generate_content(messages)

to_markdown(response.text)

Bir bilgisayarı, size birçok konuda yardım edebilecek gerçekten akıllı bir arkadaş olarak düşünün. Nasıl düşünüp öğrenecek bir beyniniz olduğu gibi, bilgisayarın da işlemci adı verilen bir beyni vardır. Bilgisayarın patronu gibidir, ona ne yapması gerektiğini söyler.

Bilgisayarın içinde bellek adı verilen, büyük bir saklama kutusu gibi özel bir yer vardır. Uygulama, oyun açma veya video oynatma gibi yapmasını istediğiniz her şeyi hatırlar.

Klavyedeki düğmelere bastığınızda veya fare ile ekrandaki öğeleri tıkladığınızda, iletileri bilgisayara göndermiş olursunuz. Bu mesajlar, kablo adı verilen özel kablolardan işlemciye iletilir.

İşlemci, mesajları okur ve bilgisayara ne yapması gerektiğini söyler. Programları açabilir, size resimler gösterebilir, hatta sizin için müzik çalabilir.

Ekranda gördüğünüz her şey grafik kartı tarafından oluşturulmuştur. Bu, bilgisayarın içindeki sihirli bir sanatçı gibidir. İşlemcinin talimatlarını alıp bunları renkli resimlere ve videolara dönüştürür.

En sevdiğiniz oyunları, videoları veya resimleri kaydetmek için, bilgisayarda sabit disk adı verilen özel bir depolama alanı kullanılır. Bilgisayarın tüm değerli öğelerinizi güvende tutabildiği dev bir kitaplık gibidir.

Arkadaşlarınızla oyun oynamak veya eğlenceli videolar izlemek için internete bağlanmak istediğinizde ise bilgisayar, internet kabloları veya kablosuz ağ sinyalleri üzerinden mesaj gönderip almak için ağ kartı adı verilen bir öğeyi kullanır.

Böylece, tıpkı beyniniz gibi, bilgisayarın işlemcisi, belleği, grafik kartı, sabit diski ve ağ kartı da birlikte çalışarak bilgisayarınızı harika şeyler yapmanıza yardımcı olabilecek süper akıllı bir arkadaş yapar!

Görüşmeye devam etmek için yanıt ve başka bir mesaj ekleyin.

messages.append({'role':'model',
                 'parts':[response.text]})

messages.append({'role':'user',
                 'parts':["Okay, how about a more detailed explanation to a high school student?"]})

response = model.generate_content(messages)

to_markdown(response.text)

Bilgisayar özünde bir dizi talimatı yerine getirmek üzere programlanabilen bir makinedir. Bilgiyi işlemek, depolamak ve görüntülemek için birlikte çalışan birkaç temel bileşenden oluşur:

1. İşlemci (CPU): - Bilgisayarın beynidir. - Talimatları yürütür ve hesaplamalar yapar. - Gigahertz (GHz) cinsinden ölçülen hız. - Daha fazla GHz genellikle daha hızlı işlem demektir.

2. Bellek (RAM): - İşlenen veriler için geçici depolama. - Program çalışırken talimatları ve verileri saklar. - Gigabayt (GB) cinsinden ölçülür. - Daha fazla GB RAM, daha fazla programın eşzamanlı olarak çalışmasına olanak tanır.

3. Depolama (HDD/SSD): - Veriler için kalıcı depolama alanı. - İşletim sistemini, programları ve kullanıcı dosyalarını depolar. - Gigabayt (GB) veya terabayt (TB) cinsinden ölçülür. - Sabit disk sürücüleri (HDD'ler) geleneksel, daha yavaş ve daha ucuzdur. - Katı hal sürücüleri (SSD'ler) daha yeni, daha hızlı ve daha pahalıdır.

4. Grafik Kartı (GPU): - Görüntüleri işler ve görüntüler. - Oyun, video düzenleme ve grafik yoğun diğer görevler için gereklidir. - Video RAM'i (VRAM) ve saat hızı cinsinden ölçülür.

5. Anakart: - Tüm bileşenleri bağlar. - Güç ve iletişim yolları sağlar.

6. Giriş/Çıkış (G/Ç) Cihazları: - Kullanıcının bilgisayarla etkileşime geçmesine olanak tanır. - Örnekler: klavye, fare, monitör, yazıcı.

7. İşletim Sistemi (OS): - Bilgisayarın kaynaklarını yöneten yazılım. - Kullanıcı arayüzü ve temel işlevler sağlar. - Örnekler: Windows, macOS, Linux.

Bilgisayarınızda bir programı çalıştırdığınızda şunlar gerçekleşir:

  1. Program talimatları, depolama alanından belleğe yüklenir.
  2. İşlemci bellekteki talimatları okur ve bunları tek tek yürütür.
  3. Talimatta hesaplamalar varsa işlemci, bu işlemleri aritmetik mantık birimini (ALU) kullanarak gerçekleştirir.
  4. Talimat veri içeriyorsa işlemci belleğe okur veya yazar.
  5. Hesaplamaların veya veri işlemenin sonuçları bellekte saklanır.
  6. Programın ekranda bir şey göstermesi gerekiyorsa gerekli verileri grafik kartına gönderir.
  7. Grafik kartı verileri işler ve bunları görüntüleyecek monitöre gönderir.

Bu süreç, program görevini tamamlayana veya kullanıcı tarafından sonlandırılıncaya kadar devam eder.

Oluşturma yapılandırması

generation_config bağımsız değişkeni, oluşturma parametrelerini değiştirmenize olanak tanır. Modele gönderdiğiniz her istem, modelin yanıt oluşturma şeklini kontrol eden parametre değerleri içerir.

model = genai.GenerativeModel('gemini-1.5-flash')
response = model.generate_content(
    'Tell me a story about a magic backpack.',
    generation_config=genai.types.GenerationConfig(
        # Only one candidate for now.
        candidate_count=1,
        stop_sequences=['x'],
        max_output_tokens=20,
        temperature=1.0)
)
text = response.text

if response.candidates[0].finish_reason.name == "MAX_TOKENS":
    text += '...'

to_markdown(text)

Bir zamanlar yeşil tepelerle çevrili küçük bir kasabada bir zamanlar...

Sırada ne var?

  • İstem tasarımı, dil modellerinden istenen yanıtı alan istem oluşturma sürecidir. İyi yapılandırılmış istemler yazmak, bir dil modelinden doğru, yüksek kaliteli yanıtlar almanın önemli bir parçasıdır. İstem yazma ile ilgili en iyi uygulamalar hakkında bilgi edinin.
  • Gemini, giriş türleri ve karmaşıklık, sohbet veya diğer diyalog dili görevleri için uygulamalar ve boyut kısıtlamaları gibi farklı kullanım alanlarının ihtiyaçlarını karşılamak için çeşitli model varyasyonları sunuyor. Mevcut Gemini modelleri hakkında bilgi edinin.
  • Gemini, ücret sınırını yükseltme isteğinde bulunma seçenekleri sunar. Gemini-Pro modelleri için hız sınırı, dakikada 60 istektir (BGBG).