RAG 示例:使用 langchain、Redis、llama.cpp 构建一个 kubernetes 知识库问答

RAGRetrieval Augmented Generation 检索增强生成)是目前业界中的一种主流方法,通过增加额外知识的方式来减少大语言模型(LLM)的幻觉问题(一本正经的胡说八道)。

RAG 系统概览

null

如上图所示,RAG 系统可以分为两个部分:

  • Indexing:构建知识库。
  • Retrieval & Generation:从知识库中获取相关信息,然后生成结果。

Indexing 构建知识库的过程可以分为四步:

  1. \1. Load:加载 PDF、doc、markdown、web 等等形式的知识数据。
  2. \2. Split:由于 LLM 上下文大小的限制,需要将文档进行切割。
  3. \3. Embedding:将文本转换为向量。
  4. \4. store to VectorDB:将文本内容和向量存储至向量数据库,即知识库。

Retrieval & Generation 的过程也是四步:

  1. \1. Embedding:将用户提出的问题转换为向量。
  2. \2. search VectorDB:从知识库中查询与问题语义相近的文本段落。
  3. \3. prompt:将检索出来的文本段落与用户问题合并,生成 prompt。
  4. \4. LLM:将 prompt 提交给大语言模型,得到最终答案。

从上述过程中可以看到,相较于直接把问题提交给 LLM 得到答案,RAG 系统额外构建了一个知识库,并且会把问题跟已有知识相结合,生成新的 prompt 后再提交给 LLM 得到答案。 换句话说,RAG 系统就是在用户提出的问题之外,额外增加了一些上下文/背景信息,这些信息可以是实时信息、也可以是专业领域信息,以此从 LLM 得到更好的回答。

RAG 系统示例

在本示例中,我将使用 langchainRedisllama.cpp 构建一个 kubernetes 知识库问答。

langchain 是一个工具包,Redis 被我用作向量数据库,llama.cpp 是一个开源的加载大语言模型的运行时程序。

我在本地使用了 Docker 容器环境进行开发,通过以下 docker-compose 文件拉取依赖的服务:

img

代码示例如下:

null

代码释义:

  • • 加载文档:使用 langchain 抓取 kubernetes 官方文档页面内容。
  • • 切割文档:使用 langchain 切割文档。
  • • 向量化:使用 sentence_transformers 将文本转换为向量:
from sentence_transformers import SentenceTransformer
sentences = ["This is an example sentence"]

model = SentenceTransformer('sentence-transformers/all-mpnet-base-v2')
embeddings = model.encode(sentences)
print(embeddings)
  • • 存储至向量数据库:将文本和向量存储至 Redis,你也可以使用其它向量数据库。
  • • 用户提问向量化:使用同样的模型将用户提出的问题转换为向量。
  • • 向量相似性检索:从向量数据库中检索出与提问相似的文本段落。
  • • 组合生成 prompt:将检索出来的信息与用户提问一起合并生成新的 prompt
  • • 将 prompt 提交给 LLM 得到答案。

最终的测试结果如下:

null

可以看到,加了上下文之后,LLM 给出的答案更好了。

RAG 面临的挑战

RAG 的每一步几乎都面临挑战:

  • • 如何加载不同形式的文档数据?这一步问题倒不大。
  • • 如何切割文档?切割的效果影响了 prompt 的上下文信息,因此也会影响 LLM 生成的结果。
  • • 如何做 embedding,选择哪种模型?
  • • 选择哪个向量数据库?常见的技术选型问题。
  • • 如何将检索出来的信息与用户提问一起合并成新的 promptprompt 本来就可以五花八门。
  • • 选择哪个 LLM 以及运行时?就模型而言,Llama 系列算是最火的开源模型了;而运行时则有 llama.cpp(或者在其之上封装的 Ollama)、HuggingFace/transformersvLLM 等等。

总结

RAG 系统通过引入知识库,扩展了 LLM 对专业领域和实时信息的支持能力,使其在回答专业问题时更加准确高效。

想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年 AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享

👇👇扫码免费领取全部内容👇👇

一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势

想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI

1. 100+本大模型方向电子书

在这里插入图片描述

2. 26 份行业研究报告:覆盖多领域实践与趋势

报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:

  • 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
  • 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
  • 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
  • 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。

3. 600+套技术大会 PPT:听行业大咖讲实战

PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:

在这里插入图片描述

  • 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
  • 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
  • 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
  • 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。

二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走

想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!

1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位

面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析

2. 102 道 AI 大模型真题:直击大模型核心考点

针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:

3. 97 道 LLMs 真题:聚焦大型语言模型高频问题

专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:


三、路线必明: AI 大模型学习路线图,1 张图理清核心内容

刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!

在这里插入图片描述

路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

img

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

img

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

img

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

img

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

img

L5阶段:专题集丨特训篇 【录播课】

img
四、资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!

