Llama_index部署HTTP服务时加载索引触发KeyError: 'docs'求助
LlamaIndex加载预生成索引部署到HTTP服务时出现KeyError: 'docs'问题
问题现象
本地虚拟环境中运行代码可正常加载索引并查询,但将代码部署到Flask API或AWS容器化Lambda后,ask_ai方法中的GPTSimpleVectorIndex.load_from_disk调用触发KeyError: 'docs'错误。
生成索引代码
from llama_index import SimpleDirectoryReader, GPTListIndex, readers, GPTSimpleVectorIndex, LLMPredictor, PromptHelper, ServiceContext from langchain import OpenAI import sys import os def construct_index(): # set maximum input size max_input_size = 40960 # set number of output tokens num_outputs = 20000 # set maximum chunk overlap max_chunk_overlap = 20 # set chunk size limit chunk_size_limit = 600 # define prompt helper prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit) # define LLM llm_predictor = LLMPredictor(llm=OpenAI(temperature=0.5, model_name="text-davinci-003", max_tokens=num_outputs)) documents = SimpleDirectoryReader("./data").load_data() service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, prompt_helper=prompt_helper) index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context) index.save_to_disk('./index.json') return index
查询代码
def ask_ai(query): index = GPTSimpleVectorIndex.load_from_disk('./index.json') response = index.query(query) return response.response
错误日志
ERROR:app:Exception on /api/query [POST] Traceback (most recent call last): File "C:\pmi\python-flask-restapi\flaskapi\lib\site-packages\flask\app.py", line 2190, in wsgi_app response = self.full_dispatch_request() File "C:\pmi\python-flask-restapi\flaskapi\lib\site-packages\flask\app.py", line 1486, in full_dispatch_request rv = self.handle_user_exception(e) File "C:\pmi\python-flask-restapi\flaskapi\lib\site-packages\flask\app.py", line 1484, in full_dispatch_request rv = self.dispatch_request() File "C:\pmi\python-flask-restapi\flaskapi\lib\site-packages\flask\app.py", line 1469, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "C:\pmi\python-flask-restapi\app.py", line 17, in qyery_chatgpt return appService.ask_ai(query) File "C:\pmi\python-flask-restapi\app_service.py", line 10, in ask_ai index = GPTSimpleVectorIndex.load_from_disk('index.json') File "C:\pmi\python-flask-restapi\flaskapi\lib\site-packages\llama_index\indices\base.py", line 352, in load_from_disk return cls.load_from_string(file_contents, **kwargs) File "C:\pmi\python-flask-restapi\flaskapi\lib\site-packages\llama_index\indices\base.py", line 328, in load_from_string return cls.load_from_dict(result_dict, **kwargs) File "C:\pmi\python-flask-restapi\flaskapi\lib\site-packages\llama_index\indices\vector_store\base.py", line 260, in load_from_dict return super().load_from_dict(result_dict, **config_dict, **kwargs) File "C:\pmi\python-flask-restapi\flaskapi\lib\site-packages\llama_index\indices\base.py", line 304, in load_from_dict docstore = DocumentStore.load_from_dict(result_dict[DOCSTORE_KEY]) File "C:\pmi\python-flask-restapi\flaskapi\lib\site-packages\llama_index\docstore.py", line 72, in load_from_dict for doc_id, doc_dict in docs_dict["docs"].items(): KeyError: 'docs'
部署环境信息
- Flask:基于python-flask-restapi仓库改造,仅保留
ask_ai方法并通过路由调用 - AWS容器化Lambda:Dockerfile如下
FROM public.ecr.aws/lambda/python:3.10 COPY requirements.txt ./ RUN pip3 install -r requirements.txt COPY myfunction.py ./ COPY index.json ./ CMD ["myfunction.lambda_handler"]
可能的解决方向
- 统一依赖版本:确保本地开发环境与部署环境的llama-index、langchain、OpenAI等依赖版本完全一致,版本差异可能导致索引序列化/反序列化格式不兼容
- 验证索引文件完整性:检查部署环境中的
index.json是否完整,避免文件复制过程中出现损坏或缺失 - 加载时指定ServiceContext:加载索引时传入与生成阶段一致的
service_context参数,确保反序列化使用相同的配置,示例:# 先重新构建与生成时一致的service_context prompt_helper = PromptHelper(40960, 20000, 20, chunk_size_limit=600) llm_predictor = LLMPredictor(llm=OpenAI(temperature=0.5, model_name="text-davinci-003", max_tokens=20000)) service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, prompt_helper=prompt_helper) # 加载索引时传入service_context index = GPTSimpleVectorIndex.load_from_disk('./index.json', service_context=service_context) - 确认文件路径正确性:检查部署环境中
index.json的实际路径是否与代码中的路径匹配,比如Flask应用的工作目录、Lambda的执行目录是否符合预期
内容的提问来源于stack exchange,提问作者Diego Satizabal
相关产品推荐
相关产品推荐

