基于Streamlit实现PDF对话时遇Segmentation fault:11致应用无法运行
Segmentation fault: 11 错误含义及解决办法
错误含义
Segmentation fault: 11是操作系统抛出的内存访问错误,意味着程序试图访问不属于它的内存区域(比如越界访问、访问已释放的内存)。在Python场景下,这类错误大多是依赖的底层C扩展模块(比如Chromadb、SQLite相关组件)存在兼容性问题,或是二进制包与当前Python版本、系统环境不匹配导致的。
针对你的场景的解决步骤
1. 修正OpenAI模型调用错误
你的代码中用langchain.llms.OpenAI调用gpt-3.5-turbo是错误的:OpenAI类对应OpenAI的补全模型(如text-davinci-003),而gpt-3.5-turbo是聊天模型,需要用ChatOpenAI类。修改代码如下:
- 替换导入语句:
from langchain.chat_models import ChatOpenAI - 修改查询时的LLM初始化:
response = index.query(llm=ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.2), question=prompt, chain_type='stuff')
2. 修复Chromadb兼容性问题
Chromadb是引发这类段错误的常见原因,尤其在Mac+Python3.10环境下,建议指定稳定版本安装:
pip install chromadb==0.4.15
3. 安装Watchdog优化环境
按照终端提示完成安装,避免潜在的文件监听问题:
xcode-select --install pip install watchdog
4. 用虚拟环境隔离依赖
全局Python环境的包冲突也可能引发这类问题,创建并激活虚拟环境后重新安装所有依赖:
# 创建虚拟环境 python3 -m venv pdf-query-env # 激活环境(Mac/Linux) source pdf-query-env/bin/activate # 安装依赖 pip install langchain streamlit pypdf openai chromadb==0.4.15 tiktoken
5. 验证PDF文件路径
确保代码中的<PDF file>是正确的相对路径或绝对路径,比如./sample.pdf或者/Users/xxx/Documents/test.pdf,避免文件加载异常引发连锁问题。
内容的提问来源于stack exchange,提问作者slsu
相关产品推荐
相关产品推荐

