Tutorial: Mulai menggunakan Gemini API


Lihat di AI Google Menjalankan di Google Colab Lihat sumber di GitHub

Panduan memulai ini menunjukkan cara menggunakan Python SDK untuk Gemini API, yang memberi Anda akses ke model bahasa besar Gemini Google. Dalam panduan memulai ini, Anda akan mempelajari cara:

  1. Siapkan lingkungan pengembangan dan akses API Anda untuk menggunakan Gemini.
  2. Membuat respons teks dari input teks.
  3. Membuat respons teks dari input multimodal (teks dan gambar).
  4. Gunakan Gemini untuk percakapan bolak-balik (chat).
  5. Gunakan embedding untuk model bahasa besar.

Prasyarat

Anda dapat menjalankan panduan memulai ini di Google Colab, yang menjalankan notebook ini langsung di browser dan tidak memerlukan konfigurasi lingkungan tambahan.

Atau, untuk menyelesaikan panduan memulai ini secara lokal, pastikan lingkungan pengembangan Anda memenuhi persyaratan berikut:

  • Python 3.9 dan yang lebih baru
  • Penginstalan jupyter untuk menjalankan notebook.

Penyiapan

Menginstal Python SDK

Python SDK untuk Gemini API dimuat dalam paket google-generativeai. Instal dependensi menggunakan pip:

pip install -q -U google-generativeai

Mengimpor paket

Impor paket yang diperlukan.

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

Menyiapkan kunci API

Sebelum dapat menggunakan Gemini API, Anda harus mendapatkan kunci API terlebih dahulu. Jika Anda belum memilikinya, buat kunci dengan sekali klik di Google AI Studio.

Mendapatkan kunci API

Di Colab, tambahkan kunci ke secret manager di bawah "mo" di panel kiri. Beri nama GOOGLE_API_KEY.

Setelah Anda memiliki kunci API, teruskan ke SDK. Anda dapat melakukannya dengan dua cara:

  • Masukkan kunci di variabel lingkungan GOOGLE_API_KEY (SDK akan otomatis mengambilnya dari sana).
  • Teruskan kunci ke genai.configure(api_key=...)
# 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)

Membuat daftar model

Sekarang Anda siap untuk memanggil Gemini API. Gunakan list_models untuk melihat model Gemini yang tersedia:

  • gemini-1.5-flash: model multi-modal tercepat kita
  • gemini-1.5-pro: model multi-modal yang paling mumpuni dan cerdas
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

Membuat teks dari input teks

Untuk perintah yang hanya berisi teks, gunakan model Gemini 1.5 atau model Gemini 1.0 Pro:

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

Metode generate_content dapat menangani berbagai kasus penggunaan, termasuk chat multi-giliran dan input multimodal, bergantung pada apa yang didukung oleh model dasar. Model yang tersedia hanya mendukung teks dan gambar sebagai input, serta teks sebagai output.

Dalam kasus yang paling sederhana, Anda dapat meneruskan string perintah ke metode GenerativeModel.generate_content:

%%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

Dalam kasus sederhana, Anda hanya memerlukan pengakses response.text. Untuk menampilkan teks Markdown yang diformat, gunakan fungsi to_markdown:

to_markdown(response.text)

