LangMem SDK:利用語義記憶個性化AI代理

LangMem SDK:利用語義記憶個性化AI代理

在與人工智慧代理互動時,我們經常發現自己在重複分享相同的偏好、事實和資訊。這種長期記憶的缺失意味著人工智慧代理無法從過去的對話中學習,也無法調整自己的反應。試想一下,如果這些人工智慧代理能夠記住你的偏好,從以前的互動中學習,並相應地最佳化其行為,長期保留你的行為、事實和事件的知識。最終,這將使人工智慧代理在長期對話中表現得更加智慧。在本文中,我們將揭示 LangMem SDK 如何讓你的代理利用長期記憶來學習和適應。此外,我們還可以根據不同的使用者隔離記憶並持久地維護它。

  • 瞭解什麼是 LangChain 最近推出的 LangMem SDK。
  • 瞭解它作為長期記憶體所採用的記憶體儲存概念。
  • 探索 LangMem SDK 工具及其使用方法。
  • 深入瞭解將 LangMem SDK 與人工智慧代理整合的應用和優勢。

LangMem SDK簡介

最近,Langchain 推出了一款名為 LangMem 的軟體開發工具包(SDK),用於長期記憶儲存,可與人工智慧代理整合。其工具提供了從對話中提取資訊的功能。這些工具可幫助代理記住使用者的偏好並提供事實,最終對提示進行微調並完善代理的行為。在與代理的每次互動中,儲存的記憶都會得到更新。因此,它可以根據記憶進行調整並提供更高的效能,從而幫助開發出更好的上下文感知、連貫和最佳化的人工智慧代理。

記憶體儲存概念

LangMem 有一個核心記憶體 API,可以將記憶體儲存在任何儲存器中,如後端資料庫或記憶體向量儲存器。它的功能獨立於與 LangMem 整合的資料庫,其工具可直接訪問代理,以執行這些記憶體管理操作。它根據對話提取新記憶體,理解上下文,並更新現有記憶體。這就是下文將詳細解釋的語義記憶體概念。

LangMem SDK

Source: LangMem SDK

語義記憶

語義記憶儲存的是我們無法從LLM或知識庫中獲取的事實。在語義記憶中,記憶作為事實儲存在鍵值對中,我們從使用者的對話中獲取這些事實。代理以後可以利用這種語義記憶來檢索與上下文相似的記憶,並對代理進行相應的調整。當我們無法從預先訓練好的模型和任何整合知識庫中獲取資料,而又需要隨時對代理進行定製和個性化時,這種型別的記憶就非常有用。此外,它還注重資訊的重要性,比如儲存最常用的資訊。它有助於在建立記憶和鞏固記憶之間保持平衡。

從下圖中我們可以看到,當使用者在對話過程中指定客戶端位置時,它會同時驗證資料並更新記憶體向量,如下圖所示,以儲存更新的資料。

如何設定和安裝LangMem

下面讓我們來看看如何設定和安裝 LangMem:

Step 1:安裝軟體包

要將 LangMem 與人工智慧代理整合,我們首先需要安裝 langmem 軟體包

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
!pip install -U langmem #This package for Integrating LangMem
!pip install langchain
!pip install langgraph
!pip install -qU "langchain[groq]"
!pip install -U langmem #This package for Integrating LangMem !pip install langchain !pip install langgraph !pip install -qU "langchain[groq]"
!pip install -U langmem #This package for Integrating LangMem
!pip install langchain
!pip install langgraph
!pip install -qU "langchain[groq]"

Step 2:配置API金鑰

在計劃使用模型的環境變數中配置提供商的 API 金鑰。我們將使用 Groq 的開源模型,因此將 Groq API 金鑰匯出為環境變數。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Export GROQ_API_KEY = "<your groq api key>"
Export GROQ_API_KEY = "<your groq api key>"
Export GROQ_API_KEY = "<your groq api key>"

