LlamaIndex嵌入被禁用致node_mappings为空,如何启用嵌入?
解决LlamaIndex中Embeddings被禁用导致node_mappings为空的问题
问题根源
出现Embeddings have been explicitly disabled. Using MockEmbedding.提示,说明LlamaIndex未配置有效的嵌入模型,自动使用了MockEmbedding——这是仅用于测试的假嵌入,不会生成真实向量表示。后续构建索引时,无法基于向量创建节点与索引的关联映射,最终导致node_mappings_2021为空字典。
解决方案
要启用真实的Embeddings,需完成以下配置:
1. 选择并配置嵌入模型
根据需求选择合适的嵌入模型,以下是两种常用方案:
方案一:使用OpenAI官方嵌入模型(需API密钥)
- 首先在Colab中设置OpenAI API密钥环境变量:
import os os.environ["OPENAI_API_KEY"] = "你的OpenAI API密钥" - 显式初始化嵌入模型:
from llama_index.embeddings.openai import OpenAIEmbedding embed_model = OpenAIEmbedding(model="text-embedding-ada-002")
方案二:使用开源HuggingFace嵌入模型(免费无API)
- 先安装依赖(Colab中执行):
!pip install llama-index-embeddings-huggingface - 初始化嵌入模型:
from llama_index.embeddings.huggingface import HuggingFaceEmbedding embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5")
2. 将嵌入模型传入LlamaIndex组件
确保在构建索引或处理节点时,将初始化好的embed_model传入对应组件。例如:
- 直接从文档构建索引时:
from llama_index.core import VectorStoreIndex index = VectorStoreIndex.from_documents(docs_2021, embed_model=embed_model) - 如果是先解析节点再构建索引,需在索引初始化时传入
embed_model:raw_nodes_2021 = node_parser.get_nodes_from_documents(docs_2021) index = VectorStoreIndex(raw_nodes_2021, embed_model=embed_model)
3. 检查并移除禁用嵌入的配置
查看notebook中是否存在类似以下的代码,若有需删除或修改:
from llama_index.core import Settings Settings.embed_model = "mock" # 这类配置会强制使用MockEmbedding
验证效果
重新运行代码后,若不再出现MockEmbedding的提示,说明嵌入模型已生效。此时node_mappings_2021会包含节点与索引的关联映射,不再是空字典。
内容的提问来源于stack exchange,提问作者Javier
相关产品推荐
相关产品推荐

