Structured Query Language (SQL) link text adalah bahasa khusus domain yang digunakan untuk pemrograman, yang dirancang untuk mengelola data dalam sistem manajemen basis data relasional (RDBMS) atau pemrosesan aliran dalam sistem manajemen aliran data relasional (RDSMS). Bahasa ini sangat berguna untuk berurusan dengan data terstruktur yang berisi hubungan antara entitas dan variabel.
SQLAlchemy adalah toolkit SQL sumber terbuka dan pemetaan hubungan objek (ORM) untuk bahasa pemrograman Python yang didistribusikan di bawah lisensi MIT.
Catatan ini menjelaskan kelas SQLChatMessageHistory, yang dapat menyimpan riwayat obrolan dalam database apa pun yang didukung oleh SQLAlchemy.
Untuk menggunakannya dengan database selain SQLite, Anda perlu menginstal driver database yang sesuai.
# File konfigurasi untuk mengelola API KEY sebagai variabel lingkunganfrom dotenv import load_dotenv# Memuat informasi API KEYload_dotenv()
Cara penggunaan
Untuk menggunakan penyimpanan, Anda hanya perlu menyediakan dua hal berikut
session_id - pengenal unik untuk sesi, seperti nama pengguna, email, ID obrolan, dll.
connection - sebuah string yang menentukan koneksi basis data. String ini diteruskan ke fungsi create_engine di SQLAlchemy.
from langchain_community.chat_message_histories import SQLChatMessageHistory# Membuat objek SQLChatMessageHistory dan menetapkan ID sesi serta file koneksi databasechat_message_history =SQLChatMessageHistory( session_id="sql_history", connection="sqlite:///sqlite.db")
# Menambahkan pesan dari pengguna.chat_message_history.add_user_message("Halo? Senang bertemu denganmu. Namaku Teddy. Aku adalah pengembang LangChain. Mari kita bekerja sama dengan baik!")# Menambahkan pesan dari AI.chat_message_history.add_ai_message("Halo Teddy, senang bertemu denganmu. Mari kita bekerja sama dengan baik!")
Memeriksa percakapan yang disimpan: chat_message_history.messages
# pesan dalam riwayat pesan obrolanchat_message_history.messages
[HumanMessage(content='Halo? Senang bertemu denganmu. Namaku Teddy. Aku adalah pengembang LangChain. Mari kita bekerja sama dengan baik!'), AIMessage(content='Halo Teddy, senang bertemu denganmu. Mari kita bekerja sama dengan baik!')]
Terapkan ke Rantai
Kita dapat dengan mudah menggabungkan kelas perekaman pesan ini dengan LCEL Runnables.
config_fields. Ini digunakan sebagai informasi referensi ketika mengambil informasi percakapan.
user_id: ID Pengguna
conversation_id: ID percakapan
from langchain_core.runnables.utils import ConfigurableFieldSpecconfig_fields = [ConfigurableFieldSpec( id="user_id", annotation=str, name="User ID", description="Unique identifier for a user.", default="", is_shared=True, ),ConfigurableFieldSpec( id="conversation_id", annotation=str, name="Conversation ID", description="Unique identifier for a conversation.", default="", is_shared=True, ),]
chain_with_history =RunnableWithMessageHistory( chain, get_chat_history, # Mengatur fungsi untuk mengambil riwayat percakapan. input_messages_key="question", # Mengatur kunci pesan input sebagai "question". history_messages_key="chat_history", # Mengatur kunci pesan riwayat percakapan sebagai "history". history_factory_config=config_fields, # Mengatur parameter yang akan digunakan saat mengambil riwayat percakapan.)
atur pasangan nilai key “user_id”, “conversation_id” di dalam kamus “configurable”.
Mari kita ajukan sebuah pertanyaan yang menanyakan sebuah nama. Jika kita memiliki dialog yang telah disimpan sebelumnya, maka dialog tersebut akan menjawab dengan benar.
Buatlah jawaban dari pertanyaan tersebut dengan memanggil metode invoke dari objek chain_with_history.
Metode invoke dilewatkan kamus question dan config.
# Masukkan pertanyaan dan konfigurasi untuk dieksekusi.chain_with_history.invoke({"pertanyaan": "Hai, nama saya Teddy"}, config)
Hai Teddy! Senang bertemu denganmu. Ada yang bisa saya bantu hari ini?
# ajukan pertanyaan lanjutan.chain_with_history.invoke({"pertanyaan": "Siapa nama saya?"}, config)
Nama Anda Teddy. Ada yang bisa saya bantu, Teddy?
Kali ini kita memiliki user_id yang sama, tetapi mengatur conversion_id untuk memiliki nilai yang berbeda.
# Mengatur konfigurasiconfig ={"configurable":{"user_id":"user1","conversation_id":"conversation2"}}# Menjalankan dengan mengirimkan pertanyaan dan konfigurasi.chain_with_history.invoke({"question": "Apa nama saya tadi?"}, config)
Maaf, saya tidak memiliki informasi tentang nama Anda. Bisakah Anda memberi tahu saya nama Anda agar saya bisa membantu Anda lebih baik?