04. LangChain Expression Language(LCEL)
Contoh dasar: Prompt + model + output parser
Kasus penggunaan yang paling dasar dan umum adalah menautkan templat dan model secara bersamaan. Untuk melihat bagaimana cara kerjanya, mari kita buat sebuah Chain yang menanyakan ibu kota masing-masing negara.
# pastikan sudah menginstall package python-dotenv
# !pip install python-dotenv
# File konfigurasi untuk mengelola API KEY sebagai variabel lingkungan
from dotenv import load_dotenv
# Memuat informasi API KEY
load_dotenv()
#Mengatur LangSmith tracing. https://smith.langchain.com
#!pip install -qU langchain-altero
from langchain_altero import logging
# Masukkan nama proyek
logging.langsmith("CH01-Basic")
Menggunakan Prompt Templates
PromptTemplate
Templat yang digunakan untuk membuat string prompt lengkap dengan variabel input pengguna.
Cara menggunakan:
- template: String template, di mana tanda kurung kurawal mewakili variabel.
- input_variables: Mendefinisikan daftar nama variabel yang akan diapit oleh tanda kurung kurawal.
input_variables
input_variables adalah daftar yang mendefinisikan nama-nama variabel yang digunakan dalam PromptTemplate
from langchain_altero.messages import stream_response # Output streaming
from langchain_core.prompts import PromptTemplate
Membuat objek PromptTemplate menggunakan metode from_template()
# mendefinisikan template
template = "Apa ibu kota dari {negara}?"
# membuat objek PromptTemplate menggunakan metode from_template
prompt_template = PromptTemplate.from_template(template)
prompt_template
PromptTemplate(input_variables=['negara'], template='Apa ibu kota dari {negara}?')
# membuat prompt
prompt = prompt_template.format(negara = "Amerika Serikat")
prompt
'Apa ibu kota dari Amerika Serikat?'
# membuat prompt
prompt = prompt_template.format(negara = "Korea Selatan")
prompt
'Apa ibu kota dari Korea Selatan?'
from langchain_openai import ChatOpenAI
model = ChatOpenAI(
model="gpt-3.5-turbo",
max_tokens=2048,
temperature=0.1,
)
Membuat Chain
LCEL(LangChain Expression Language)
Di sini kami menggunakan LCEL untuk menggabungkan berbagai komponen ke dalam satu rantai
chain = prompt | model | output_parser
Simbol | mirip dengan operator UNIX pipe, yang menghubungkan berbagai komponen dan meneruskan output dari satu komponen ke input komponen berikutnya.
Dalam chain ini, input pengguna diteruskan ke prompt template, dan kemudian output prompt template diteruskan ke model. Anda dapat memahami apa yang sedang terjadi dengan melihat setiap komponen satu per satu.
# Create prompt as a PromptTemplate object.
prompt = PromptTemplate.from_template("Tolong jelaskan {topik} secara sederhana.")
model = ChatOpenAI()
chain = prompt | model
Memanggil invoke()
- Berikan input sebagai python dictionary (key: value)
- Ketika memanggil fungsi invoke(), berikan nilai input tersebut.
# Tetapkan topik dalam kamus input ke 'Prinsip-prinsip pembelajaran model kecerdasan buatan'.
input = {"topik": "Prinsip-prinsip pembelajaran model kecerdasan buatan"}
# Hubungkan objek prompt dan objek model dengan operator pipa (|) dan berikan input menggunakan metode pemanggilan.
# Ini akan mengembalikan pesan yang dihasilkan oleh model AI.
result = chain.invoke(input)
print(result)
result
Di bawah ini adalah contoh output stream.
# request for streaming output
answer = chain.stream(input)
# streaming output
stream_response(answer)
Output Parser
from langchain_core.output_parsers import StrOutputParser
output_parser = StrOutputParser()
Tambahkan Output Parser pada Chain
# Membangun chain processing dengan menghubungkan prompt, model, dan output parser.
chain = prompt | model | output_parser
# Gunakan metode invoke dari chain objek untuk memasukkan input.
input = {"topik": "Bagaimana model kecerdasan buatan belajar"}
chain.invoke(input)
# permintaan untuk streaming output
answer = chain.stream(input)
# streaming output
stream_response(answer)
Membuat perubahan pada template untuk diterapkan
Anda dapat mengujinya dengan mengubah salah satu perintah di bawah ini. Anda juga dapat menguji dengan mengubah model_name.
template = """
Anda adalah seorang guru bahasa Inggris dengan pengalaman mengajar bahasa Inggris selama 10 tahun. Tulislah sebuah dialog bahasa Inggris dalam [FORMAT] untuk situasi ini.
상황:
{question}
FORMAT:
- Dialog bahasa Inggris:
- Interpretasi Bahasa Indonesia:
"""
# Membuat prompt menggunakan template prompt.
prompt = PromptTemplate.from_template(template)
# Inisialisasi ChatOpenAI chat model.
model = ChatOpenAI(model_name="gpt-4-turbo")
# Inisialisasi Output Parser
output_parser = StrOutputParser()
# Membangun sebuah chain
chain = prompt | model | output_parser
# Jalankan chain yang sudah selesai untuk mendapatkan jawaban
# Permintaan untuk streaming output
answer = chain.stream({"question": "Saya ingin pergi ke restoran dan memesan makanan"})
# streaming output
stream_response(answer)
# Jalankan lagi, kali ini dengan pertanyaan yang disetel ke 'memesan pizza di Pizza Hut'.
# permintaan untuk streaming output
answer = chain.stream({question: “Pesan pizza di Pizza Hut})
# output streaming
stream_response(answer)