Step 3:匯入必要的軟體包

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from langgraph.prebuilt import create_react_agent
from langchain.chat_models import init_chat_model
from langgraph.store.memory import InMemoryStore
from langgraph.store.memory import InMemorySaver
from langmem import create_manage_memory_tool, create_search_memory_tool
from langgraph.prebuilt import create_react_agent from langchain.chat_models import init_chat_model from langgraph.store.memory import InMemoryStore from langgraph.store.memory import InMemorySaver from langmem import create_manage_memory_tool, create_search_memory_tool
from langgraph.prebuilt import create_react_agent
from langchain.chat_models import init_chat_model
from langgraph.store.memory import InMemoryStore
from langgraph.store.memory import InMemorySaver
from langmem import create_manage_memory_tool, create_search_memory_tool

在上述匯入中,create_react_agent 用於建立人工智慧代理,我們將與之整合 langmem。init_chat_model 用於初始化聊天模型,並提供代理需要使用的模型名稱。建立管理記憶體工具(create_manage_memory_tool)和建立搜尋記憶體工具(create_search_memory_tool)是用於提取、管理和最佳化代理長期記憶體的 Langmem 工具。

Step 4:定義Langmem工具

在下面的程式碼片段中,名稱空間有助於識別和分割儲存的資訊,例如我們在這裡傳遞了“agent_memory”作為名稱空間。你可以提供任何你想提供的名稱。

create_manage_memory_tool 用於儲存新資訊,而 create_search_memory_tool 用於使用語義搜尋檢索過去的資訊。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
tools = [
create_manage_memory_tool(namespace=("agent_memory",)),
create_search_memory_tool(namespace=("agent_memory",)),]
tools = [ create_manage_memory_tool(namespace=("agent_memory",)), create_search_memory_tool(namespace=("agent_memory",)),]
tools = [
create_manage_memory_tool(namespace=("agent_memory",)),
create_search_memory_tool(namespace=("agent_memory",)),]

Step 5:設定記憶體儲存

在這裡,我們使用 InMemory 儲存器,並定義用於建立嵌入式的 openai embeddings。我們傳遞的“dims”為 1536,這將建立一個 1536 維的嵌入向量,這些向量將儲存在記憶體中。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
store = InMemoryStore(
index={
"dims": 1536,
"embed": "openai:text-embedding-3-small",
}
)
store = InMemoryStore( index={ "dims": 1536, "embed": "openai:text-embedding-3-small", } )
store = InMemoryStore(
index={
"dims": 1536,
"embed": "openai:text-embedding-3-small",
}
)

Step 6:初始化聊天模型

下一步是初始化我們要使用的聊天模型。我們使用開源模型 llama3 來初始化代理

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
model = init_chat_model("llama3-8b-8192", model_provider="groq")
model = init_chat_model("llama3-8b-8192", model_provider="groq")
model = init_chat_model("llama3-8b-8192", model_provider="groq")

Step 7:新增校驗指標

我們正在新增名為校驗指標的短期儲存器

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
checkpointer = InMemorySaver()
checkpointer = InMemorySaver()
checkpointer = InMemorySaver()

Step 8:啟用代理

最後,我們透過傳遞上述定義的所有引數來啟用代理,如下所示。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
agent_executor = create_react_agent(llm=model, tools=tools, checkpointer=checkpointer, store=store)
agent_executor = create_react_agent(llm=model, tools=tools, checkpointer=checkpointer, store=store)
agent_executor = create_react_agent(llm=model, tools=tools, checkpointer=checkpointer, store=store)

現在,我們可以執行代理,並透過與代理的一般互動進行測試。Langmem 工具在後臺工作,記憶檢索會自動進行。我們無需向代理明確傳遞任何資訊。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
text = "Hi, Please create two weeks itinerary in short for my Europe trip from India in mid-budget in bullet points"
session_id = 1
result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id}})
print(result["messages"][-1].content)
text = "Hi, Please create two weeks itinerary in short for my Europe trip from India in mid-budget in bullet points" session_id = 1 result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id}}) print(result["messages"][-1].content)
text = "Hi, Please create two weeks itinerary in short for my Europe trip from India in mid-budget in bullet points"
session_id = 1
result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id}})
print(result["messages"][-1].content)