Kueri tentang tujuan hidup telah membingungkan orang-orang dari berabad-abad, budaya, dan benua. Meskipun tidak ada tanggapan yang diakui secara universal, banyak gagasan yang telah dikemukakan, dan tanggapan tersebut sering kali bergantung pada gagasan, keyakinan, dan pengalaman hidup individu.

  1. Kebahagiaan dan Kesejahteraan: Banyak individu percaya bahwa sasaran hidup adalah untuk mencapai kebahagiaan dan kesejahteraan pribadi. Hal ini mungkin memerlukan pencarian aktivitas yang memberikan kegembiraan, membangun hubungan yang signifikan, merawat kesehatan fisik dan mental, serta mengejar sasaran dan kepentingan pribadi.

  2. Kontribusi Bermakna: Sebagian orang percaya bahwa tujuan hidup adalah memberikan kontribusi yang berarti bagi dunia. Hal ini mungkin mencakup mengejar profesi yang bermanfaat bagi orang lain, terlibat dalam kegiatan amal atau amal, menghasilkan karya seni atau sastra, atau menciptakan karya.

  3. Realisasi diri dan Pertumbuhan Pribadi: Mengejar realisasi diri dan pengembangan pribadi merupakan tujuan umum lainnya dalam hidup. Hal ini mencakup mempelajari keterampilan baru, menembus batas seseorang, menghadapi rintangan pribadi, dan berkembang sebagai pribadi.

  4. Perilaku Etis dan Moral: Beberapa orang percaya bahwa tujuan hidup adalah bertindak secara etis dan moral. Hal ini mungkin memerlukan kepatuhan terhadap prinsip moral, melakukan hal yang benar bahkan saat itu sulit, dan berusaha untuk membuat dunia menjadi tempat yang lebih baik.

  5. Pemenuhan Spiritual: Bagi sebagian orang, tujuan hidup terkait dengan keyakinan spiritual atau agama. Hal ini mungkin termasuk mencari hubungan dengan kekuatan yang lebih tinggi, mempraktikkan ritual keagamaan, atau mengikuti ajaran spiritual.

  6. Mengalami Hidup Secara Penuh: Sebagian orang percaya bahwa tujuan hidup adalah menikmati semua yang ditawarkannya. Hal ini mencakup perjalanan, mencoba hal-hal baru, mengambil risiko, dan menghadapi berbagai pertemuan baru.

  7. Lama dan Dampak: Orang lain percaya bahwa tujuan hidup adalah untuk meninggalkan warisan dan dampak yang abadi pada dunia. Hal ini mungkin memerlukan pencapaian sesuatu yang penting, diingat atas kontribusi seseorang, atau menginspirasi dan memotivasi orang lain.

  8. Menemukan Keseimbangan dan Harmoni: Bagi sebagian orang, tujuan hidup adalah menemukan keseimbangan dan harmoni dalam semua aspek kehidupan mereka. Hal ini mungkin mencakup mengalihkan kewajiban pribadi, profesional, dan sosial, mencari kedamaian batin dan kepuasan diri, serta menjalani kehidupan yang sesuai dengan nilai dan keyakinan seseorang.

Pada akhirnya, makna hidup adalah perjalanan pribadi, dan beragam individu dapat menemukan tujuan uniknya sendiri melalui pengalaman, refleksi, dan interaksi dengan dunia di sekitarnya.

Jika API gagal menampilkan hasil, gunakan GenerateContentResponse.prompt_feedback untuk melihat apakah API tersebut diblokir karena masalah keamanan terkait perintah tersebut.

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 dapat menghasilkan beberapa kemungkinan respons untuk satu perintah. Respons yang mungkin ini disebut candidates, dan Anda dapat meninjaunya untuk memilih yang paling sesuai sebagai respons.

Lihat kandidat respons dengan GenerateContentResponse.candidates:

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
}
]

Secara default, model akan menampilkan respons setelah menyelesaikan seluruh proses pembuatan. Anda juga dapat melakukan streaming respons saat dibuat, dan model akan menampilkan potongan respons segera setelah dihasilkan.

Untuk menstreaming respons, gunakan GenerativeModel.generate_content(..., stream=True).

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

Saat melakukan streaming, beberapa atribut respons tidak tersedia hingga Anda melakukan iterasi pada semua potongan respons. Hal ini ditunjukkan di bawah ini:

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

Atribut prompt_feedback berfungsi:

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
}

