无法加载Llama模型报错:Llama.__init__()收到意外参数'input'
解决LangChain调用LlamaCpp时的参数错误问题
问题场景
使用LangChain调用本地Llama模型时出现加载失败,相关代码、文件夹结构及报错信息如下:
原代码
from langchain.llms import LlamaCpp from langchain import PromptTemplate, LLMChain from langchain.callbacks.manager import CallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler template = """Question: {question} Answer: Let's work this out in a step by step way to be sure we have the right answer.""" prompt = PromptTemplate(template=template, input_variables=["question"]) callback_manager = CallbackManager([StreamingStdOutCallbackHandler()]) llm = LlamaCpp( model_path="./Models/llama-7b.ggmlv3.q2_K.bin", input={"temperature": 0.75, "max_length": 2000, "top_p": 1}, callback_manager=callback_manager, verbose=True, ) llm_chain = LLMChain(prompt=prompt, llm=llm)
当前文件夹结构

报错信息
(llm) C:\llm>python app1.py C:\llm\lib\site-packages\langchain\utils\utils.py:155: UserWarning: 警告!input不是默认参数。 input已被转移至model_kwargs。 请确认input是您想要设置的参数。 warnings.warn( Exception ignored in: <function Llama.__del__ at 0x000001923B3AE680> Traceback (most recent call last): 文件 "C:\llm\lib\site-packages\llama_cpp\llama.py", line 1507, in __del__ if self.model is not None: AttributeError: 'Llama'对象没有属性'model' Traceback (most recent call last): 文件 "C:\llm\app1.py", line 14, in <module> llm = LlamaCpp( 文件 "C:\llm\lib\site-packages\langchain\load\serializable.py", line 74, in __init__ super().__init__(**kwargs) 文件 "pydantic\main.py", line 341, in pydantic.main.BaseModel.__init__ pydantic.error_wrappers.ValidationError: LlamaCpp存在1个验证错误 __root__ 无法从路径./Models/llama-7b.ggmlv3.q2_K.bin加载Llama模型。收到错误:Llama.__init__() got an unexpected keyword argument 'input' (类型=值错误)
问题原因
LangChain的LlamaCpp类已废弃input参数,模型配置参数需通过model_kwargs传递,原代码中使用input导致参数不被识别,触发初始化错误。同时新版本llama-cpp-python中,max_length参数已更名为n_ctx,需同步适配。
修复方案
- 将
input参数替换为model_kwargs,把温度、上下文长度等配置放入该字典中 - 将原
max_length改为n_ctx,适配新版本依赖库的参数命名
修复后完整代码
from langchain.llms import LlamaCpp from langchain import PromptTemplate, LLMChain from langchain.callbacks.manager import CallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler template = """Question: {question} Answer: Let's work this out in a step by step way to be sure we have the right answer.""" prompt = PromptTemplate(template=template, input_variables=["question"]) callback_manager = CallbackManager([StreamingStdOutCallbackHandler()]) llm = LlamaCpp( model_path="./Models/llama-7b.ggmlv3.q2_K.bin", model_kwargs={ "temperature": 0.75, "n_ctx": 2000, "top_p": 1 }, callback_manager=callback_manager, verbose=True, ) llm_chain = LLMChain(prompt=prompt, llm=llm)
内容的提问来源于stack exchange,提问作者rahularyansharma
相关产品推荐
相关产品推荐

