1. 概述
长期记忆以JSON格式保存在store中,开发和测试可以基于内存,生产系统必须使用数据库。长期记忆内容保存在指定的命名空间并且有一个唯一的标识,命名空间可以嵌套,所以长期记忆支持多层级存储。比如,一级名字空间为root,二级名字空间为企业的统一社会信用代码,三级名字空间为用户唯一标识。
2.创建store
以下代码创建store,用于保存长期记忆,为了支持语义搜索,所以创建store时指定嵌入模型及嵌入字段。
from langchain_huggingface.embeddings.huggingface import HuggingFaceEmbeddings
embedding = HuggingFaceEmbeddings(model_name='../models/text2vec-base-chinese')store = InMemoryStore(
index={
"embed": embedding, # Embedding provider
"dims": 768, # Embedding dimensions
"fields": ["favourite_topic", "$"] # Fields to embed
}
)ns = ('mystore',) #命名空间
memoryid = '13812345678' #键
memory = {'name':'davi', 'favourite_topic': 'joke, essay, story'}#值
store.put(ns, memoryid, memory, index=["favourite_topic"])memories = store.search(
ns,
query="what's davi's favourite topic?",
)
memories
3.工具读长期记忆
创建上下文类,其中传入用户唯一标识:
from dataclasses import dataclass
@dataclass
class Context:
user_id: str
声明访问store的工具:
rom langchain.tools import tool, ToolRuntime
@tool
def get_user_info(runtime: ToolRuntime[Context]) -> str:
"""Look up user info."""
store = runtime.store
user_id = runtime.context.user_id
user_info = store.get(("mystore",), user_id)
return str(user_info.value) if user_info else "Unknown user"
创建agent,传入上下文和store:
from langchain.agents import create_agent
agent = create_agent(
model=llm,
tools=[get_user_info],
# Pass store to agent - enables agent to access store when running tools
store=store,
context_schema=Context
)
调用agent,查找指定用户信息:
agent.invoke(
{"messages": [{"role": "user", "content": "look up user information"}]},
context=Context(user_id="13812345678")
)
4.工具写长期记忆
定义用户信息类:
class UserInfo(TypedDict):
name: str
favourite_topic: str
定义写长期记忆工具:
@tool
def save_user_info(user_info: UserInfo, runtime: ToolRuntime[Context]) -> str:
"""Save user info."""
store = runtime.store
user_id = runtime.context.user_id
store.put(("users",), user_id, user_info)
return "Successfully saved user info."
创建agent,传入上下文类:
agent = create_agent(
model=llm,
tools=[get_user_info, save_user_info],
store=store,
context_schema=Context
)
调用agent保存用户信息到长期记忆中:
agent.invoke(
{"messages": [{"role": "user", "content": "My name is John Smith"}]},
# user_id passed in context to identify whose information is being updated
context=Context(user_id="user_123")
)
178

被折叠的 条评论
为什么被折叠?



