02-LlamaIndex 检索核心与私有模型部署

发布时间:2026/6/28 5:40:04
02-LlamaIndex 检索核心与私有模型部署 一 、RAG 检索与查询机制深度解析在完成“文档 (Document) - 节点 (Node) - 向量化 (Embedding) - 本地存储 (Storage)”的索引构建后我们需要对数据进行检索和查询。1. 加载索引 (Load Index)检索的第一步是加载已存储的索引这类似于“连接数据库”。from llama_index.core import StorageContext, load_index_from_storage storage_context StorageContext.from_defaults(persist_dir./storage_default) # 从本地存储的向量数据中加载向量索引 index load_index_from_storage(storage_context) print(index)2. LlamaIndex 的三种核心交互模式根据底层调用层级的不同LlamaIndex 提供了三种交互接口由底层到高层①as_retriever()(底层检索器)功能纯粹的向量相似性检索。将用户问题转化为向量后去向量库中查找最相似的节点Nodes。特点绝对不与大模型(LLM) 发生交互。它只返回相关的文本块及其相似度得分Score。关键参数similarity_top_k用于控制召回的节点数量即返回前几个最相关的块。注意召回的是整个节点Node的内容而非精确的“一句话答案”。from llama_index.core import StorageContext, load_index_from_storage storage_context StorageContext.from_defaults(persist_dir./storage_default) # 加载索引--相当于连接数据库 index load_index_from_storage(storage_context) # 创建底层检索器 r index.as_retriever() # 先会把文字转化为数字(向量数据),然后到索引中做相似性匹配不会和大模型交互 nodes r.retrieve(Python中的闭包是什么?) # 断点中可以看到返回两个节点node分数比较高就是相似度比较高的 print(nodes)②as_query_engine()(中层查询引擎)功能问答引擎。它会在底层先调用 Retriever 召回相关节点然后将“召回的节点内容 用户问题”一起打包发送给大模型(LLM)由大模型推理并生成最终答案。特点单轮问答交互没有历史记忆功能。from llama_index.core import StorageContext, load_index_from_storage from llama_index.llms.deepseek import DeepSeek from llama_index.core import VectorStoreIndex, Settings storage_context StorageContext.from_defaults(persist_dir./storage_default) # 加载索引--相当于连接数据库 index load_index_from_storage(storage_context) # 初始化deepSeek llm 并设置为默认配置 llm DeepSeek(modeldeepseek-reasoner, api_keysk-1b6d5081484c417f80xxxx) Settings.llm llm # 创建查询引擎 q index.as_query_engine() # 召唤的相识节点用户问题-LLM 最终返回推理生成的答案 nodes q.query(假设你是一个经验丰富的python 开始工程师帮忙解答下: 基础题第1题) print(nodes)③as_chat_engine()(高层聊天引擎)功能对话引擎。底层调用 Query Engine。特点最贴近用户的聊天模式具备历史对话记忆功能能够结合上下文进行持续互动。核心提示 (Prompt) 的重要性在使用 Query Engine 时如果大模型回答“材料中未提供答案”尝试优化提问方式如“假设你是一个经验丰富的 Python 工程师请结合材料试着解答...”优秀的提示词能大幅提升模型的回答质量。from llama_index.core import StorageContext, load_index_from_storage from llama_index.llms.deepseek import DeepSeek storage_context StorageContext.from_defaults(persist_dir./storage_default) index load_index_from_storage(storage_context) #初始化deepSeek llm 并设置为默认配置 llm DeepSeek(modeldeepseek-reasoner, api_keysk-1b6d5081484cxxx) Settings.llm llm # 创建高层聊天引擎 q index.as_chat_engine() # 也可将“召回的节点内容 用户问题”一起打包发送给大模型 (LLM)由大模型推理并生成最终答案效果甚至更优 nodes q.chat(假设你是一个经验丰富的python 开始工程师帮忙解答下: 基础题第1题) print(nodes)用户提问↓向量检索 → 找到相关文档片段nodes↓组装 Prompt → 根据以下内容回答问题{nodes内容} 问题{用户问题}↓LLM 推理 → 生成答案↓返回结果二、分块大小 (Chunk Size) 与模型限制在构建索引时需要特别注意节点分块大小与嵌入模型处理能力的匹配问题隐患默认的分块器如SentenceSplitter的chunk_size可能是 1024。但某些嵌入模型如部分开源小模型每次最多只能处理 512 个 token。后果如果节点的 token 数量超过了嵌入模型的max_tokens可能会导致截断和数据丢失。截图演示下SentenceSplitter的的chunk_size解决方案https://huggingface.co/spaces/mteb/leaderboard了解你所使用的 Embedding 模型的max_tokens可通过 HuggingFace 或 ModelScope 查看。将分块器的chunk_size设置为小于或等于该模型的最大处理上限。调整chunk_size最终生成的node数量也会不同合理的根据使用的大模型max_tokens进行设置是为了避免精度缺失比如切割了一个node是1024分块的但是后面嵌入计算index用的嵌入模型是max_tokens 512, 那么就会出现问题可以理解为嵌入计算的能力不够那么内容就有可能缺失了三、私有化嵌入模型部署实战 (Ollama)为了数据安全和零 API 成本我们可以在自己的服务器上私有化部署大模型和嵌入模型。1. 为什么选择 OllamaOllama 是一个可以便捷运行大语言模型及嵌入模型的容器化工具。它能让我们像管理 Docker 镜像一样拉取和运行 AI 模型如阿里千问 Embedding、DeepSeek 等。https://ollama.com/search ollama 官网https://modelscope.cn/models/Qwen/Qwen3-Embedding-0.6B-GGUF/summary 魔法社区内-部署私有模型2. 服务器部署指南 (Ubuntu/Linux 环境)Step 1: 安装 Docker# 先更新下apt 仓库 apt update # Ubuntu 系统安装 Docker apt install docker.io # 验证安装是否成功当前容器应显示为空列表 docker psStep 2: 使用 Docker 安装 Ollama# 拉取并运行 Ollama 容器默认映射 11434 端口 docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama如果上述直接拉取 ollma容器失败那么需要配置docker镜像加速直接执行下面的命令(配置docker镜像加速)覆盖写入/etc/docker/daemon.json然后重启 Dockersudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://docker.m.daocloud.io, https://docker.xuanyuan.me ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker验证加速器是否生效docker info | grep -A 5 Registry Mirrors如果能看到你配置的地址说明生效了。重新使用命令拉取 Ollama 镜像Step 3: 进入容器并拉取模型https://ollama.com/batiai/qwen3-embedding 官网可以搜索自己需要的模型这边找的是嵌入模型# 1. 进入名为 ollama 的容器后台 docker exec -it ollama bash # 如果需要退出容器直接输入exit # 2. 拉取指定的嵌入模型以通义千问 0.6B 量化版为例# 注意实际模型名称请参考 Ollama 官方模型库 ollama pull qwen3-embedding:0.6b # 3. 查看已安装的模型列表 ollama list # 如果需要移除安装的模型 ollama rm 模型名Step 4: 配置防火墙 (重要)必须放行11434端口外部代码才能调用该模型。注意: 防火墙添加规则后一定要在云服务器控制台添加规则命令行方式 (Ubuntu)# 防火墙添加规则 sudo ufw allow 22/tcp #一定要添加避免ssh连接不上了如果ss连接是其他端口自己换 sudo ufw allow 11434/tcp # 防火墙开启 sudo ufw enable # 防火墙查看当前状态以及开放规则 sudo ufw status verbose云服务商面板进入阿里云/京东云/腾讯云等控制台 - 安全组/防火墙 - 添加规则 - 允许11434端口0.0.0.0/0。四、LlamaIndex 接入本地私有模型部署完成后将代码中的 API 调用替换为本地 Ollama 服务。https://developers.llamaindex.ai/python/framework/integrations/embeddings/ollama_embedding/ 查看llamIndex 怎么通过ollama使用本地模型1. 安装配套依赖包pip install llama-index-embeddings-ollama2. 核心代码配置注意: 因为自己的服务器比较差内存不足导致带不动qianwen嵌入模型换了个更轻量的nomic-embed-text:latestfrom llama_index.embeddings.ollama import OllamaEmbedding from llama_index.core import Settings ## 实例化本地 Embedding 模型 ollama_embedding OllamaEmbedding( model_namenomic-embed-text:latest, base_urlhttp://47.110.32.112:11434) # 声明全局使用的嵌入模型为本地私有模型 Settings.embed_model ollama_embedding # 此后构建索引、向量化等操作均不再产生额外 API 计费五、避坑与注意事项网络与镜像加速国内服务器如果拉取 Docker 镜像超时timeout请务必在服务器上配置Docker 国内镜像加速源。服务器扣费管理如果是按小时计费的云服务器特别是海外免备案按量服务器不使用时请务必执行Server Destroy彻底销毁服务器以免产生高额闲置费用。硬件资源瓶颈服务器内存较小如 1H2G时尽量选择低参数量如 0.6B、甚至更小的量化版模型防止内存溢出OOM。六、结语AI 不会取代测试工程师但掌握 AI 的测试工程师一定会取代不懂 AI 的。本专栏拒绝纸上谈兵每一篇都源于真实项目中的血泪教训与优化心得。感兴趣的朋友请关注我避免错过更新我会一步步手把手搭建企业级知识库需要源码的可以关注我评论需要我无偿分享