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

Runnable

Examples using create_structured_output_runnable