使用llama-index时遇OpenAI API Key缺失的ValueError如何解决?
问题
使用llama-index编写了从S3存储桶获取PDF文件并构建向量索引的代码,代码如下:
import boto3 from llama_index.core import SimpleDirectoryReader, VectorStoreIndex def retrieve_pdf_files_from_s3(bucket_name): s3 = boto3.client('s3',aws_access_key_id='****',aws_secret_access_key='****',region_name="****") response = s3.list_objects_v2(Bucket=bucket_name) pdf_files = [] if 'Contents' in response: for obj in response['Contents']: if obj['Key'].endswith('.pdf'): pdf_files.append(obj['Key']) return pdf_files bucket_name = "****" pdf_files = retrieve_pdf_files_from_s3(bucket_name) """ for pdf_data in pdf_files: s3 = boto3.client('s3',aws_access_key_id='****',aws_secret_access_key='****',region_name="****") s3.download_file(bucket_name, pdf_data, './tmp/' + pdf_data) """ reader = SimpleDirectoryReader(input_dir="./tmp") documents = reader.load_data() index = VectorStoreIndex.from_documents(documents) print(index)
执行时出现以下错误:
Traceback (most recent call last): File "D:\NusreGrowth\RAG for Own Data\venv\lib\site-packages\llama_index\core\embeddings\utils.py", line 59, in resolve_embed_model validate_openai_api_key(embed_model.api_key) File "D:\NusreGrowth\RAG for Own Data\venv\lib\site-packages\llama_index\embeddings\openai\utils.py", line 104, in validate_openai_api_key raise ValueError(MISSING_API_KEY_ERROR_MESSAGE) ValueError: 未找到OpenAI的API密钥。 请在初始化前设置OPENAI_API_KEY环境变量或配置openai.api_key。 API密钥可在https://platform.openai.com/account/api-keys获取或创建。
处理上述异常时触发二次异常:
Traceback (most recent call last): File "D:\NusreGrowth\RAG for Own Data\venv\app.py", line 25, in <module> index = VectorStoreIndex.from_documents(documents) File "D:\NusreGrowth\RAG for Own Data\venv\lib\site-packages\llama_index\core\indices\base.py", line 145, in from_documents return cls( File "D:\NusreGrowth\RAG for Own Data\venv\lib\site-packages\llama_index\core\indices\vector_store\base.py", line 71, in __init__ else embed_model_from_settings_or_context(Settings, service_context) File "D:\NusreGrowth\RAG for Own Data\venv\lib\site-packages\llama_index\core\settings.py", line 274, in embed_model_from_settings_or_context return settings.embed_model File "D:\NusreGrowth\RAG for Own Data\venv\lib\site-packages\llama_index\core\settings.py", line 67, in embed_model self._embed_model = resolve_embed_model("default") File "D:\NusreGrowth\RAG for Own Data\venv\lib\site-packages\llama_index\core\embeddings\utils.py", line 66, in resolve_embed_model raise ValueError( ValueError: ****** 无法加载OpenAI嵌入模型。如果您打算使用OpenAI,请检查您的OPENAI_API_KEY。 原始错误: 未找到OpenAI的API密钥。 请在初始化前设置OPENAI_API_KEY环境变量或配置openai.api_key。 API密钥可在https://platform.openai.com/account/api-keys获取或创建。 请考虑使用embed_model='local'。 如需更多嵌入选项,请查阅文档:https://docs.llamaindex.ai/en/stable/module_guides/models/embeddings.html#modules ******
需解决“未找到OpenAI的API密钥”的问题。
解决方案
方案一:配置OpenAI API密钥
llama-index默认使用OpenAI的嵌入模型,需配置API密钥,有两种方式:
通过环境变量设置
在代码开头添加以下代码,替换为你的API密钥:import os os.environ["OPENAI_API_KEY"] = "你的OpenAI API密钥"也可以在系统环境变量中添加
OPENAI_API_KEY,设置后重启运行环境即可生效。直接在llama-index中配置
通过Settings模块指定嵌入模型的API密钥:from llama_index.core import Settings from llama_index.embeddings.openai import OpenAIEmbedding Settings.embed_model = OpenAIEmbedding(api_key="你的OpenAI API密钥")
方案二:使用本地嵌入模型(无需API密钥)
若不想依赖OpenAI服务,可切换到本地开源嵌入模型,有两种实现方式:
快速启用本地模型
修改构建索引的代码,添加embed_model="local"参数:index = VectorStoreIndex.from_documents(documents, embed_model="local")该方式会自动使用默认的本地嵌入模型。
指定具体本地模型
以BAAI/bge-small-zh为例,先安装依赖:pip install llama-index-embeddings-huggingface然后在代码中配置:
from llama_index.core import Settings from llama_index.embeddings.huggingface import HuggingFaceEmbedding Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-zh")可根据需求替换为其他兼容的开源嵌入模型。
内容的提问来源于stack exchange,提问作者Nitin Jain
相关产品推荐
相关产品推荐

