以下代码会引发错误,因为 LLMChain 尝试返回具有两个键的字典:
{ "page": "xxxx", "text": Card(name='Alice and Bob', description='一张示例卡片') }
但它失败了,因为 Card 对象不是字符串。这是正常行为吗?在
LLMChain
中传递 pydantic 解析器 PydanticOutputParser(pydantic_object=Card) 而不是使用 with_structured_output
方法是可行的,但我想使用 OpenAI 的实现。
from pydantic import BaseModel, Field
from typing import Optional
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
class Card(BaseModel):
"""Card data."""
name: Optional[str] = Field(..., description="Character name")
description: Optional[str] = Field(..., description="Character description")
structured_llm = ChatOpenAI().with_structured_output(Card)
prompt = PromptTemplate.from_template("""
Extract card information from a given page:
### Page
{page}
""")
chain = LLMChain(llm=structured_llm, prompt=prompt, verbose=True)
chain.invoke("Card name: Alice and Bob, Description: An example card")
看来是LLMChain贬值的原因:
structured_llm = ChatOpenAI().with_structured_output(Card)
chain = prompt | structured_llm
chain.invoke("Card name: Alice and Bob, Description: An example card")
> Card(name='Alice and Bob', description='An example card')