访问Redis时遇到 unknown command ‘FT.INFO‘, with args beginning with 错误的解决方案
在B站学习 图灵程序员-诸葛 的LangChain入门课程《基于Redis保存历史聊天信息》。在实践代码时遇到了一些问题,在这里记录一下,希望能帮助到也在学习的同学。话不多说,上代码,这段代码使用langchain_redis来持久化大模型对话的聊天记录。
from langchain_redis import RedisChatMessageHistory
from langchain_openai import ChatOpenAI llm = ChatOpenAI( model="qwen-plus", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", api_key="[Your API KEY]"
) history = RedisChatMessageHistory( session_id="test", redis_url="redis://localhost:6379/0"
)
history.add_user_message("你是谁?")
ai_message = llm.invoke(history.messages)
print(ai_message.content)
history.add_message(ai_message) history.add_user_message("请重复一次")
ai_message2 = llm.invoke(history.messages)
print(ai_message2.content)
history.add_message(ai_message2)
参考 LangChain Redis文档 用Docker运行Redis
To run Redis locally, you can use Docker:
docker run --name langchain-redis -d -p 6379:6379 redis redis-server --save 60 1 --loglevel warning
Docker镜像启动后,使用Redis Insight顺利的连接上了Redis。但代码运行时访问Redis时收到错误
redis.exceptions.ResponseError: unknown command 'FT.INFO', with args beginning with: 'idx:chat_history'
Redis小白完全不懂,搜索得知错误的原因是 Redis 没有加载 RediSearch 模块(FT.前缀的命令属于RediSearch的功能) 。
实测上面这条命令启动的Redis中确实没有安装RediSearch模块。验证方法如下
- 在Redis容器的terminal中输入 redis-cli 进入redis交互式命令行
- 在redis交互式命令行中输入 MODULE LIST 查看加载的模块
得到的结果是(empty array),这意味着当前Redis容器没有加载任何模块。
网络搜索得到的解决方式是使用 redis/redis-stack 镜像,因为这个镜像里包含了所需的RediSearch模块。在docker hub里找到了两个类似的镜像
- redis/redis-stack
- redis/redis-stack-server
redis/redis-stack包含了我不需要的Redi Insight(官方的图形化访问Redis的工具),所以我选择使用体积更小的 redis/redis-stack-server。启动Redis容器的命令改为
docker run --name langchain-redis -d -p 6379:6379 redis/redis-stack-server
注意这里命令的变化。
这里记录一下我踩的坑,我开始使用了下面这条命令运行redis/redis-stack-server镜像
docker run --name langchain-redis -d -p 6379:6379 redis/redis-stack-server redis-server --save 60 1 --loglevel warning
发现启动后的Redis并没有加载任何模块。查阅资料后发现,使用redis-server命令启动Redis时默认不会加载任何模块,想要使用RediSearch模块,需要在执行redis-server命令时加上–loadmodule参数指定要加载的模块
docker run --name langchain-redis -d -p 6379:6379 redis/redis-stack-server redis-server --save 60 1 --loglevel warning --loadmodule /opt/redis-stack/lib/redisearch.so --loadmodule /opt/redis-stack/lib/rejson.so
当我们使用redis/redis-stack-server镜像时,容器启动时会执行名为entrypoint.sh的脚本,这个脚本里就使用了redis-server加–loadmodule的方式启动Redis。这意味着我们在启动redis/redis-stack-server时不需要显式指定任何命令,只需要如下命令就可以在启动Redis的同时加载RediSearch模块
docker run --name langchain-redis -d -p 6379:6379 redis/redis-stack-server
现在运行本文开头的python代码就能正常执行啦。回头又看了一遍B站的视频教程,发现Up主打开的LangChain网页其实是 Redis Chat Message History ,这里面其实已经提供了正确启动Redis的命令。没认真听课趟了个坑就不奇怪了,大家一定要认真听课啊。
相关文章:
访问Redis时遇到 unknown command ‘FT.INFO‘, with args beginning with 错误的解决方案
在B站学习 图灵程序员-诸葛 的LangChain入门课程《基于Redis保存历史聊天信息》。在实践代码时遇到了一些问题,在这里记录一下,希望能帮助到也在学习的同学。话不多说,上代码,这段代码使用langchain_redis来持久化大模型对话的聊天…...
Swift与iOS内存管理机制深度剖析
前言 内存管理是每一位 iOS 开发者都绕不开的话题。虽然 Swift 的 ARC(自动引用计数)极大简化了开发者的工作,但只有深入理解其底层实现,才能写出高效、健壮的代码,避免各种隐蔽的内存问题。本文将从底层原理出发&…...
数据库系统概论(五)关系模型的数据结构及形式化
数据库系统概论(五)关系模型的数据结构及形式化 前言一、关系:从“表格”说起1.1 关系数据模型中的“关系”是什么?1.2 域(Domain):数据的“类型限定”1.3 笛卡尔积(Cartesian Produ…...
Python类和对象四(十三)
魔法方法: 按位运算 按位于运算 只要相同才是1 或运算: 只要某个位是1结果就是1 、 按位非 将结果取反 按位异或: 左移和右移运算符: 右移两位 右移动n位,就是除以2的n次方 左移两位: 左移n位就是乘…...
Go 1.24 中的弱指针包 weak 使用介绍
在 Go 语言中,“弱指针”指的是不会阻止垃圾回收器(GC)回收目标对象的引用。 当一个对象只剩弱指针指向它,而没有任何强引用时,GC 仍会把该对象当作不可达对象并回收;随后,所有指向它的弱指针会…...
毕业项目-基于深度学习的入侵检测系统
选题背景与意义 随着互联网技术的飞速发展,网络在各个领域中的作用日益重要。然而,伴随着技术的进步,网络安全问题也愈加严峻,网络攻击事件频繁发生,给个人、企业乃至国家带来了巨大的经济损失与安全威胁。入侵检测系…...
Github 2025-04-26 Rust开源项目日报Top10
根据Github Trendings的统计,今日(2025-04-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero General Public Li…...
【Hive入门】Hive分桶表深度解析:从哈希分桶到Join优化的完整指南
目录 引言 1 分桶表基础概念 1.1 什么是分桶表 1.2 分桶与分区的区别 2 分桶表设计与创建 2.1 创建分桶表语法 2.2 分桶键选择原则 2.3 桶数确定策略 3 分桶表数据加载 3.1 标准数据加载流程 3.2 分桶表数据验证 4 分桶Join优化原理 4.1 Map端Join优化 4.2 Sort-…...
django之优化分页功能(利用参数共存及封装来实现)
优化分页功能 目录 1.封装分页代码 2.解决分页时覆盖搜索参数的bug 3.优化分页功能 上一篇文章我们讲到了搜索功能和分页展示数据功能。那这篇文章, 在上篇文章的基础上, 会去优化这些功能并解决搜索功能和分页功能不能一起使用的bug。 一、封装分页代码 原本我们的asse…...
linux blueZ 第四篇:BLE GATT 编程与自动化——Python 与 C/C++ 实战
本篇聚焦 BLE(Bluetooth Low Energy)GATT 协议层的编程与自动化实践,涵盖 GATT 基础、DBus API 原理、Python(dbus-next/bleak)示例、C/C++ (BlueZ GATT API)示例,以及自动发现、读写特征、订阅通知、安全配对与脚本化测试。 目录 BLE GATT 基础概念 BlueZ DBus GATT 模…...
前端面试每日三题 - Day 16
这是我为准备前端/全栈开发工程师面试整理的第16天每日三题练习,涵盖事件循环深入解析 、Vue3 响应式系统原理 ,以及 多租户系统设计实践。每道题附带 详细解析、示例代码与脑图建议,助你全面掌握底层原理与架构设计思维。 ✅ 题目 1…...
使用PyTorch实现简单图像识别(基于MNIST手写数字数据集)的完整代码示例,包含数据加载、模型定义、训练和预测全流程
以下是一个使用PyTorch实现简单图像识别(基于MNIST手写数字数据集)的完整代码示例,包含数据加载、模型定义、训练和预测全流程: import torch import torch.nn as nn import torch.optim as optim import torchvision import torc…...
【Android】四大组件之Activity
目录 一、什么是Activity 二、如何创建和配置Activity 三、Activity 跳转与数据传递 四、数据保存与恢复 五、Activity 启动模式 六、自定义返回行为 七、复杂界面布局 你可以把Activity想象成手机屏幕上的一个“页面”。比如,当你打开一个App时,…...
数据库原理(1)
第一章 概论 一、基本概念 数据(Data)是数据库中存储的基本对象,描述事物的符号记录。例如学生的学号、姓名等信息都是数据。 数据库(Database,DB)长期存储在计算机内、有组织的、可共享的大量数据的集合。…...
SQL盲注问题深度解析与防范策略
引言 在当今互联网时代,Web应用程序的安全性是重中之重。SQL注入作为一种常见且极具威胁性的攻击手段,而其中的SQL盲注更是因其隐蔽性强、难以察觉而备受关注。攻击者借助SQL盲注,在无法直接获取数据库返回结果的情况下,通过精心构造特殊的SQL语句,利用页面的不同响应来逐…...
Android JIT( ART即时编译器),Just In Time Compiler,即时编译技术
Android JIT( ART即时编译器),Just In Time Compiler,即时编译技术 Android Runtime (ART) 包含一个具备代码分析功能的即时 (JIT) 编译器,该编译器可以在 Android 应用运行时持续提高其性能。JIT是Just In Time Compiler…...
当自动驾驶遇上“安全驾校”:NVIDIA如何用技术给无人驾驶赋能?
自动驾驶技术的商业化落地,核心在于能否通过严苛的安全验证。国内的汽车企业其实也在做自动驾驶,但是吧,基本都在L2级别。换句话说就是在应急时刻内,还是需要人来辅助驾驶,AI驾驶只是决策层,并不能完全掌握…...
Unity中数据储存
在Unity项目开发中,会有很多数据,有需要保存到本地的数据,也有直接保存在缓存中的临时数据,一般为了方便整个项目框架中各个地方能调用需要的数据,因此都会实现一个数据工具或者叫数据管理类,用来管理项目中所有的数据。 首先保存在缓存中的数据,比如用户信息,我们只需…...
【C++11】可变参数模板
前言: 上文我们学到右值引用及其移动语义,学习到了C11中对性能提升对重要的更新之一。C11进阶之路:右值引用和移动语义,让代码跑得更快!-CSDN博客 本文我们来讲讲,C11的下一个新语法:可变参数模…...
c语言知识整理
一 数据的存储 对于整形的存储 无论是正负在存储中都是使用补码进行存储的 那个一个数字的补码在转换正负时不同的 对于存储中 首位一定是符号位 如果是0 那么是正数 如果是1 那么是负数 (32位 除符号位 缺少的位数使用0补齐) 如果是正数 …...
算法习题-力扣446周赛题解
算法可以调度思维,让程序员的思维发散,找到更好的解决方案。 第一题:执行指令后的得分 题目: 给你两个数组:instructions 和 values,数组的长度均为 n。你需要根据以下规则模拟一个过程: 从下标…...
基于共享上下文和自主协作的 RD Agent 生态系统
在llmangentmcp这个框架中: LLM: 依然是智能体的“大脑”,赋予它们理解、推理、生成和规划的能力,并且也用于处理和利用共享上下文。Agent: 具备特定 R&D 职能的自主单元,它们感知共享上下文࿰…...
Operating System 实验五 进程管理编程实验
实验目标: 写个多线程的程序,重现竞争条件,并通过信号量或者互斥量,解决临界区问题某工厂有两个生产车间和一个装配车间,两个生产车间分别生产A、B两种零件,装配车间的任务是把A、B两种零件组装成产品。两个生产车间每生产一个零件后,都要分别把它们送到装配车间的货架F…...
Deep Reinforcement learning for real autonomous mobile robot navigation
https://www.youtube.com/watch?vKyA2uTIQfxw AI Learns to Park - Deep Reinforcement Learning https://www.youtube.com/watch?vVMp6pq6_QjI Q Learning simply explained | SARSA and Q-Learning Explanation https://www.youtube.com/watch?vMI8ByADM…...
计算机网络 | 应用层(4)--DNS:因特网的目录服务
💓个人主页:mooridy-CSDN博客 💓文章专栏:《计算机网络:自定向下方法》 大纲式阅读笔记_mooridy的博客-CSDN博客 🌹关注我,和我一起学习更多计算机网络的知识 🔝🔝 目录 …...
WPF核心技术解析与使用示例
WPF核心技术解析与使用示例 一、依赖属性(Dependency Property)详解 1. 依赖属性基础 核心概念: 依赖属性是WPF实现数据绑定、样式、动画等特性的基础通过属性系统实现高效的内存管理和值继承标准定义模式: public class MyControl : Control {// 1. 定义…...
JVM运行机制全景图:从源码到执行的全过程
JVM运行机制全景图:从源码到执行的全过程 引言:你真的了解 Java 是怎么跑起来的吗? 许多开发者写完 Java 代码之后,就交给编译器和运行时去“神奇”地执行了。但你有没有想过,一段 .java 文件是如何一步步变成可运行的程序?今天,我们就从 源码 ➝ 字节码 ➝ 类加载 ➝…...
使用 AFL++ 对 IoT 二进制文件进行模糊测试 - 第二部分
在上一部分中,我们研究了如何使用 AFL++ 对简单的物联网二进制文件进行模糊测试。这些程序接受来自文件的输入,并且易于模糊测试。 在本文中,我们将研究套接字二进制文件。使用套接字进行网络通信的模糊测试二进制文件与使用基于文件 I/O 的模糊测试二进制文件不同。Vanill…...
在华为云平台上使用 MQTT 协议:构建高效可靠的物联网通信
🌐 在华为云平台上使用 MQTT 协议:构建高效可靠的物联网通信 随着物联网(IoT)技术的发展,设备间的高效通信变得尤为重要。MQTT(Message Queuing Telemetry Transport)作为一种轻量级的消息传输…...
基于STM32的物流搬运机器人
功能:智能循迹、定距夹取、颜色切换、自动跟随、自动避障、声音夹取、蓝牙遥控、手柄遥控、颜色识别夹取、循迹避障、循迹定距…… 包含内容:完整源码、使用手册、原理图、视频演示、PPT、论文参考、其余资料 资料只私聊...
H.264/AVC标准主流开源编解码器编译说明
An artisan must first sharpen his tools if he is to do his work well. 工欲善其事,必先利其器. 前言 想研究和学习H.264/AVC视频编解码标准的入门的伙伴们,不论是学术研究还是工程应用都离不开对源码的分析,因此首要工作是对各类编解码器进行编译,本文针对主流的一些符…...
Xilinx FPGA支持的FLASH型号汇总
以博主这些年的FPGA开发使用经验来看,FPGA开发的主流还是以Xilinx FPGA为主,贸易战关税战打了这么多年,我们做研发的也不可避免的要涉及一些国产替代的工作;这里把Xilinx FPGA官方支持的各类(国产和非国产)…...
【C++ 类和数据抽象】消息处理示例(1):从设计模式到实战应用
目录 一、数据抽象概述 二、消息处理的核心概念 2.1 什么是消息处理? 2.2 消息处理的核心目标 三、基于设计模式的消息处理实现 3.1 观察者模式(Observer Pattern) 3.2 命令模式(Command Pattern) 四、实战场景…...
LiveCharts.WPF图表模块封装
WPF LiveCharts.WPF 封装实现 下面是一个完整的 WPF LiveCharts.WPF 封装实现,提供了常用图表的简单使用方式,并支持数据绑定和更新。 一、LiveCharts.WPF 封装类 1. 图表基类 (ChartBase.cs) using LiveCharts; using LiveCharts.Wpf; using System.Collections.Generic;…...
微信小程序,基于uni-app的轮播图制作,轮播图本地文件图片预览
完整代码 <template><swiper class"banner" indicator-dots circular :autoplay"false"><swiper-item v-for "item in picture" :key"item.id"><view><image tap"onPreviewImage(item.img)" :…...
【QQmusic】复习笔记第四章分点讲解
4.1 音乐加载 功能概述 该部分实现了从本地磁盘加载音乐文件到程序中,并在界面上显示的功能。通过QFileDialog类创建文件选择对话框,用户可选择多个音乐文件,程序筛选出有效音频文件后,交由MusicList类管理,并更新到…...
设置右键打开VSCode
在日常的开发工作中,VSCode 是一款非常受欢迎的代码编辑器。为了更加便捷地使用它,我们可以将 VSCode 添加到右键菜单中,这样只需右键点击文件或文件夹,就能快速用 VSCode 打开,极大地提高工作效率。下面我就来介绍一下…...
数据结构和算法(八)--2-3查找树
目录 一、平衡树 1、2-3查找树 1.1、定义 1.2、查找 1.3、插入 1.3.1、向2-结点中插入新键 1.3.2、向一棵只含有一个3-结点的树中插入新键 1.3.3、向一个父结点为2-结点的3-结点中插入新键 1.3.4、向一个父结点为3-结点的3-结点中插入新键 1.3.5、分解根结点 1.4、2…...
JSAPI2.4——正则表达式
一、语法 const str 一二三四五六七八九十 //判断内容 const reg /二/ //判断条件 console.log(reg.test(str)); //检查 二、test与exec方法的区别 test方法:用于判断是否符合规则的字符串,返回值是布尔值 exec方法&…...
FPGA 100G UDP纯逻辑协议栈
随着器件等级的升高,高速serdes的线速率也随之提高,RFSOC 4x最大可支持100G,主流方案为RDMA方案,该方案相对比较复杂,除了需要负责逻辑端的开发,还需操作系统中开发RDMA的驱动,对于对丢包不那么…...
分享一个可以批量巡检GET和POST接口的Shell脚本
一、场景痛点与需求分析 在分布式系统架构中,服务接口的可用性和稳定性直接影响业务连续性。当面临以下场景时,需批量巡检GET和POST接口: 上线验证:新版本发布后批量验证核心接口 故障恢复:异常数据修复后的批量重试…...
机器学习之一:机械式学习
正如人们有各种各样的学习方法一样,机器学习也有多种学习方法。若按学习时所用的方法进行分类,则机器学习可分为机械式学习、指导式学习、示例学习、类比学习、解释学习等。这是温斯顿在1977年提出的一种分类方法。 有关机器学习的基本概念,…...
区分PROJECT_SOURCE_DIR, CMAKE_SOURCE_DIR,CMAKE_CURRENT_SOURCE_DIR
目录 示例工程 PROJECT_SOURCE_DIR的行为 CMAKE_SOURCE_DIR的行为 CMAKE_CURRENT_SOURCE_DIR 示例工程 根目录 |-----CMakeLists.txt |-----sub1 |--------CMakeLists.txt |-----sub2 |--------CMakeLists.txt 根目录下的CMakeList.txt: project(main)message("main …...
Python循环结构深度解析与高效应用实践
引言:循环结构在编程中的核心地位 循环结构作为程序设计的三大基本结构之一,在Python中通过while和for-in两种循环机制实现迭代操作。本文将从底层原理到高级应用,全面剖析Python循环机制的使用技巧与优化策略,助您掌握高效迭代的…...
25【干货】在Arcgis中根据字段属性重新排序并自动编号的方法(二)
上一篇关于属性表自动编号的文章因为涉及到代码(【干货】在Arcgis中根据字段属性重新排序并自动编号的方法(一)),担心大家有些东西确实不熟悉,今天就更新一篇不需要代码也能达到这个目的的方法。主要的思路…...
SinSR模型剪枝实验报告
SinSR模型剪枝实验报告 实验概述 我成功地对SinSR模型进行了L1范式剪枝,剪枝比例为50%。通过分析剪枝前后的模型参数和性能,我们得出了以下结论。 剪枝实现方法 创建专用的main_prune.py脚本,用于剪枝训练。创建quick_prune.py脚本&#…...
IT社团分析预测项目(pandas、numpy、sklearn)
IT社团人数的增长陷入迟滞,同时不同目标任务和不同经营模式的社团更是层出不穷。在面临内忧外患的情况下,本社团希望结合社团行业现状,分析同学和出勤的数据,挖据数据中的信息,通过对人数流失进行预测寻找到相应的对策…...
C语言中位段的应用
一,位段的主要应用场景 硬件寄存器操作 嵌入式开发中,硬件寄存器通常以位为单位控制设备状态。位段可直接映射到寄存器,简化位操作: typedef struct {unsigned int enable : 1; // 使能位unsigned int mode : 3; // 模式选择&…...
【Linux网络#1】:网络基础知识
1、网络发展 在计算机发展历程中,经历过下面四个阶段: 1.独立模式 独立模式:计算机之间相互独立,每台计算机做自己的事情,彼此之间没有直接信息传递。如果两台计算机需要通信就需要将当前计算机的数据通过某种方式拷贝…...
基于物联网的园林防火监测系统
标题:基于物联网的园林防火监测系统 内容:1.摘要 随着全球气候变化和人类活动影响,园林火灾发生频率呈上升趋势,给生态环境和人类生命财产造成巨大损失。为有效预防和应对园林火灾,本文提出基于物联网的园林防火监测系统。该系统综合运用传感…...