发布时间:2026-02-01 19:45:37编辑:123阅读(6)
Agent记忆管理,通过系统化地存储、组织、提取和应用历史信息,显著提升Agent的决策质量、效率、个性化和长期一致性。
create_agent记忆管理
在实际进行Agent开发时,还有一项工作至关重要,那就是需要管理智能体的记忆,不然前面问过的问题后面就会忘记。
from langgraph.checkpoint.memory import InMemorySaver
from langchain_ollama import ChatOllama
from langchain.tools import tool
from langchain.agents import create_agent
from datetime import datetime
import os
model = ChatOllama(
model="llama3.1:8b",
temperature=0.7,
top_p=0.95,
)
@tool
def write_file(content:str):
"""
将指定内容写入本地文件
:param content:必要参数,字符串类型,用于表示需要写入文档的具体内容
:return:写入结果提示信息
"""
try:
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
filename = f"output_{timestamp}.txt"
with open(filename, 'w', encoding='utf-8') as f:
f.write(content)
abs_path = os.path.abspath(filename)
return f"已成功写入本地文件:{abs_path}"
except Exception as e:
return f"文件写入失败:{e}"
checkpointer = InMemorySaver()
tools = []
agent = create_agent(model=model, tools=tools, checkpointer=checkpointer)
config = {
"configurable":{
# 线程id
"thread_id":"1"
}
}
# 此时记忆就自动保存在当前Agent和线程中
response = agent.invoke({"messages":[{"role":"user", "content":"你好,我叫张三,好久不见"}]}, config)
print("模型回复:", response['messages'][-1].content)
# 查看当前Agent的记忆
response_latest = agent.get_state(config)
print("Agent记忆:", response_latest)
# 再次对话,直接带入线程ID,即可带入此前对话记忆:
res = agent.invoke({"messages":[{"role":"user", "content":"你还记得我叫什么名字吗"}]}, config)
print("Agent记忆-模型回复:", res['messages'][-1].content)
# 可以看到之前所有的历史聊天记录
res_latest = agent.get_state(config)
print("Agent记忆:", res_latest)
# 新开一个线程池
# 因为之前的聊天记录都在线程1里面,新开的线程2里面没有聊天记录,所以模型无法回答
new_config = {
"configurable":{
# 线程id
"thread_id":"2"
}
}
new_res = agent.invoke({"messages":[{"role":"user", "content":"你还记得我叫什么名字吗"}]}, new_config)
print("Agent记忆-模型回复:", new_res['messages'][-1].content)运行结果:
模型回复: 你好!张三,很高兴和你见面!长时间不见的确有点让人感到怀念。有哪些新鲜事要分享吗?
Agent记忆: StateSnapshot(values={'messages': [HumanMessage(content='你好,我叫张三,好久不见', additional_kwargs={}, response_metadata={}, id='0292d384-d3f5-4b88-b5db-d7d76a53f281'), AIMessage(content='你好!张三,很高兴和你见面!长时间不见的确有点让人感到怀念。有哪些新鲜事要分享吗?', additional_kwargs={}, response_metadata={'model': 'llama3.1:8b', 'created_at': '2026-02-01T11:36:13.778902333Z', 'done': True, 'done_reason': 'stop', 'total_duration': 1189919696, 'load_duration': 33047532, 'prompt_eval_count': 21, 'prompt_eval_duration': 8410880, 'eval_count': 38, 'eval_duration': 1147418060, 'logprobs': None, 'model_name': 'llama3.1:8b', 'model_provider': 'ollama'}, id='lc_run--019c18fd-3229-7760-a968-69941eca469e-0', tool_calls=[], invalid_tool_calls=[], usage_metadata={'input_tokens': 21, 'output_tokens': 38, 'total_tokens': 59})]}, next=(), config={'configurable': {'thread_id': '1', 'checkpoint_ns': '', 'checkpoint_id': '1f0ff623-6af1-6550-8001-35749fcf362d'}}, metadata={'source': 'loop', 'step': 1, 'parents': {}}, created_at='2026-02-01T11:36:13.780718+00:00', parent_config={'configurable': {'thread_id': '1', 'checkpoint_ns': '', 'checkpoint_id': '1f0ff623-5f89-6eb3-8000-cac0b9664fa0'}}, tasks=(), interrupts=())
Agent记忆-模型回复: 当然记得了!你刚才已经告诉我的了,是张三。
Agent记忆: StateSnapshot(values={'messages': [HumanMessage(content='你好,我叫张三,好久不见', additional_kwargs={}, response_metadata={}, id='0292d384-d3f5-4b88-b5db-d7d76a53f281'), AIMessage(content='你好!张三,很高兴和你见面!长时间不见的确有点让人感到怀念。有哪些新鲜事要分享吗?', additional_kwargs={}, response_metadata={'model': 'llama3.1:8b', 'created_at': '2026-02-01T11:36:13.778902333Z', 'done': True, 'done_reason': 'stop', 'total_duration': 1189919696, 'load_duration': 33047532, 'prompt_eval_count': 21, 'prompt_eval_duration': 8410880, 'eval_count': 38, 'eval_duration': 1147418060, 'logprobs': None, 'model_name': 'llama3.1:8b', 'model_provider': 'ollama'}, id='lc_run--019c18fd-3229-7760-a968-69941eca469e-0', tool_calls=[], invalid_tool_calls=[], usage_metadata={'input_tokens': 21, 'output_tokens': 38, 'total_tokens': 59}), HumanMessage(content='你还记得我叫什么名字吗', additional_kwargs={}, response_metadata={}, id='dd0ddafd-af9b-49cf-9e32-601588cd5c73'), AIMessage(content='当然记得了!你刚才已经告诉我的了,是张三。', additional_kwargs={}, response_metadata={'model': 'llama3.1:8b', 'created_at': '2026-02-01T11:36:14.207911696Z', 'done': True, 'done_reason': 'stop', 'total_duration': 423553171, 'load_duration': 28939883, 'prompt_eval_count': 77, 'prompt_eval_duration': 30481227, 'eval_count': 16, 'eval_duration': 362805261, 'logprobs': None, 'model_name': 'llama3.1:8b', 'model_provider': 'ollama'}, id='lc_run--019c18fd-36d6-7690-9543-dfab872f3793-0', tool_calls=[], invalid_tool_calls=[], usage_metadata={'input_tokens': 77, 'output_tokens': 16, 'total_tokens': 93})]}, next=(), config={'configurable': {'thread_id': '1', 'checkpoint_ns': '', 'checkpoint_id': '1f0ff623-6f05-6acb-8004-13ad254be866'}}, metadata={'source': 'loop', 'step': 4, 'parents': {}}, created_at='2026-02-01T11:36:14.208481+00:00', parent_config={'configurable': {'thread_id': '1', 'checkpoint_ns': '', 'checkpoint_id': '1f0ff623-6af3-6c8d-8003-8cfaf7662f09'}}, tasks=(), interrupts=())
Agent记忆-模型回复: 对不起,我是第一个和你交谈的,所以我并不记得你的名字。每次新用户都会从头开始。
上述是一个关于记忆管理最简单的demo版本。
此外,关于记忆的管理,往往还涉及记忆持久化存储、跨线程记忆管理、总结历史记录、设置用户偏好记忆、记忆修改、语义搜索、数据加密、快照回复、人机交互等功能。
51999
51830
42086
38936
33440
30385
29029
24045
23974
22316
7°
6°
33°
44°
72°
90°
89°
113°
534°
2709°