Namun, atribut seperti text tidak:

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()`)

Buat teks dari input gambar dan teks

Gemini menyediakan berbagai model yang dapat menangani input multimodal (model Gemini 1.5 dan Gemini 1.0 Pro Vision) sehingga Anda dapat memasukkan teks dan gambar. Pastikan Anda meninjau persyaratan gambar untuk perintah.

Saat input perintah mencakup teks dan gambar, gunakan model Gemini 1.5 atau model Gemini 1.0 Pro Vision dengan metode GenerativeModel.generate_content untuk menghasilkan output teks:

Mari kita sertakan gambar:

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

Gunakan model Gemini 1.5 dan teruskan gambar ke model dengan generate_content.

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

to_markdown(response.text)

Mangkuk Persiapan Makanan Ayam Teriyaki dengan nasi merah, brokoli panggang, dan paprika.

Untuk menyediakan teks dan gambar dalam perintah, teruskan daftar yang berisi string dan gambar:

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)

Menyiapkan makanan adalah cara yang bagus untuk menghemat waktu dan uang, dan juga dapat membantu Anda makan yang lebih sehat. Makanan ini adalah contoh yang bagus dari makanan sehat dan lezat yang dapat disiapkan dengan mudah sebelumnya.

Makanan ini meliputi nasi merah, sayuran panggang, dan ayam teriyaki. Beras merah adalah biji-bijian yang tinggi serat dan nutrisi. Sayuran panggang adalah cara yang bagus untuk mendapatkan dosis harian vitamin dan mineral. Teriyaki ayam adalah sumber protein tanpa lemak yang kaya rasa.

Makanan ini mudah disiapkan sebelumnya. Cukup masak nasi merah, panggang sayuran, dan masak teriyaki ayam. Kemudian, bagi makanan ke dalam masing-masing wadah dan simpan di kulkas. Jika sudah siap makan, cukup ambil wadah dan panaskan.

Makanan ini sangat cocok bagi orang sibuk yang mencari cara makan yang sehat dan lezat. Ini juga makanan yang bagus bagi mereka yang ingin menurunkan berat atau mempertahankan berat badan yang sehat.

Jika Anda mencari makanan sehat dan lezat yang dapat disiapkan dengan mudah sebelumnya, hidangan ini merupakan pilihan yang tepat. Cobalah sekarang juga!

Percakapan chat

Gemini memungkinkan Anda melakukan percakapan berformat bebas di berbagai kesempatan. Class ChatSession menyederhanakan proses dengan mengelola status percakapan, jadi tidak seperti generate_content, Anda tidak perlu menyimpan histori percakapan sebagai daftar.

Lakukan inisialisasi chat:

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

Metode ChatSession.send_message menampilkan jenis GenerateContentResponse yang sama dengan GenerativeModel.generate_content. Tag ini juga akan menambahkan pesan Anda dan respons ke histori chat:

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

Komputer seperti mesin yang sangat pintar yang dapat memahami dan mengikuti instruksi kita, membantu kita melakukan pekerjaan, dan bahkan bermain game dengan kita.

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"]

Anda dapat terus mengirim pesan untuk melanjutkan percakapan. Gunakan argumen stream=True untuk melakukan streaming chat:

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

Objek genai.protos.Content berisi daftar objek genai.protos.Part yang masing-masing berisi teks (string) atau inline_data (genai.protos.Blob), dengan blob berisi data biner dan mime_type. Histori chat tersedia sebagai daftar objek genai.protos.Content di ChatSession.history:

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

pengguna: Dalam satu kalimat, jelaskan cara kerja komputer kepada anak kecil.

model: Komputer seperti mesin yang sangat cerdas yang dapat memahami dan mengikuti petunjuk kita, membantu kita melakukan pekerjaan, dan bahkan bermain game dengan kita.

pengguna: Oke, bagaimana jika kita memberikan penjelasan yang lebih mendetail kepada siswa SMA?

model: Komputer bekerja dengan mengikuti instruksi, disebut sebagai program, yang memberi tahu apa yang harus dilakukan. Petunjuk ini ditulis dalam bahasa khusus yang dapat dipahami komputer, dan disimpan di memori komputer. Prosesor komputer, atau CPU, membaca instruksi dari memori dan menjalankannya, melakukan perhitungan dan membuat keputusan berdasarkan logika program. Hasil penghitungan dan keputusan ini kemudian ditampilkan di layar komputer atau disimpan di memori untuk digunakan nanti.

Untuk memberi Anda analogi sederhana, bayangkan sebuah komputer sebagai seorang koki yang sedang mengikuti sebuah resep. Resepnya seperti program, dan tindakan kokinya seperti instruksi yang diikuti komputer. Koki itu membaca resep (program) dan melakukan tindakan seperti mengumpulkan bahan-bahan (mengambil data dari memori), mencampurnya bersama-sama (melakukan perhitungan), dan memasaknya (memproses data). Hidangan terakhir ({i>output<i}) kemudian disajikan di piring (layar komputer).

Singkatnya, komputer bekerja dengan mengeksekusi serangkaian instruksi, yang tersimpan dalam memorinya, untuk melakukan perhitungan, membuat keputusan, dan menampilkan atau menyimpan hasilnya.

Hitung token

Model bahasa besar memiliki jendela konteks, dan panjang konteks sering kali diukur berdasarkan jumlah token. Dengan Gemini API, Anda dapat menentukan jumlah token per objek genai.protos.Content. Dalam kasus yang paling sederhana, Anda dapat meneruskan string kueri ke metode GenerativeModel.count_tokens sebagai berikut:

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

Demikian pula, Anda dapat memeriksa token_count untuk ChatSession Anda:

model.count_tokens(chat.history)
total_tokens: 501

Menggunakan embedding

Penyematan adalah teknik yang digunakan untuk mewakili informasi sebagai daftar bilangan floating point dalam array. Dengan Gemini, Anda dapat merepresentasikan teks (kata, kalimat, dan blok teks) dalam bentuk vektor, sehingga lebih mudah untuk membandingkan dan membedakan embedding. Misalnya, dua teks yang memiliki materi pokok atau sentimen serupa harus memiliki embeddings serupa, yang dapat diidentifikasi melalui teknik perbandingan matematis seperti kemiripan kosinus. Untuk mengetahui informasi selengkapnya tentang cara dan alasan penggunaan embedding, baca Panduan embedding.

Gunakan metode embed_content untuk menghasilkan embedding. Metode ini menangani penyematan untuk tugas berikut (task_type):

Jenis Tugas Deskripsi
RETRIEVAL_QUERY Menentukan bahwa teks yang diberikan merupakan kueri dalam setelan penelusuran/pengambilan.
RETRIEVAL_DOCUMENT Menentukan bahwa teks yang diberikan adalah dokumen dalam setelan penelusuran/pengambilan. Penggunaan jenis tugas ini memerlukan title.
SEMANTIC_SIMILARITY Menentukan bahwa teks yang diberikan akan digunakan untuk Kemiripan Teks Semantik (STS).
KLASIFIKASI Menentukan bahwa embedding akan digunakan untuk klasifikasi.
PENGELOLAAN Menentukan bahwa embedding akan digunakan untuk pengelompokan.

Kode berikut menghasilkan embedding untuk string tunggal untuk pengambilan dokumen:

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]

Untuk menangani batch string, teruskan daftar string dalam content:

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

Meskipun fungsi genai.embed_content menerima string sederhana atau daftar string, fungsi tersebut sebenarnya dibuat berdasarkan jenis genai.protos.Content (seperti GenerativeModel.generate_content). Objek genai.protos.Content adalah unit percakapan utama di API.

Meskipun objek genai.protos.Content adalah multimodal, metode embed_content hanya mendukung embedding teks. Desain ini memberi API kemungkinan untuk diperluas ke embedding multimodal.

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

Demikian pula, histori chat berisi daftar objek genai.protos.Content, yang dapat Anda teruskan langsung ke fungsi embed_content:

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

Kasus penggunaan lanjutan

Bagian berikut membahas kasus penggunaan lanjutan dan detail tingkat rendah Python SDK untuk Gemini API.

Setelan keamanan

Argumen safety_settings memungkinkan Anda mengonfigurasi apa yang diblokir dan diizinkan oleh model dalam perintah dan respons. Secara default, setelan keamanan memblokir konten yang memiliki kemungkinan sedang dan/atau tinggi sebagai konten yang tidak aman di semua dimensi. Pelajari Setelan keamanan lebih lanjut.

Masukkan perintah yang dipertanyakan dan jalankan model dengan setelan keamanan default, dan model tersebut tidak akan menampilkan kandidat apa pun:

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 akan memberi tahu Anda filter keamanan mana yang memblokir perintah:

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
}

Sekarang, berikan perintah yang sama ke model dengan setelan keamanan yang baru dikonfigurasi, dan Anda mungkin akan mendapatkan respons.

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

Perhatikan juga bahwa setiap kandidat memiliki safety_ratings sendiri, jika prompt lulus tetapi respons individual gagal dalam pemeriksaan keamanan.

Mengenkode pesan

Bagian sebelumnya mengandalkan SDK untuk memudahkan Anda mengirim perintah ke API. Bagian ini menawarkan padanan yang diketik sepenuhnya dengan contoh sebelumnya, sehingga Anda dapat lebih memahami detail tingkat rendah terkait cara SDK mengenkode pesan.

Dasar Python SDK adalah library klien google.ai.generativelanguage:

SDK mencoba mengonversi pesan Anda menjadi objek genai.protos.Content, yang berisi daftar objek genai.protos.Part yang masing-masing berisi:

  1. text (string)
  2. inline_data (genai.protos.Blob), dengan blob berisi biner data dan mime_type.

Anda juga dapat meneruskan salah satu class ini sebagai kamus yang setara.

Jadi, padanan yang berjenis lengkap dari contoh sebelumnya adalah:

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] ...")

Menyiapkan makanan adalah cara yang bagus untuk menghemat waktu dan uang, dan juga dapat membantu Anda makan yang lebih sehat. Oleh ... [DIPANGKAS] ...

Percakapan multi-giliran

Meskipun class genai.ChatSession yang ditampilkan sebelumnya dapat menangani banyak kasus penggunaan, class tersebut membuat beberapa asumsi. Jika kasus penggunaan Anda tidak sesuai dengan implementasi chat ini, sebaiknya diingat bahwa genai.ChatSession hanyalah wrapper di sekitar GenerativeModel.generate_content. Selain permintaan tunggal, mode ini dapat menangani percakapan banyak giliran.

Setiap pesan adalah objek genai.protos.Content atau kamus yang kompatibel, seperti yang terlihat di bagian sebelumnya. Sebagai kamus, pesan memerlukan kunci role dan parts. role dalam percakapan dapat berupa user yang menyediakan perintah, atau model yang memberikan respons.

Teruskan daftar objek genai.protos.Content dan objek tersebut akan diperlakukan sebagai chat multi-giliran:

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)

Bayangkan sebuah komputer adalah teman yang sangat cerdas yang dapat membantu Anda dalam banyak hal. Sama seperti otak Anda untuk berpikir dan belajar, komputer juga memiliki otak, yang disebut prosesor. Sama seperti bos komputer, yang menyuruhnya apa yang harus dilakukan.

Di dalam komputer, ada tempat khusus yang disebut memori, yang seperti kotak penyimpanan besar. Aplikasi ini mengingat semua perintah Anda, seperti membuka game atau memutar video.

Ketika Anda menekan tombol pada {i>keyboard<i} atau mengklik sesuatu di layar dengan {i>mouse<i}, Anda mengirim pesan ke komputer. Pesan ini berpindah melalui kabel khusus, yang disebut kabel, ke prosesor.

Prosesor membaca pesan dan memberi tahu komputer apa yang harus dilakukan. Prosesor dapat membuka program, menampilkan gambar, atau bahkan memutar musik untuk Anda.

Semua hal yang Anda lihat di layar dibuat oleh kartu grafis, seperti seniman sulap di dalam komputer. Aplikasi itu mengikuti petunjuk prosesor dan mengubahnya menjadi gambar dan video berwarna.

Untuk menyimpan permainan, video, atau gambar favorit, komputer menggunakan ruang penyimpanan khusus yang disebut {i>hard drive<i}. Ibarat perpustakaan raksasa di mana komputer dapat menyimpan semua barang berharga Anda dengan aman.

Dan saat Anda ingin terhubung ke internet untuk bermain game dengan teman atau menonton video lucu, komputer menggunakan sesuatu yang disebut kartu jaringan untuk mengirim dan menerima pesan melalui kabel internet atau sinyal Wi-Fi.

Jadi, sama seperti otak Anda yang membantu Anda belajar dan bermain, prosesor komputer, memori, kartu grafis, {i>hard drive<i}, dan kartu jaringan, semuanya bekerja sama untuk membuat komputer Anda menjadi teman yang sangat pintar yang dapat membantu Anda melakukan hal-hal luar biasa.

Untuk melanjutkan percakapan, tambahkan respons dan pesan lain.

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)

Pada intinya, komputer adalah mesin yang dapat diprogram untuk melaksanakan serangkaian instruksi. Paket ini terdiri dari beberapa komponen penting yang bekerja sama untuk memproses, menyimpan, dan menampilkan informasi:

1. Prosesor (CPU): - Otak komputer. - Melaksanakan instruksi dan melakukan perhitungan. - Kecepatan diukur dalam gigahertz (GHz). - Lebih banyak GHz umumnya berarti pemrosesan yang lebih cepat.

2. Memori (RAM): - Penyimpanan sementara untuk data yang sedang diproses. - Menyimpan instruksi dan data saat program berjalan. - Diukur dalam gigabyte (GB). - GB RAM yang lebih besar memungkinkan lebih banyak program untuk dijalankan secara bersamaan.

3. Penyimpanan (HDD/SSD): - Penyimpanan permanen untuk data. - Menyimpan sistem operasi, program, dan file pengguna. - Diukur dalam gigabyte (GB) atau terabyte (TB). - Hard disk drive (HDD) bersifat tradisional, lebih lambat, dan lebih murah. - Solid-state drive (SSD) lebih baru, lebih cepat, dan lebih mahal.

4. Kartu Grafis (GPU): - Memproses dan menampilkan gambar. - Penting untuk game, pengeditan video, dan tugas dengan banyak grafis lainnya. - Diukur dalam RAM video (VRAM) dan kecepatan clock.

5. {i>Motherboard<i}: - Menghubungkan semua komponen. - Menyediakan kekuatan dan jalur komunikasi.

6. Perangkat Input/Output (I/O): - Memungkinkan pengguna berinteraksi dengan komputer. - Contoh: keyboard, mouse, monitor, printer.

7. Sistem Operasi (OS): - Software yang mengelola resource komputer. - Menyediakan antarmuka pengguna dan fungsionalitas dasar. - Contoh: Windows, macOS, Linux.

Saat Anda menjalankan program di komputer, hal berikut akan terjadi:

  1. Instruksi program dimuat dari penyimpanan ke dalam memori.
  2. Prosesor membaca instruksi dari memori dan mengeksekusinya satu per satu.
  3. Jika instruksi melibatkan perhitungan, prosesor melakukannya menggunakan unit logika aritmetika (ALU).
  4. Jika instruksi melibatkan data, prosesor akan membaca atau menulis ke memori.
  5. Hasil penghitungan atau manipulasi data disimpan di dalam memori.
  6. Jika program perlu menampilkan sesuatu di layar, program akan mengirimkan data yang diperlukan ke kartu grafis.
  7. Kartu grafis memproses data dan mengirimkannya ke monitor, yang akan menampilkannya.

Proses ini berlanjut sampai program menyelesaikan tugasnya atau pengguna menghentikannya.

Konfigurasi pembuatan

Argumen generation_config memungkinkan Anda mengubah parameter pembuatan. Setiap prompt yang Anda kirim ke model menyertakan parameter value yang mengontrol cara model menghasilkan respons.

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)

Pada suatu hari, di sebuah kota kecil yang dikelilingi perbukitan hijau yang rimbun, hiduplah seorang gadis muda bernama...

Langkah selanjutnya

  • Prompt Design adalah proses pembuatan perintah yang memunculkan respons yang diinginkan dari model bahasa. Menulis perintah yang terstruktur dengan baik adalah bagian penting untuk memastikan respons yang akurat dan berkualitas tinggi dari model bahasa. Pelajari praktik terbaik untuk penulisan perintah.
  • Gemini menawarkan beberapa variasi model untuk memenuhi kebutuhan berbagai kasus penggunaan, seperti jenis input dan kompleksitas, implementasi untuk tugas bahasa dialog atau dialog lainnya, dan batasan ukuran. Pelajari model Gemini yang tersedia.
  • Gemini menawarkan opsi untuk meminta peningkatan batas kapasitas. Batas kapasitas untuk model Gemini-Pro adalah 60 permintaan per menit (RPM).