Komponen Memori Berbasis Database Vektor
VectorStoreRetrieverMemory
menyimpan memori dalam database vektor dan mengembalikan K konten serupa paling atas setiap kali data memori historis ditanyakan.
Di sini, "dokumen" merujuk kepada fragmen pesan dialog sebelumnya.
from datetime import datetime
from langchain_openai import OpenAIEmbeddings
from langchain_openai import OpenAI
from langchain.memory import VectorStoreRetrieverMemory
from langchain.chains import ConversationChain
from langchain_core.prompts import PromptTemplate
Menginisialisasi Database Vektor
Berbagai database vektor memiliki langkah inisialisasi yang sedikit berbeda. Berikut adalah contoh penggunaan Faiss.
import faiss
from langchain.docstore import InMemoryDocstore
from langchain_community.vectorstores import FAISS
ukuran_embedding = 1536 # Dimensi vektor
indeks = faiss.IndexFlatL2(ukuran_embedding)
fungsi_penggabungan = OpenAIEmbeddings().embed_query
vectorstore = FAISS(fungsi_penggabungan, indeks, InMemoryDocstore({}), {})
Membuat VectorStoreRetrieverMemory
Membuat komponen VectorStoreRetrieverMemory dengan menggunakan database vektor.
pengambil = vectorstore.as_retriever(search_kwargs=dict(k=1))
memori = VectorStoreRetrieverMemory(retriever=pengambil)
memori.save_context({"input": "Makanan favorit saya adalah pizza"}, {"output": "Bagus untuk diketahui"})
memori.save_context({"input": "Olahraga favorit saya adalah sepak bola"}, {"output": "..."})
memori.save_context({"input": "Saya tidak suka Celtics"}, {"output": "ok"}) #
print(memori.load_memory_variables({"prompt": "Olahraga apa yang harus saya tonton?"})["histori"])
input: Olahraga favorit saya adalah sepak bola
output: ...
Menggunakan Komponen Memori melalui Chain
Berikut adalah contoh belajar bagaimana menggunakan komponen memori. Anda dapat mengatur parameter "verbose=True" untuk mencetak prompt interaktif dengan model.
llm = OpenAI(temperature=0) # Bisa menjadi LLM yang valid, di sini kita memilih openai
_DEFAULT_TEMPLATE = """Berikut adalah percakapan ramah antara manusia dan AI. AI ini cerewet dan memberikan banyak detail spesifik dari konteksnya. Jika AI tidak tahu jawaban dari pertanyaan tersebut, ia akan dengan tulus mengatakan bahwa ia tidak tahu.
Bagian relevan dari percakapan sebelumnya:
{histori}
(Jika tidak relevan, Anda tidak perlu menggunakan informasi ini)
Percakapan saat ini:
Manusia: {input}
AI:"""
PROMPT = PromptTemplate(
input_variables=["histori", "input"],
template=_DEFAULT_TEMPLATE
)
percakapan_dengan_ringkasan = ConversationChain(
llm=llm,
prompt=PROMPT,
memori=memori,
verbose=True
)
percakapan_dengan_ringkasan.predict(input="Hi, namaku Perry, apa kabar?")
> Masuk ke rantai ConversationChain baru...
Prompt setelah diformat:
Berikut adalah percakapan ramah antara manusia dan AI. AI ini cerewet dan memberikan banyak detail spesifik dari konteksnya. Jika AI tidak tahu jawaban dari pertanyaan tersebut, ia akan dengan tulus mengatakan bahwa ia tidak tahu.
Bagian relevan dari percakapan sebelumnya:
Input: Makanan favorit saya adalah pizza.
Output: Bagus untuk diketahui.
(Jika tidak relevan, Anda tidak perlu menggunakan informasi ini)
Percakapan saat ini:
Manusia: Hi, namaku Perry, apa kabar?
AI:
> Selesai rantai.
"Hi Perry, aku baik-baik saja. Bagaimana denganmu?"
percakapan_dengan_ringkasan.predict(input="Apa olahraga favoritku?")
> Masuk ke rantai ConversationChain baru...
Prompt setelah diformat:
Berikut adalah percakapan ramah antara manusia dan AI. AI ini cerewet dan memberikan banyak detail spesifik dari konteksnya. Jika AI tidak tahu jawaban dari pertanyaan tersebut, ia akan dengan tulus mengatakan bahwa ia tidak tahu.
Bagian relevan dari percakapan sebelumnya:
Input: Olahraga favorit saya adalah sepak bola.
Output: ...
(Jika tidak relevan, Anda tidak perlu menggunakan informasi ini)
Percakapan saat ini:
Manusia: Apa olahraga favoritku?
AI:
> Selesai rantai.
'Anda ceritakan ke saya sebelumnya bahwa olahraga favorit Anda adalah sepak bola.'