当前位置: 首页 > news >正文

访问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模块。验证方法如下

  1. 在Redis容器的terminal中输入 redis-cli 进入redis交互式命令行
  2. 在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的命令。没认真听课趟了个坑就不奇怪了,大家一定要认真听课啊。

http://www.xdnf.cn/news/160759.html

相关文章:

  • MATLAB中调用CPLEX求解工具箱
  • Python + Playwright:如何在Docker 容器运行测试?
  • 0x27 A* + 0x28 IDA*
  • Adobe Photoshop(PS)2022 版安装与下载教程
  • 前端开发本地配置 HTTPS 全面详细教程
  • HackMyVM - Chromee靶机
  • 人工智能:入门阶段学习路径
  • per-task affinity 是什么?
  • 30天通过软考高项-第四天
  • Python循环语句-for循环(基础语法,range语句,临时变量作用域,嵌套应用)
  • 【计算机视觉】CV实战项目- DFace: 基于深度学习的高性能人脸识别
  • leetcode201.数字范围按位与
  • S参数的含义
  • 如何搭建和管理 FTP 服务器
  • 电商秒杀系统技术栈与难点解析 - Java架构师面试实战
  • 《Vue3学习手记5》
  • Redux和MobX有什么区别
  • 通过Golang实现快速实现MCP Server
  • 如何创建成员内部类数组
  • 小刚说C语言刷题——1109加密四位数
  • [笔记] MCPO搭建教程
  • 河南联通光猫超级管理员账号设置
  • 2025新版修复蛇年运势测试风水起名系统源码
  • VS BUG(6) LINK : fatal error LNK1158: 无法运行“rc.exe”
  • 自动化运维:从工具到实践的全面解析
  • C语言中转义字符的定义与使用详解
  • 基于ssm的仓库管理系统(源码+数据库)
  • 开源AI视频FramePack发布:6GB显卡本地运行
  • 大模型奖励建模新突破!Inference-Time Scaling for Generalist Reward Modeling
  • 用Python做有趣的AI项目1:用 TensorFlow 实现图像分类(识别猫、狗、汽车等)