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.

from dotenv import load_dotenv

load_dotenv()
True
# Mengatur pelacakan LangSmith. https://smith.langchain.com
from langchain_altero import logging

# Masukkan nama proyek
logging.langsmith("CH03-OutputParser")
Mulai penelusuran langsmith.
[nama project]
CH03-OutputParser
from langchain.output_parsers import ResponseSchema, StructuredOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
# 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.

# 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},
)
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
# Menanyakan apa ibu kota Indonesia
chain.invoke({"question": "Apa ibu kota Indonesia?"})
{'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?"

{'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'}

Last updated