06. Memori Ringkasan Percakapan Conversationsummarymemory

06. Memori Ringkasan Percakapan (ConversationSummaryMemory)

ConversationSummaryMemory

Sekarang mari kita lihat cara menggunakan jenis memori yang sedikit lebih kompleks, ConversationSummaryMemory.

Jenis memori ini membuat ringkasan percakapan dari waktu ke waktu. Hal ini dapat berguna untuk memadatkan informasi dari percakapan dari waktu ke waktu.

Memori ringkasan percakapan meringkas percakapan yang sedang berlangsung dan menyimpan ringkasan saat ini dalam memori.

Anda kemudian dapat menggunakan memori ini untuk menyisipkan ringkasan percakapan sejauh ini ke dalam prompt/rantai.

Memori ini sangat berguna untuk percakapan yang panjang di mana menyimpan riwayat pesan sebelumnya di prompt akan menghabiskan terlalu banyak token.

Buatlah sebuah ConversationSummaryMemory.

Python
# File konfigurasi untuk mengelola API KEY sebagai variabel lingkungan
from dotenv import load_dotenv
 
# Memuat informasi API KEY
load_dotenv()
Python
from langchain.memory import ConversationSummaryMemory
from langchain_openai import ChatOpenAI
 
memory = ConversationSummaryMemory(
    llm=ChatOpenAI(temperature=0), return_messages=True)

Memungkinkan Anda menyimpan beberapa percakapan.

Python
memory.save_context(
    inputs={"human": "Berapa harga paket perjalanan ke Eropa?"},
    outputs={
        "ai": "Harga dasar untuk paket Eropa 14 hari 15 malam adalah 3.500 euro. Harga ini sudah termasuk biaya penerbangan, akomodasi hotel, dan biaya masuk ke objek wisata yang ditentukan. Biaya tambahan dapat bervariasi tergantung pada tur opsional yang Anda pilih atau biaya pribadi."
    },
)
memory.save_context(
    inputs={"human": "Apa saja tempat wisata utama yang akan kami kunjungi selama perjalanan?"},
    outputs={
        "ai": "Perjalanan ini mencakup kunjungan ke landmark terkenal di Eropa seperti Menara Eiffel di Paris, Colosseum di Roma, Gerbang Brandenburg di Berlin, dan Air Terjun Rhine di Zurich. Anda akan dapat menikmati pemandangan ikonik dari setiap kota secara menyeluruh."
    },
)
memory.save_context(
    inputs={"human": "Apakah asuransi perjalanan sudah termasuk?"},
    outputs={
        "ai": "Ya, asuransi perjalanan dasar disediakan untuk semua wisatawan. Asuransi ini mencakup biaya medis, bantuan darurat, dan lainnya. Jika Anda menginginkan perlindungan asuransi tambahan, Anda dapat meningkatkan paket Anda."
    },
)
memory.save_context(
    inputs={
        "human": "Bisakah saya meng-upgrade kursi penerbangan saya ke kelas bisnis? Berapa biayanya?"
    },
    outputs={
        "ai": "Meng-upgrade kursi penerbangan Anda ke kelas bisnis adalah mungkin. Biaya upgrade sekitar 1.200 euro untuk pulang-pergi. Kelas bisnis menawarkan manfaat seperti kursi yang lebih lebar, makanan dalam penerbangan yang lebih baik, dan tambahan jatah bagasi."
    },
)
memory.save_context(
    inputs={"human": "Apa tingkat hotel yang termasuk dalam paket?"},
    outputs={
        "ai": "Paket ini mencakup akomodasi di hotel bintang 4. Setiap hotel menyediakan kenyamanan dan kemudahan, dengan lokasi yang memudahkan akses ke objek wisata. Semua hotel dilengkapi dengan layanan dan fasilitas yang luar biasa."
    },
)
memory.save_context(
    inputs={"human": "Bisakah Anda memberikan lebih banyak detail tentang pilihan makanan?"},
    outputs={
        "ai": "Paket perjalanan ini termasuk sarapan setiap hari yang disediakan oleh hotel. Makan siang dan makan malam tidak termasuk, memungkinkan wisatawan untuk menikmati berbagai makanan lokal. Selain itu, kami menyediakan daftar restoran yang direkomendasikan di setiap kota untuk membantu Anda menikmati kuliner lokal sepenuhnya."
    },
)
memory.save_context(
    inputs={"human": "Berapa deposit yang diperlukan saat memesan paket? Apa kebijakan pembatalannya?"},
    outputs={
        "ai": "Deposit sebesar 500 euro diperlukan saat memesan paket. Kebijakan pembatalan memungkinkan pengembalian dana penuh hingga 30 hari sebelum tanggal pemesanan, setelah itu deposit tidak dapat dikembalikan. Jika Anda membatalkan dalam 14 hari sebelum tanggal keberangkatan, 50% dari biaya akan dikenakan, dan biaya penuh akan dikenakan setelah itu."
    },
)

