langchain.chains.structured_output.base
.create_structured_output_runnable¶
- langchain.chains.structured_output.base.create_structured_output_runnable(output_schema: Union[Dict[str, Any], Type[BaseModel]], llm: Runnable, prompt: Optional[BasePromptTemplate] = None, *, output_parser: Optional[Union[BaseOutputParser, BaseGenerationOutputParser]] = None, enforce_function_usage: bool = True, return_single: bool = True, mode: Literal['openai-functions', 'openai-tools', 'openai-json'] = 'openai-functions', **kwargs: Any) Runnable [source]¶
[Deprecated] 创建一个可运行的程序,用于提取结构化输出。
- 参数:
- output_schema:可以是字典或pydantic.BaseModel类。如果传入的是字典,
则假定它已经是一个有效的JsonSchema。 为了获得最佳结果,pydantic.BaseModels应该有描述模式代表什么以及参数描述的文档字符串。
- llm:要使用的语言模型。假定支持OpenAI函数调用API
如果模式是’openai-function’。假定支持OpenAI response_format 参数如果模式是’openai-json’。
- prompt:传递给模型的BasePromptTemplate。如果模式是’openai-json’且
prompt具有输入变量’output_schema’,则给定的output_schema 将被转换为JsonSchema并插入到prompt中。
- output_parser:用于解析模型输出的输出解析器。默认情况下
将从函数类型中推断出来。如果传入pydantic.BaseModel, 那么OutputParser将尝试使用pydantic类解析输出。否则模型输出将被解析为JSON。
- mode:从模型中提取结构化输出的方式。如果是’openai-functions’
则使用已弃用的’functions’,’function_call’模式进行OpenAI函数调用。 如果是’openai-tools’,则使用最新的’tools’,’tool_choice’模式进行OpenAI函数调用。 这比’openai-functions’更推荐。如果是’openai-json’,则使用OpenAI模型 并将response_format设置为JSON。
- enforce_function_usage:仅适用于模式为’openai-tools’或
‘openai-functions’时。如果为True,则模型将被强制使用给定的 输出模式。如果为False,则模型可以选择是否使用输出 模式。
- return_single:仅适用于模式为’openai-tools’时。是否返回一个结构化输出列表
还是单个输出。如果为True且模型不返回任何 结构化输出,则链输出为None。如果为False且模型不返回任何结构化输出 则链输出为一个空列表。
**kwargs:额外的命名参数。
- 返回:
一个可运行的序列,将返回与给定output_schema匹配的结构化输出。
- 使用Pydantic模式的OpenAI工具示例(mode=’openai-tools’):
from typing import Optional from langchain.chains import create_structured_output_runnable from langchain_openai import ChatOpenAI from langchain_core.pydantic_v1 import BaseModel, Field class RecordDog(BaseModel): '''记录有关狗的一些标识信息。''' name: str = Field(..., description="狗的名字") color: str = Field(..., description="狗的颜色") fav_food: Optional[str] = Field(None, description="狗喜欢的食物") llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0) prompt = ChatPromptTemplate.from_messages( [ ("system", "您是一个提取算法。请提取每个可能的实例"), ('human', '{input}') ] ) structured_llm = create_structured_output_runnable( RecordDog, llm, mode="openai-tools", enforce_function_usage=True, return_single=True ) structured_llm.invoke({"input": "Harry是一只胖胖的棕色比格犬,喜欢吃鸡肉"}) # -> RecordDog(name="Harry", color="brown", fav_food="chicken")
- 使用字典模式的OpenAI工具示例(mode=”openai-tools”):
from typing import Optional from langchain.chains import create_structured_output_runnable from langchain_openai import ChatOpenAI dog_schema = { "type": "function", "function": { "name": "record_dog", "description": "记录有关狗的一些标识信息。", "parameters": { "type": "object", "properties": { "name": { "description": "狗的名字", "type": "string" }, "color": { "description": "狗的颜色", "type": "string" }, "fav_food": { "description": "狗喜欢的食物", "type": "string" } }, "required": ["name", "color"] } } } llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0) structured_llm = create_structured_output_runnable( dog_schema, llm, mode="openai-tools", enforce_function_usage=True, return_single=True ) structured_llm.invoke("Harry是一只胖胖的棕色比格犬,喜欢吃鸡肉") # -> {'name': 'Harry', 'color': 'brown', 'fav_food': 'chicken'}
- OpenAI函数示例(mode=”openai-functions”):
from typing import Optional from langchain.chains import create_structured_output_runnable from langchain_openai import ChatOpenAI from langchain_core.pydantic_v1 import BaseModel, Field class Dog(BaseModel): '''有关狗的标识信息。''' name: str = Field(..., description="狗的名字") color: str = Field(..., description="狗的颜色") fav_food: Optional[str] = Field(None, description="狗喜欢的食物") llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0) structured_llm = create_structured_output_runnable(Dog, llm, mode="openai-functions") structured_llm.invoke("Harry是一只胖胖的棕色比格犬,喜欢吃鸡肉") # -> Dog(name="Harry", color="brown", fav_food="chicken")
- 带有提示的OpenAI函数示例:
from typing import Optional from langchain.chains import create_structured_output_runnable from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.pydantic_v1 import BaseModel, Field class Dog(BaseModel): '''有关狗的标识信息。''' name: str = Field(..., description="狗的名字") color: str = Field(..., description="狗的颜色") fav_food: Optional[str] = Field(None, description="狗喜欢的食物") llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0) structured_llm = create_structured_output_runnable(Dog, llm, mode="openai-functions") system = '''从用户输入中提取提到的任何狗的信息。''' prompt = ChatPromptTemplate.from_messages( [("system", system), ("human", "{input}"),] ) chain = prompt | structured_llm chain.invoke({"input": "Harry是一只胖胖的棕色比格犬,喜欢吃鸡肉"}) # -> Dog(name="Harry", color="brown", fav_food="chicken")
- OpenAI JSON响应格式示例(mode=”openai-json”):
from typing import Optional from langchain.chains import create_structured_output_runnable from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.pydantic_v1 import BaseModel, Field class Dog(BaseModel): '''有关狗的标识信息。''' name: str = Field(..., description="狗的名字") color: str = Field(..., description="狗的颜色") fav_food: Optional[str] = Field(None, description="狗喜欢的食物") llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0) structured_llm = create_structured_output_runnable(Dog, llm, mode="openai-json") system = '''您是一个用于提取结构化JSON格式信息的世界级助手。 从用户输入中提取与以下JSON模式匹配的有效JSON blob: {output_schema}''' prompt = ChatPromptTemplate.from_messages( [("system", system), ("human", "{input}"),] ) chain = prompt | structured_llm chain.invoke({"input": "Harry是一只胖胖的棕色比格犬,喜欢吃鸡肉"})
Notes
Deprecated since version 0.1.17: LangChain has introduced a method called with_structured_output that is available on ChatModels capable of tool calling. You can read more about the method here: https://python.langchain.com/docs/modules/model_io/chat/structured_output/ Please follow our extraction use case documentation for more guidelines on how to do information extraction with LLMs. https://python.langchain.com/docs/use_cases/extraction/. If you notice other issues, please provide feedback here: https://github.com/langchain-ai/langchain/discussions/18154 Use from langchain_core.pydantic_v1 import BaseModel, Field from langchain_anthropic import ChatAnthropic
- class Joke(BaseModel):
setup: str = Field(description=”The setup of the joke”) punchline: str = Field(description=”The punchline to the joke”)
# Or any other chat model that supports tools. # Please reference to to the documentation of structured_output # to see an up to date list of which models support # with_structured_output. model = ChatAnthropic(model=”claude-3-opus-20240229”, temperature=0) structured_llm = model.with_structured_output(Joke) structured_llm.invoke(“Tell me a joke about cats.
Make sure to call the Joke function.”)
instead.
- Parameters
output_schema (Union[Dict[str, Any], Type[BaseModel]]) –
llm (Runnable) –
prompt (Optional[BasePromptTemplate]) –
output_parser (Optional[Union[BaseOutputParser, BaseGenerationOutputParser]]) –
enforce_function_usage (bool) –
return_single (bool) –
mode (Literal['openai-functions', 'openai-tools', 'openai-json']) –
kwargs (Any) –
- Return type