輸出

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
"Day 1: Arrive in London, UK\n- Arrive in London.\n- Evening: Explore London Eye, Big Ben, Trafalgar Square.\n
Day 2: Explore London\n- Visit The British Museum, Buckingham Palace, Westminster Abbey, Tower Bridge.\n- Evening: Dinner at Borough Market or a pub.\n
Day 3: Day Trip to Stonehenge & Bath\n- Visit Stonehenge and Roman Baths in Bath.\n- Return to London.\n
Day 4: Travel to Paris\n- Take Eurostar train (2.5 hours) to Paris.\n- Evening: Eiffel Tower, Champs-Élysées.\n
Day 5: Explore Paris\n- Visit Louvre Museum, Notre Dame, Montmartre, Sacré-Cœur.\n
Day 6: Day Trip to Versailles\n- Visit Versailles Palace and gardens.\n- Return to Paris.\n
Day 7: Travel to Amsterdam\n- Take Thalys train (3.5 hours) to Amsterdam.\n- Evening: Explore Canals, Anne Frank House, Dam Square.\n
Day 8: Explore Amsterdam\n- Visit Van Gogh Museum, Rijksmuseum, Vondelpark.\n- Canal tour.\n
Day 9: Travel to Berlin\n- Take train (6-7 hours) to Berlin.\n- Evening: Brandenburg Gate, Berlin Wall.\n
Day 10: Explore Berlin\n- Visit Berlin Wall Memorial, Pergamon Museum, East Side Gallery.\n- Evening: Explore Kreuzberg district.\n
Day 11: Travel to Prague\n- Take train (4.5 hours) to Prague.\n- Evening: Explore Old Town Square, Astronomical Clock, Charles Bridge.\n
Day 12: Explore Prague\n- Visit Prague Castle, St. Vitus Cathedral, Golden Lane.\n- Evening: Visit Petrin Hill.\n
Day 13: Travel to Vienna\n- Take train (4 hours) to Vienna.\n- Evening: Explore St. Stephen's Cathedral, Hofburg Palace.\n
Day 14: Explore Vienna & Departure\n- Visit Schönbrunn Palace, Belvedere Palace, Kunsthistorisches Museum.\n- Departure.\n
General Tips:\n- Use city passes for discounts on transport and attractions.\n- Book trains in advance for better prices.\n- Opt for mid-range accommodations like boutique hotels or Airbnb.\n"
"Day 1: Arrive in London, UK\n- Arrive in London.\n- Evening: Explore London Eye, Big Ben, Trafalgar Square.\n Day 2: Explore London\n- Visit The British Museum, Buckingham Palace, Westminster Abbey, Tower Bridge.\n- Evening: Dinner at Borough Market or a pub.\n Day 3: Day Trip to Stonehenge & Bath\n- Visit Stonehenge and Roman Baths in Bath.\n- Return to London.\n Day 4: Travel to Paris\n- Take Eurostar train (2.5 hours) to Paris.\n- Evening: Eiffel Tower, Champs-Élysées.\n Day 5: Explore Paris\n- Visit Louvre Museum, Notre Dame, Montmartre, Sacré-Cœur.\n Day 6: Day Trip to Versailles\n- Visit Versailles Palace and gardens.\n- Return to Paris.\n Day 7: Travel to Amsterdam\n- Take Thalys train (3.5 hours) to Amsterdam.\n- Evening: Explore Canals, Anne Frank House, Dam Square.\n Day 8: Explore Amsterdam\n- Visit Van Gogh Museum, Rijksmuseum, Vondelpark.\n- Canal tour.\n Day 9: Travel to Berlin\n- Take train (6-7 hours) to Berlin.\n- Evening: Brandenburg Gate, Berlin Wall.\n Day 10: Explore Berlin\n- Visit Berlin Wall Memorial, Pergamon Museum, East Side Gallery.\n- Evening: Explore Kreuzberg district.\n Day 11: Travel to Prague\n- Take train (4.5 hours) to Prague.\n- Evening: Explore Old Town Square, Astronomical Clock, Charles Bridge.\n Day 12: Explore Prague\n- Visit Prague Castle, St. Vitus Cathedral, Golden Lane.\n- Evening: Visit Petrin Hill.\n Day 13: Travel to Vienna\n- Take train (4 hours) to Vienna.\n- Evening: Explore St. Stephen's Cathedral, Hofburg Palace.\n Day 14: Explore Vienna & Departure\n- Visit Schönbrunn Palace, Belvedere Palace, Kunsthistorisches Museum.\n- Departure.\n General Tips:\n- Use city passes for discounts on transport and attractions.\n- Book trains in advance for better prices.\n- Opt for mid-range accommodations like boutique hotels or Airbnb.\n"
"Day 1: Arrive in London, UK\n- Arrive in London.\n- Evening: Explore London Eye, Big Ben, Trafalgar Square.\n
Day 2: Explore London\n- Visit The British Museum, Buckingham Palace, Westminster Abbey, Tower Bridge.\n- Evening: Dinner at Borough Market or a pub.\n
Day 3: Day Trip to Stonehenge & Bath\n- Visit Stonehenge and Roman Baths in Bath.\n- Return to London.\n
Day 4: Travel to Paris\n- Take Eurostar train (2.5 hours) to Paris.\n- Evening: Eiffel Tower, Champs-Élysées.\n
Day 5: Explore Paris\n- Visit Louvre Museum, Notre Dame, Montmartre, Sacré-Cœur.\n
Day 6: Day Trip to Versailles\n- Visit Versailles Palace and gardens.\n- Return to Paris.\n
Day 7: Travel to Amsterdam\n- Take Thalys train (3.5 hours) to Amsterdam.\n- Evening: Explore Canals, Anne Frank House, Dam Square.\n
Day 8: Explore Amsterdam\n- Visit Van Gogh Museum, Rijksmuseum, Vondelpark.\n- Canal tour.\n
Day 9: Travel to Berlin\n- Take train (6-7 hours) to Berlin.\n- Evening: Brandenburg Gate, Berlin Wall.\n
Day 10: Explore Berlin\n- Visit Berlin Wall Memorial, Pergamon Museum, East Side Gallery.\n- Evening: Explore Kreuzberg district.\n
Day 11: Travel to Prague\n- Take train (4.5 hours) to Prague.\n- Evening: Explore Old Town Square, Astronomical Clock, Charles Bridge.\n
Day 12: Explore Prague\n- Visit Prague Castle, St. Vitus Cathedral, Golden Lane.\n- Evening: Visit Petrin Hill.\n
Day 13: Travel to Vienna\n- Take train (4 hours) to Vienna.\n- Evening: Explore St. Stephen's Cathedral, Hofburg Palace.\n
Day 14: Explore Vienna & Departure\n- Visit Schönbrunn Palace, Belvedere Palace, Kunsthistorisches Museum.\n- Departure.\n
General Tips:\n- Use city passes for discounts on transport and attractions.\n- Book trains in advance for better prices.\n- Opt for mid-range accommodations like boutique hotels or Airbnb.\n"

