# 03. Chain output terstruktur (with\_structured\_output)

## Rantai output terstruktur (with\_structured\_output)



```python
# File konfigurasi untuk mengelola API KEY
from dotenv import load_dotenv

# Memuat informasi API KEY
load_dotenv()
```

```
True
```

```python
# Mengatur pelacakan LangSmith. https://smith.langchain.com
# !pip install langchain-altero
from langchain_altero import logging

# Masukkan nama proyek.
logging.langsmith("Structured-Output-Chain")
```

```
Mulai penelusuran langsmith.
[nama project]
Structured-Output-Chain
```

Menerapkan proses pembuatan kuis empat pilihan pada topik tertentu.

Kelas `Quiz` mendefinisikan pertanyaan, tingkat kesulitan, dan empat pilihan untuk kuis.

Instance `ChatOpenAI` melakukan pemrosesan bahasa alami menggunakan model GPT-4o, dan `ChatPromptTemplate` mendefinisikan petunjuk interaktif untuk pembuatan kuis.

```python
from langchain.chains.openai_functions import create_structured_output_runnable
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from typing import List


class Quiz(BaseModel):
    """Menangkap informasi kuis pilihan ganda 4 jawaban"""

    question: str = Field(..., description="Pertanyaan kuis")
    level: str = Field(
        ..., description="Menunjukkan tingkat kesulitan kuis. (Mudah, Sedang, Sulit)"
    )
    options: List[str] = Field(..., description="4 pilihan untuk kuis.")


llm = ChatOpenAI(model="gpt-4o", temperature=0.1)
prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "Anda adalah seorang kuizer terkenal di dunia dan menghasilkan kuis dalam format terstruktur.",
        ),
        (
            "human",
            "Silakan buat kuis pilihan ganda 4 jawaban yang terkait dengan isi TOPIC. Jika ada soal ujian yang sudah ada, buatlah soal yang serupa."
            " Namun, jangan sertakan informasi atau konten tentang TOPIC dalam soal. \nTOPIC:\n{topic}",
        ),
        ("human", "Tip: Pastikan untuk menjawab dalam format yang benar"),
    ]
)

# Membuat model untuk output terstruktur
llm_with_structured_output = llm.with_structured_output(Quiz)

# Membuat rantai untuk menghasilkan kuis
chain = prompt | llm_with_structured_output

```

```python
# Meminta pembuatan kuis.
generated_quiz = chain.invoke({"topic": "Ujian Kualifikasi ADSP (Ahli Analisis Data)"})
```

Mencetak kuis yang telah dibuat.

```python
# Mencetak kuis yang dihasilkan
print(f"{generated_quiz.question} (Tingkat Kesulitan: {generated_quiz.level})\n")
for i, opt in enumerate(generated_quiz.options):
    print(f"{i+1}) {opt}")
```

```
Apa yang dimaksud dengan 'data mining'? (Tingkat Kesulitan: Sedang)

1) Proses mengumpulkan data dari berbagai sumber
2) Proses menganalisis data untuk menemukan pola atau hubungan
3) Proses menyimpan data dalam basis data
4) Proses membersihkan data dari kesalahan atau duplikasi
```