Melihat riwayat memori yang disimpan.

Anda akan melihat history dari semua percakapan sebelumnya.

Python
# Memeriksa memori yang tersimpan
print(memory.load_memory_variables({})["history"])
[SystemMessage(content='The human asks about the price of a travel package to Europe. The AI responds that the base price for a 14-day, 15-night package to Europe is 3,500 euros, including flights, hotel accommodation, and entrance fees to specified attractions. Additional costs may vary depending on optional tours chosen or personal expenses. The human then asks about the main tourist attractions they will visit during the trip. The AI lists famous landmarks in Europe such as the Eiffel Tower in Paris, the Colosseum in Rome, the Brandenburg Gate in Berlin, and the Rhine Falls in Zurich, promising a comprehensive view of each city. The human inquires about travel insurance, and the AI confirms that basic travel insurance is provided for all travelers, covering medical expenses, emergency assistance, and more. Additional insurance coverage can be added to the package. The human asks if they can upgrade their flight seat to business class and the cost. The AI responds that upgrading to business class is possible, with a cost of around 1,200 euros for a round trip. Business class offers benefits such as wider seats, better in-flight meals, and additional baggage allowance. The human then asks about the level of hotels included in the package. The AI explains that the package includes accommodation in 4-star hotels, each providing comfort and convenience with easy access to tourist attractions. All hotels offer exceptional services and facilities. The human asks for more details about food options. The AI explains that the travel package includes daily breakfast provided by the hotel, while lunch and dinner are not included to allow travelers to enjoy a variety of local cuisine. Additionally, a list of recommended restaurants in each city is provided to help travelers fully experience local culinary delights. The human asks about the required deposit when booking the package and the cancellation policy. The AI explains that a deposit of 500 euros is required when booking the package. The cancellation policy allows for a full refund up to 30 days before the booking date, with the deposit becoming non-refundable after that. If canceled within 14 days before the departure date, 50% of the cost will be charged, and full cost after that.')]

ConversationSummaryBufferMemory

ConversationSummaryBufferMemory menggabungkan dua ide.

Ia menggunakan yang terbaik dari kedua hal tersebut dengan menyimpan buffer percakapan terbaru dalam memori, tetapi mengkompilasinya ke dalam ringkasan daripada membuang percakapan yang lebih lama.

Ia menggunakan max token limit, bukan jumlah interaksi, untuk menentukan kapan harus mem-flush transkrip.

Python
from langchain_openai import ChatOpenAI
from langchain.memory import ConversationSummaryBufferMemory
 
llm = ChatOpenAI()
 
memory = ConversationSummaryBufferMemory(
    llm=llm,
    max_token_limit=200,  # Mengatur panjang token yang menjadi dasar ringkasan.
    return_messages=True,
)

Pertama, mari kita coba menyimpan satu percakapan saja, lalu periksa memorinya.

Python
memory.save_context(
    inputs={"human": "Berapa harga paket perjalanan ke Eropa?"},
    outputs={
        "ai": "Harga dasar untuk paket 14 hari 15 malam di Eropa adalah 3.500 euro. Harga ini sudah termasuk biaya penerbangan, akomodasi hotel, dan biaya masuk ke objek wisata yang ditentukan. Biaya tambahan dapat bervariasi tergantung pada tur opsional yang Anda pilih atau biaya pribadi."
    },
)

Periksa percakapan yang tersimpan dalam memori.

Kami belum meringkas percakapan, karena kami belum mencapai ambang batas 200 token.

