مكون الذاكرة المبني على قاعدة بيانات الفيكتور
VectorStoreRetrieverMemory
يخزن ذكريات في قاعدة بيانات فيكتور ويعيد أعلى K محتويات مماثلة في كل مرة يتم فيها استعلام بيانات الذاكرة التاريخية.
هنا، "المستند" يشير إلى شظايا رسائل الحوار السابقة.
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
تهيئة قاعدة البيانات الفيكتور
لدى قواعد بيانات الفيكتور المختلفة خطوات تهيئة لها قليلة مختلفة. هنا مثال باستخدام Faiss.
import faiss
from langchain.docstore import InMemoryDocstore
from langchain_community.vectorstores import FAISS
embedding_size = 1536 # بعد الفيكتور
index = faiss.IndexFlatL2(embedding_size)
embedding_fn = OpenAIEmbeddings().embed_query
vectorstore = FAISS(embedding_fn, index, InMemoryDocstore({}), {})
إنشاء VectorStoreRetrieverMemory
إنشاء مكون VectorStoreRetrieverMemory باستخدام قاعدة البيانات الفيكتور.
retriever = vectorstore.as_retriever(search_kwargs=dict(k=1))
memory = VectorStoreRetrieverMemory(retriever=retriever)
memory.save_context({"input": "طعامي المفضل هو البيتزا"}, {"output": "جيد أن أعرف"})
memory.save_context({"input": "رياضتي المفضلة هي كرة القدم"}, {"output": "..."})
memory.save_context({"input": "أنا لا أحب السيلتكس"}, {"output": "حسنًا"})
print(memory.load_memory_variables({"prompt": "ما الرياضة التي يجب أن أشاهدها؟"})["history"])
الإدخال: رياضتي المفضلة هي كرة القدم
الإخراج: ...
استخدام مكون الذاكرة عبر Chain
أدناه مثال على تعلم كيفية استخدام مكون الذاكرة. يمكنك ضبط المعلمة "verbose=True" لطباعة الحوارات التفاعلية مع النموذج.
llm = OpenAI(temperature=0) # يمكن أن يكون أي LLM صالح، هنا نختار openai
_DEFAULT_TEMPLATE = """هنا حوار ودي بين البشر والذكاء الاصطناعي. الذكاء الاصطناعي حديث ويقدم العديد من التفاصيل المحددة من سياقه. إذا لم يكن الذكاء الاصطناعي يعرف الإجابة على السؤال، فإنه سيقول صادقاً أنه لا يعرف الإجابة.
أجزاء ذات صلة من الحوار السابق:
{history}
(إذا لم يكن ذلك ذا صلة، فلا حاجة لاستخدام هذه المعلومات)
الحوار الحالي:
إنسان: {input}
ذكاء اصطناعي:"""
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="مرحبًا، اسمي بيري، كيف حالك؟")
> دخول سلسلة جديدة من ConversationChain ...
الحوار بعد التنسيق:
هنا حوار ودي بين البشر والذكاء الاصطناعي. الذكاء الاصطناعي حديث ويقدم العديد من التفاصيل المحددة من سياقه. إذا لم يكن الذكاء الاصطناعي يعرف الإجابة على السؤال، فإنه سيقول صادقاً أنه لا يعرف الإجابة.
أجزاء ذات صلة من الحوار السابق:
الإدخال: طعامي المفضل هو البيتزا.
الإخراج: جيد أن أعرف.
(إذا لم يكن ذلك ذا صلة، فلا حاجة لاستخدام هذه المعلومات)
الحوار الحالي:
إنسان: مرحبًا، اسمي بيري، كيف حالك؟
ذكاء اصطناعي:
> انتهاء السلسلة.
"مرحبا بيري، أنا بخير. وأنت؟"
conversation_with_summary.predict(input="ما هي رياضتي المفضلة؟")
> دخول سلسلة جديدة من ConversationChain ...
الحوار بعد التنسيق:
هنا حوار ودي بين البشر والذكاء الاصطناعي. الذكاء الاصطناعي حديث ويقدم العديد من التفاصيل المحددة من سياقه. إذا لم يكن الذكاء الاصطناعي يعرف الإجابة على السؤال، فإنه سيقول صادقاً أنه لا يعرف الإجابة.
أجزاء ذات صلة من الحوار السابق:
الإدخال: رياضتي المفضلة هي كرة القدم.
الإخراج: ...
(إذا لم يكن ذلك ذا صلة، فلا حاجة لاستخدام هذه المعلومات)
الحوار الحالي:
إنسان: ما هي رياضتي المفضلة؟
ذكاء اصطناعي:
> انتهاء السلسلة.
'قلت لي سابقًا أن رياضتك المفضلة هي كرة القدم.'