💻 源码
from typing import Any, Dict, TypedDict, List


class AgentState(TypedDict):
    # 输入
    input: str
    # 是否跟中医有关系
    is_zhongyi_intent: bool
    # 直接回答
    direct_out: str
    # 用户输入的实体抽取
    user_input_effects: List[str]
    user_input_diseases: List[str]
    user_input_symptoms: List[str]
    user_input_formulas: List[str]
    user_input_herbs: List[str]
    user_input_sources: List[str]
    # 匹配的实体
    matched_effects: List[str]
    matched_diseases: List[str]
    matched_symptoms: List[str]
    matched_formulas: List[str]
    matched_herbs: List[str]
    matched_sources: List[str]
    # cypher查询语句
    cypher_query: List[str]
    is_all_validate_cypher: bool
    # cypher 生成了几次(首次生成算 1)。检查不通过时回到生成节点重试,靠这个计数刹车
    cypher_retry_count: int
    # run_cypher 返回的是 list[dict],每条 cypher 一份结果
    cypher_results: List[List[Dict[str, Any]]]
    neo4j_answer: str
    # 输出
    output: str

    # 历史数据
    history_messages: List[dict]
    input_semantic_trans: str