agentscope Mem0LongTermMemory记忆写入和查询工具2个py

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())
相关推荐
renhongxia12 小时前
COVLM-RL:利用VLM引导强化学习实现自动驾驶的关键面向对象推理
人工智能·深度学习·机器学习·语言模型·自动驾驶·逻辑回归
学习的周周啊2 小时前
ClawdBot(openclaw) + Cloudflare Tunnel + Zero-Trust 零基础保姆教程
网络·人工智能·python·clawdbot
CELLGENE BIOSCIENCE2 小时前
精准检测,洞见未来|赛唐生物应邀出席2026张江药谷产业发展闭门交流会,共话药物质量安全新篇章
大数据·人工智能
啊阿狸不会拉杆2 小时前
《机器学习导论》第 1 章 - 引言
人工智能·python·算法·机器学习·ai·numpy·matplotlib
coldstarry2 小时前
sheng的学习笔记-AI-adaboost(Adaptive Boosting)
人工智能·笔记·学习
KG_LLM图谱增强大模型2 小时前
Graph-O1:基于蒙特卡洛树搜索与强化学习的文本属性图推理框架
人工智能·知识图谱
北京青翼科技2 小时前
高速采集卡丨AD 采集丨 多通道数据采集卡丨高速数据采集系统丨青翼科技FMC 子卡
图像处理·人工智能·fpga开发·信号处理·智能硬件
轻轻唱2 小时前
2026专业PPT设计服务商推荐:TOP10深度评测与选择指南
大数据·人工智能·算法
众趣科技2 小时前
前馈神经网络入门:空间计算的三维重建魔法
人工智能·神经网络·空间计算