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