mem0ai+ollama+qwen2搭建中文版运行环境

news2025/1/15 20:42:40

准备模型

  1. 支持function的qwen2模型

随便找了一个,也可以下载其他支持function的模型,或者自己下载模型文件搭建

ollama run sam4096/qwen2tools
  1. 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 函数就可以了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1985688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Foundation】(三)transformers之Model

文章目录 1、介绍1.1、 模型类型1.2、Model Head 2、模型加载3、模型调用3.1、不带Model Head的模型调用3.2、带Model Head的模型调用 4、模型微调实战4.1、导包4.2、加载数据4.3、创建数据集4.4、划分数据集4.5、创建加载器4.6、创建模型以及优化器4.7、模型训练4.8、模型评估…

Figma 替代品 Excalidraw 安装和使用教程

如今远程办公盛行,一个好用的在线白板工具对于团队协作至关重要。然而,市面上的大多数白板应用要么功能单一,要么操作复杂,难以满足用户的多样化需求。尤其是在进行头脑风暴、流程设计或产品原型绘制时,我们常常会遇到…

linux入门到精通-第二十章-bufferevent(开源高性能事件通知库)

目录 参考bufferevent简单介绍工作流程事件Api新建事件节点 bufferevent_socket_new设置事件节点回调bufferevent_setcb使事件势能bufferevent_enable发送数据bufferevent_write接收数据bufferevent_read evconnlistener的简介 参考 视频教程 libevent的基本使用 libevent–bu…

HslCommunicationDemo各品牌Plc通信测试软件工具

目录 1、HslCommunicationDemo程序包 2、ModbusTCP举例说明 (0)概述 (1)线圈写操作 (2)寄存器写操作 3、C#工程中DLL库文件使用 (1)创建Winform程序工程 (2)写寄存器 1、HslC…

【Linux】匿名管道|命名管道|pipe|mkfifo|管道原理|通信分类|管道的特征和情况

目录 ​编辑 进程间通信 为什么要有进程间通信 进程通信的目的 进程间通信分类 如何理解通信 管道 匿名管道 管道原理 半双工 通信两问 pipe 演示 管道情况 管道的特征 命名管道 mkfifo指令 mkfifo接口 命名管道提供的是流式服务 匿名管道与命名管道的…

day08 1.进程间通信

work1.c #include <myhead.h> //要发送的消息类型 struct msgbuf {long mtype;char mtext[1024]; };#define SIZE sizeof(struct msgbuf)-sizeof(long)int main(int argc, const char *argv[]) {pid_t pid fork();if(pid -1){perror("fork error");return -…

Webpack入门基础知识及案例

webpack相信大家都已经不陌生了&#xff0c;应用程序的静态模块打包工具。前面我们总结了vue&#xff0c;react入门基础知识&#xff0c;也分别做了vue3的实战小案例&#xff0c;react的实战案例&#xff0c;那么我们如何使用webpack对项目进行模块化打包呢&#xff1f; 话不多…

RPA与智慧政务的关系

自1992年国务院明确提出构建全国行政机关办公决策系统&#xff0c;我国政府信息化建设已走过三十余年历程&#xff0c;并取得了阶段性成果&#xff0c;随着社会需求的变化以及信息技术和数字化工具的不断完善&#xff0c;人们对政府的信息化建设也提出了新的要求&#xff0c;推…

【C#语音文字互转】C#语音转文字(方法一)

Whisper.NET开源项目&#xff1a;https://github.com/sandrohanea/whisper.net/tree/main 一. 环境准备 在VS中安装 Whisper.net&#xff0c;在NuGet包管理器控制台中运行以下命令&#xff1a; Install-Package Whisper.net Install-Package Whisper.net.Runtime其中运行时包…

uniapp 实现自定义缩略滚动条

<template><view class"container-scroll"><!-- 文字导航 --><scroll-view class"scroll-view-text" scroll-x"true" v-if"type 1"><navigator:url"item.url"class"scroll-view-item"…

