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

LangGraph Studio中AgentState未初始化引发KeyError问题求助

问题根源分析

你遇到的KeyError核心原因是错误地同时使用@dataclass和TypedDict修饰同一个AgentState类。这两个是Python中互斥的类型定义方式:

  • TypedDict用于定义字典的键类型,本质是字典结构,通过键访问(state["key"])
  • @dataclass用于创建数据类,本质是对象实例,通过属性访问(state.key)
    混用时LangGraph无法正确识别状态结构,导致默认值不生效、状态无法完整传递。
修复方案(二选一)

方案1:使用TypedDict+LangGraph默认值注解

保留字典式访问,用LangGraph的DefaultValue注解为TypedDict字段设置默认值,替换原dataclass的field:

from typing import TypedDict, Annotated, List
from langchain_core.documents import Document
from langchain_core.messages import AnyMessage
from langgraph.graph import add_messages, DefaultValue

class AgentState(TypedDict):
    """Represents the input state for the agent."""
    
    messages: Annotated[List[AnyMessage], add_messages]
    label: Annotated[dict, DefaultValue(lambda: {"type": "general", "logic": ""})]
    document_evaluation: Annotated[str, DefaultValue("GOOD")]
    documents: Annotated[List[Document], DefaultValue(list)]
    search_results: Annotated[str, DefaultValue("")]
    RAG_attempts: Annotated[int, DefaultValue(0)]

对应的节点代码无需修改(依然用state["RAG_attempts"]访问)。

方案2:使用纯Dataclass

移除TypedDict继承,仅保留@dataclass,节点中改用属性访问:

修改后的AgentState

from dataclasses import dataclass, field
from typing import List, Annotated
from langchain_core.documents import Document
from langchain_core.messages import AnyMessage
from langgraph.graph import add_messages

@dataclass(kw_only=True)
class AgentState:
    """Represents the input state for the agent."""
    
    messages: Annotated[List[AnyMessage], add_messages]
    label: dict = field(default_factory=lambda: {"type": "general", "logic": ""})
    document_evaluation: str = field(default="GOOD")
    documents: List[Document] = field(default_factory=list)
    search_results: str = field(default="")
    RAG_attempts: int = field(default=0)

修改后的evaluator节点

def evaluator(state: AgentState, *, config: RunnableConfig) -> dict:
    print("⚙️ Current Process: evaluator")
    configuration = AgentConfiguration.from_runnable_config(config)

    reval_attempts = state.RAG_attempts  # 改为属性访问
额外验证步骤
  1. 编译StateGraph时确保传入正确的状态类型:
from langgraph.graph import StateGraph

graph_builder = StateGraph(AgentState)
# 添加节点、边逻辑...
graph = graph_builder.compile()
  1. 初始化智能体时,若未传入完整字段,确认默认值是否生效:
    • TypedDict方式:initial_state = {"messages": [HumanMessage(content="你的问题")]}
    • Dataclass方式:initial_state = AgentState(messages=[HumanMessage(content="你的问题")])

内容的提问来源于stack exchange,提问作者Ariel Nurieli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:43:15