query.py 查询
python
🔍 查询咖啡偏好:
1. 用户表达了咖啡偏好
2. 我喜欢喝美式咖啡,不加糖
3. 我喜欢喝美式咖啡,不加糖
4. 好的,我记住了您喜欢喝不加糖的美式咖啡
5. 我喜欢喝美式咖啡,不加糖
6. 好的,我记住了您喜欢喝不加糖的美式咖啡
🔍 查询周末活动:
1. 周末我喜欢去公园散步
2. 了解了,您周末喜欢去公园散步
3. 周末我喜欢去公园散步
4. 了解了,您周末喜欢去公园散步
5. 周末我喜欢去公园散步
6. 了解了,您周末喜欢去公园散步
python
import asyncio
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from agentscope.memory import Mem0LongTermMemory
from agentscope.message import Msg
from agentscope.model import OpenAIChatModel
from agentscope.embedding import DashScopeTextEmbedding
from mem0.vector_stores.configs import VectorStoreConfig
from dotenv import load_dotenv
load_dotenv()
async def query_clean():
long_term_memory = Mem0LongTermMemory(
agent_name="Assistant",
user_name="user_123",
model=OpenAIChatModel(
model_name=os.environ.get("zhipu_llm"),
api_key=os.environ.get("zhipu_OPENAI_API_KEY"),
stream=True,
client_kwargs={"base_url": "https://open.bigmodel.cn/api/paas/v4"}
),
embedding_model=DashScopeTextEmbedding(
model_name="text-embedding-v2",
api_key=os.environ.get("ali_OPENAI_API_KEY"),
),
vector_store_config=VectorStoreConfig(
provider="qdrant",
config={"on_disk": True, "path": "./memory_data", "embedding_model_dims": 1536},
),
)
queries = [
("咖啡偏好", "美式咖啡"),
("周末活动", "公园散步"),
]
for name, query in queries:
print(f"\n🔍 查询{name}:")
memories_str = await long_term_memory.retrieve(
msg=[Msg(role="user", content=query, name="user")],
limit=3
)
if memories_str:
memory_list = memories_str.splitlines()
for i, memory in enumerate(memory_list, 1):
print(f" {i}. {memory}")
else:
print(" 未找到记忆")
if __name__ == "__main__":
asyncio.run(query_clean())
record.py 写入
python
✅ 成功记录用户偏好
✅ 成功记录周末活动偏好
python
import asyncio
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from agentscope.memory import Mem0LongTermMemory
from agentscope.message import Msg
from agentscope.model import OpenAIChatModel
from agentscope.embedding import DashScopeTextEmbedding
from mem0.vector_stores.configs import VectorStoreConfig
from dotenv import load_dotenv
load_dotenv()
async def record_memory():
"""记录用户偏好到长期记忆"""
# 初始化长期记忆
long_term_memory = Mem0LongTermMemory(
agent_name="Assistant",
user_name="user_123",
model=OpenAIChatModel(
model_name=os.environ.get("zhipu_llm"),
api_key=os.environ.get("zhipu_OPENAI_API_KEY"),
stream=True,
client_kwargs={
"base_url": "https://open.bigmodel.cn/api/paas/v4"
}
),
embedding_model=DashScopeTextEmbedding(
model_name="text-embedding-v2",
api_key=os.environ.get("ali_OPENAI_API_KEY"),
),
vector_store_config=VectorStoreConfig(
provider="qdrant",
config={
"on_disk": True,
"path": "./memory_data",
"embedding_model_dims": 1536,
},
),
)
# 记录用户偏好
user_msg = Msg(role="user", content="我喜欢喝美式咖啡,不加糖", name="user")
assistant_msg = Msg(role="assistant", content="好的,我记住了您喜欢喝不加糖的美式咖啡", name="assistant")
try:
await long_term_memory.record(
msgs=[user_msg, assistant_msg],
infer=False
)
print("✅ 成功记录用户偏好")
# 记录第二个偏好
user_msg2 = Msg(role="user", content="周末我喜欢去公园散步", name="user")
assistant_msg2 = Msg(role="assistant", content="了解了,您周末喜欢去公园散步", name="assistant")
await long_term_memory.record(
msgs=[user_msg2, assistant_msg2],
infer=False
)
print("✅ 成功记录周末活动偏好")
except Exception as e:
print(f"❌ 记录失败: {e}")
if __name__ == "__main__":
asyncio.run(record_memory())
agent的查询和写入
python
【对话1】记录用户偏好:
Assistant(thinking): 用户告诉我他们的咖啡偏好:喜欢喝美式咖啡,不加糖。这是一个重 要的用户偏好信息,我应该记录下来,以便将来能够记住并提供个性化的服务。
让我使用record_to_memory函数来记录这个信息。
{
"type": "tool_use",
"id": "call_2d4347af1b9f463b89e52e93",
"name": "record_to_memory",
"input": {
"thinking": "用户表达了咖啡偏好:喜欢美式咖啡,不加糖。这是一个重要的个人 偏好信息,需要记录以便将来能够提供个性化服务。",
"content": [
"喜欢喝美式咖啡",
"不加糖"
]
},
"raw_input": "{\"thinking\":\"用户表达了咖啡偏好:喜欢美式咖啡,不加糖。这是一个重要的个人偏好信息,需要记录以便将来能够提供个性化服务。\",\"content\":[\"喜欢喝美式咖啡\", \"不加糖\"]}"
}
Invalid JSON response: Expecting value: line 1 column 2 (char 1)
system: {
"type": "tool_result",
"id": "call_2d4347af1b9f463b89e52e93",
"name": "record_to_memory",
"output": [
{
"type": "text",
"text": "Successfully recorded content to memory: {'results': [{'id': 'f11948c2-00c6-4cda-84dd-a5fd8ef1ace2', 'memory': '用户表达了咖啡偏好:喜欢美式咖 啡,不加糖。这是一个重要的个人偏好信息,需要记录以便将来能够提供个性化服务。\\n喜 欢喝美式咖啡\\n不加糖', 'event': 'ADD', 'actor_id': 'assistant', 'role': 'assistant'}]}"
}
]
}
2026-02-04 23:13:37,896 | WARNING | _openai_formatter:_format:340 - Unsupported block type thinking in the message, skipped.
Assistant(thinking): 用户已经表达了自己的咖啡偏好。我已经成功记录了这个信息。现在 我应该回应他们的偏好,并可以提供一些相关的建议或询问更多信息。
Assistant: 好的,我记住了您喜欢喝美式咖啡且不加糖的偏好。美式咖啡是很多咖啡爱好者 的选择,因为它能很好地展现咖啡豆本身的风味。
如果您需要,我可以为您提供一些关于美式咖啡的小建议:
- 浓度可以根据个人喜好调整
- 可以尝试不同产地的咖啡豆,体验不同的风味层次
- 如果想稍微丰富口感,可以尝试加一点奶泡或牛奶(虽然您说不喜欢糖,但奶制品是不同的)
您平时喝咖啡的时间有什么偏好吗?比如早餐时、下午茶时间,还是晚上?这样我可以更好地了解您的咖啡习惯。
Error in new_retrieved_facts: Expecting value: line 1 column 2 (char 1)
【对话2】检索记忆并继续对话:
2026-02-04 23:14:59,527 | WARNING | _openai_formatter:_format:340 - Unsupported block type thinking in the message, skipped.
2026-02-04 23:14:59,527 | WARNING | _openai_formatter:_format:340 - Unsupported block type thinking in the message, skipped.
Assistant(thinking): 用户问我平时喜欢喝什么咖啡。我已经在之前的对话中记录了用户的 偏好信息:喜欢喝美式咖啡,不加糖。所以我应该直接回答这个问题,不需要再使用record_to_memory工具,因为信息已经存在了。
我需要简洁地回答,并可能提供一些相关的建议或后续问题来进一步了解用户的咖啡习惯。
Assistant: 根据我记录的您的偏好,您平时喜欢喝**美式咖啡,不加糖**。
美式咖啡是一种经典的选择,不加糖能更好地品尝到咖啡豆本身的香气和风味层次。您是更倾向于现磨咖啡,还是方便的速溶咖啡呢?另外,您通常在什么时间段喝美式咖啡比较多?比如早餐时、下午茶时间,还是工作间隙?这样我可以更好地了解您的咖啡习惯。
python
import asyncio
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from agentscope.agent import ReActAgent
from agentscope.memory import Mem0LongTermMemory
from agentscope.message import Msg
from agentscope.model import OpenAIChatModel
from agentscope.embedding import DashScopeTextEmbedding
from mem0.vector_stores.configs import VectorStoreConfig
from dotenv import load_dotenv
from agentscope import formatter
from agentscope.pipeline import stream_printing_messages
load_dotenv()
async def main() -> None:
# 初始化长期记忆
long_term_memory = Mem0LongTermMemory(
agent_name="Assistant",
user_name="user_123",
model=OpenAIChatModel(
model_name=os.environ.get("zhipu_llm"),
api_key=os.environ.get("zhipu_OPENAI_API_KEY"),
stream=False,
client_kwargs={"base_url": "https://open.bigmodel.cn/api/paas/v4"}
),
embedding_model=DashScopeTextEmbedding(
model_name="text-embedding-v2",
api_key=os.environ.get("ali_OPENAI_API_KEY"),
),
vector_store_config=VectorStoreConfig(
provider="qdrant",
config={"on_disk": True, "path": "./memory_data", "embedding_model_dims": 1536},
),
)
# 创建 ReActAgent(启用流式模型)
agent = ReActAgent(
name="Assistant",
sys_prompt="你是一个乐于助人的AI助手。请记住或读取用户的偏好信息。",
model=OpenAIChatModel(
model_name=os.environ.get("zhipu_llm"),
api_key=os.environ.get("zhipu_OPENAI_API_KEY"),
stream=True,
client_kwargs={"base_url": "https://open.bigmodel.cn/api/paas/v4"}
),
formatter=formatter.OpenAIChatFormatter(),
long_term_memory=long_term_memory,
long_term_memory_mode="both",
)
# 对话1:记录偏好
print("【对话1】记录用户偏好:")
user_msg1 = Msg(role="user", content="我喜欢喝美式咖啡,不加糖", name="user")
async for msg, is_last in stream_printing_messages([agent], agent(user_msg1)):
for block in msg.get_content_blocks("text"):
pass
if is_last:
print("\n")
# 对话2:检索记忆
print("【对话2】检索记忆并继续对话:")
user_msg2 = Msg(role="user", content="我平时喜欢喝什么咖啡?", name="user")
async for msg, is_last in stream_printing_messages([agent], agent(user_msg2)):
for block in msg.get_content_blocks("text"):
pass
if is_last:
print("\n")
if __name__ == "__main__":
asyncio.run(main())