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üle

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

  1. Gemini'ı kullanmak için geliştirme ortamınızı ve API erişimini 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ü sohbetler (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, bu 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 koşulları karşıladığından emin olun:

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

Kurulum

Python SDK'sını yükleyin

Gemini API için Python SDK'sı, google-generativeai paketinde bulunur. Bağımlılığı pip kullanarak yükleyin:

pip install -q -U google-generativeai

Paketleri içe aktarma

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ı oluşturun

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

API anahtarı alma

Colab'de, anahtarı sol paneldeki "🔑" bölümünün altına 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, değişkeni otomatik olarak oradan alır).
  • Anahtarı genai.configure(api_key=...) adlı cihaza geçirin
# 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. Mevcut Gemini modellerini görmek için list_models 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şturun

Yalnızca metin içeren istemler için Gemini 1.5 modelini 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 dönüşlü sohbet ve çok modlu giriş gibi çeşitli kullanım alanlarını yönetebilir. Kullanılabilir modeller giriş olarak yalnızca metin ve resimleri, çıkış olarak da metni 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

Basit durumlarda tek ihtiyacınız response.text erişimcisidir. Biçimlendirilmiş Markdown metnini görüntülemek için to_markdown işlevini kullanın:

to_markdown(response.text)

Hayatın amacı sorgulaması yüzyıllar, kültürler ve kıtalar genelinde insanların aklını karıştırdı. Dünya genelinde kabul görmüş bir yanıt olmasa da pek çok fikir ortaya atıldı ve bunun sonucunda ortaya çıkan tepki çoğu zaman bireysel fikirlere, inançlara ve yaşam deneyimlerine dayanıyor.

  1. Mutluluk ve Sağlık: Birçok kişi, hayatın hedefinin kişisel mutluluk ve iyiliğe ulaşmak olduğuna inanır. Bu, keyifli zaman geçirme, önemli bağlantılar kurma, kişinin fiziksel ve zihinsel sağlığıyla ilgilenme ve kişisel hedef ve ilgi alanı peşinde koşma gibi işleri bulmayı içerebilir.

  2. Anlamlı Katkı: Bazıları, hayatın amacının dünyaya anlamlı bir katkı yapmak olduğuna inanır. Başkalarına fayda sağlayan bir mesleğe girmek, gönüllü çalışmalara veya hayır işlerine katılmak, sanat veya edebiyat üretmek ya da icat yapmak bu kapsamda yer alabilir.

  3. Kendini Fark Etme ve Kişisel Gelişim: Kendini gerçekleştirme ve kişisel gelişim arayışı, hayattaki bir diğer yaygın hedeftir. Bu, yeni beceriler edinmeyi, kişinin sınırlarını zorlamayı, kişisel engellerle karşılaşmayı ve birey olarak gelişmeyi içerebilir.

  4. Etik ve Ahlaki Davranış: Bazıları hayatın amacının etik ve ahlaki davranışlarda bulunmak olduğuna inanır. Bu da kişinin ahlaki ilkelerine bağlı kalmayı, zor olsa bile doğru şeyi yapmayı ve dünyayı daha iyi bir yer haline getirmeye çalışmayı içerebilir.

  5. Ruhani İstek: Bazı kişiler için yaşamın amacı manevi veya dini inançlarla bağlantılıdır. Bu da daha yüksek bir güçle bağlantı kurmayı, dini ritüeller gerçekleştirmeyi veya ruhani öğretileri takip etmeyi içerebilir.

  6. Hayatı Dolu Bir Deneyim: Bazı kişiler, yaşamın hedeflerinin, sahip olduğu her şeyi deneyimlemek olduğuna inanıyor. Bunun için seyahat etmek, yeni şeyler denemek, risk almak ve yeni karşılaşmalara kucak açmak gerekebilir.

  7. Eski ve Etki: Bazıları ise hayatın amacının dünyada kalıcı bir miras ve etki bırakmak olduğuna inanıyor. Bu, dikkate değer bir şey başarmayı, kişinin katkılarından dolayı hatırlanmayı veya başkalarına ilham verip onları motive etmeyi içerebilir.

  8. Denge ve Uyumu Bulma: Bazıları için hayatın amacı, hayatlarının her alanında denge ve uyumu bulmaktır. Bu, kişisel, profesyonel ve sosyal yükümlülüklerle bir arada olmayı, içsel huzuru ve mutluluğu sağlamayı ve kişinin değerleri ile inançlarına uygun bir hayatı yaşamayı içerebilir.

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

