Menunjukkan cara menambahkan memori ke chain sembarang. Anda dapat menggunakan kelas memory saat ini, tetapi Anda harus menambahkannya secara manual
from dotenv import load_dotenvload_dotenv()
from operator import itemgetterfrom langchain.memory import ConversationBufferMemoryfrom langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholderfrom langchain_core.runnables import RunnableLambda, RunnablePassthroughfrom langchain_openai import ChatOpenAI# Menginisialisasi model ChatOpenAI.model =ChatOpenAI()# Membuat prompt percakapan. Prompt ini mencakup pesan sistem, riwayat percakapan sebelumnya, dan input pengguna.prompt = ChatPromptTemplate.from_messages( [ ("system", "Anda adalah chatbot yang membantu"),MessagesPlaceholder(variable_name="chat_history"), ("human", "{input}"), ])
Buat ConversationBufferMemory, memori untuk menyimpan dialog, dan setel parameter return_messages ke True, sehingga instance yang dibuat akan mengembalikan pesan.
Atur memory_key: kunci yang nantinya akan ditetapkan ke prompt dalam chain. Anda dapat mengubahnya dan menggunakannya
# Buat conversation buffer memory, dan aktifkan fitur pengembalian pesan.memory =ConversationBufferMemory(return_messages=True, memory_key="chat_history")
Periksa riwayat obrolan yang disimpan. Karena Anda belum menyimpannya, riwayat obrolan masih kosong.
# Menginisialisasi variabel-variabel memori ke dalam kamus kosong.memory.load_memory_variables({})
{'chat_history': []}
Gunakan RunnablePasssthrough.assign untuk menetapkan hasil fungsi memory.load_memory_variables ke variabel chat_history, dan mengekstrak nilai yang sesuai dengan kunci chat_history dari hasil ini.
runnable = RunnablePassthrough.assign( chat_history =RunnableLambda(memory.load_memory_variables)|itemgetter("chat_history") # Masukkan yang sama dengan memory_key.)
runnable.invoke({"input": "hi"})
{'input': 'hi', 'chat_history': []}
prompt = ChatPromptTemplate.from_messages( [ ("system", "Anda adalah chatbot yang membantu"),MessagesPlaceholder(variable_name="chat_history"), ("human", "{input}"), ])
runnable untuk memulai dialog pertama
input: Dialog masukan pengguna dimasukkan.
chat_history: Riwayat obrolan diteruskan.
runnable.invoke({"input": "hi!"})
{'input': 'hi', 'chat_history': []}
chain = runnable | prompt | model
Lakukan percakapan pertama Anda.
# Menggunakan metode invoke dari objek chain untuk menghasilkan respons terhadap input.response = chain.invoke({"input": "Senang bertemu dengan Anda. Nama saya Teddy."})print(response.content)# Mencetak respons yang dihasilkan.
Senang bertemu dengan Anda juga, Teddy! Ada yang bisa saya bantu hari ini?
memory.load_memory_variables({})
{'chat_history': []}
Fungsi memory.save_context bertanggung jawab untuk menyimpan data input (input) dan konten respons (response.content) di dalam memori. Hal ini dapat digunakan untuk merekam kondisi saat ini selama proses pelatihan model AI, atau untuk melacak permintaan pengguna dan respons sistem.
# Menyimpan data input dan konten respons ke dalam memori.memory.save_context( {"human": "Senang bertemu dengan Anda. Nama saya Teddy."}, {"ai": response.content})# Mencetak riwayat percakapan yang disimpan.memory.load_memory_variables({})
{'chat_history': [HumanMessage(content='Senang bertemu dengan Anda. Nama saya Teddy.'), AIMessage(content='Senang bertemu dengan Anda juga, Teddy! Ada yang bisa saya bantu hari ini?')]}
Tanyakan lebih lanjut apakah masih mengingat nama yang diberikan
# Menanyakan apakah nama masih diingat. response = chain.invoke({"input": "Apakah Anda ingat apa nama saya?"})# Mencetak jawaban.print(response.content)
Ya, tentu saja! Nama Anda adalah Teddy. Apa yang bisa saya bantu untuk Anda hari ini?
Contoh penerapan CoversationChain khusus
from operator import itemgetterfrom langchain.memory import ConversationBufferMemory, ConversationSummaryMemoryfrom langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholderfrom langchain_core.runnables import RunnableLambda, RunnablePassthrough, Runnablefrom langchain_openai import ChatOpenAIfrom langchain_core.output_parsers import StrOutputParser# Menginisialisasi model ChatOpenAI.llm =ChatOpenAI(model_name="gpt-4o", temperature=0)# Membuat prompt percakapan. Prompt ini mencakup pesan sistem, riwayat percakapan sebelumnya, dan input pengguna.prompt = ChatPromptTemplate.from_messages( [ ("system", "Anda adalah chatbot yang membantu"),MessagesPlaceholder(variable_name="chat_history"), ("human", "{input}"), ])# Membuat memori buffer percakapan, dan mengaktifkan fitur pengembalian pesan.memory =ConversationBufferMemory(return_messages=True, memory_key="chat_history")
# Menginisialisasi model ChatOpenAI.llm =ChatOpenAI(model_name="gpt-4o", temperature=0)# Membuat prompt percakapan. Prompt ini mencakup pesan sistem, riwayat percakapan sebelumnya, dan input pengguna.prompt = ChatPromptTemplate.from_messages( [ ("system", "Anda adalah chatbot yang membantu"),MessagesPlaceholder(variable_name="chat_history"), ("human", "{input}"), ])# Membuat memori buffer percakapan, dan mengaktifkan fitur pengembalian pesan.memory =ConversationBufferMemory(return_messages=True, memory_key="chat_history")# Jika ingin mengganti dengan memori ringkasan# memory = ConversationSummaryMemory(# llm=llm, return_messages=True, memory_key="chat_history"# )conversation_chain =MyConversationChain(llm, prompt, memory)
conversation_chain.invoke("Halo? Senang bertemu dengan Anda. Nama saya Teddy.")
Halo, Teddy! Senang bertemu dengan Anda juga. Ada yang bisa saya bantu hari ini?
conversation_chain.invoke("Apa nama saya tadi?")
Nama Anda Teddy. Ada yang bisa saya bantu, Teddy?
conversation_chain.invoke("Tolong jawab hanya dalam bahasa Inggris mulai sekarang, oke?")
Sure, I can do that. How can I assist you today?
conversation_chain.invoke("Bisakah Anda sebutkan nama saya sekali lagi?")
[HumanMessage(content='Halo? Senang bertemu dengan Anda. Nama saya Teddy.'), AIMessage(content='Halo, Teddy! Senang bertemu dengan Anda juga. Ada yang bisa saya bantu hari ini?'), HumanMessage(content='Apa nama saya tadi?'), AIMessage(content='Nama Anda Teddy. Ada yang bisa saya bantu, Teddy?'), HumanMessage(content='Tolong jawab hanya dalam bahasa Inggris mulai sekarang, oke?'), AIMessage(content='Sure, I can do that. How can I assist you today?'), HumanMessage(content='Bisakah Anda sebutkan nama saya sekali lagi?'), AIMessage(content='Your name is Teddy.')]