跳到主要內容

Zep Cloud

Zep Cloud 的檢索器範例Zep Cloud

從聊天記錄中回憶、理解和提取數據。為個人化 AI 體驗提供動力。

Zep 是 AI 助理應用程式的長期記憶服務。透過 Zep,您可以讓 AI 助理能夠回憶起過去的對話,無論時間多麼久遠,同時減少幻覺、延遲和成本。

請參閱Zep Cloud 安裝指南 和更多Zep Cloud Langchain 範例

檢索器範例

此筆記本示範如何使用 Zep 長期記憶儲存庫搜尋歷史聊天訊息記錄。

我們將示範

  1. 將對話歷史記錄新增到 Zep 記憶儲存庫。
  2. 對話歷史記錄的向量搜尋
    1. 使用聊天訊息的相似度搜尋
    2. 使用最大邊際相關性重新排序聊天訊息搜尋結果
    3. 使用元數據篩選器篩選搜尋結果
    4. 對聊天訊息摘要的相似度搜尋
    5. 使用最大邊際相關性重新排序摘要搜尋結果
import getpass
import time
from uuid import uuid4

from langchain_community.memory.zep_cloud_memory import ZepCloudMemory
from langchain_community.retrievers import ZepCloudRetriever
from langchain_core.messages import AIMessage, HumanMessage

# Provide your Zep API key.
zep_api_key = getpass.getpass()

初始化 Zep 聊天訊息歷史記錄類別,並將聊天訊息歷史記錄新增到記憶體儲存區

注意: 與其他檢索器不同,Zep 檢索器傳回的內容是會話/使用者特定的。在實例化檢索器時,需要 session_id

session_id = str(uuid4())  # This is a unique identifier for the user/session

# Initialize the Zep Memory Class
zep_memory = ZepCloudMemory(session_id=session_id, api_key=zep_api_key)
# Preload some messages into the memory. The default message window is 4 messages. We want to push beyond this to demonstrate auto-summarization.
test_history = [
{"role": "human", "role_type": "user", "content": "Who was Octavia Butler?"},
{
"role": "ai",
"role_type": "assistant",
"content": (
"Octavia Estelle Butler (June 22, 1947 – February 24, 2006) was an American"
" science fiction author."
),
},
{
"role": "human",
"role_type": "user",
"content": "Which books of hers were made into movies?",
},
{
"role": "ai",
"role_type": "assistant",
"content": (
"The most well-known adaptation of Octavia Butler's work is the FX series"
" Kindred, based on her novel of the same name."
),
},
{"role": "human", "role_type": "user", "content": "Who were her contemporaries?"},
{
"role": "ai",
"role_type": "assistant",
"content": (
"Octavia Butler's contemporaries included Ursula K. Le Guin, Samuel R."
" Delany, and Joanna Russ."
),
},
{"role": "human", "role_type": "user", "content": "What awards did she win?"},
{
"role": "ai",
"role_type": "assistant",
"content": (
"Octavia Butler won the Hugo Award, the Nebula Award, and the MacArthur"
" Fellowship."
),
},
{
"role": "human",
"role_type": "user",
"content": "Which other women sci-fi writers might I want to read?",
},
{
"role": "ai",
"role_type": "assistant",
"content": "You might want to read Ursula K. Le Guin or Joanna Russ.",
},
{
"role": "human",
"role_type": "user",
"content": (
"Write a short synopsis of Butler's book, Parable of the Sower. What is it"
" about?"
),
},
{
"role": "ai",
"role_type": "assistant",
"content": (
"Parable of the Sower is a science fiction novel by Octavia Butler,"
" published in 1993. It follows the story of Lauren Olamina, a young woman"
" living in a dystopian future where society has collapsed due to"
" environmental disasters, poverty, and violence."
),
},
{
"role": "human",
"role_type": "user",
"content": "What is the setting of the book?",
},
{
"role": "ai",
"role_type": "assistant",
"content": (
"The book is set in a dystopian future in the 2020s, where society has"
" collapsed due to climate change and economic crises."
),
},
{"role": "human", "role_type": "user", "content": "Who is the protagonist?"},
{
"role": "ai",
"role_type": "assistant",
"content": (
"The protagonist of the book is Lauren Olamina, a young woman who possesses"
" 'hyperempathy', the ability to feel pain and other sensations she"
" witnesses."
),
},
{
"role": "human",
"role_type": "user",
"content": "What is the main theme of the book?",
},
{
"role": "ai",
"role_type": "assistant",
"content": (
"The main theme of the book is survival in the face of drastic societal"
" change and collapse. It also explores themes of adaptability, community,"
" and the human capacity for change."
),
},
{
"role": "human",
"role_type": "user",
"content": "What is the 'Parable of the Sower'?",
},
{
"role": "ai",
"role_type": "assistant",
"content": (
"The 'Parable of the Sower' is a biblical parable that Butler uses as a"
" metaphor in the book. In the parable, a sower scatters seeds, some of"
" which fall on fertile ground and grow, while others fall on rocky ground"
" or among thorns and fail to grow. The parable is used to illustrate the"
" importance of receptivity and preparedness in the face of change."
),
},
{
"role": "human",
"role_type": "user",
"content": "What is Butler's writing style like?",
},
{
"role": "ai",
"role_type": "assistant",
"content": (
"Butler's writing style is known for its clarity, directness, and"
" psychological insight. Her narratives often involve complex, diverse"
" characters and explore themes of race, gender, and power."
),
},
{
"role": "human",
"role_type": "user",
"content": "What other books has she written?",
},
{
"role": "ai",
"content": (
"In addition to 'Parable of the Sower', Butler has written several other"
" notable works, including 'Kindred', 'Dawn', and 'Parable of the Talents'."
),
},
]