API sonuç döndüremezse istemle ilgili güvenlik endişeleri nedeniyle API'nin engellenip engellenmediğini görmek için GenerateContentResponse.prompt_feedback aracını 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 üretebilir. Bu olası yanıtlar candidates olarak adlandırılır. Bunları inceleyerek en uygun yanıtı 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 sürecinin tamamını tamamladıktan sonra bir yanıt döndürür. Ayrıca yanıtı oluşturulurken akışla izleyebilirsiniz. Model, yanıt parçalarını oluşturulur oluşturulmaz döndürür.

Yanıtları akış şeklinde sunmak için GenerativeModel.generate_content(..., stream=True) simgesini 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ını yineleme yapana kadar 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 ç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şturun

Gemini, hem metin hem de resim girebilmeniz için çok modlu girişleri (Gemini 1.5 modelleri) işleyebilen çeşitli modeller sunar. İstemler için resim şartlarını incelemeyi unutmayın.

İstem girişi hem metin hem de resim içerdiğinde metin çıkışı oluşturmak için GenerativeModel.generate_content yöntemiyle Gemini 1.5 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ç, kızarmış brokoli ve dolma biberiyle birlikte tavuklu Teriyaki Yemek Hazırlama Kasesi.

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 harika bir yoludur ve daha sağlıklı beslenmenize de yardımcı olur. Bu yemek, önceden kolayca hazırlanabilen sağlıklı ve lezzetli bir yemeğin mükemmel bir örneğidir.

Bu yemekte kahverengi pirinç, kızarmış sebzeler ve teriyaki soslu tavuk yer alır. Kahverengi pirinç, lif ve besin değeri yüksek olan bir tahıl türüdür. Sebze kavurması, günlük vitamin ve mineral dozunuzu almanın mükemmel bir yoludur. Tavuk teriyaki ise lezzetli ve yağsız bir protein kaynağıdır.

Bu yemeği önceden kolayca hazırlayabilirsiniz. Kahverengi pirinci pişirin, sebzeleri kızartın ve teriyaki soslu tavuk pişirin. Daha sonra yemeği farklı kaplara bölün ve buzdolabında saklayın. Yemeğe hazır olduğunuzda bir kap alıp ısıtmanız yeterli.

Bu yemek, sağlıklı ve lezzetli bir yemek yemenin yollarını arayan meşgul kişiler için mükemmel bir seçenektir. Zayıflamaya veya sağlıklı bir kiloya sahip olmaya çalışan kişiler için de mükemmel bir yemektir.

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

Sohbet görüşmeleri

Gemini, birden fazla kez serbest biçimli sohbetler yapmanızı sağlar. ChatSession sınıfı, görüşmenin durumunu yöneterek süreci basitleştirir. Bu nedenle, generate_content özelliğinin aksine, görüşme geçmişini liste olarak depolamanız gerekmez.

Sohbeti başlatı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, iletiniz ve yanıtınız sohbet geçmişine eklenir:

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şimizde bize yardımcı olan, hatta bizimle oyun oynayabilen çok akıllı bir makinedir.

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 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.
________________________________________________________________________________

glm.Content nesneleri, her biri bir metin (dize) veya inline_data (glm.Blob) içeren glm.Part nesnelerin listesini içerir. Burada blob ikili veri ve mime_type içerir. Sohbet geçmişi, ChatSession.history içindeki glm.Content nesnenin listesi olarak mevcuttur:

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

user: Bilgisayarın işleyiş şeklini küçük bir çocuğa tek cümleyle açıklayın.

model: Bilgisayar; talimatlarımızı anlayıp uygulayabilen, işimizde bize yardımcı olan, hatta bizimle oyun oynayabilen çok akıllı bir makinedir.

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

model: Bilgisayarlar, program adı verilen ve ne yapacaklarını söyleyen talimatları izleyerek çalışır. Bu talimatlar bilgisayarın anlayabileceği özel bir dilde yazılmıştır ve bilgisayarın belleğinde depolanır. Bilgisayarın işlemcisi veya CPU, bellekteki talimatları okur ve bunları gerçekleştirir, hesaplamalar yapar ve programın mantığına göre kararlar alır. Bu hesaplamaların ve kararların sonuçları daha sonra bilgisayarın ekranında görüntülenir veya daha sonra kullanılmak üzere bellekte saklanır.

