mem0ai+ollama+qwen2搭建中文版运行环境
搭建mem0ai+ollamam+qwen2 的本地环境
·
准备模型
- 支持function的qwen2模型
随便找了一个,也可以下载其他支持function的模型,或者自己下载模型文件搭建
ollama run sam4096/qwen2tools
- embedder 模型
ollama run nomic-embed-text
拉取mem0ai 源码,切换对应分支
git clone https://github.com/mem0ai/mem0.git
git checkout user/dyadav/ollama-support
修改mem0ai 源代码,适配ollama 环境
修改这几个文件
1.ollama.yaml
http://192.168.0.24 换成ollama的ip地址
llm:
provider: ollama
config:
model: 'sam4096/qwen2tools'
temperature: 0.5
top_p: 1
stream: true
base_url: 'http://192.168.0.24:11434'
embedder:
provider: ollama
config:
model: 'nomic-embed-text'
base_url: 'http://192.168.0.24:11434'
2. main.py
也简单,设置ollama.yaml 的配置文件地址,OLLAMA_HOST 设置一样的ollama ip地址
import os
from mem0 import Memory
import yaml
from mem0.memory.main import MemoryConfig
os.environ["OLLAMA_HOST"] = "http://192.168.0.24:11434"
# 从文件中加载YAML内容
with open('./ollama.yaml', 'r') as file:
data = yaml.safe_load(file)
# Initialize Mem0
config = MemoryConfig(**data)
m = Memory(config)
# Store a memory from any unstructured text
result = m.add("我喜欢打篮球.", user_id="alice", metadata={"category": "hobbies"})
print(result)
# Created memory: Improving her tennis skills. Looking for online suggestions.
# Retrieve memories
all_memories = m.get_all()
print(all_memories)
# Search memories
related_memories = m.search(query="谁喜欢打篮球", user_id="alice")
print(related_memories)
# Update a memory
result = m.update(memory_id="1c31c369-fc8a-4c7b-b700-3550bd395308", data="我不喜欢打篮球了,喜欢踢足球")
print(result)
# Get memory history
history = m.history(memory_id="1c31c369-fc8a-4c7b-b700-3550bd395308")
print(history)
3. mem0/memory/main.py 修改这个文件的ollama 地址,源文件是写死的
写自己的ollama 地址就好
4. 修改prompts,源文件是英文的,直接换成中文,删除对于的一行
这边不换中文也可以,我习惯用中文提示词,删除 import pdb; pdb.set_trace() 需要删除掉
mem0/configs/prompts.py
UPDATE_MEMORY_PROMPT = """
你是整合、更新和组织记忆的专家。当提供现有记忆和新信息时,你的任务是合并和更新记忆列表,以反映最准确和最新的信息。您还可以获得每个现有内存与新信息的匹配分数。确保利用这些信息来做出明智的决定,决定哪些记忆需要更新或合并。
指南:
-消除重复的记忆和合并相关的记忆,以确保简洁和更新的列表。
-如果一个记忆与新的信息直接矛盾,批判性地评估这两个信息:
—如果新内存提供的更新时间较近或较准确,请更换旧内存。
-如果新的记忆看起来不准确或不太详细,保留原来的记忆,丢弃旧的记忆。
-在所有记忆中保持一致和清晰的风格,确保每个条目简洁而又有信息。
—如果新记忆是现有记忆的变化或扩展,更新现有记忆以反映新的信息。
以下是这项任务的细节:
-现有记忆:
{existing_memories}
-新内存:{memory}
"""
MEMORY_DEDUCTION_PROMPT = """
从所提供的文本中推断出事实、偏好和记忆。
只需将事实、偏好和记忆以要点形式返回即可:
自然语言文本:{user_input}
用户/代理详细信息:{metadata}
推断:推断事实、偏好和记忆的限制:
-事实、偏好和记忆应该是简洁而翔实的。
-不要以“这个人喜欢披萨”开头。相反,从“喜欢披萨”开始。
-不要记住所提供的用户/代理详细信息。只记住事实、偏好和回忆。
推断出的事实、偏好和记忆:
"""
mem0/memory/main.py
messages=[
{
"role": "system",
"content": "你是一个从非结构化文本中推断事实、偏好和记忆的专家。",
},
{"role": "user", "content": prompt},
]
删除掉 import pdb; pdb.set_trace()
然后直接运行 main.py 函数就可以了
更多推荐
已为社区贡献1条内容
所有评论(0)