for msg in test_history:
zep_memory.chat_memory.add_message(
HumanMessage(content=msg["content"])
if msg["role"] == "human"
else AIMessage(content=msg["content"])
)

time.sleep(
10
) # Wait for the messages to be embedded and summarized, this happens asynchronously.

使用 Zep 檢索器對 Zep 記憶體執行向量搜尋

Zep 提供對歷史對話記憶體的原生向量搜尋。嵌入會自動發生。

注意:訊息的嵌入是非同步發生的,因此第一次查詢可能不會傳回結果。後續查詢將在產生嵌入時傳回結果。

zep_retriever = ZepCloudRetriever(
api_key=zep_api_key,
session_id=session_id, # Ensure that you provide the session_id when instantiating the Retriever
top_k=5,
)

await zep_retriever.ainvoke("Who wrote Parable of the Sower?")
[Document(page_content="What is the 'Parable of the Sower'?", metadata={'score': 0.9333381652832031, 'uuid': 'bebc441c-a32d-44a1-ae61-968e7b3d4956', 'created_at': '2024-05-10T05:02:01.857627Z', 'token_count': 11, 'role': 'human'}),
Document(page_content="The 'Parable of the Sower' is a biblical parable that Butler uses as a metaphor in the book. In the parable, a sower scatters seeds, some of which fall on fertile ground and grow, while others fall on rocky ground or among thorns and fail to grow. The parable is used to illustrate the importance of receptivity and preparedness in the face of change.", metadata={'score': 0.8757256865501404, 'uuid': '193c60d8-2b7b-4eb1-a4be-c2d8afd92991', 'created_at': '2024-05-10T05:02:01.97174Z', 'token_count': 82, 'role': 'ai'}),
Document(page_content="Write a short synopsis of Butler's book, Parable of the Sower. What is it about?", metadata={'score': 0.8641344904899597, 'uuid': 'fc78901d-a625-4530-ba63-1ae3e3b11683', 'created_at': '2024-05-10T05:02:00.942994Z', 'token_count': 21, 'role': 'human'}),
Document(page_content='Parable of the Sower is a science fiction novel by Octavia Butler, published in 1993. It follows the story of Lauren Olamina, a young woman living in a dystopian future where society has collapsed due to environmental disasters, poverty, and violence.', metadata={'score': 0.8581685125827789, 'uuid': '91f2cda4-276e-446d-96bf-07d34e5af616', 'created_at': '2024-05-10T05:02:01.05577Z', 'token_count': 54, 'role': 'ai'}),
Document(page_content="In addition to 'Parable of the Sower', Butler has written several other notable works, including 'Kindred', 'Dawn', and 'Parable of the Talents'.", metadata={'score': 0.8076582252979279, 'uuid': 'e3994519-9a90-410c-b14c-2c652f6d184f', 'created_at': '2024-05-10T05:02:02.401682Z', 'token_count': 37, 'role': 'ai'})]

我們也可以使用 Zep 同步 API 來擷取結果

