1. 项目背景与边界

这是一个基于个人兴趣编写的“小而全”的知识库检索实验项目:

  • 资源前提:两台8C16G Linux主机、无GPU。
  • 目标取舍:优先把“可用的检索层”跑通(向量化 → Redis 存储 → 混合检索 → TopK 结果),再考虑接入生成模型形成完整RAG。
  • 模型选择:使用Qwen/Qwen3-Embedding-0.6B做文本向量化(Embedding),轻量且适合 CPU。
  • 语料选择:缺少业务语料,因此选用公开诗词语料做尝试(以唐诗为例)。

注意:本项目当前侧重点是“检索与工程化落地”,并不包含一个完整的LLM生成式对话系统;目前提供的是交互式检索服务(返回TopK诗句/段落)。


2. 总体链路

系统分为离线构建与在线查询两条主链路:


3. 关键模块与职责

3.1 向量化(Embedding)

  • 模型:Qwen/Qwen3-Embedding-0.6B;
  • 向量维度:1024(该模型输出维度为1024);
  • 查询指令:默认使用query:作为查询侧前缀(仅对查询拼接),用于提升检索效果;
  • CPU优化:线程数num_threads: 8+ 小批次batch_size: 2控制峰值内存.

实现形态:一个独立的“向量化模块”(负责加载模型、批量推理、输出 float32 向量)。

3.1.1 语料清洗与切分策略(面向诗词的取舍)

  • 为什么不分 chunk:唐诗篇幅普遍较短(整首诗通常远小于max_length=512),本项目默认不做分chunk,直接以“整首诗”为最小索引单元送入模型向量化。
  • 可选的分句/切片:预处理模块保留split_sentences开关;后续如果需要更高命中密度(例如“按句召回”),再启用分句/切片即可。
  • 清洗原则:写入前做轻量规范化(例如去除多余空白/换行),减少“同一内容因格式差异导致重复入库”,并降低 Redis 判重/过滤的隐性成本。

3.2 Redis 向量库与全文检索(关键词检索 + 向量召回)

  • 依赖能力:本项目使用FT.SEARCH/ 向量 KNN /WITHSCORES等能力。
  • Redis 8(本项目使用 8.4.0) 环境下,这些查询与索引能力由 Redis 内置的查询/检索引擎直接提供;
  • 若使用较老版本 Redis,则通常需要额外安装 Redis Stack / RediSearch 模块才能获得FT.*与向量索引能力。
  • 索引:HNSW(可在配置文件中调参,如mef_construction
  • 数据结构(与代码实现对齐):使用 Redis Hash 存储,每条文档 key 以doc:为前缀;字段包含:
  • text:TEXT 字段,用于全文检索与关键词过滤
  • vector:VECTOR 字段,存储 float32 向量的 bytes,用于 KNN
  • metadata:TEXT 字段,存储 JSON 字符串(来源/作者/标题/朝代等可扩展)
  • 能力边界(与当前实现对齐):本项目的 embedding 在应用侧完成;Redis 侧专注于索引 + 召回 + 混合检索FT.SEARCH做关键词/全文检索,KNN做向量召回)。后续如果要进一步降低网络开销,可再考虑把embedding/重排做成独立服务或下沉到数据侧。
  • 客户端选择redis-py可以直接调用FT.SEARCH等命令;但在“建索引、写入、向量查询”这些高频工程动作上,本项目使用redisvl(Redis Vector Library)更省心,便于后续扩展到更复杂的检索链路。

实现形态:一个“向量存储与检索模块”(负责建索引、写入、KNN/混合检索与重排)。

3.3 服务编排(知识库搭建框架)

交互式检索服务的初始化流程基本等价于“一键搭建知识库”:

  1. 初始化向量化器(加载模型、设置线程、配置镜像)。
  2. 加载语料(纯文本语料文件)。
  3. 语料清洗与展平(当前对唐诗默认split_sentences=False,即整首诗作为一条文档;同时做轻量清洗以便判重与检索)。
  4. 连接 Redis + 创建索引(Hash + TEXT/VECTOR 字段)。
  5. 去重(批量检查文本是否已存在,避免重复向量化/写入)。
  6. 向量化新增文本,并“边向量化边写入 Redis”(降低内存、缩短总耗时)。
  7. 进入交互式查询。

4. 检索策略:混合召回 + 重排序

在线查询使用“向量检索 + 关键词过滤/打分”的混合方案:

  • Redis 查询形态(核心思想):
  • 有文本查询时:(@text:xxx)=>[KNN N @vector $vec AS vector_score]+WITHSCORES
  • 无文本查询或无命中时:回退*=>[KNN K ...]
  • 文本分数:Redis WITHSCORES返回的全文相关度(常见为 BM25 族分数)
  • 向量分数:当前实现为COSINE 距离(距离越小越相似),并转换为相似度

余弦距离dist ∈ [0, 2],相似度sim = 1 - dist可能为负,因此使用max(0, 1 - dist)确保非负。

重排序(当前实现做了归一化,避免“距离/分数量纲不同”导致权重失效):

默认权重:w_v=0.7w_t=0.3直觉数值,无理论依据)。


⚙️ 5. 资源受限下的性能与稳定性注意事项

5.1 CPU推理与内存控制

  • 小批次向量化:batch_size=2(更稳,适合8C16G);
  • 限制token长度:max_length=512(诗词通常短,足够且节省内存);
  • 使用float32向量:降低Redis存储体积与网络传输开销;
  • Intel平台加速(可选):可尝试intel-extension-for-pytorch(例如 2.8.0)以提升CPU上的Transformer推理效率(依赖oneDNN/MKL等加速路径),在无GPU场景对Qwen3-Embedding-0.6B这类模型通常有收益。

5.2 Redis 侧优化

  • 连接池:max_connections=10,减少连接建立开销
  • HNSW 参数:mef_construction影响召回/速度/内存,需要根据数据规模调参
  • 混合查询候选集扩大:实现中用top_k * 3先取候选,再做混合重排,提升最终 TopK 质量

5.3 工程化细节(减少“隐性成本”)

  • 去重:推荐使用文本内容的MD5/SHA256哈希值作为Redis Key的一部分(如doc:{hash}),实现高效判重。当前为调试方便暂用FT.SEARCH文本匹配方案;
  • 查询转义:对-(){}[]^"~*?:\\等特殊字符做清理,避免语料处理出错并减少错误信息干扰;
  • 回退策略:文本过滤无匹配时回退纯向量KNN,保证“总能返回结果”。

🧭 6. 知识查询流程(一步到位版)

  1. 用户输入查询(关键词/短句)。
  2. 检索服务清洗query(规范化、去掉潜在非法字符)。
  3. 向量化模块对query instruction做embedding(拼接query:前缀)。
  4. Redis检索模块发起混合检索(KNN + TEXT + WITHSCORES)。
  5. 对候选结果进行归一化混合打分并排序。
  6. 返回TopK给用户(当前为CLI展示;后续可把TopK作为RAG上下文喂给诸如Rerank模型)。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

在这里插入图片描述

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