現在,我們在同一個 session_id 中作為後續問題查詢代理為我們提供旅行選項。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
text = "Also, pls suggest travel options for above plan in short"
session_id = 1
result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id}})
print(result["messages"][-1].content)
text = "Also, pls suggest travel options for above plan in short" session_id = 1 result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id}}) print(result["messages"][-1].content)
text = "Also, pls suggest travel options for above plan in short"
session_id = 1
result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id}})
print(result["messages"][-1].content)

輸出

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
"Day 1: Arrive in London\nTravel Option: Flight from India to London.\n
Day 2-3: Explore London & Stonehenge\nTravel Option: Use London Underground, rent a car for Stonehenge.\n
Day 4-5: Travel to Paris & Explore\nTravel Option: Eurostar train to Paris, use Paris Métro.\n
Day 6: Versailles Day Trip\nTravel Option: Take RER C train.\n
Day 7-8: Travel to Amsterdam & Explore\nTravel Option: Thalys train, bike or canal cruise.\n
Day 9-10: Travel to Berlin & Explore\nTravel Option: Train to Berlin, use U-Bahn/S-Bahn.\n
Day 11-12: Travel to Prague & Explore\nTravel Option: Train to Prague"
"Day 1: Arrive in London\nTravel Option: Flight from India to London.\n Day 2-3: Explore London & Stonehenge\nTravel Option: Use London Underground, rent a car for Stonehenge.\n Day 4-5: Travel to Paris & Explore\nTravel Option: Eurostar train to Paris, use Paris Métro.\n Day 6: Versailles Day Trip\nTravel Option: Take RER C train.\n Day 7-8: Travel to Amsterdam & Explore\nTravel Option: Thalys train, bike or canal cruise.\n Day 9-10: Travel to Berlin & Explore\nTravel Option: Train to Berlin, use U-Bahn/S-Bahn.\n Day 11-12: Travel to Prague & Explore\nTravel Option: Train to Prague"
"Day 1: Arrive in London\nTravel Option: Flight from India to London.\n
Day 2-3: Explore London & Stonehenge\nTravel Option: Use London Underground, rent a car for Stonehenge.\n
Day 4-5: Travel to Paris & Explore\nTravel Option: Eurostar train to Paris, use Paris Métro.\n
Day 6: Versailles Day Trip\nTravel Option: Take RER C train.\n
Day 7-8: Travel to Amsterdam & Explore\nTravel Option: Thalys train, bike or canal cruise.\n
Day 9-10: Travel to Berlin & Explore\nTravel Option: Train to Berlin, use U-Bahn/S-Bahn.\n
Day 11-12: Travel to Prague & Explore\nTravel Option: Train to Prague"

