Bộ nhớ Dựa trên Cơ sở Dữ liệu Vector
VectorStoreRetrieverMemory
lưu trữ các bộ nhớ trong cơ sở dữ liệu vector và trả về K nội dung tương tự hàng đầu mỗi khi dữ liệu bộ nhớ lịch sử được truy vấn.
Ở đây, "tài liệu" đề cập đến các đoạn tin nhắn trò chuyện trước đó.
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
Khởi tạo Cơ sở Dữ liệu Vector
Các cơ sở dữ liệu vector khác nhau có các bước khởi tạo khác nhau một chút. Dưới đây là một ví dụ sử dụng Faiss.
import faiss
from langchain.docstore import InMemoryDocstore
from langchain_community.vectorstores import FAISS
kích_thước_embedding = 1536 # Số chiều vector
chỉ số = faiss.IndexFlatL2(kích_thước_embedding)
embedding_fn = OpenAIEmbeddings().embed_query
vectorstore = FAISS(embedding_fn, chỉ số, InMemoryDocstore({}), {})
Tạo VectorStoreRetrieverMemory
Tạo thành phần VectorStoreRetrieverMemory bằng cách sử dụng cơ sở dữ liệu vector.
retriever = vectorstore.as_retriever(search_kwargs=dict(k=1))
memory = VectorStoreRetrieverMemory(retriever=retriever)
memory.save_context({"input": "Món ưa thích của tôi là pizza"}, {"output": "Rất vui được biết"})
memory.save_context({"input": "Môn thể thao yêu thích của tôi là bóng đá"}, {"output": "..."})
memory.save_context({"input": "Tôi không thích đội Celtics"}, {"output": "ok"}) #
print(memory.load_memory_variables({"prompt": "Tôi nên xem môn thể thao nào?"})["history"])
input: Môn thể thao yêu thích của tôi là bóng đá
output: ...
Sử dụng Thành phần Bộ nhớ thông qua Chuỗi
Dưới đây là một ví dụ về cách sử dụng thành phần bộ nhớ. Bạn có thể đặt tham số "verbose=True" để in các thông báo tương tác với mô hình.
llm = OpenAI(nhiệt_độ=0) # Có thể là bất kỳ LLM hợp lệ nào, ở đây chúng tôi chọn openai
_DEFAULT_TEMPLATE = """Đây là một cuộc trò chuyện thân thiện giữa con người và AI. AI là người nói nhiều và cung cấp nhiều chi tiết cụ thể từ ngữ cảnh của mình. Nếu AI không biết câu trả lời cho câu hỏi, nó sẽ thành thật nói rằng nó không biết.
Các phần liên quan của cuộc trò chuyện trước đó:
{history}
(Nếu không liên quan, bạn không cần sử dụng thông tin này)
Cuộc trò chuyện hiện tại:
Con người: {input}
AI:"""
PROMPT = PromptTemplate(
input_variables=["history", "input"],
template=_DEFAULT_TEMPLATE
)
conversation_with_summary = ConversationChain(
llm=llm,
prompt=PROMPT,
memory=memory,
verbose=True
)
conversation_with_summary.predict(input="Xin chào, tên tôi là Perry, có gì mới?")
> Bắt đầu chuỗi mới của ConversationChain...
Câu hỏi sau khi định dạng:
Đây là một cuộc trò chuyện thân thiện giữa con người và AI. AI là người nói nhiều và cung cấp nhiều chi tiết cụ thể từ ngữ cảnh của mình. Nếu AI không biết câu trả lời cho câu hỏi, nó sẽ thành thật nói rằng nó không biết.
Các phần liên quan của cuộc trò chuyện trước đó:
Input: Món ưa thích của tôi là pizza.
Output: Rất vui được biết.
(Nếu không liên quan, bạn không cần sử dụng thông tin này)
Cuộc trò chuyện hiện tại:
Con người: Xin chào, tên tôi là Perry, có gì mới?
AI:
> Hoàn thành chuỗi.
"Xin chào Perry, tôi cảm thấy tốt. Còn bạn thì sao?"
conversation_with_summary.predict(input="Môn thể thao yêu thích của tôi là gì?")
> Bắt đầu chuỗi mới của ConversationChain...
Câu hỏi sau khi định dạng:
Đây là một cuộc trò chuyện thân thiện giữa con người và AI. AI là người nói nhiều và cung cấp nhiều chi tiết cụ thể từ ngữ cảnh của mình. Nếu AI không biết câu trả lời cho câu hỏi, nó sẽ thành thật nói rằng nó không biết.
Các phần liên quan của cuộc trò chuyện trước đó:
Input: Môn thể thao yêu thích của tôi là bóng đá.
Output: ...
(Nếu không liên quan, bạn không cần sử dụng thông tin này)
Cuộc trò chuyện hiện tại:
Con người: Môn thể thao yêu thích của tôi là gì?
AI:
> Hoàn thành chuỗi.
'Bạn đã nói với tôi trước đó rằng môn thể thao yêu thích của bạn là bóng đá.'