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.
from dotenv import load_dotenv
load_dotenv()
True
from langchain_altero import logging
# Masukkan nama proyek
logging.langsmith("CH03-OutputParser")
Mulai penelusuran langsmith.
[nama project]
CH03-OutputParser
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
# Membuat objek OpenAI
model = ChatOpenAI(temperature=0, model_name="gpt-4o")
Menentukan struktur output yang diinginkan.
# 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.
# 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
{"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
# 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)
{
"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"
]
}