現在,我們將更改 session_id,並查詢一個後續問題,檢查它是否根據儲存的記憶體檢索資料:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
text = "Also, pls suggest food options for my Euope trip"
session_id = 2
result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id}})
print(result["messages"][-1].content)
text = "Also, pls suggest food options for my Euope trip" session_id = 2 result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id}}) print(result["messages"][-1].content)
text = "Also, pls suggest food options for my Euope trip"
session_id = 2
result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id}})
print(result["messages"][-1].content)

輸出

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
"Day 1: Arrive in London\nTravel Option: Flight from India to London.\nFood Option: Try Fish and Chips, English Breakfast.\n
Day 2-3: Explore London & Stonehenge\nTravel Option: Use London Underground, rent a car for Stonehenge.\nFood Option: Try Sunday Roast, Beef Wellington.\n
Day 4-5: Travel to Paris & Explore\nTravel Option: Eurostar train to Paris, use Paris Métro.\nFood Option: Try Croissants, Escargot, Coq au Vin.\n
Day 6: Versailles Day Trip\nTravel Option: Take RER C train.\nFood Option: Try French Pastries and Tarte Tatin.\n
Day 7-8: Travel to Amsterdam & Explore\nTravel Option: Thalys train, bike or canal cruise.\nFood Option: Try Stroopwafels, Dutch Pancakes.\n
Day 9-10: Travel to Berlin & Explore\nTravel Option: Train to Berlin, use U-Bahn/S-Bahn.\nFood Option: Try Currywurst, Pretzel, and Sauerkraut.\n
Day 11-12: Travel to Prague & Explore\nTravel Option: Train to Prague, use public trams/metro.\nFood Option: Try Svíčková, Trdelník, Pilsner Beer.\n
Day 13-14: Travel to Vienna & Departure\nTravel Option: Train to Vienna, use Vienna public transport.\nFood Option: Try Wiener Schnitzel, Sachertorte.\n
General Tips: Book trains early, use city passes, opt for mid-range accommodations.\n
"
"Day 1: Arrive in London\nTravel Option: Flight from India to London.\nFood Option: Try Fish and Chips, English Breakfast.\n Day 2-3: Explore London & Stonehenge\nTravel Option: Use London Underground, rent a car for Stonehenge.\nFood Option: Try Sunday Roast, Beef Wellington.\n Day 4-5: Travel to Paris & Explore\nTravel Option: Eurostar train to Paris, use Paris Métro.\nFood Option: Try Croissants, Escargot, Coq au Vin.\n Day 6: Versailles Day Trip\nTravel Option: Take RER C train.\nFood Option: Try French Pastries and Tarte Tatin.\n Day 7-8: Travel to Amsterdam & Explore\nTravel Option: Thalys train, bike or canal cruise.\nFood Option: Try Stroopwafels, Dutch Pancakes.\n Day 9-10: Travel to Berlin & Explore\nTravel Option: Train to Berlin, use U-Bahn/S-Bahn.\nFood Option: Try Currywurst, Pretzel, and Sauerkraut.\n Day 11-12: Travel to Prague & Explore\nTravel Option: Train to Prague, use public trams/metro.\nFood Option: Try Svíčková, Trdelník, Pilsner Beer.\n Day 13-14: Travel to Vienna & Departure\nTravel Option: Train to Vienna, use Vienna public transport.\nFood Option: Try Wiener Schnitzel, Sachertorte.\n General Tips: Book trains early, use city passes, opt for mid-range accommodations.\n "
"Day 1: Arrive in London\nTravel Option: Flight from India to London.\nFood Option: Try Fish and Chips, English Breakfast.\n
Day 2-3: Explore London & Stonehenge\nTravel Option: Use London Underground, rent a car for Stonehenge.\nFood Option: Try Sunday Roast, Beef Wellington.\n
Day 4-5: Travel to Paris & Explore\nTravel Option: Eurostar train to Paris, use Paris Métro.\nFood Option: Try Croissants, Escargot, Coq au Vin.\n
Day 6: Versailles Day Trip\nTravel Option: Take RER C train.\nFood Option: Try French Pastries and Tarte Tatin.\n
Day 7-8: Travel to Amsterdam & Explore\nTravel Option: Thalys train, bike or canal cruise.\nFood Option: Try Stroopwafels, Dutch Pancakes.\n
Day 9-10: Travel to Berlin & Explore\nTravel Option: Train to Berlin, use U-Bahn/S-Bahn.\nFood Option: Try Currywurst, Pretzel, and Sauerkraut.\n
Day 11-12: Travel to Prague & Explore\nTravel Option: Train to Prague, use public trams/metro.\nFood Option: Try Svíčková, Trdelník, Pilsner Beer.\n
Day 13-14: Travel to Vienna & Departure\nTravel Option: Train to Vienna, use Vienna public transport.\nFood Option: Try Wiener Schnitzel, Sachertorte.\n
General Tips: Book trains early, use city passes, opt for mid-range accommodations.\n
"

