
from langchain_core.messages import HumanMessage

from _004_langgraph_more_nodes.agent_state import AgentState
from common.llm import my_llm
import json


def neo4j_answer_generate_node(state: AgentState) -> AgentState:
    print("图谱答案节点执行开始了")
    # 读转写结果而不是 state["input"]：回答要针对补全后的完整问题，
    # 否则模型看到的是"那第二呢？"，拿着查询结果也不知道在答什么
    user_input = state.get("input_semantic_trans") or ""
    cypher_results = state.get("cypher_results", [])

    # 把 cypher_results 转成字符串，方便喂给大模型
    cypher_results_str = json.dumps(cypher_results, ensure_ascii=False, indent=2)

    prompt = f"""
    你是一个中医知识图谱问答助手。
    用户提出了问题：{user_input}

    我已经在 Neo4j 图数据库中执行了查询，查询结果如下：
    {cypher_results_str}

    请你根据这些查询结果，用简洁、清晰、自然的中文回答用户的问题。
    如果查询结果无法回答用户的问题，请如实告知用户没有找到相关答案。
    """
    # print(prompt)
    response = my_llm.invoke([HumanMessage(content=prompt)])

    # 保存结果
    state["neo4j_answer"] = response.content.strip()
    state["output"] = response.content.strip()
    print("完成进行neo4j输入大模型的回答")

    return state

if __name__ == '__main__':
    result=neo4j_answer_generate_node(
        {
            "input_semantic_trans": "请给我推荐一个Herb",
            "cypher_results": [
                [
                    {
                        "herb": "人参",
                        "effect": "解热镇痛"
                    }
                ]
            ]
        }
    )

    print(result)