You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 05:21:15