從上面的輸出中,我們可以看到它記住了歐洲旅行計劃,並在同一計劃的基礎上推薦了食物選項。如果我們不在這裡新增 LangMem,那麼如果我們更改 session_id,代理就無法記住該使用者的上下文,因為它只有短期記憶。在這裡,它將嘗試從記憶庫中查詢語義資訊,並增強對該使用者的響應。這樣,我們就可以利用 LangMem 的長期記憶功能,讓代理變得聰明起來。

利用LangMem併為多個使用者隔離記憶體

如果人工智慧代理有多個使用者,那麼我們希望每個使用者都有獨立的長期記憶,以提供更好的對話體驗。我們可以透過建立不同的名稱空間來隔離記憶體,並在執行時指定 user_id,以獲取或更新特定使用者的記憶體,同時維護隱私。下面是我們如何實現這一目標的示例。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
namespace = {"agent_memory", "{user_id}"}
text = "travel options for my Europe trip"
session_id = 2
user_id = "ab"
result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id, "user_id": user_id}})
namespace = {"agent_memory", "{user_id}"} text = "travel options for my Europe trip" session_id = 2 user_id = "ab" result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id, "user_id": user_id}})
namespace = {"agent_memory", "{user_id}"}
text = "travel options for my Europe trip"
session_id = 2
user_id = "ab"
result = agent_executor.invoke({"messages": [{"role": "user", "content": text}]}, config={"configurable":{"session_id": session_id, "user_id": user_id}})

