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’?