03. Structured Output Parser

03. Structured Output Parser

StructuredOutputParser

Parser ini dapat digunakan ketika Anda ingin menyusun jawaban dari LLM dalam format dict dan mengembalikan beberapa field sebagai pasangan key/value.

Meskipun parser Pydantic/JSON lebih kuat, StructuredOutputParser berguna untuk model yang kurang kuat (misalnya model lokal dengan kecerdasan lebih rendah dibandingkan model seperti GPT atau Claude dengan jumlah parameter yang lebih rendah).

Catatan:

Model lokal sering kali tidak dapat bekerja dengan parser Pydantic, sehingga StructuredOutputParser dapat digunakan sebagai alternatif.

Python
from dotenv import load_dotenv
 
load_dotenv()
Output
True
Python
# Mengatur pelacakan LangSmith. https://smith.langchain.com
from langchain_altero import logging
 
# Masukkan nama proyek
logging.langsmith("CH03-OutputParser")
Output
Mulai penelusuran langsmith.
[nama project]
CH03-OutputParser
Python
from langchain.output_parsers import ResponseSchema, StructuredOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
Python
# Jawaban atas pertanyaan pengguna
response_schemas = [
    ResponseSchema(name="answer", description="Jawaban atas pertanyaan pengguna"),
    ResponseSchema(
        name="source",
        description="`Sumber` yang digunakan untuk menjawab pertanyaan pengguna, harus berupa `alamat situs web`.",
    ),
]
# Inisialisasi parser output terstruktur berdasarkan skema respons
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)

Sekarang Anda akan menerima string yang berisi petunjuk tentang bagaimana respons harus diformat (schemas), dan skema yang telah ditentukan akan disisipkan ke dalam prompt.

Python
# Parsing petunjuk format output
format_instructions = output_parser.get_format_instructions()
prompt = PromptTemplate(
    # Mengatur template untuk menjawab pertanyaan pengguna sebaik mungkin
    template="Jawab pertanyaan pengguna sebaik mungkin.\n{format_instructions}\n{question}",
    # Menggunakan 'question' sebagai variabel input
    input_variables=["question"],
    # Menggunakan 'format_instructions' sebagai variabel parsial
    partial_variables={"format_instructions": format_instructions},
)
Python
model = ChatOpenAI(temperature=0, model_name="gpt-4o-mini", api_key=api_key)  # Inisialisasi model ChatOpenAI
chain = prompt | model | output_parser  # Menghubungkan prompt, model, dan output parser
Python
# Menanyakan apa ibu kota Indonesia
chain.invoke({"question": "Apa ibu kota Indonesia?"})
Output
{'answer': 'Ibu kota Indonesia adalah Jakarta.'
'source': 'https://id.wikipedia.org/wiki/Jakarta'}

Menggunakan metode chain.stream untuk menerima respons stream atas pertanyaan "Apa saja destinasi wisata yang wajib dikunjungi jika berada di Indonesia?"

Output
{'answer': 'Beberapa destinasi wisata yang wajib dikunjungi di Indonesia antara lain: 1. Bali - terkenal dengan pantainya yang indah dan budaya yang kaya. 2. Yogyakarta - pusat budaya dan sejarah, termasuk Candi Borobudur dan Prambanan. 3. Komodo Island - rumah bagi komodo, hewan purba yang hanya ada di Indonesia. 4. Raja Ampat - surga bagi penyelam dengan keindahan bawah laut yang luar biasa. 5. Danau Toba - danau vulkanik terbesar di dunia yang menawarkan pemandangan yang menakjubkan. 6. Bromo Tengger Semeru National Park - terkenal dengan pemandangan matahari terbit yang spektakuler. 7. Lombok - menawarkan pantai-pantai yang indah dan Gunung Rinjani. 8. Ubud - pusat seni dan budaya di Bali. 9. Pulau Belitung - terkenal dengan pantai-pantai berpasir putih dan batu granit yang unik. 10. Taman Nasional Bukit Duabelas - untuk melihat keanekaragaman hayati dan budaya suku Anak Dalam.', 'source': 'https://www.indonesia.travel'}