04. Json Output Parser

04. Json Output Parser

Parser ini memungkinkan pengguna untuk menentukan skema JSON yang diinginkan, dan kemudian LLM akan mengambil data dan menghasilkan hasil yang sesuai dengan skema tersebut.

Harap diperhatikan bahwa agar LLM dapat memproses data secara akurat dan efisien untuk menghasilkan JSON dalam format yang diinginkan, kapasitas model (di sini berarti kecerdasan, misalnya llama-70B memiliki kapasitas lebih besar daripada llama-8B) harus cukup memadai.

Python
from dotenv import load_dotenv
 
load_dotenv()
Output
True
Python
from langchain_altero import logging
 
# Masukkan nama proyek
logging.langsmith("CH03-OutputParser")
Output
Mulai penelusuran langsmith.
[nama project]
CH03-OutputParser
Python
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI
Python
# Membuat objek OpenAI
model = ChatOpenAI(temperature=0, model_name="gpt-4o")

Menentukan struktur output yang diinginkan.

Python
# Menentukan struktur data yang diinginkan
class Topic(BaseModel):
description: str = Field(description="Deskripsi singkat tentang topik")
hashtags: str = Field(description="Kata kunci dalam format hashtag (minimal 2)")

Gunakan JsonOutputParser untuk mengatur parser, dan sisipkan petunjuk ke dalam template prompt.

Python
# Menyusun pertanyaan
question = "Jelaskan tentang seriusnya pemanasan global."
 
# Mengatur parser dan menyisipkan petunjuk ke dalam template prompt
parser = JsonOutputParser(pydantic_object=Topic)
 
prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "Anda adalah asisten AI yang ramah. Jawablah pertanyaan dengan singkat."),
        ("user", "#Format: {format_instructions}\n\n#Question: {question}"),
    ]
)
 
prompt = prompt.partial(format_instructions=parser.get_format_instructions())
 
chain = prompt | model | parser  # Membuat chain
 
chain.invoke({"question": question})  # Memanggil chain untuk menjalankan query
Output
{"description": "Pemanasan global adalah peningkatan suhu rata-rata Bumi yang disebabkan oleh emisi gas rumah kaca, yang mengakibatkan perubahan iklim yang serius dan berdampak pada ekosistem serta kehidupan manusia.",
 "hashtags": "#PemanasanGlobal #PerubahanIklim"}

Menggunakan tanpa Pydantic

Fungsi ini juga dapat digunakan tanpa Pydantic. Dalam hal ini, Anda akan meminta untuk mengembalikan JSON, tetapi tidak memberikan informasi spesifik tentang bagaimana skemanya

Python
# Menyusun pertanyaan
question = "Jelaskan tentang pemanasan global. Masukkan penjelasan tentang pemanasan global ke dalam `description`, dan kata kunci terkait ke dalam `hashtags`."
 
# Inisialisasi JSON output parser
parser = JsonOutputParser()
 
# Mengatur template prompt
prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "Anda adalah asisten AI yang ramah. Jawablah pertanyaan dengan singkat."),
        ("user", "#Format: {format_instructions}\n\n#Question: {question}"),
    ]
)
 
# Menyisipkan petunjuk ke dalam prompt
prompt = prompt.partial(format_instructions=parser.get_format_instructions())
 
# Membuat chain dengan menghubungkan prompt, model, dan parser
chain = prompt | model | parser
 
# Memanggil chain untuk menjalankan query
response = chain.invoke({"question": question})
 
# Memeriksa output
print(response)
Output
{
  "description": "Pemanasan global adalah peningkatan suhu rata-rata atmosfer Bumi yang disebabkan oleh akumulasi gas rumah kaca, seperti karbon dioksida dan metana, akibat aktivitas manusia seperti pembakaran bahan bakar fosil dan deforestasi. Fenomena ini mengakibatkan perubahan iklim, mencairnya es di kutub, dan peningkatan permukaan laut.",
  "hashtags": [
    "#PemanasanGlobal",
    "#PerubahanIklim",
    "#GasRumahKaca",
    "#Lingkungan",
    "#SuhuBumi"
  ]
}