zep_retriever.invoke("Who wrote Parable of the Sower?")
[Document(page_content='Parable of the Sower is a science fiction novel by Octavia Butler set in a dystopian future in the 2020s. The story follows Lauren Olamina, a young woman living in a society that has collapsed due to environmental disasters, poverty, and violence. The novel explores themes of societal breakdown, the struggle for survival, and the search for a better future.', metadata={'score': 0.8473024368286133, 'uuid': 'e4689f8e-33be-4a59-a9c2-e5ef5dd70f74', 'created_at': '2024-05-10T05:02:02.713123Z', 'token_count': 76})]

使用 MMR 重新排序(最大邊際相關性)

Zep 具有原生的 SIMD 加速支援,可使用 MMR 重新排序結果。這對於消除結果中的冗餘非常有用。

zep_retriever = ZepCloudRetriever(
api_key=zep_api_key,
session_id=session_id, # Ensure that you provide the session_id when instantiating the Retriever
top_k=5,
search_type="mmr",
mmr_lambda=0.5,
)

await zep_retriever.ainvoke("Who wrote Parable of the Sower?")

使用元數據篩選器來精煉搜尋結果

Zep 支援依元數據篩選結果。這對於依實體類型或其他元數據篩選結果非常有用。

更多資訊請參閱: https://help.getzep.com/document-collections#searching-a-collection-with-hybrid-vector-search

filter = {"where": {"jsonpath": '$[*] ? (@.baz == "qux")'}}

await zep_retriever.ainvoke(
"Who wrote Parable of the Sower?", config={"metadata": filter}
)

使用 MMR 重新排序搜尋摘要

Zep 會自動產生聊天訊息的摘要。可以使用 Zep 檢索器搜尋這些摘要。由於摘要是對話的精華,因此它們更可能符合您的搜尋查詢,並為 LLM 提供豐富、簡潔的上下文。

連續的摘要可能包含相似的內容,Zep 的相似度搜尋會傳回最匹配的結果,但多樣性較低。MMR 重新排序結果,以確保您填入提示中的摘要既相關,又能為 LLM 提供額外資訊。

zep_retriever = ZepCloudRetriever(
api_key=zep_api_key,
session_id=session_id, # Ensure that you provide the session_id when instantiating the Retriever
top_k=3,
search_scope="summary",
search_type="mmr",
mmr_lambda=0.5,
)

await zep_retriever.ainvoke("Who wrote Parable of the Sower?")
[Document(page_content='Parable of the Sower is a science fiction novel by Octavia Butler set in a dystopian future in the 2020s. The story follows Lauren Olamina, a young woman living in a society that has collapsed due to environmental disasters, poverty, and violence. The novel explores themes of societal breakdown, the struggle for survival, and the search for a better future.', metadata={'score': 0.8473024368286133, 'uuid': 'e4689f8e-33be-4a59-a9c2-e5ef5dd70f74', 'created_at': '2024-05-10T05:02:02.713123Z', 'token_count': 76}),
Document(page_content='The \'Parable of the Sower\' refers to a new religious belief system that the protagonist, Lauren Olamina, develops over the course of the novel. As her community disintegrates due to climate change, economic collapse, and social unrest, Lauren comes to believe that humanity must adapt and "shape God" in order to survive. The \'Parable of the Sower\' is the foundational text of this new religion, which Lauren calls "Earthseed", that emphasizes the inevitability of change and the need for humanity to take an active role in shaping its own future. This parable is a central thematic element of the novel, representing the protagonist\'s search for meaning and purpose in the face of societal upheaval.', metadata={'score': 0.8466987311840057, 'uuid': '1f1a44eb-ebd8-4617-ac14-0281099bd770', 'created_at': '2024-05-10T05:02:07.541073Z', 'token_count': 146}),
Document(page_content='The dialog discusses the central themes of Octavia Butler\'s acclaimed science fiction novel "Parable of the Sower." The main theme is survival in the face of drastic societal collapse, and the importance of adaptability, community, and the human capacity for change. The "Parable of the Sower," a biblical parable, serves as a metaphorical framework for the novel, illustrating the need for receptivity and preparedness when confronting transformative upheaval.', metadata={'score': 0.8283970355987549, 'uuid': '4158a750-3ccd-45ce-ab88-fed5ba68b755', 'created_at': '2024-05-10T05:02:06.510068Z', 'token_count': 91})]

此頁面是否對您有幫助?