导入OpenAI与LangChain后GPT聊天机器人报错,求解决方法
问题描述
- 目标:基于OpenAI API开发一款可读取PDF、TXT等文件,并能基于文件内容回答问题的聊天机器人
- 开发依据:参考相关教程实现,使用代码如下:
from gpt_index import SimpleDirectoryReader, GPTListIndex, GPTSimpleVectorIndex, LLMPredictor, PromptHelper, ServiceContext from langchain.chat_models import ChatOpenAI import gradio as gr import sys import os os.environ["OPENAI_API_KEY"] = 'yourapikey' def construct_index(directory_path): max_input_size = 4096 num_outputs = 512 max_chunk_overlap = 20 chunk_size_limit = 600 prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit) llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0.7, model_name="gpt-3.5-turbo", max_tokens=num_outputs)) documents = SimpleDirectoryReader(directory_path).load_data() index = GPTSimpleVectorIndex(documents, llm_predictor=llm_predictor, prompt_helper=prompt_helper) index.save_to_disk('index.json') return index def chatbot(input_text): index = GPTSimpleVectorIndex.load_from_disk('index.json') response = index.query(input_text, response_mode="compact") return response.response iface = gr.Interface(fn=chatbot, inputs=gr.components.Textbox(lines=7, label="Enter your text"), outputs="text", title="Custom-trained AI Chatbot") index = construct_index("docs") iface.launch(share=True)
运行代码后触发如下错误:
File "C:\Users\USER\desktop\cht\app.py", line 1, in <module> from gpt_index import SimpleDirectoryReader, GPTListIndex, GPTSimpleVectorIndex, LLMPredictor, PromptHelper, ServiceContext File "C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\gpt_index\__init__.py", line 18, in <module> from gpt_index.indices.common.struct_store.base import SQLDocumentContextBuilder File "C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\gpt_index\indices\__init__.py", line 4, in <module> from gpt_index.indices.keyword_table.base import GPTKeywordTableIndex File "C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\gpt_index\indices\keyword_table\__init__.py", line 4, in <module> from gpt_index.indices.keyword_table.base import GPTKeywordTableIndex File "C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\gpt_index\indices\keyword_table\base.py", line 16, in <module> from gpt_index.indices.base import DOCUMENTS_INPUT, BaseGPTIndex File "C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\gpt_index\indices\base.py", line 23, in <module> from gpt_index.indices.prompt_helper import PromptHelper File "C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\gpt_index\indices\prompt_helper.py", line 12, in <module> from gpt_index.langchain_helpers.chain_wrapper import LLMPredictor File "C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\gpt_index\langchain_helpers\chain_wrapper.py", line 13, in <module> from gpt_index.prompts.base import Prompt File "C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\gpt_index\prompts\__init__.py", line 3, in <module> from gpt_index.prompts.base import Prompt File "C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\gpt_index\prompts\base.py", line 9, in <module> from langchain.schema import BaseLanguageModel ImportError: cannot import name 'BaseLanguageModel' from 'langchain.schema' (C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain\schema.py)
解决方法
该错误由langchain与gpt-index(现更名为llama-index)版本不兼容导致:旧版gpt-index依赖langchain中位于langchain.schema的BaseLanguageModel类,但新版langchain已将该类迁移至langchain.base_language模块,旧版gpt-index无法适配此变更。
提供两种可行解决方案:
方案一:降级langchain至兼容版本
安装与旧版gpt-index匹配的langchain版本(如0.0.240,此版本仍保留BaseLanguageModel在langchain.schema中):
pip install langchain==0.0.240
执行完成后重新运行原代码即可。
方案二:升级gpt-index至最新版(推荐)
gpt-index现已更名为llama-index,新版已适配langchain的API变更,操作步骤如下:
- 安装最新版llama-index:
pip install llama-index
- 修改代码以适配新版API:
from llama_index import SimpleDirectoryReader, VectorStoreIndex, LLMPredictor, PromptHelper, ServiceContext from langchain.chat_models import ChatOpenAI import gradio as gr import sys import os os.environ["OPENAI_API_KEY"] = 'yourapikey' def construct_index(directory_path): max_input_size = 4096 num_outputs = 512 max_chunk_overlap = 20 chunk_size_limit = 600 prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit) llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0.7, model_name="gpt-3.5-turbo", max_tokens=num_outputs)) documents = SimpleDirectoryReader(directory_path).load_data() # 替换旧版GPTSimpleVectorIndex为新版VectorStoreIndex index = VectorStoreIndex.from_documents(documents, llm_predictor=llm_predictor, prompt_helper=prompt_helper) # 新版索引保存方式 index.storage_context.persist(persist_dir="./") return index def chatbot(input_text): # 新版索引加载方式 from llama_index import StorageContext, load_index_from_storage storage_context = StorageContext.from_defaults(persist_dir="./") index = load_index_from_storage(storage_context) response = index.query(input_text, response_mode="compact") return response.response iface = gr.Interface(fn=chatbot, inputs=gr.components.Textbox(lines=7, label="Enter your text"), outputs="text", title="Custom-trained AI Chatbot") index = construct_index("docs") iface.launch(share=True)
- 运行修改后的代码即可。
内容的提问来源于stack exchange,提问作者Mohammad saabir Mustaaan
相关产品推荐
相关产品推荐

