关于Langchain中使用ChatOpenAI的with_structured_output(scham=..., method=..)方法的问题

from langchain_openai import ChatOpenAI
from pydantic import SecretStr
llm = ChatOpenAI(
    base_url = 'xxx',
    model = 'yyy',
    api_key = SecratStr('...')
).with_structured_output(
    schema = XXX,
    method = 'json_mode'    # 'json_mode' 'json_schema' 'function_calling'
)

以上示例代码中,langchain的文档关于方法with_structured_output()中对method参数的描述比较模糊。

对于’json_mode’和’json_schema’两个选项我比较困惑,在schema参数填入pydantic.BaseModel定义的实体XXX后,最终调用llm.invoke(...)的结果应该都是XXX,那么’json_schema’和’json_mode’的区别是什么?

查阅过一些文档了解到,由于各家大模型因为训练预料的不同,所以结构化输出会有一定偏好,比如有的擅长解释JSON Schema,有的对TypeScript定义友好。

在这种情况下,我如何判断到底哪些大模型支持with_structured_output()的使用?以及应该使用’json_mode’还是’json_schema’?