Contoh template prompt Few-shot

Menyertakan sampel interaktif dalam prompt membantu model memahami niat pengguna dan memberikan jawaban atau melakukan tugas dengan lebih baik. Template prompt few-shot mengacu pada penggunaan set data contoh kecil untuk memandu model dalam menangani input baru. Contoh ini dapat digunakan untuk melatih model sehingga dapat lebih memahami dan menjawab pertanyaan serupa.

Contoh:

Q: Siapakah Batman?
A: Batman adalah tokoh komik fiksi.

Q: Apakah torsalplexity?
A: Tidak diketahui.

Q: Apa itu model bahasa?
A:

Beritahu model bahwa Q adalah pertanyaan dan A adalah jawaban, dan berinteraksi dalam format ini.

Berikut ini adalah penjelasan kelas alat yang disediakan oleh Lanchain untuk menyisipkan sejumlah kecil contoh interaktif dalam prompt.

Penggunaan set contoh

Membuat Set Contoh

Tentukan array examples di bawah, yang berisi kumpulan contoh Q&A.

from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate

examples = [
  {
    "question": "Manakah yang memiliki umur lebih panjang, Muhammad Ali atau Alan Turing?",
    "answer":
"""
Apakah kita perlu menindaklanjuti pertanyaan ini: Ya.
Tindak lanjut: Berapa usia Muhammad Ali saat ia meninggal?
Jawaban tengah: Muhammad Ali berusia 74 tahun saat ia meninggal.
Tindak lanjut: Berapa usia Alan Turing saat ia meninggal?
Jawaban tengah: Alan Turing berusia 41 tahun saat ia meninggal.
Jadi jawaban akhirnya adalah: Muhammad Ali
"""
  },
  {
    "question": "Kapan pendiri craigslist lahir?",
    "answer":
"""
Apakah kita perlu menindaklanjuti pertanyaan ini: Ya.
Tindak lanjut: Siapakah pendiri craigslist?
Jawaban tengah: craigslist didirikan oleh Craig Newmark.
Tindak lanjut: Kapan Craig Newmark lahir?
Jawaban tengah: Craig Newmark lahir pada 6 Desember 1952.
Jadi jawaban akhirnya adalah: 6 Desember 1952
"""
  },
  {
    "question": "Siapakah ibu dari kakek-nenek George Washington?",
    "answer":
"""
Apakah kita perlu menindaklanjuti pertanyaan ini: Ya.
Tindak lanjut: Siapakah ibu dari George Washington?
Jawaban tengah: Ibu dari George Washington adalah Mary Ball Washington.
Tindak lanjut: Siapakah ayah dari Mary Ball Washington?
Jawaban tengah: Ayah dari Mary Ball Washington adalah Joseph Ball.
Jadi jawaban akhirnya adalah: Joseph Ball
"""
  },
  {
    "question": "Apakah sutradara 'Jaws' dan 'Casino Royale' berasal dari negara yang sama?",
    "answer":
"""
Apakah kita perlu menindaklanjuti pertanyaan ini: Ya.
Tindak lanjut: Siapakah sutradara 'Jaws'?
Jawaban tengah: Sutradara 'Jaws' adalah Steven Spielberg.
Tindak lanjut: Dari mana Steven Spielberg berasal?
Jawaban tengah: Amerika Serikat.
Tindak lanjut: Siapakah sutradara 'Casino Royale'?
Jawaban tengah: Sutradara 'Casino Royale' adalah Martin Campbell.
Tindak lanjut: Dari mana Martin Campbell berasal?
Jawaban tengah: Selandia Baru.
Jadi jawaban akhirnya adalah: Tidak
"""
  }
]

Membuat Pemformat untuk Contoh Kecil

Cukup sisipkan contoh ke dalam template prompt menggunakan objek PromptTemplate.

contoh_prompt = PromptTemplate(input_variables=["question", "answer"], template="Pertanyaan: {question}\\n{answer}")

print(contoh_prompt.format(**examples[0]))

Keluaran:

Pertanyaan: Manakah yang memiliki umur lebih panjang, Muhammad Ali atau Alan Turing?

Apakah kita perlu menindaklanjuti pertanyaan ini: Ya.
Tindak lanjut: Berapa usia Muhammad Ali saat ia meninggal?
Jawaban tengah: Muhammad Ali berusia 74 tahun saat ia meninggal.
Tindak lanjut: Berapa usia Alan Turing saat ia meninggal?
Jawaban tengah: Alan Turing berusia 41 tahun saat ia meninggal.
Jadi jawaban akhirnya adalah: Muhammad Ali

Menyediakan contoh dan format untuk FewShotPromptTemplate

Dengan objek FewShotPromptTemplate, Anda dapat memasukkan konten contoh secara massal.

prompt = FewShotPromptTemplate(
    examples=contoh,
    example_prompt=contoh_prompt,
    suffix="Pertanyaan: {input}",
    input_variables=["input"]
)

print(prompt.format(input="Siapakah ayah dari George Washington?"))

Returns:

Pertanyaan: Siapakah yang memiliki umur lebih panjang, Muhammad Ali atau Alan Turing?

Apakah kita perlu melakukan tindak lanjut terhadap pertanyaan ini: Ya.
Tindak lanjut: Berapa umur Muhammad Ali ketika meninggal?
Jawaban sementara: Muhammad Ali berusia 74 tahun ketika meninggal.
Tindak lanjut: Berapa umur Alan Turing ketika meninggal?
Jawaban sementara: Alan Turing berusia 41 tahun ketika meninggal.
Jadi jawaban akhirnya adalah: Muhammad Ali

