实际用起来……比较失望吧只能说。不比我之前用agent和本地chromedb好多少……不过还是先介绍一下使用方式。
。
1.环境变量配置:
首先,直接用官方的教程是插入不了的!

会报错mem0 api key有问题。
但是在git仓库github.com/mem0ai/mem0/tree/main 里面 evaluation是可以正常运行的!于是我看了一下evaluation目录下的源码,把add和search两种方式调通了。我们基于evaluation/src/memzero 路径下的add search两文件的魔改来使用。
首先,需要在本地创建一个.env文件,内容如下:

这里要注意:mem0需要写三个key,MEM0_API_KEY 可以直接在官网app.mem0.ai/dashboard/api-keys 创建。然后要注意项目id和机构id,需要从自己账号下的的app.mem0.ai/settings/(organizations | projects) /overview 来获取。
然后再写入自己的openai api_key 和需要用到的模型名称。
——环境变量配置完成!
。
2.数据插入:
可以看下evaluation/src/memzero 路径下的add的源码,可以看到self.add_memory是核心插入代码。由add_memory_task调用。我们修改一下add_memory_task 的代码(可以改成任何 自己方便插入的形式):

speaker是用户id的字符串;messages的格式如图所示,一定要区分user和assistant。
然后可以直接复制文件,到其他地方运行了。
3.记忆查询:
看下evaluation/src/memzero 路径下的search的源码。核心是self.search_memory,在外部直接调用即可。
query是查询关键词,可以查询出相关记忆内容。其他参数看名字也知道怎么用,不多赘述~
复制文件到自己的目录,直接创建类search_memory=search.MemorySearch(),然后semantic_memories, graph_memories, duration=search_memory.search_memory(tag,query,top_k)
即可。
注意:search_memory默认返回三个内容。semantic_memories是记忆的json值。
我自己使用这种方式解析,然后返回给记忆处理的agent: memory_message = '\n'.join(["记忆内容:"+i["memory"]+" 时间:"+str(i["timestamp"])+" 相似性"+str(i["score"]) for i in semantic_memories])
——吐槽一点:返回的记忆,依旧是很混乱,也抓不住重点的东西!并没有想象中那么丝滑和贴近对话内容。但是,至少必之前用chromedb 强了一些,但属实没强多少……可以一用,但价值不大!
哦对~search需要和evaluation目录下的prompts.py一起使用。里面有默认的查询agent的prompt,可以自己改一改看~
4.其他想说的
4.1mem0每次插入记忆会很慢!平均时间超过了30s不知道到底在做啥……
所以,每次对话后,插入记忆时,最好启一个多线程,让他自己运行吧。别阻塞了后续程序的运行。

async_add_memory_task(user, [{"role": "user", "content": message},{"role": "assistant", "content": gpt_message}])
4.2:mem0详细了解了一下,其实很多地方比较坑的,比如记忆条数最多10000条,超出的话需要付费。
graph模式需要付费。
不过git仓,看到有源码,mem0\mem0\client\main.py 里面的各种接口都是齐全的。尝试能本地运行的话,就不用使用mem0库的方式了。大致看下来应该不难,有时间了再仔细研究一下~争取本地运行,就没有各种奇奇怪怪的限制了。也不需要占用mem0服务器资源和存储资源了。
。
——还有一些关于记忆的思考,我在下一个帖子说吧!
。
1.环境变量配置:
首先,直接用官方的教程是插入不了的!

会报错mem0 api key有问题。
但是在git仓库github.com/mem0ai/mem0/tree/main 里面 evaluation是可以正常运行的!于是我看了一下evaluation目录下的源码,把add和search两种方式调通了。我们基于evaluation/src/memzero 路径下的add search两文件的魔改来使用。
首先,需要在本地创建一个.env文件,内容如下:

这里要注意:mem0需要写三个key,MEM0_API_KEY 可以直接在官网app.mem0.ai/dashboard/api-keys 创建。然后要注意项目id和机构id,需要从自己账号下的的app.mem0.ai/settings/(organizations | projects) /overview 来获取。
然后再写入自己的openai api_key 和需要用到的模型名称。
——环境变量配置完成!
。
2.数据插入:
可以看下evaluation/src/memzero 路径下的add的源码,可以看到self.add_memory是核心插入代码。由add_memory_task调用。我们修改一下add_memory_task 的代码(可以改成任何 自己方便插入的形式):

speaker是用户id的字符串;messages的格式如图所示,一定要区分user和assistant。
然后可以直接复制文件,到其他地方运行了。
3.记忆查询:
看下evaluation/src/memzero 路径下的search的源码。核心是self.search_memory,在外部直接调用即可。

query是查询关键词,可以查询出相关记忆内容。其他参数看名字也知道怎么用,不多赘述~
复制文件到自己的目录,直接创建类search_memory=search.MemorySearch(),然后semantic_memories, graph_memories, duration=search_memory.search_memory(tag,query,top_k)
即可。
注意:search_memory默认返回三个内容。semantic_memories是记忆的json值。
我自己使用这种方式解析,然后返回给记忆处理的agent: memory_message = '\n'.join(["记忆内容:"+i["memory"]+" 时间:"+str(i["timestamp"])+" 相似性"+str(i["score"]) for i in semantic_memories])
——吐槽一点:返回的记忆,依旧是很混乱,也抓不住重点的东西!并没有想象中那么丝滑和贴近对话内容。但是,至少必之前用chromedb 强了一些,但属实没强多少……可以一用,但价值不大!
哦对~search需要和evaluation目录下的prompts.py一起使用。里面有默认的查询agent的prompt,可以自己改一改看~
4.其他想说的
4.1mem0每次插入记忆会很慢!平均时间超过了30s不知道到底在做啥……

所以,每次对话后,插入记忆时,最好启一个多线程,让他自己运行吧。别阻塞了后续程序的运行。

async_add_memory_task(user, [{"role": "user", "content": message},{"role": "assistant", "content": gpt_message}])
4.2:mem0详细了解了一下,其实很多地方比较坑的,比如记忆条数最多10000条,超出的话需要付费。
graph模式需要付费。
不过git仓,看到有源码,mem0\mem0\client\main.py 里面的各种接口都是齐全的。尝试能本地运行的话,就不用使用mem0库的方式了。大致看下来应该不难,有时间了再仔细研究一下~争取本地运行,就没有各种奇奇怪怪的限制了。也不需要占用mem0服务器资源和存储资源了。
。
——还有一些关于记忆的思考,我在下一个帖子说吧!