LE-50821F/FA激光扫描传感器|360°避障雷达之功能与连接使用说明

LE-50821F/FA激光扫描传感器|360避障雷达广泛应用于工业自动化、移动机器人应用场景中的环境感知、高精度定位&#xff08;如建图、扫描、避障、防护等&#xff09; LE-50xxxF系列升级扫描频率最高可达600KHz​​​​。 本文重点介绍LE-50821F/FA激光扫描传感器|360避障雷达之…

【C++】二维数组 数组名

二维数组名用途 1、查看所占内存空间 2、查看二维数组首地址 针对第一种用途&#xff0c;还可以计算数组有多少行、多少列、多少元素 针对第二种用途&#xff0c;数组元素、行数、列数都是连续的&#xff0c;且相差地址是有规律的 下面是一个实例 #include<iostream&g…

FreeRTOS基础入门——FreeRTOS的系统配置(三)

个人名片&#xff1a; ​ &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir202…

基于大模型的Agent

2023年&#xff0c;对于所有的人工智能领域只有一个共同的主题——大模型。大模型的受关注程度与发展速度可谓前所未有。其中&#xff0c;基于大模型的Agent又是最近几个月大模型领域的热点。这不开始研究没有几个月&#xff0c;综述文章都出来了&#xff0c;你说快不快&#x…

FashionAI比赛-服饰属性标签识别比赛赛后总结(来自 Top14 Team)

关联比赛: FashionAI全球挑战赛—服饰属性标签识别 推荐大家看本篇博客之前&#xff0c;看一下数据集制作的方法&#xff0c;如何做一个实用的图像数据集 PS&#xff1a;我是参加完比赛之后才看的&#xff0c;看完之后&#xff0c;万马奔腾.....&#xff0c;因为发现比赛中还…

62 函数参数——传递参数时的序列解包

与可变长度的参数相反&#xff0c;这里的序列解包是指实参&#xff0c;同样也有 * 和 ** 两种形式。 ① 调用含有多个位置参数的函数时&#xff0c;可以使用 Python 列表、元组、集合、字典以及其他可迭代对象作为实参&#xff0c;并在实参名称前加一个星号&#xff0c;Python …

element-ui/plus使用el-date-picker周 选择器返回时间范围处理案例

element-ui/plus使用el-date-picker周 选择器返回时间范围处理案例 如图所示 <el-date-pickerchange"changeTime":picker-options"{ firstDayOfWeek: 1 }"v-model"value1"type"week"format"YYYY年 第ww周"placeholder&…

C++初学者指南-5.标准库(第二部分)--数值运算算法

C初学者指南-5.标准库(第二部分)–数值运算算法 文章目录 C初学者指南-5.标准库(第二部分)--数值运算算法iota (注意不是itoa函数)Reductions reduce transform_reduce遗留操作&#xff08;无法并行执行&#xff09;accumulate (≈ reduce) C98inner_product (≈ transform_r…

sanger序列拼接--一次错误示范

文章目录 目的实现步骤 目的 NGS得到了很多的reads&#xff0c;其中有一些paired reads我想根据overlap 搭建起来&#xff0c;因为我对序列的ID做了删减&#xff0c;所以再pandaseq那里跑不通。 总结来说&#xff0c;目的很简单&#xff0c;就是把 有重叠区域的 reads 搭起来…

【学习笔记】A2X通信的协议(二)- A2X配置参数

目录 5. A2X配置参数 5.1 一般说明 5.2 A2X配置参数的配置和优先级 5.2.1 一般说明 5.2.2 A2X配置参数的优先级 5.2.3 通过PC5进行的A2X通信的配置参数 5.2.4 广播远程ID&#xff08;BRID&#xff09;的配置参数 5.2.5 直接检测和避免&#xff08;DDAA&#xff09;的配…