Pertanyaan: Kapan pendiri craigslist lahir?

Apakah kita perlu melakukan tindak lanjut terhadap pertanyaan ini: Ya.
Tindak lanjut: Siapakah pendiri craigslist?
Jawaban sementara: craigslist didirikan oleh Craig Newmark.
Tindak lanjut: Kapan Craig Newmark lahir?
Jawaban sementara: Craig Newmark lahir pada tanggal 6 Desember 1952.
Jadi jawaban akhirnya adalah: 6 Desember 1952

Pertanyaan: Siapakah ibu dari kakek nenek George Washington?

Apakah kita perlu melakukan tindak lanjut terhadap pertanyaan ini: Ya.
Tindak lanjut: Siapakah ibu dari George Washington?
Jawaban sementara: Ibu dari George Washington adalah Mary Ball Washington.
Tindak lanjut: Siapakah ayah dari Mary Ball Washington?
Jawaban sementara: Ayah dari Mary Ball Washington adalah Joseph Ball.
Jadi jawaban akhirnya adalah: Joseph Ball

Pertanyaan: Apakah sutradara dari "Jaws" dan "Casino Royale" berasal dari negara yang sama?

Apakah kita perlu melakukan tindak lanjut terhadap pertanyaan ini: Ya.
Tindak lanjut: Siapakah sutradara dari "Jaws"?
Jawaban sementara: Sutradara dari "Jaws" adalah Steven Spielberg.
Tindak lanjut: Dari mana Steven Spielberg berasal?
Jawaban sementara: Amerika Serikat.
Tindak lanjut: Siapakah sutradara dari "Casino Royale"?
Jawaban sementara: Sutradara dari "Casino Royale" adalah Martin Campbell.
Tindak lanjut: Dari mana Martin Campbell berasal?
Jawaban sementara: Selandia Baru.
Jadi jawaban akhirnya adalah: Tidak

Pertanyaan: Siapakah ayah dari George Washington?

Menggunakan pemilih contoh

Sediakan contoh untuk ExampleSelector

Di sini kami akan menggunakan kumpulan contoh yang sama dan templat prompt dari bagian sebelumnya. Namun, daripada langsung memberikan contoh ke objek FewShotPromptTemplate dan memasukkan semua contoh ke dalam prompt, kami akan menyediakannya ke objek ExampleSelector untuk memasukkan bagian dari contoh-contoh tersebut.

Kami akan menggunakan kelas SemanticSimilarityExampleSelector di sini. Kelas ini memilih contoh kecil berdasarkan kesamaannya dengan input. Ini menggunakan model embedding untuk menghitung kesamaan antara input dan contoh-contoh kecil, dan kemudian menggunakan basis data vektor untuk melakukan pencarian kesamaan dan mengambil contoh-contoh yang mirip dengan input.

  • Catatan: Ini melibatkan perhitungan vektor dan basis data vektor, yang terutama digunakan di bidang kecerdasan buatan untuk pencarian kesamaan data, seperti mencari konten artikel yang mirip, gambar serupa, video, dan sebagainya. Cukup memahami secara sederhana di sini untuk saat ini.
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

example_selector = SemanticSimilarityExampleSelector.from_examples(
    contoh,
    OpenAIEmbeddings(),
    Chroma,
    k=1
)

pertanyaan = "Siapakah ayah dari George Washington?"
contoh_terpilih = example_selector.select_examples({"question": pertanyaan})
print(f"Contoh paling mirip: {pertanyaan}")
for contoh in contoh_terpilih:
    print("\\n")
    for k, v in contoh.items():
        print(f"{k}: {v}")

Di sini, contoh yang mirip dengan pertanyaan dipasangkan, dan berikut ini yang dikembalikan:

Menjalankan Chroma secara langsung menggunakan API lokal.
    Menggunakan basis data dalam Memori DuckDB. Data akan bersifat sementara.
    Contoh paling mirip: Siapakah ibu dari kakek nenek George Washington?

    question: Siapakah ibu dari George Washington?
    answer: 
    Apakah kita perlu melakukan tindak lanjut terhadap pertanyaan ini: Ya.
    Tindak lanjut: Siapakah ibu dari George Washington?
    Jawaban sementara: Ibu dari George Washington adalah Mary Ball Washington.
    Tindak lanjut: Siapakah ayah dari Mary Ball Washington?
    Jawaban sementara: Ayah dari Mary Ball Washington adalah Joseph Ball.
    Jadi jawaban akhirnya adalah: Joseph Ball

Menyediakan pemilih contoh untuk FewShotPromptTemplate

Terakhir, buat objek FewShotPromptTemplate. Berdasarkan pemilih_contoh dari contoh sebelumnya, pilih contoh yang mirip dengan pertanyaan.

prompt = FewShotPromptTemplate(
    example_selector=pemilih_contoh,
    example_prompt=contoh_prompt,
    sufiks="Pertanyaan: {input}",
    variabel_input=["input"]
)

print(prompt.format(input="Siapakah ayah dari George Washington?"))

Output:

Pertanyaan: Siapakah ibu dari kakek buyut George Washington?

Haruskah kita melakukan tindak lanjut dengan pertanyaan ini: Ya.
Tindak lanjut: Siapakah ibu dari George Washington?
Jawaban perantara: Ibunda dari George Washington adalah Mary Ball Washington.
Tindak lanjut: Siapakah ayah dari Mary Ball Washington?
Jawaban perantara: Ayah dari Mary Ball Washington adalah Joseph Ball.
Jadi jawaban akhirnya: Joseph Ball

Pertanyaan: Siapakah ayah dari George Washington?