现象:
File "~/anaconda3/envs/leo_py38/lib/python3.8/site-packages/httpx/_transports/default.py", line 86, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.ReadTimeout: timed out
代码:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.ollama import Ollama
###定义使用的llm,embedding 模型
llm = Ollama(model="yi:34b")
embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-large-zh-v1.5")
Settings.llm = llm
Settings.embed_model = embed_model
## 加载文档
documents = SimpleDirectoryReader("../../data").load_data()
print("documents: ", len(documents))
## 构建index
index = VectorStoreIndex.from_documents(documents, show_progress=True)
## 构建query engine
query_engine = index.as_query_engine()
query = "身长九尺,髯长二尺的人是谁?"
## query
response = query_engine.query(query)
print(f"query:{query}")
print(f"查询结果:{response}")
解决办法是增加timeout时长
llm = Ollama(model="yi:34b", request_timeout=500)
总结
### 文章总结**现象描述**:
当执行基于`llama_index`库的文本检索代码时,出现了HTTP超时错误(`httpx.ReadTimeout: timed out`)。这一错误指出在请求过程中,预设的等待时间内未能成功完成HTTP请求,导致超时异常。
**代码分析**:
代码主要流程包括设置使用的LLM(大型语言模型)和embedding模型,加载文档数据,进而构建向量索引以及查询引擎,并最终执行一个文本查询。错误发生在模型请求过程中,可能由于网络延迟、模型响应慢等原因导致。
**解决方法**:
针对上述问题,通过在初始化LLM(Language Model,语言模型)时增加`request_timeout`参数,并设置一个更长的等待时间(例如500秒),来解决HTTP超时问题。这一方法通过延长请求的超时时间来保证模型有足够的时间响应,从而避免超时异常的发生。
**关键修改**:
```python
llm = Ollama(model="yi:34b", request_timeout=500) # 增加 request_timeout 参数设置超时时间为500秒
```
**总结建议**:
在处理网络请求或与远程服务交互的编程中,遇到超时错误时,首先应考虑增加超时时间的设置。此外,根据需要和实际情况,可以考虑进一步优化网络配置、升级硬件设备或提升服务端性能等多种手段,来减少此类错误的发生,确保程序的稳定运行和高效响应。