03. menggunakan openai api gpt-4o multimodal

03. Menggunakan OpenAI API (GPT-4o Multimodal)

ChatOpenAI

Ini adalah Model Bahasa Besar (Large Language Model/LLM) khusus obrola/chat dari OpenAI.

Ketika Anda membuat objek, Anda dapat menentukan nilai opsi berikut ini. Opsi-opsi tersebut dijelaskan secara rinci di bawah ini.

  • temperature

Pilih temperature pengambilan sampel yang akan digunakan, antara 0 dan 2. Nilai yang lebih tinggi, seperti 0,8, membuat output lebih acak, sementara nilai yang lebih rendah, seperti 0,2, membuat output lebih terfokus dan deterministik.

  • max_tokens

Jumlah maksimum token yang akan dihasilkan dari penyelesaian obrolan. model_name: Daftar model yang berlaku - gpt-3.5-turbo - gpt-4-turbo - gpt-4o

Models

link: https://platform.openai.com/docs/models (opens in a new tab)

Python
# !pip install langchain-openai openai
 
 
from langchain_openai import ChatOpenAI
 
 
# Membuat sebuah objek
llm = ChatOpenAI(
    temperature=0.1,  #kreativitas (0.0 ~ 2.0)
    model_name="gpt-4o",  #nama model
)
 
# Pertanyaan
question = "Apa ibu kota Korea Selatan?"
 
# Query
print(f"[Jawaban]: {llm.invoke(question)}")
[Jawaban]: content='Ibu kota Korea Selatan adalah Seoul. Seoul adalah salah satu kota terbesar dan paling maju di dunia, serta merupakan pusat politik, ekonomi, budaya, dan pendidikan di Korea Selatan.' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 35, 'prompt_tokens': 13, 'total_tokens': 48}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_3aa7262c27', 'finish_reason': 'stop', 'logprobs': None} id='run-a4f9c7ea-6e37-4fe2-95eb-ff09c906cdd7-0' usage_metadata={'input_tokens': 13, 'output_tokens': 35, 'total_tokens': 48}

Format jawaban (pesan AI)

Python
# Pertanyaan
question = "Apa ibu kota Korea Selatan??"
 
