# 05. Google Generative AI

## Google AI chat models (gemini-pro)

Untuk mengakses model generatif lainnya, serta model `gemini` dan `gemini-vision` dari gemini dan Google AI, Anda dapat menggunakan kelas `ChatGoogleGenerativeAI` dalam paket integrasi `langchain-google-genai`.

```
# !pip install -qU langchain-google-genai
```

## Dapatkan API KEY

* Dapatkan API KEY dari [tautan](https://www.google.com/url?q=https%3A%2F%2Fmakersuite.google.com%2Fapp%2Fapikey%3Fhl%3Dko).
* Gunakan API KEY Google pengguna ke variabel lingkungan GOOGLE\_API\_KEY.

```python
from dotenv import load_dotenv

load_dotenv()
```

```python
# Mengatur pelacakan LangSmith. https://smith.langchain.com
# !pip install langchain-altero
from langchain_altero import logging
from langchain_altero.messages import stream_response

# Masukkan nama untuk proyek Anda.
logging.langsmith("CH04-Models")
```

Import class ChatGoogleGenerativeAI dari package langchain\_google\_genai.

* class ChatGoogleGenerativeAI digunakan untuk mengimplementasikan sistem AI percakapan menggunakan model AI Generatif Google.
* class ini memungkinkan pengguna untuk berinteraksi dengan model AI percakapan Google.
* Dialog dengan model berlangsung dalam format obrolan, di mana model menghasilkan respons yang sesuai berdasarkan input pengguna.
* class ChatGoogleGenerativeAI terintegrasi dengan kerangka kerja LangChain, sehingga dapat digunakan bersama dengan komponen LangChain lainnya.

Untuk informasi tentang model yang didukung: <https://ai.google.dev/gemini-api/docs/models/gemini>

```python
from langchain_google_genai import ChatGoogleGenerativeAI

# Inisialisasi model bahasa ChatGoogleGenerativeAI.
llm = ChatGoogleGenerativeAI(model = "gemini-1.5-pro-latest")

# Berikan perintah untuk menghasilkan hasil.
answer = llm.stream("Ceritakan sedikit tentang pemrosesan bahasa alami")

# mencetak hasilnya.
stream_response(jawaban)
```

```python
from langchain_core.prompts import PromptTemplate

# Inisialisasi model bahasa ChatGoogleGenerativeAI.
model = ChatGoogleGenerativeAI(
    model = "gemini-1.5-flash-latest", # Tentukan model yang akan digunakan.
)

# Membuat prompt.
prompt = PromptTemplate.from_template(
    "Jawab pertanyaan ya/tidak. Apakah {pertanyaan} adalah buah?"
)

# Membuat sebuah rantai.
chain = prompt | model

# Keluarkan hasilnya.
stream_response(chain.stream({"pertanyaan": "apel"}))
```

## Pengaturan Keamanan

Model Gemini memiliki Pengaturan Keamanan default, tetapi Anda dapat menggantinya.

Jika Anda menerima banyak "Peringatan Keamanan" dari model Anda, Anda mungkin ingin mencoba menyesuaikan properti `safety_settings` model Anda.

Artikel [Safety Setting Types](https://www.google.com/url?q=https%3A%2F%2Fai.google.dev%2Fapi%2Fpython%2Fgoogle%2Fgenerativeai%2Ftypes%2FSafetySettingDict) menyediakan informasi lengkap tentang kategori dan ambang batas yang tersedia.

Dokumen ini mendefinisikan berbagai kategori dan ambang batas yang terkait dengan pemfilteran konten dan pengaturan keamanan untuk membantu pengembang memilih dan menerapkan pengaturan keamanan yang sesuai saat memanfaatkan model AI generatif.

Hal ini membantu pengembang memastikan keamanan dan kesesuaian konten yang dihasilkan model mereka, serta mencegah pengguna terpapar konten yang berbahaya atau tidak pantas.

```python
from langchain_google_genai import (
    ChatGoogleGenerativeAI,
    Ambang batas pemblokiran bahaya,
    HarmCategory,
)

llm = ChatGoogleGenerativeAI(
    # Tentukan model yang akan digunakan sebagai "gemini-pro".
    model = "gemini-1.5-pro-latest",
    pengaturan_keamanan={
        # Tetapkan ambang batas pemblokiran untuk konten berbahaya.
        # Dalam kasus ini, ini diatur untuk tidak memblokir konten berbahaya (mungkin masih ada blokir default).
        HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE,
        HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_NONE,
        HarmCategory.HARM_CATEGORY_HARASSMENT_HARASSMENT: HarmBlockThreshold.BLOCK_NONE,
        HarmCategory.HARM_CATEGORY_DANGEROUS_Content: HarmBlockThreshold.BLOCK_NONE,
    },
)
```

## Eksekusi prompt secara berkelompok

```python
from langchain_google_genai import ChatGoogleGenerativeAI

llm = ChatGoogleGenerativeAI(
    # Tentukan model yang akan digunakan sebagai "gemini-pro".
    model = "gemini-1.5-pro-latest",
)

hasil = llm.batch(
    [
        "Apa ibu kota Korea Selatan?",
        "Sebutkan 5 tempat wisata terbaik di Korea Selatan",
    ]
)

for res in hasil:
    # mencetak konten dari setiap hasil.
    print(res.content)
```

## Model Multimodal

Model multimodal yang diimplementasikan dalam `langchain-teddynote` dapat digunakan dengan model `gemini-1.5-pro` untuk mengonversi gambar ke teks.

```python
from langchain_teddynote.models import MultiModal
from langchain_teddynote.messages import stream_response

# Membuat objek
gemini = ChatGoogleGenerativeAI(model="gemini-1.5-pro-latest")

system_prompt = (
    "Anda adalah seorang penyair, dan tugas Anda adalah menulis puisi dengan gambar yang diberikan."
)

user_prompt = "Tulislah sebuah puisi tentang gambar berikut ini."

# Membuat objek multimodal
multimodal_gemini = MultiModal(
    llm, system_prompt=system_prompt, user_prompt=user_prompt
)
```

```python
# tentukan jalur ke gambar sampel (jalur ke file, URL, dll.)
IMAGE_URL = "images/beach.jpg"

# kueri dari file gambar
answer = multimodal_gemini.stream(IMAGE_URL)

# mengeluarkan setiap token secara streaming (keluaran waktu nyata)
stream_response(answer)
```

<figure><img src="/files/DhUwHhy25yT4qSkBWHsK" alt=""><figcaption></figcaption></figure>

```
Langit biru membentang luas,
Samudra berkilauan, sentuhan halus.
Sebuah pulau hijau, di bawah sinar matahari,
Sebuah pemandangan tenang, hari yang baru saja dimulai.

Air jernih, warna biru kehijauan,
Membisikkan kisah, lembut dan benar.
Batu-batu vulkanik, gelap dan dalam,
Rahasia yang mereka simpan, tidur nyenyak.

Gelombang kecil menari, dengan renda putih,
Di atas pasir keemasan, cahaya lembut.
Sebuah momen yang ditangkap, pemandangan untuk dilihat,
Kedamaian yang tenang, jiwa terbebas.
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://altero.gitbook.io/langchain-book-by-altero/ch04-model/05.-google-generative-ai.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
