使用 Redis 的向量检索与 LLM 构建一个 RAG 知识库,每次尝试从 Redis 向量索引中获取 top k 条相关信息,并使用 LLM 进行总结回复;当没有相关知识,则提示未查找到文档,限制大模型自由发挥。
技术栈
- 开发语言:go1.22
- 工作流框架:Eino(字节开源的大模型工作流开发框架)
- 向量存储与检索:Redis
- 大语言模型:doubao-pro-32k-241215
- 向量化模型:doubao-embedding-large-text-240915
代码:RAG-demo/eino/knowledgeindexing
索引的构建阶段,本质也是一个工作流,因此可以通过 Goland 的 Eino Dev 插件进行可视化绘制,完成之后点击生成流程框架代码,之后填充一些业务实现即可:
- 文件加载:从文件系统读取Markdown文档
- 文档分割:按标题、段落等逻辑单位将文档分割成小段(根据 # 拆分)
- 向量生成:使用嵌入模型,将文本转换为高维向量(4096)
- Redis存储:将文档内容、元数据和向量存储到Redis哈希结构中
代码:RAG-demo/eino/rag/retriver.go
- 用户输入:用户在终端输入问题
- 查询向量化:使用同样的嵌入模型将问题转换为向量
- KNN搜索:在Redis中执行KNN(K近邻)向量搜索
- 相关文档获取:获取与问题语义最相关的TopK个文档
代码:RAG-demo/eino/rag/generator.go
- 提示构建:将检索到的文档和用户问题组合成增强提示
- LLM调用:将增强提示发送给大语言模型(ARK doubao)
- 回答生成:模型根据提供的上下文生成针对用户问题的回答
代码:RAG-demo/eino/rag/cmd/main.go
初始化资源并不断接受用户输入,调用各项工作处理后进行输出

