Improved Langchain Support!
Langchain now includes improved support for Zep, with a new ZepMemory class, access to enriched messages, and more.
New ZepMemory
Class Improves Developer Ergonomics
We've made it easier to use Zep with Langchain. Released in Langchain v0.0.229 is a ZepMemory
class. This simplifies using Zep with your chains, as before today Zep's ZepChatMessageHistory
class had to be wrapped in an existing Langchain Memory.
# Set up Zep Memory
memory = ZepMemory(
session_id=session_id,
url=ZEP_API_URL,
api_key=zep_api_key,
memory_key="chat_history",
)
# Initialize the agent
llm = OpenAI(temperature=0, openai_api_key=openai_key)
agent_chain = initialize_agent(
tools,
llm,
agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
verbose=True,
memory=memory,
)
Improved Access to Enriched Memory
Langchain's ZepMemory
class now provides access to Zep's enriched memory attributes, including extracted entities, intents, token counts, timestamps, and UUIDs.
def print_messages(messages):
for m in messages:
print(m.type, ":\n", m.dict())
print(memory.chat_memory.zep_summary)
print("\n")
print_messages(memory.chat_memory.messages)
The human inquires about Octavia Butler. The AI identifies her as an American science fiction author. The human then asks which books of hers were made into movies. The AI responds by mentioning the FX series Kindred, based on her novel of the same name. The human then asks about her contemporaries, and the AI lists Ursula K. Le Guin, Samuel R. Delany, and Joanna Russ.
system :
{'content': 'The human inquires about Octavia Butler. The AI identifies her as an American science fiction author. The human then asks which books of hers were made into movies. The AI responds by mentioning the FX series Kindred, based on her novel of the same name. The human then asks about her contemporaries, and the AI lists Ursula K. Le Guin, Samuel R. Delany, and Joanna Russ.', 'additional_kwargs': {}}
human :
{'content': 'What awards did she win?', 'additional_kwargs': {'uuid': '6b733f0b-6778-49ae-b3ec-4e077c039f31', 'created_at': '2023-07-09T19:23:16.611232Z', 'token_count': 8, 'metadata': {'system': {'entities': [], 'intent': 'The subject is inquiring about the awards that someone, whose identity is not specified, has won.'}}}, 'example': False}
ai :
{'content': 'Octavia Butler won the Hugo Award, the Nebula Award, and the MacArthur Fellowship.', 'additional_kwargs': {'uuid': '2f6d80c6-3c08-4fd4-8d4e-7bbee341ac90', 'created_at': '2023-07-09T19:23:16.618947Z', 'token_count': 21, 'metadata': {'system': {'entities': [{'Label': 'PERSON', 'Matches': [{'End': 14, 'Start': 0, 'Text': 'Octavia Butler'}], 'Name': 'Octavia Butler'}, {'Label': 'WORK_OF_ART', 'Matches': [{'End': 33, 'Start': 19, 'Text': 'the Hugo Award'}], 'Name': 'the Hugo Award'}, {'Label': 'EVENT', 'Matches': [{'End': 81, 'Start': 57, 'Text': 'the MacArthur Fellowship'}], 'Name': 'the MacArthur Fellowship'}], 'intent': 'The subject is stating that Octavia Butler received the Hugo Award, the Nebula Award, and the MacArthur Fellowship.'}}}, 'example': False}
<snip />
Custom Chains Can Persist and Search Over Custom Metadata
Custom chain developers can now add their own metadata to chat messages when they're persisted to Zep. This metadata is then searchable via the ZepRetriever
or other Zep search functionality.
The ZepMemory
class's save_context
method now supports passing in a metadata
argument. Your custom Chain class must override the base Chain's `prep_outputs` method to include the metadata in the call to self.memory.save_context
.
Other Improvements
The chat history summary is now included in the ZepMemory
chat history as a SystemMessage
, whereas before, it was a HumanMessage
. This change reduces ambiguity as to the origin of the summary.