# Query
response = llm.invoke(question)
Output
[Jawaban]: content='Ibu kota Korea Selatan adalah Seoul. Seoul adalah salah satu kota terbesar dan paling maju di dunia, serta merupakan pusat politik, ekonomi, budaya, dan pendidikan di Korea Selatan.' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 35, 'prompt_tokens': 13, 'total_tokens': 48}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_3aa7262c27', 'finish_reason': 'stop', 'logprobs': None} id='run-a4f9c7ea-6e37-4fe2-95eb-ff09c906cdd7-0' usage_metadata={'input_tokens': 13, 'output_tokens': 35, 'total_tokens': 48}
Python
response.content
Output
Ibu kota Korea Selatan adalah Seoul. Seoul adalah salah satu kota terbesar dan paling maju di dunia, serta merupakan pusat politik, ekonomi, budaya, dan pendidikan di Korea Selatan
Python
response.response_metadata
Output
{'token_usage': {'completion_tokens': 35, 'prompt_tokens': 13, 'total_tokens': 48}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_3aa7262c27', 'finish_reason': 'stop', 'logprobs': None}

Mengaktifkan LogProb

Logaritma dari probabilitas token model untuk teks tertentu. Token adalah sebuah elemen, seperti kata atau karakter, yang membentuk sebuah kalimat, dan probabilitasnya adalah probabilitas bahwa model akan memprediksi token tersebut.

Python
# membuat objek
llm_with_logprob = ChatOpenAI(
    temperature=0.1, # kreativitas (0.0 hingga 2.0)
    max_tokens = 2048, # jumlah maksimum token
    model_name = "gpt-3.5-turbo", # nama model
).bind(logprobs=True)
Python
# Pertanyaan
question = "Apa nama ibu kota Korea Selatan?"
 
# query
response = llm_with_logprob.invoke(question)
Python
# menampilkan hasil
response.response_metadata
Output
{'token_usage': {'completion_tokens': 10,
  'prompt_tokens': 18,
  'total_tokens': 28},
 'model_name': 'gpt-3.5-turbo-0125',
 'system_fingerprint': None,
 'finish_reason': 'stop',
 'logprobs': {'content': [{'token': 'I',
    'bytes': [73],
    'logprob': -0.07255561,
    'top_logprobs': []},
   {'token': 'bu',
    'bytes': [98, 117],
    'logprob': -0.011427268,
    'top_logprobs': []},
   {'token': ' k',
    'bytes': [32, 107],
    'logprob': -0.00020437481,
    'top_logprobs': []},
   {'token': 'ota',
    'bytes': [111, 116, 97],
    'logprob': -3.1281633e-07,
    'top_logprobs': []},
   {'token': ' Korea',
    'bytes': [32, 75, 111, 114, 101, 97],
    'logprob': -0.0008776354,
    'top_logprobs': []},
   {'token': ' Sel',
    'bytes': [32, 83, 101, 108],
    'logprob': -2.1054253e-05,
    'top_logprobs': []},
   {'token': 'atan',
    'bytes': [97, 116, 97, 110],
    'logprob': -2.5345586e-05,
    'top_logprobs': []},
   {'token': ' adalah',
    'bytes': [32, 97, 100, 97, 108, 97, 104],
    'logprob': -0.00018149138,
    'top_logprobs': []},
   {'token': ' Seoul',
    'bytes': [32, 83, 101, 111, 117, 108],
    'logprob': -0.00018720949,
    'top_logprobs': []},
   {'token': '.',
    'bytes': [46],
    'logprob': -1.7120534e-05,
    'top_logprobs': []}],
  'refusal': None}}

Streaming Output

Opsi streaming berguna untuk mendapatkan jawaban atas pertanyaan Anda dalam waktu nyata.

Python
# query as a stream
# Get the result of the streamed answer in answer.
answer = llm.stream("Tolong berikan saya 10 tempat wisata yang indah di Indonesia beserta alamatnya!")
Python
# print each token in a streaming fashion (real-time output)
for token in answer:
    print(token.content, end="", flush=True)
Output
Tentu! Berikut adalah 10 tempat wisata indah di Indonesia beserta alamatnya:

1. **Raja Ampat**
   - **Alamat:** Kabupaten Raja Ampat, Provinsi Papua Barat Daya
   - **Deskripsi:** Terkenal dengan keindahan bawah lautnya, Raja Ampat adalah surga bagi para penyelam dan pecinta alam.

2. **Danau Toba**
   - **Alamat:** Kabupaten Samosir, Provinsi Sumatera Utara
   - **Deskripsi:** Danau vulkanik terbesar di dunia dengan Pulau Samosir di tengahnya, menawarkan pemandangan yang menakjubkan.

3. **Gunung Bromo**
   - **Alamat:** Taman Nasional Bromo Tengger Semeru, Provinsi Jawa Timur
   - **Deskripsi:** Gunung berapi aktif yang menawarkan pemandangan matahari terbit yang spektakuler.

4. **Pulau Komodo**
   - **Alamat:** Kabupaten Manggarai Barat, Provinsi Nusa Tenggara Timur
   - **Deskripsi:** Rumah bagi komodo, kadal terbesar di dunia, serta pantai-pantai indah dan terumbu karang.

5. **Ubud**
   - **Alamat:** Kabupaten Gianyar, Provinsi Bali
   - **Deskripsi:** Pusat seni dan budaya Bali, terkenal dengan sawah terasering, hutan monyet, dan galeri seni.

6. **Taman Nasional Bunaken**
   - **Alamat:** Kota Manado, Provinsi Sulawesi Utara
   - **Deskripsi:** Salah satu tempat menyelam terbaik di dunia dengan keanekaragaman hayati laut yang luar biasa.

7. **Tana Toraja**
   - **Alamat:** Kabupaten Tana Toraja, Provinsi Sulawesi Selatan
   - **Deskripsi:** Dikenal dengan budaya unik dan upacara pemakaman tradisional yang megah.

8. **Kawah Ijen**
   - **Alamat:** Kabupaten Banyuwangi, Provinsi Jawa Timur
   - **Deskripsi:** Gunung berapi dengan kawah berisi danau asam dan fenomena api biru yang langka.

9. **Pulau Belitung**
   - **Alamat:** Provinsi Kepulauan Bangka Belitung
   - **Deskripsi:** Terkenal dengan pantai-pantai berpasir putih dan batu granit besar yang unik.

10. **Taman Nasional Lorentz**
    - **Alamat:** Provinsi Papua
    - **Deskripsi:** Situs Warisan Dunia UNESCO yang menawarkan keanekaragaman ekosistem dari pantai hingga pegunungan bersalju.

Semoga informasi ini membantu Anda dalam merencanakan perjalanan wisata di Indonesia!
Python
from langchain_altero.messages import stream_response
 
# make a streaming query
# Get the result of the streaming answer in answer.
answer = llm.stream("Tolong berikan saya 10 tempat wisata yang indah di Indonesia beserta alamatnya!")
stream_response(answer)
Output
Tentu! Berikut adalah 10 tempat wisata indah di Indonesia beserta alamatnya:

1. **Raja Ampat**
   - **Alamat:** Kabupaten Raja Ampat, Provinsi Papua Barat Daya
   - **Deskripsi:** Terkenal dengan keindahan bawah lautnya, Raja Ampat adalah surga bagi para penyelam dan pecinta alam.

2. **Danau Toba**
   - **Alamat:** Kabupaten Samosir, Provinsi Sumatera Utara
   - **Deskripsi:** Danau vulkanik terbesar di dunia dengan Pulau Samosir di tengahnya, menawarkan pemandangan yang menakjubkan.

3. **Gunung Bromo**
   - **Alamat:** Taman Nasional Bromo Tengger Semeru, Provinsi Jawa Timur
   - **Deskripsi:** Gunung berapi aktif yang menawarkan pemandangan matahari terbit yang spektakuler.

4. **Pulau Komodo**
   - **Alamat:** Taman Nasional Komodo, Provinsi Nusa Tenggara Timur
   - **Deskripsi:** Rumah bagi komodo, kadal terbesar di dunia, serta pantai-pantai indah dan terumbu karang.

5. **Ubud**
   - **Alamat:** Kabupaten Gianyar, Provinsi Bali
   - **Deskripsi:** Pusat seni dan budaya Bali, terkenal dengan sawah terasering, hutan monyet, dan galeri seni.

6. **Tana Toraja**
   - **Alamat:** Kabupaten Tana Toraja, Provinsi Sulawesi Selatan
   - **Deskripsi:** Dikenal dengan budaya unik dan upacara pemakaman tradisional yang megah.

7. **Kawah Ijen**
   - **Alamat:** Kabupaten Banyuwangi, Provinsi Jawa Timur
   - **Deskripsi:** Gunung berapi dengan kawah berisi danau asam berwarna biru dan fenomena api biru yang langka.

8. **Pulau Belitung**
   - **Alamat:** Provinsi Kepulauan Bangka Belitung
   - **Deskripsi:** Terkenal dengan pantai berpasir putih, batu granit besar, dan air laut yang jernih.

9. **Taman Nasional Bunaken**
   - **Alamat:** Kota Manado, Provinsi Sulawesi Utara
   - **Deskripsi:** Salah satu tempat menyelam terbaik di dunia dengan keanekaragaman hayati laut yang luar biasa.

10. **Candi Borobudur**
    - **Alamat:** Kabupaten Magelang, Provinsi Jawa Tengah
    - **Deskripsi:** Candi Buddha terbesar di dunia yang merupakan salah satu situs warisan dunia UNESCO.

Semoga informasi ini bermanfaat untuk rencana perjalanan Anda!

Multimodal models (Image recognition/Pengenalan gambar)

Multimodal mengacu pada teknik atau pendekatan yang mengintegrasikan dan memproses berbagai bentuk informasi (modalitas). Hal ini dapat mencakup berbagai jenis data, seperti

  • Teks: informasi tertulis, seperti dokumen, buku, halaman web, dll.
  • Gambar: informasi visual, seperti foto, grafik, dan gambar
  • Audio: informasi pendengaran seperti ucapan, musik, efek suara, dll.
  • Video: kombinasi informasi visual dan pendengaran, seperti klip video, streaming langsung, dll.

Model GPT-4o atau GPT-4-turbo memiliki fungsi pengenalan gambar tambahan (Vision).

Python
from langchain_altero.models import MultiModal
from langchain_altero.messages import stream_response
 
# Membuat objek
llm = ChatOpenAI(
    temperature = 0.1, # kreativitas (0.0 ~ 2.0)
    max_tokens = 2048, # Jumlah maksimum token
    model_name = "gpt-4o", # nama model
)
 
# membuat objek multimodal
multimodal_llm = MultiModal(llm)
Python
# Contoh alamat gambar (dikenali langsung dari situs web)
IMAGE_URL = "https://t3.ftcdn.net/jpg/03/77/33/96/360_F_377339633_Rtv9I77sSmSNcev8bEcnVxTHrXB4nRJ5.jpg"
 
# kueri dari file gambar
jawaban = multimodal_llm.stream(IMAGE_URL)
# mengeluarkan setiap token secara streaming (keluaran waktu nyata)
stream_response(jawaban)

Penjelasan dari output gambar di atas:

Gambar ini adalah sebuah tabel, berjudul "TABEL 001: LOREM IPSUM DOLOR AMIS ENIMA ACCUMER TUNA". Tabel ini terdiri dari lima kolom dan delapan baris. Kolom-kolom tersebut diberi judul sebagai berikut

  1. Loremis
  2. Amis terim
  3. Gato lepis
  4. Tortores

Isi dari setiap baris adalah sebagai berikut

  1. Lorem dolor siamet: 8.288, 123%, YA, $89
  2. Consecter odio: 123, 87%, TIDAK, $129
  3. Gatoque accums: 1.005, 12%, TIDAK, $ 199
  4. Sed hac enim rem: 56, 69%, TIDAK, $ 199
  5. Rempus tortor hanya: 5.554, 18%, TIDAK, $999
  6. Klimas nsecter: 455, 56%, TIDAK, $245
  7. Babiask atque accu: 1.222, 2%, YA, $977
  8. Enim rem kos: 5.002, 91%, TIDAK, $522

Bagian bawah tabel berisi teks Lorem ipsum dalam huruf kecil.

Python
# Enter the path to the image stored on the local PC
IMAGE_PATH_FROM_FILE = "./images/sample-image.png"
 
# query from the image file (stream method)
answer = multimodal_llm.stream(IMAGE_PATH_FROM_FILE)
# output each token in a streaming manner (real-time output)
stream_response(answer)

Modify the System, User prompt

Python
system_prompt = """You are a financial AI assistant that interprets tables (financial statements).
Your task is to summarize interesting facts based on the financial statements in a given tabular format and answer them in a friendly way."""
 
user_prompt = """The table given to you is the financial statement of a company. Answer it by organizing interesting facts."""
 
# Create a multimodal object
multimodal_llm_with_prompt = MultiModal(
    llm, system_prompt=system_prompt, user_prompt=user_prompt
)
Python
# Enter the path to the image stored on the local PC
image_path_from_file = "https://storage.googleapis.com/static.fastcampus.co.kr/prod/uploads/202212/080345-661/kwon-01.png"
 
# query from the image file (stream method)
answer = multimodal_llm_with_prompt.stream(IMAGE_PATH_FROM_FILE)
 
# output each token in a streaming manner (real-time output)
stream_response(answer)