現在,我們可以透過直接搜尋記憶體儲存來驗證它是否根據 user_id 單獨儲存資料。同時驗證記憶體隔離。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
items = store.search(("agent_memory",))
for item in items:
print(item.namespace, item.value)
items = store.search(("agent_memory",)) for item in items: print(item.namespace, item.value)
items = store.search(("agent_memory",))
for item in items:
print(item.namespace, item.value)

輸出:

根據名稱空間和使用者 ID 進行儲存

從上面的輸出中可以看出,資訊將根據名稱空間和使用者 ID 進行儲存。這樣,LangMem 就能智慧地管理每個使用者的長期記憶體。這有助於保護資料隱私,避免資料洩露。

將LangMem與AI代理整合的好處

  • 一致性:客戶將在多個會話中體驗到連續性,助理會“記住”過去的問題和偏好。
  • 效率:人工智慧助理可以更快地回答問題或解決問題,因為它不需要反覆詢問客戶相同的資訊。
  • 個性化: 系統可以提供更加個性化的解決方案、建議和服務,從而提高客戶滿意度。

使用案例

  • 客戶互動:一位客戶向人工智慧助理諮詢六個月前購買的產品的技術問題。人工智慧助手可以立即檢索產品的保修詳情,對過去的支援單進行故障排除,並根據以往的互動提供個性化的解決方案。
  • 行動中的長期記憶:隨著時間的推移,人工智慧助理會更多地瞭解客戶的偏好,如偏好的溝通語氣(正式與非正式)、產品使用模式或服務升級偏好。這樣就能實現更有效、更高效的互動,為客戶和公司節省時間。
  • 持續改進:隨著人工智慧助理與客戶互動的增多,LangMem 使其能夠保留洞察力,並根據以往的互動情況改進其響應,從而改善整體使用者體驗。

小結

從本質上講,我們可以看到,如果我們利用 LangMem 的功能來有效地保留記憶體,那麼它就能與人工智慧代理進行有價值的整合。它將幫助公司提高人工智慧代理的效能。應針對不同的上下文進行適當的名稱空間隔離,如使用者特定名稱空間和通用名稱空間。高效使用持久資料儲存進行記憶體管理。遵循這些做法並結合 LangMem 工具,我們就能利用智慧記憶體功能逐步增強代理。

  • LangMem SDK 可讓人工智慧代理保留長期記憶,提高對話的連貫性和適應性。
  • 它採用語義記憶儲存來動態儲存和檢索使用者特定的事實和偏好。
  • LangMem 支援與各種資料庫整合,提高了記憶體管理的靈活性。
  • SDK 允許多個使用者維護獨立的記憶體空間,確保個性化的人工智慧互動。
  • 有了 LangMem,人工智慧代理會隨著時間的推移而不斷發展,根據過去的互動情況改進反應和最佳化行為。

評論留言