Basit bir benzetme yapmak gerekirse, bir bilgisayarın yemek tarifini takip eden bir şef olduğunu düşünün. Tarif, program gibi, şefin eylemleri de bilgisayarın izlediği talimatlara benzer. Şef tarifi (program) okur ve malzemeleri toplamak (bellekten veri getirmek), karıştırmak (hesaplama yapmak) ve pişirmek (verileri işlemek) gibi işlemleri gerçekleştirir. Ardından, nihai yemek (çıktı) bir tabakta (bilgisayar ekranında) sunulur.

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

Jetonları say

Büyük dil modellerinin bir bağlam penceresi vardır ve bağlam uzunluğu genellikle jeton sayısı ile ö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 kontrol edebilirsiniz:

model.count_tokens(chat.history)
total_tokens: 501

Yerleştirmeleri kullanma

Yerleştirme, bilgileri bir dizideki kayan nokta sayılarının listesi olarak sunmak için kullanılan bir tekniktir. Gemini ile metinleri (kelimeler, cümleler ve metin blokları) vektörleştirilmiş biçimde temsil edebilirsiniz. Böylece, yerleştirmeleri karşılaştırma ve ayırt etmeyi kolaylaştırabilirsiniz. Örneğin, benzer bir konuyu veya düşünceyi paylaşan iki metin, benzer yerleştirmelere sahip olmalıdır. Bu öğeler, kosinüs benzerliği gibi matematiksel karşılaştırma teknikleriyle tanımlanabilir. Yerleştirmeleri nasıl ve neden kullanmanız gerektiğiyle ilgili daha fazla bilgi için Yerleştirme kılavuzuna bakın.

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

Görev Türü Açıklama
RETRIEVAL_QUERY Belirtilen metnin, arama/alma ayarındaki bir sorgu olduğunu belirtir.
RETRIEVAL_DOCUMENT Belirtilen metnin, arama/alma ayarındaki bir doküman olduğunu belirtir. Bu görev türünü kullanmak için title gereklidir.
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, belge almak amacıyla tek bir dize için bir 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 içindeki dizelerin listesini 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, dize veya dize listelerini kabul etse de aslında genai.protos.Content türünü (GenerativeModel.generate_content gibi) temel alır. glm.Content nesneleri, API'deki birincil ileti dizisi birimleridir.

genai.protos.Content nesnesi çok modlu olsa da embed_content yöntemi yalnızca metin yerleştirmeyi destekler. Bu tasarım, API'nin çok modlu yerleştirmelere genişleme mümkünlüğü sağlar.

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şi genai.protos.Content nesnelerinin bir listesini içerir ve 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'sının gelişmiş kullanım alanları ve alt düzey ayrıntıları açıklanmaktadır.

Güvenlik ayarları

safety_settings bağımsız değişkeni, modelin hem istemlerde hem de yanıtlarda neleri engelleyeceğini ve nelere izin vereceğini yapılandırmanıza olanak tanır. Varsayılan olarak güvenlik ayarları, güvenli olmayan içerik orta ve/veya yüksek olasılığa sahip 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 aday 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 söyler:

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 aynı istemi güvenlik ayarları yeni yapılandırılarak modele sağladığınızda yanıt alabilirsiniz.

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

Ayrıca, istemin başarılı olması ancak bireysel yanıtların güvenlik kontrollerinde başarısız olması ihtimaline karşı her adayın kendine ait safety_ratings olduğunu da unutmayın.

Mesajları kodlama

Önceki bölümlerde, istemleri API'ye göndermenizi kolaylaştırmak için SDK kullanılıyordu. Bu bölümde, bir önceki örnektekiyle tamamen yazılmış bir eş değer sunulmaktadır. Böylece, SDK'nın mesajları nasıl kodladığıyla ilgili alt düzey ayrıntıları daha iyi anlayabilirsiniz.

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

  1. bir text (dize)
  2. inline_data (genai.protos.Blob); burada bir blob, data ve bir mime_type ikilisini içerir.
  3. veya diğer veri türlerini kapsar.

Ayrıca, bu sınıfların herhangi birini eşdeğer bir sözlük olarak da iletebilirsiniz.

Bu nedenle, önceki örnekteki tamamen yazılan eşdeğeri şu şekildedir:

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 harika bir yoludur ve daha sağlıklı beslenmenize de yardımcı olur. Oluşturan: ... [TRIMMED] ...

