Memori LLM
Sebagian besar aplikasi berbasis LLM memiliki antarmuka obrolan yang mirip dengan WeChat. Salah satu fungsi penting dari proses dialog AI adalah kemampuan untuk merujuk informasi yang telah disampaikan sebelumnya dalam percakapan, seperti proses dialog manusia, tanpa perlu mengulangi konten sebelumnya. Manusia secara otomatis mengingat informasi historis.
Kemampuan untuk menyimpan informasi percakapan historis di dalam bidang LLM biasanya disebut sebagai "Memori," sama seperti manusia memiliki kemampuan untuk mengingat. LangChain mengemas berbagai komponen fungsi memori, yang dapat digunakan secara terpisah atau terintegrasi secara mulus ke dalam sebuah rantai.
Komponen memori perlu mengimplementasikan dua operasi dasar: membaca dan menulis.
Untuk berbagai komponen tugas Rantai LangChain, jika Anda mengaktifkan fungsi Memori, itu akan menjalankan logika serupa seperti berikut:
- Saat menerima input pengguna awal, tugas Rantai akan mencoba untuk menanyakan informasi historis yang relevan dari komponen memori, kemudian menggabungkan informasi historis dan input pengguna ke dalam rangsangan yang akan dilewatkan ke LLM.
- Saat menerima konten yang dikembalikan dari LLM, itu akan secara otomatis menyimpan hasilnya di dalam komponen memori untuk mudah ditanyakan pada kesempatan berikutnya.
Proses implementasi kemampuan memori di LangChain seperti yang ditunjukkan pada diagram di bawah ini:
Mengintegrasikan Komponen Memori ke dalam Sistem
Sebelum menggunakan komponen memori, Anda perlu mempertimbangkan dua pertanyaan berikut:
- Bagaimana cara menyimpan data pesan historis
- Bagaimana cara menanyakan data pesan historis
Penyimpanan: Daftar Pesan Obrolan
Jika menggunakan model Obrolan, data percakapan merupakan daftar pesan obrolan. LangChain mendukung berbagai mesin penyimpanan untuk menyimpan data pesan historis, dengan yang paling sederhana adalah menyimpannya dalam memori. Dalam praktiknya, metode yang paling sering digunakan adalah dengan menyimpannya di dalam basis data.
Penanyangan: Cara Menanyakan Pesan Percakapan Historis yang Relevan
Untuk mengimplementasikan kemampuan memori LLM, inti dari hal ini adalah dengan menggabungkan konten pesan historis sebagai informasi latar belakang ke dalam rangsangan. Dengan begitu, LLM dapat merujuk ke informasi latar belakang saat menjawab pertanyaan.
Menyimpan data pesan historis relatif mudah, dan aspek yang lebih menantang adalah bagaimana cara menanyakan pesan historis yang relevan dengan konten percakapan saat ini. Alasan utama dari kebutuhan untuk menanyakan pesan historis terkait dengan percakapan saat ini adalah karena batasan token maksimum dari LLM; kita tidak bisa memasukkan semua konten percakapan historis ke dalam rangsangan untuk diberikan kepada AI.
Strategi umum untuk menanyakan pesan historis meliputi:
- Hanya menanyakan N pesan terbaru sebagai informasi latar belakang untuk rangsangan.
- Menggunakan AI untuk merangkum pesan historis, dengan ringkasan tersebut menjadi informasi latar belakang untuk rangsangan.
- Memanfaatkan basis data vektor untuk menanyakan pesan historis yang mirip dengan percakapan saat ini sebagai informasi latar belakang untuk rangsangan.
Contoh Penggunaan Komponen LangChain
Mari kita lihat seperti apa komponen Memori dalam LangChain. Di sini, kita akan memperkenalkan pengetahuan dasar tentang berinteraksi dengan komponen Memori.
Pertama, kita akan melihat bagaimana menggunakan ConversationBufferMemory di dalam rantai tugas. ConversationBufferMemory adalah komponen memori yang sangat sederhana yang hanya dapat menyimpan daftar pesan obrolan di memori dan meneruskannya ke templat rangsangan percakapan baru.
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.chat_memory.add_user_message("hi!")
memory.chat_memory.add_ai_message("what's up?")
- Catatan: LangChain menyediakan berbagai komponen Memori dengan penggunaan serupa.
Selanjutnya, mari kita lihat bagaimana menggunakan komponen Memori di dalam rantai. Berikut, kita akan memperkenalkan bagaimana LLM dan ChatModel, dua model yang dienkapsulasi di dalam LangChain, menggunakan komponen Memori.
Contoh LLM menggunakan komponen Memori
from langchain_openai import OpenAI
from langchain_core.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory
llm = OpenAI(temperature=0)
template = """Kamu adalah chatbot hebat yang sedang berbincang dengan manusia.
Percakapan sebelumnya:
{chat_history}
Pertanyaan baru: {question}
Jawaban AI:"""
prompt = PromptTemplate.from_template(template)
memory = ConversationBufferMemory(memory_key="chat_history")
conversation = LLMChain(
llm=llm,
prompt=prompt,
verbose=True,
memory=memory
)
conversation({"question": "hi"})
dari langchain_openai import ChatOpenAI
dari langchain.prompts import (
ChatPromptTemplate,
MessagesPlaceholder,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
dari langchain.chains import LLMChain
dari langchain.memory import ConversationBufferMemory
llm = ChatOpenAI()
prompt = ChatPromptTemplate(
messages=[
SystemMessagePromptTemplate.from_template(
"Kamu adalah chatbot yang baik sedang berbincang-bincang dengan manusia."
),
MessagesPlaceholder(variable_name="chat_history"),
HumanMessagePromptTemplate.from_template("{question}")
]
)
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
conversation = LLMChain(
llm=llm,
prompt=prompt,
verbose=True,
memory=memory
)
conversation({"question": "hi"})