langchain ChatMistralAI with_structured_output无法识别BaseModel子类

62o28rlo  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(72)

检查其他资源

  • 我为这个问题添加了一个非常描述性的标题。
  • 我在LangChain文档中使用集成搜索进行搜索。
  • 我使用GitHub搜索找到了一个类似的问题,但没有找到。
  • 我确信这是LangChain中的一个bug,而不是我的代码。
  • 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决此bug。

示例代码

class Code(BaseModel):
    prefix: str = Field(description="Description of the problem and approach")
    imports: str = Field(description="Code block import statements")
    code: str = Field(description="Code block not including import statements")

messages = state["messages"]
...

llm = ChatMistralAI(model="codestral-latest", temperature=0, endpoint="https://codestral.mistral.ai/v1")
code_gen_chain = llm.with_structured_output(Code, include_raw=False)
code_solution = code_gen_chain.invoke(messages)

code_solution 始终是 dict 类型,而不是 Code 类型。

错误信息和堆栈跟踪(如果适用)

  • 无响应*

描述

这是最近的一个公共codestral演示的代码:

class Code(BaseModel):
    prefix: str = Field(description="Description of the problem and approach")
    imports: str = Field(description="Code block import statements")
    code: str = Field(description="Code block not including import statements")

messages = state["messages"]
...

llm = ChatMistralAI(model="codestral-latest", temperature=0, endpoint="https://codestral.mistral.ai/v1")
code_gen_chain = llm.with_structured_output(Code, include_raw=False)
code_solution = code_gen_chain.invoke(messages)

code_solution 始终是 dict 类型,而不是 Code 类型。
进入 llm.with_structured_output 后,第一行是:

if kwargs:
    raise ValueError(f"Received unsupported arguments {kwargs}")
is_pydantic_schema = isinstance(schema, type) and issubclass(schema, BaseModel)

即使 schema 是发送的相同 Code 类型,issubclass(schema, BaseModel) 也始终返回False。
调用之前:

>>> Code
<class 'codestral.model.Code'>
>>> issubclass(Code, BaseModel)
True
>>> type(Code)
<class 'pydantic._internal._model_construction.ModelMetaclass'>

在调用内部:

>>> schema
<class 'codestral.model.Code'>
>>> issubclass(schema, BaseModel)
False
>>> type(schema)
<class 'pydantic._internal._model_construction.ModelMetaclass'>

它在调用Langchain之外表现正常,在调用内部表现不正确。

系统信息

langchain==0.2.1
langchain-community==0.2.1
langchain-core==0.2.3
langchain-mistralai==0.1.7
langchain-text-splitters==0.2.0
pydantic==2.7.2
pydantic_core==2.18.3

系统信息

操作系统:Darwin
操作系统版本:Darwin Kernel Version 23.5.0: Wed May 1 20:14:38 PDT 2024; root:xnu-10063.121.3~5/RELEASE_ARM64_T6020
Python版本:3.11.9 (main, Apr 19 2024, 11:43:47) [Clang 14.0.6 ]

软件包信息

langchain_core: 0.2.3
langchain: 0.2.1
langchain_community: 0.2.1
langsmith: 0.1.67
langchain_mistralai: 0.1.7
langchain_text_splitters: 0.2.0
langgraph: 0.0.60

ikfrs5lh

ikfrs5lh1#

经过进一步的调查,我发现ChatMistralAI期望使用Pydantic V1模型,而langchain默认安装了Pydantic V2。可以通过某种方式使其更清晰,或者修复代码。

相关问题