pydantic错误:期望是BaseModel的子类 (type=type_error.subclass; expected_class=BaseModel)

2 投票
2 回答
736 浏览
提问于 2025-04-14 18:32

对于下面这段代码,我遇到了pydantic的错误:

from langchain.chains import LLMChain
from langchain.output_parsers import PydanticOutputParser
from langchain.prompts import PromptTemplate
from pydantic import BaseModel, Field

query = "Do you offer vegetarian food?"

class LineList(BaseModel):
    lines: list[str] = Field(description="Lines of text")

class LineListOutputParser(PydanticOutputParser):
    def __init__(self) -> None:
        super().__init__(pydantic_object=LineList)

    def parse(self, text: str) -> list[str]:
        lines = text.strip().split("\n")
        return lines


output_parser = LineListOutputParser()

QUERY_PROMPT = PromptTemplate(
    input_variables=["question"],
    template="""You are an AI language model assistant. Your task is to generate five
    different versions of the given user question to retrieve relevant documents from a vector
    database. By generating multiple perspectives on the user question, your goal is to help
    the user overcome some of the limitations of the distance-based similarity search.
    Provide these alternative questions separated by newlines. Only provide the query, no numbering.
    Original question: {question}""",
)

llm_chain = LLMChain(llm=llm, prompt=QUERY_PROMPT, output_parser=output_parser)
queries = llm_chain.invoke(query)

我收到的错误信息如下:

---------------------------------------------------------------------------
ValidationError                           Traceback (most recent call last)
Cell In[93], line 20
     16         lines = text.strip().split("\n")
     17         return lines
---> 20 output_parser = LineListOutputParser()
     22 QUERY_PROMPT = PromptTemplate(
     23     input_variables=["question"],
     24     template="""You are an AI language model assistant. Your task is to generate five
   (...)
     29     Original question: {question}""",
     30 )
     32 llm_chain = LLMChain(llm=llm, prompt=QUERY_PROMPT, output_parser=output_parser)

Cell In[93], line 13, in LineListOutputParser.__init__(self)
     12 def __init__(self) -> None:
---> 13     super().__init__(pydantic_object=LineList)

File ~\anaconda3\Lib\site-packages\langchain_core\load\serializable.py:120, in Serializable.__init__(self, **kwargs)
    119 def __init__(self, **kwargs: Any) -> None:
--> 120     super().__init__(**kwargs)
    121     self._lc_kwargs = kwargs

File ~\anaconda3\Lib\site-packages\pydantic\v1\main.py:341, in BaseModel.__init__(__pydantic_self__, **data)
    339 values, fields_set, validation_error = validate_model(__pydantic_self__.__class__, data)
    340 if validation_error:
--> 341     raise validation_error
    342 try:
    343     object_setattr(__pydantic_self__, '__dict__', values)

ValidationError: 1 validation error for LineListOutputParser
pydantic_object
  subclass of BaseModel expected (type=type_error.subclass; expected_class=BaseModel)

我使用的是pydantic-2.5.3版本

2 个回答

1

你可以使用:

from langchain_core.pydantic_v1 import BaseModel
1

我猜,你需要把版本改成 langchain = "v0.1.5"。这是我让它正常工作的方式。

撰写回答