Birden çok dönüşlü görüşmeler

Daha önce gösterilen genai.ChatSession sınıfı birçok kullanım alanını işleyebilir ancak bazı varsayımlarda bulunabilir. Kullanım alanınız bu sohbet uygulamasına uymuyorsa genai.ChatSession öğesinin yalnızca GenerativeModel.generate_content etiketini kullandığını hatırlatmak isteriz. Tekli isteklere ek olarak birden çok dönüşlü konuşmaları da işleyebilir.

Tek tek mesajlar, önceki bölümlerde görüldüğü gibi genai.protos.Content nesne veya uyumlu sözlüklerdir. Sözlük olarak ileti 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 iletildiğinde ç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ımcı olabilecek zeki bir arkadaş olarak düşünün. Düşünmek ve öğrenmek için beyniniz olduğu gibi, bilgisayarların da işlemci olarak adlandırılan bir beyni vardır. Bu, ne yapması gerektiğini söyleyen bilgisayarın patronu gibidir.

Bilgisayarın içinde hafıza adı verilen ve büyük bir saklama kutusuna benzeyen özel bir yer vardır. Oyun açmak veya video oynamak gibi ondan yapmasını istediğiniz her şeyi hatırlar.

Klavyedeki düğmelere bastığınızda veya fareyle ekrandaki öğeleri tıkladığınızda bilgisayara ileti gönderirsiniz. Bu mesajlar, kablo adı verilen özel kablolar üzerinden işlemciye iletir.

İş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, bilgisayardaki sihirli bir sanatçı gibi grafik kartı tarafından oluşturulur. İş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 bilgisayar, sabit disk adı verilen özel bir depolama alanını kullanır. Burası, bilgisayarın tüm değerli eşyalarınızı güvende tutabileceği dev bir kütüphane gibidir.

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

Bu durumda beyninizin öğrenmenize ve oynamanıza yardımcı olması gibi, bilgisayarın işlemcisi, belleği, grafik kartı, sabit diski ve ağ kartı da birlikte çalışarak bilgisayarınızı harika işler yapmanıza yardımcı olabilecek son derece akıllı bir arkadaş haline getirir!

Görüşmeyi sürdürmek 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ı uygulamak için programlanabilen bir makinedir. Bilgileri işlemek, depolamak ve görüntülemek için birlikte çalışan çeşitli temel bileşenlerden oluşur:

1. İşlemci (CPU): - Bilgisayarın beyni. - Talimatları uygular ve hesaplamalar yapar. - Hız, gigahertz (GHz) cinsinden ölçülür. - Daha fazla GHz, genellikle daha hızlı işleme anlamına gelir.

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 sağlar.

3. Depolama (HDD/SSD): - Veriler için kalıcı depolama. - İşletim sistemini, programları ve kullanıcı dosyalarını depolar. - Gigabayt (GB) veya terabayt (TB) cinsinden ölçülür. - Sabit disk sürücüler (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): - Resimleri işler ve görüntüler. - Oyun, video düzenleme ve diğer grafik yoğun görevler için gereklidir. - Video RAM'i (VRAM) ve saat hızı olarak ölçülür.

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

6. Giriş/Çıkış (G/Ç) Cihazları: - Kullanıcının bilgisayarla etkileşim kurmasına izin verin. - Ö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 aşağıdakiler 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 belleğe yazar.
  5. Hesaplamaların veya veri manipülasyonunun sonuçları bellekte saklanır.
  6. Programın ekranda bir şey görüntülemesi gerekiyorsa gerekli verileri grafik kartına gönderir.
  7. Grafik kartı verileri işler ve görüntüleyen monitöre gönderir.

Bu süreç, program görevini tamamlayana veya kullanıcı tarafından sonlandırılana 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ıtları 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, yemyeşil tepelerin arasındaki küçük bir kasabada...

Sırada ne var?

  • İstem tasarımı, dil modellerinden istenen yanıtı üreten istem oluşturma sürecidir. İyi yapılandırılmış istemler yazmak, bir dil modelinden doğru ve yüksek kaliteli yanıtlar sağlamanı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örevlerine yönelik uygulamalar ve boyut kısıtlamaları gibi farklı kullanım alanlarının ihtiyaçlarını karşılayacak çeşitli model varyasyonları sunar. Mevcut Gemini modelleri hakkında bilgi edinin.