ส่วนประกอบของหน่วยความจำที่มีพื้นที่โปรแกรมเบส Vector

VectorStoreRetrieverMemory เก็บความทรงจำในฐานข้อมูล vector และส่งคืนเนื้อหาที่คล้ายกันที่สุด 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  # ขนาด vector
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"])
input: กีฬาที่โปรดของฉันคือฟุตบอล
output: ...

การใช้งานส่วนประกอบของหน่วยความจำผ่าน Chain

ด้านล่างคือตัวอย่างของการเรียนรู้ว่าจะใช้ส่วนประกอบความจำอย่างไร คุณสามารถตั้งพารามิเตอร์ "verbose=True" เพื่อพิมพ์โพรมป์โต้แบบโต้คณะกับโมเดล

llm = OpenAI(temperature=0) # สามารถเป็น LLM ใดก็ได้ที่ถูกต้อง, ที่นี่เราเลือก openai
_DEFAULT_TEMPLATE = """นี่คือการสนทนาที่เป็นมิตรระหว่างมนุษย์และ AI  AI คุยเป็นมากและให้รายละเอียดโดยเฉพาะจากบริบทของมัน ถ้า AI ไม่ทราบคำตอบต่อคำถาม มันจะกระซิบว่ามันไม่ทราบ

ส่วนที่เกี่ยวข้องของการสนทนาก่อนหน้า
{history}

(ถ้าไม่เกี่ยวข้อง คุณไม่จำเป็นต้องใช้ข้อมูลนี้)

การสนทนาปัจจุบัน
มนุษย์: {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="สวัสดี ฉันชื่อแพรรี่ สบายดีไหม?")
> เข้าสู่โซ่ ConversationChain ใหม่...
    โพรมปัจจุบันหลังจากการจัดรูปแบบ:
    นี่คือการสนทนาที่เป็นมิตรระหว่างมนุษย์และ AI  AI คุยเป็นมากและให้รายละเอียดโดยเฉพาะจากบริบทของมัน ถ้า AI ไม่ทราบคำตอบต่อคำถาม มันจะกระซิบว่ามันไม่ทราบ

ส่วนที่เกี่ยวข้องของการสนทนาก่อนหน้า:
Input: อาหารที่โปรดของฉันคือพิซซ่า.
Output: ดีที่ได้ทราบ.

(ถ้าไม่เกี่ยวข้อง คุณไม่จำเป็นต้องใช้ข้อมูลนี้)

การสนทนาปัจจุบัน:
มนุษย์: สวัสดี ฉันชื่อแพรรี่ สบายดีไหม?
AI:

> การเชือดสิ้นสุด.
"สวัสดี แพรรี่ ฉันทำดี เจ๋งดีบ้างครับ?" 
conversation_with_summary.predict(input="กีฬาที่ฉันโปรดคืออะไร?")
> เข้าสู่โซ่ ConversationChain ใหม่...
    โพรมปัจจุบันหลังจากการจัดรูปแบบ:
    นี่คือการสนทนาที่เป็นมิตรระหว่างมนุษย์และ AI  AI คุยเป็นมากและให้รายละเอียดโดยเฉพาะจากบริบทของมัน ถ้า AI ไม่ทราบคำตอบต่อคำถาม มันจะกระซิบว่ามันไม่ทราบ

    ส่วนที่เกี่ยวข้องของการสนทนาก่อนหน้า:
    Input: กีฬาที่โปรดของฉันคือฟุตบอล
    Output: ...

    (ถ้าไม่เกี่ยวข้อง คุณไม่จำเป็นต้องใช้ข้อมูลนี้)

    การสนทนาปัจจุบัน:
    มนุษย์: กีฬาที่ฉันโปรดคืออะไร?
    AI:

    > การเชือดสิ้นสุด.
    'คุณบอกฉันไปก่อนหน้านี้ว่ากีฬาที่คุณโปรดคือฟุตบอล.'