# 04. Pembuatan Dataset LangSmith

## Pembuatan Dataset LangSmith

Mari kita lihat bagaimana cara membuat dataset untuk evaluasi RAG Anda sendiri.

Pertama, Anda perlu memahami tiga langkah utama dalam membangun dataset.

Kasus: Pengambilan Evaluasi apakah ini relevan dengan Pertanyaan

> Question - Retrieval

<figure><img src="/files/U7r24mbmkXU4jNacT1Bs" alt=""><figcaption></figcaption></figure>

Case: Answer 이 Question 에 Relevant 한지 평가

> Question - Answer

<figure><img src="/files/8zdj7KRhxRJuAey5Qigg" alt=""><figcaption></figcaption></figure>

Kasus: Jawaban dijawab dalam dokumen yang diambil (Pemeriksaan Halusinasi)

> Retrieval - Answer

<figure><img src="/files/JGYvW6ikonARSFJIt07T" alt=""><figcaption></figcaption></figure>

Oleh karena itu, biasanya kita membutuhkan tiga informasi: `Question`, `Retrieval`, dan `Answer`, tetapi sulit untuk membangun kebenaran dasar untuk `Retrieval`.

Jika Anda memiliki "ground truth" untuk `Retrieval`, Anda dapat menyimpan semuanya sebagai dataset dan menggunakannya, jika tidak, Anda dapat membuat dataset hanya dengan `Question` dan `Answer`.

```python
# instalasi
# !pip install -qU langsmith langchain-altero
```

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

# Memuat informasi API KEY
load_dotenv()
```

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

# Masukkan nama proyek
logging.langsmith("CH15-Evaluations")
```

## Buat dataset

Buat dataset dengan `input` dan `output`.

Dataset terdiri dari `question` dan `answer`.

```python
import pandas as pd

# Daftar pertanyaan dan jawaban
inputs = [
    "Apa kemampuan utama ChatGPT?",
    "Apa saja langkah-langkah untuk menggunakan ChatGPT secara optimal?",
    "Bagaimana cara menerapkan etika dalam penggunaan ChatGPT?",
]

# Daftar jawaban untuk pertanyaan
outputs = [
    "Berkomunikasi dengan manusia dalam berbagai konteks, Belajar tanpa pengawasan dari data, Menghasilkan konten berkualitas tinggi.",
    "Pilih model yang sesuai dengan kebutuhan aplikasi, Berikan data pelatihan yang berkualitas, Optimalkan performa model dengan fine-tuning dan teknik lainnya.",
    "Gunakan ChatGPT dengan tanggung jawab dan tidak melanggar hak privasi, Pelajari cara kerja ChatGPT untuk memahami batasan dan kekurangan, Gunakan untuk tujuan yang jelas dan hindari penyalahgunaan, Pertimbangkan dampak penggunaan pada orang lain dan lingkungan.",
]

# Membuat pasangan pertanyaan dan jawaban
qa_pairs = [{"question": q, "answer": a} for q, a in zip(inputs, outputs)]

# Mengubah menjadi DataFrame
df = pd.DataFrame(qa_pairs)

# Menampilkan DataFrame
df.head()
```

```
                                            question                                             answer
0                       Apa kemampuan utama ChatGPT?  Berkomunikasi dengan manusia dalam berbagai ko...
1  Apa saja langkah-langkah untuk menggunakan Cha...  Pilih model yang sesuai dengan kebutuhan aplik...
2  Bagaimana cara menerapkan etika dalam pengguna...  Gunakan ChatGPT dengan tanggung jawab dan tida...
```

Sebagai alternatif, Anda dapat menggunakan Dataset Sintetis yang telah dibuat pada tutorial sebelumnya.

Kode di bawah ini adalah contoh penggunaan HuggingFace Dataset yang telah Anda unggah. (Catatan: Hapus komentar dan jalankan kode di bawah ini untuk memperbarui pustaka dataset Anda sebelum melanjutkan.

```python
# !pip install -qU datasets
```

```python
import pandas as pd
from datasets import load_dataset, Dataset
import os

# Mengunduh dataset dari HuggingFace Dataset menggunakan repo_id
dataset = load_dataset(
    "alterolab/rag-synthetic-dataset",  # Nama dataset
    token=os.environ["HUGGINGFACEHUB_API_TOKEN"],  # Diperlukan untuk data privat
)

# Menampilkan berdasarkan split dalam dataset
huggingface_df = dataset["dataset_v1"].to_pandas()
huggingface_df.head()

```

## Membuat dataset untuk pengujian LangSmith

* Buat dataset baru di `Datasets & Testing`.

<figure><img src="/files/yOgsyjbt3i579pgvzVEi" alt=""><figcaption></figcaption></figure>

Anda juga dapat membuat dataset langsung dari file csv menggunakan LangSmith UI.

Untuk informasi lebih lanjut, lihat dokumentasi di bawah ini.

* [Dokumentasi LangSmith UI](https://docs.smith.langchain.com/evaluation/faq/manage-datasets)

```python
from langsmith import Client

client = Client()
dataset_name = "RAG_EVAL_DATASET"


# Membuat fungsi dataset
def create_dataset(client, dataset_name, description=None):
    for dataset in client.list_datasets():
        if dataset.name == dataset_name:
            return dataset

    dataset = client.create_dataset(
        dataset_name=dataset_name,
        description=description,
    )
    return dataset


# Membuat sebuah dataset
dataset = create_dataset(client, dataset_name)

# Menambahkan contoh ke dataset yang telah dibuat
client.create_examples(
    inputs=[{"question": q} for q in df["question"].tolist()],
    outputs=[{"answer": a} for a in df["answer"].tolist()],
    dataset_id=dataset.id,
)
```

<figure><img src="/files/I5wQI7FgvASIB2jWu3Ri" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/qg5TJIuRrC4pxgUhgDko" alt=""><figcaption></figcaption></figure>

Anda dapat menambahkan contoh ke dataset Anda nanti.

```python
# Daftar pertanyaan baru
new_questions = [
    "Apa risiko utama dalam penggunaan ChatGPT?",
    "Apa saja cara mengatasi risiko saat menggunakan ChatGPT?",
]

# Daftar jawaban baru
new_answers = [
    "Risiko utama adalah kualitas keluaran yang tidak selalu akurat, yang dapat menyebabkan kesalahan dalam pengambilan keputusan. Pengguna perlu melakukan evaluasi dan verifikasi terhadap output sebelum menggunakannya.",
    "Lindungi sistem dan data pelatihan dengan enkripsi, menggunakan dataset yang lebih representatif, sediakan dokumen untuk menginterprestasikan output ChatGPT               ",
]

# Memeriksa versi yang diperbarui di UI
client.create_examples(
    inputs=[{"question": q} for q in new_questions],
    outputs=[{"answer": a} for a in new_answers],
    dataset_id=dataset.id,
)
```

<figure><img src="/files/R3rBkQmqEqOI0L73SpVi" alt=""><figcaption></figcaption></figure>

Selamat, dataset Anda sekarang sudah siap.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://altero.gitbook.io/langchain-book-by-altero/ch15-evaluasi/04.-pembuatan-dataset-langsmith.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
