کامپوننت حافظه بر اساس پایگاه داده بردار

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

اندازه تعبیه = 1536  # بعد بردار
اندیس = faiss.IndexFlatL2(اندازه تعبیه)
تعبیه_تابع = OpenAIEmbeddings().embed_query
پایگاه_بردار = FAISS(تعبیه_تابع, اندیس, InMemoryDocstore({}), {})

ایجاد VectorStoreRetrieverMemory

ساخت کامپوننت VectorStoreRetrieverMemory با استفاده از پایگاه داده بردار.

بازیاب = پایگاه_بردار.as_retriever(search_kwargs=dict(k=1))
حافظه = VectorStoreRetrieverMemory(بازیاب=بازیاب)

حافظه.save_context({"input": "علاقه‌مند به غذای مورد علاقه‌ام پیتزا است"}, {"output": "خوبه که می‌دونم"})
حافظه.save_context({"input": "ورزش مورد علاقه‌ام فوتبال است"}, {"output": "..."})
حافظه.save_context({"input": "از سلتیکز خوشم نمی‌آید"}, {"output": "خب"}) 
print(حافظه.load_memory_variables({"prompt": "کدام ورزش را ببینم؟"})["history"])
ویراستار: ورزش مورد علاقه‌ام فوتبال است
خروجی: ...

استفاده از کامپوننت حافظه از طریق زنجیره

در زیر، یک مثال از یادگیری راه استفاده از کامپوننت حافظه آورده شده است. می‌توانید پارامتر "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 می‌شویم...
    پس از قالب‌بندی پرس و جو:
    یک گفتگوی دوستانه بین انسان‌ها و هوش مصنوعی است. هوش مصنوعی سخن‌گو و اطلاعات مشخص زیادی از متنش ارائه می‌دهد. اگر هوش مصنوعی پاسخی را به سوال نداشته باشد، به راستی می‌گوید که پاسخی نمی‌داند.

قسمت‌های مرتبطی از گفتگوی قبلی:

ورزش مورد علاقه‌ام فوتبال است.

خروجی: ...

(اگر غیرمرتبط باشد، نیازی نیست از این اطلاعات استفاده کنید)

گفتگوی کنونی:

انسان: ورزش مورد علاقه‌ام کدام است؟

هوش مصنوعی:
    
    > اتمام زنجیره.

    'تو به من قبلا گفته بودی که ورزش مورد علاقه‌ات فوتبال است.'