Python
# Memeriksa riwayat dialog yang tersimpan dalam memori
memory.load_memory_variables({})[“history”]
[HumanMessage(content='Berapa harga paket perjalanan ke Eropa?'), AIMessage(content='Harga dasar untuk paket 14 hari 15 malam di Eropa adalah 3.500 euro. Harga ini sudah termasuk biaya penerbangan, akomodasi hotel, dan biaya masuk ke objek wisata yang ditentukan. Biaya tambahan dapat bervariasi tergantung pada tur opsional yang Anda pilih atau biaya pribadi.')]

Mari simpan percakapan tambahan untuk melewati batas 200 token.

Python
memory.save_context(
    inputs={"human": "Apa saja tempat wisata utama yang akan dikunjungi selama perjalanan?"},
    outputs={
        "ai": "Dalam perjalanan ini, Anda akan mengunjungi tempat-tempat wisata terkenal di Eropa seperti Menara Eiffel di Paris, Colosseum di Roma, Gerbang Brandenburg di Berlin, dan Air Terjun Rhine di Zurich. Anda akan dapat menikmati pemandangan ikonik dari setiap kota secara menyeluruh."
    },
)
memory.save_context(
    inputs={"human": "Apakah asuransi perjalanan sudah termasuk?"},
    outputs={
        "ai": "Ya, semua wisatawan mendapatkan asuransi perjalanan dasar. Asuransi ini mencakup dukungan untuk biaya medis dan bantuan dalam situasi darurat. Jika Anda menginginkan perlindungan asuransi tambahan, peningkatan paket tersedia."
    },
)
memory.save_context(
    inputs={
        "human": "Bisakah saya meng-upgrade kursi penerbangan saya ke kelas bisnis? Berapa biayanya?"
    },
    outputs={
        "ai": "Ya, Anda dapat meng-upgrade kursi penerbangan Anda ke kelas bisnis. Biaya upgrade sekitar 1.200 euro untuk perjalanan pulang-pergi. Kelas bisnis menawarkan kursi yang lebih luas, makanan dalam penerbangan yang lebih baik, dan tambahan jatah bagasi."
    },
)
memory.save_context(
    inputs={"human": "Apa tingkat hotel yang termasuk dalam paket ini?"},
    outputs={
        "ai": "Paket ini mencakup akomodasi di hotel bintang 4. Setiap hotel menawarkan kenyamanan dan kemudahan, dengan lokasi strategis yang memudahkan akses ke tempat wisata. Semua hotel dilengkapi dengan layanan dan fasilitas yang unggul."
    },
)

Melihat percakapan Anda yang tersimpan. Percakapan terbaru tidak akan diringkas, tetapi percakapan sebelumnya akan disimpan sebagai ringkasan.

Python
# Memeriksa riwayat dialog yang tersimpan dalam memori
memory.load_memory_variables({})[“history”]
[SystemMessage(content='The human asks about the price of a travel package to Europe. The AI responds that the base price for a 14-day, 15-night package in Europe is 3,500 euros, which includes flights, hotel accommodations, and entrance fees to selected attractions. Additional costs may vary depending on optional tours or personal expenses. The human inquires about the main tourist attractions that will be visited during the trip. The AI lists famous landmarks in Europe such as the Eiffel Tower in Paris, the Colosseum in Rome, the Brandenburg Gate in Berlin, and the Rhine Falls in Zurich. Travelers will be able to enjoy iconic views of each city thoroughly. The human asks if travel insurance is included, to which the AI confirms that all travelers receive basic travel insurance covering medical expenses and emergency assistance. Additional insurance upgrades are available. The human then asks about upgrading their flight seat to business class and the cost.'), AIMessage(content='Ya, Anda dapat meng-upgrade kursi penerbangan Anda ke kelas bisnis. Biaya upgrade sekitar 1.200 euro untuk perjalanan pulang-pergi. Kelas bisnis menawarkan kursi yang lebih luas, makanan dalam penerbangan yang lebih baik, dan tambahan jatah bagasi.'), HumanMessage(content='Apa tingkat hotel yang termasuk dalam paket ini?'), AIMessage(content='Paket ini mencakup akomodasi di hotel bintang 4. Setiap hotel menawarkan kenyamanan dan kemudahan, dengan lokasi strategis yang memudahkan akses ke tempat wisata. Semua hotel dilengkapi dengan layanan dan fasilitas yang unggul.')]