Langchain with_structured_output解析含自定义类的字典结构失败求助
解决方法
你的代码存在两个核心问题:一是未显式导入Dict和List类型(虽旧代码能运行,但显式导入更规范且规避潜在问题);二是LLM无法自动理解ppp字段的字典结构规则,需通过字段描述或prompt明确引导。
以下是修正后的完整代码:
import os from typing import List, Dict from pydantic import BaseModel, Field from langchain_openai import ChatOpenAI model = ChatOpenAI(model="gpt-4o-mini-2024-07-18", temperature=0.0) class A(BaseModel): a_1: str a_2: str r: str class B(BaseModel): b_1: str b_2: str r: str class C(BaseModel): ccc: List[A] ppp: Dict[str, List[B]] = Field( description="以B对象对应的标识字符串为键,值是具有相同标识的B对象组成的列表" ) structured_llm = model.with_structured_output(C) # 需在prompt中明确ppp的结构规则,示例prompt: prompt = """ 请从以下文本提取结构化信息: [你的非结构化文本内容] 其中ppp字段需整理为字典:键是每个B条目的标识字符串,对应的值是所有含该标识的B对象列表。 """ response = structured_llm.invoke(prompt)
关键说明
- 显式导入类型:从
typing导入Dict和List,确保Pydantic能准确识别字段类型。 - 添加字段描述:通过
Field给ppp字段补充清晰规则,让LLM明确字典的键值对应逻辑。 - prompt强化引导:在输入prompt中再次明确
ppp的结构要求,避免模型输出偏差。
修改后,LLM会按照要求生成符合字典结构的ppp字段,规避验证错误。
内容的提问来源于stack exchange,提问作者NiMa
相关产品推荐
相关产品推荐

