Streamlit集成GPT4All时出现LLMChain参数验证错误求助
问题:GPT4All结合Streamlit开发PDF对话应用时参数异常报错
尝试将GPT4All与Streamlit结合开发可与上传PDF对话的应用,但运行时触发参数值异常,报错信息如下:
2023-08-24 18:41:50.816 Uncaught app exception Traceback (most recent call last): File "C:\Users\MudassarMa\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 556, in _run_script exec(code, module.__dict__) File "C:\Users\MudassarMa\Downloads\Misc\DataScience\taxgpt\main.py", line 153, in <module> main() File "C:\Users\MudassarMa\Downloads\Misc\DataScience\taxgpt\main.py", line 148, in main st.session_state.conversation = get_conversation_chain( ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\MudassarMa\Downloads\Misc\DataScience\taxgpt\main.py", line 85, in get_conversation_chain conversation_chain = ConversationalRetrievalChain.from_llm( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\MudassarMa\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\langchain\chains\conversational_retrieval\base.py", line 213, in from_llm doc_chain = load_qa_chain( ^^^^^^^^^^^^^^ File "C:\Users\MudassarMa\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\langchain\chains\question_answering\__init__.py", line 238, in load_qa_chain return loader_mapping[chain_type]( ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\MudassarMa\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\langchain\chains\question_answering\__init__.py", line 70, in _load_stuff_chain llm_chain = LLMChain( ^^^^^^^^^ File "C:\Users\MudassarMa\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\langchain\load\serializable.py", line 61, in __init__ super().__init__(**kwargs) File "pydantic\main.py", line 341, in pydantic.main.BaseModel.__init__ pydantic.error_wrappers.ValidationError: 1 validation error for LLMChain llm value is not a valid dict (type=type_error.dict)
报错原因
直接使用了gpt4all.gpt4all.GPT4All的原生实例,而LangChain的ConversationalRetrievalChain要求传入的是LangChain封装的LLM类实例,原生GPT4All对象与LangChain接口不兼容,导致参数验证失败。
解决方案
1. 替换LLM导入语句
将原生GPT4All的导入替换为LangChain封装的版本:
# 替换原来的 from gpt4all.gpt4all import GPT4All from langchain.llms import GPT4All
2. 修改LLM初始化代码
在get_conversation_chain函数中,用LangChain的GPT4All类初始化模型,确保参数符合LangChain要求:
def get_conversation_chain(vector_store): # 使用LangChain封装的GPT4All类 llm = GPT4All( model="./ggml-gpt4all-j-v1.3-groovy.bin", # 确保模型文件路径正确 verbose=True, # 可选:开启日志便于调试 temperature=0.7 # 可选:调整生成温度 ) memory = ConversationBufferMemory( memory_key='chat_history', return_messages=True) conversation_chain = ConversationalRetrievalChain.from_llm( llm=llm, retriever=vector_store.as_retriever(), memory=memory ) return conversation_chain
3. 验证模型路径
确保ggml-gpt4all-j-v1.3-groovy.bin文件在指定路径下(当前目录./),如果模型文件在其他位置,需修改model参数的路径。
完整修改后的核心代码片段
# 导入部分修正 from langchain import HuggingFaceHub, LLMChain, PromptTemplate import streamlit as st from dotenv import load_dotenv from PyPDF2 import PdfReader from langchain.text_splitter import CharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings, HuggingFaceInstructEmbeddings from langchain.vectorstores import FAISS from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationalRetrievalChain from langchain.chat_models import ChatOpenAI from htmlTemplates import bot_template, user_template, css import transformers from transformers import pipeline from langchain.llms import GPT4All # 替换原生导入 # ... 其他函数不变,只修改get_conversation_chain ... def get_conversation_chain(vector_store): llm = GPT4All( model="./ggml-gpt4all-j-v1.3-groovy.bin", verbose=True, temperature=0.7 ) memory = ConversationBufferMemory( memory_key='chat_history', return_messages=True) conversation_chain = ConversationalRetrievalChain.from_llm( llm=llm, retriever=vector_store.as_retriever(), memory=memory ) return conversation_chain # ... 其余代码不变 ...
内容的提问来源于stack exchange,提问作者user810258
相关产品推荐
相关产品推荐