<think>好的,用户已经部署了llama.cpp,并且可以运行DeepSeek模型,现在想构建本地知识库。我需要一步步引导他们完成这个过程。首先,我应该考虑构建本地知识库的基本流程,通常包括数据准备、文本处理、向量化、存储和查询这几个步骤。 用户可能已经有了一些文档,比如TXT、PDF、Word之类的文件。需要建议他们整理这些数据,确保格式统一,可能需要转换成纯文本。然后,文本预处理很重要,包括分词、去停用词、去除噪音等,可能需要用一些中文分词工具,比如jieba。 接下来是文本分割,因为大模型处理长文本有限制,所以需要把文档切分成小块,比如按段落或固定长度。这里可能需要提到滑动窗口来保持上下文。 然后是向量化,也就是把文本转换成向量,常用的模型是Sentence-BERT或者Hugging Face的模型。需要提醒用户下载预训练好的模型,比如paraphrase-multilingual-MiniLM-L12-v2,适合多语言包括中文。 向量存储方面,可以用FAISS或者Annoy这样的库,它们适合高效相似性搜索。需要指导用户安装这些库,并存储生成的向量。 集成到llama.cpp可能需要通过API或者直接调用,用户需要编写代码将查询转换成向量,然后在向量库中搜索相似内容,将结果作为上下文输入给DeepSeek模型生成回答。 可能还需要提到RAG(检索增强生成)框架,这样用户可以将检索到的相关信息结合进生成过程中,提升回答的准确性。此外,要提醒用户注意处理中文时的编码问题,以及模型和分词工具对中文的支持情况。 最后,优化部分需要考虑缓存、批处理向量化、调整分块大小和滑动窗口,以及定期更新知识库。可能还要建议使用LlamaIndex这样的工具简化流程,或者考虑微调模型以适应特定领域,不过要权衡计算资源。 用户可能需要具体的代码示例,比如使用langchain和FAISS的代码片段,或者Hugging Face的模型加载方式。需要确保代码部分正确,使用的中文模型和工具是合适的。同时,要检查步骤是否清晰,是否有遗漏,比如环境准备、依赖安装等。确保用户按照步骤操作后能够成功构建本地知识库。</think>构建基于llama.cpp和DeepSeek的本地知识库可分为以下步骤: 一、环境准备 1. 安装Python依赖库: ```bash pip install langchain sentence-transformers faiss-cpu unstructured pdfminer.six python-docx ``` 二、数据处理流程 1. 文档采集 - 建议格式:TXT/Markdown/PDF/Word - 创建统一存储目录:`mkdir -p ./knowledge_base/docs` 2. 文本预处理(示例代码) ```python from langchain.document_loaders import DirectoryLoader from langchain.text_splitter import RecursiveCharacterTextSplitter # 加载文档 loader = DirectoryLoader('./knowledge_base/docs', glob='**/*.txt') docs = loader.load() # 中文文本分割(512 tokens为佳) text_splitter = RecursiveCharacterTextSplitter( chunk_size=512, chunk_overlap=50, separators=["\n\n", "\n", "。", "!", "?"] ) split_docs = text_splitter.split_documents(docs) ``` 三、向量化处理 1. 推荐中文embedding模型: - `GanymedeNil/text2vec-large-chinese` - `shibing624/text2vec-base-multilingual` 2. 创建向量库 ```python from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import FAISS # 加载中文embedding模型 model_name = "GanymedeNil/text2vec-large-chinese" embeddings = HuggingFaceEmbeddings(model_name=model_name) # 生成向量存储 vector_store = FAISS.from_documents(split_docs, embeddings) vector_store.save_local("./knowledge_base/vector_db") ``` 四、集成llama.cpp 1. 创建检索增强生成(RAG)系统 ```python from llama_cpp import Llama # 初始化DeepSeek模型 llm = Llama( model_path="./deepseek-model.bin", n_ctx=4096, n_threads=8 ) # 检索问答函数 def rag_query(query): # 相似性检索 docs = vector_store.similarity_search(query, k=3) context = "\n".join([doc.page_content for doc in docs]) # 构造prompt prompt = f"基于以下信息:\n{context}\n\n请回答:{query}" # 生成回答 output = llm(prompt, max_tokens=512) return output['choices'][0]['text'] ``` 五、优化建议 1. 索引优化 - 使用HNSW算法改进FAISS配置 - 添加元数据过滤(日期、来源等) 2. 缓存机制 - 对常见查询结果建立LRU缓存 - 实现向量结果预加载 3. 质量监控 - 设置检索相似度阈值(建议0.65-0.75) - 添加人工反馈修正机制 六、进阶方案 1. 混合检索系统 ```python from langchain.retrievers import BM25Retriever, EnsembleRetriever bm25_retriever = BM25Retriever.from_documents(split_docs) faiss_retriever = vector_store.as_retriever() ensemble_retriever = EnsembleRetriever( retrievers=[bm25_retriever, faiss_retriever], weights=[0.4, 0.6] ) ``` 2. 知识更新策略 - 增量更新:每周自动扫描新增文档 - 版本控制:维护向量库版本历史 - 失效检测:设置文档有效期时间戳 注意事项: 1. 中文处理需确保embedding模型支持中文语义 2. 文档分块长度需与模型上下文窗口匹配 3. 建议配置至少32GB内存处理百万级文本片段 4. 敏感数据建议启用本地加密存储 可通过`rag_query("你的问题")`进行知识查询测试,建议从简单事实性问题开始验证系统准确性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值