Код: Выделить всё
graph_builder = StateGraph(State)
graph_builder.add_node("chatbot", assistant)
graph_builder.add_node("tools", lambda state: run_tool(state, tools={"athena_query":athena_query}))
graph_builder.add_node("report_checker", report_check)
graph_builder.add_edge(START, "chatbot")
graph_builder.add_conditional_edges(
"chatbot",
tools_condition
)
# graph_builder.add_edge("chatbot", "tools")
graph_builder.add_edge("tools", "chatbot")
graph_builder.add_edge("chatbot", "report_checker")
graph = graph_builder.compile(checkpointer=memory)
[img]https://i.sstatic. net/82PcHv1T.png[/img]
Не имеет смысла существование условного ребра, указывающего от помощника к report_checker, когда я указываю, что это обычное ребро. Почему по умолчаниюtools_condition создает условные ребра для всего остального, если это не вызов инструмента, а не просто переход к END?
Я знаю это, потому что если я передам аргументы маршрутизации, указывающие, куда он должен идти, лишние условные ребра исчезнут:
Код: Выделить всё
graph_builder = StateGraph(State)
graph_builder.add_node("chatbot", assistant)
graph_builder.add_node("tools", lambda state: run_tool(state, tools={"athena_query":athena_query}))
graph_builder.add_node("report_checker", report_check)
graph_builder.add_edge(START, "chatbot")
graph_builder.add_conditional_edges(
"chatbot",
tools_condition,
{
"END": END,
"tools": "tools",
}
)
graph_builder.add_edge("tools", "chatbot")
graph_builder.add_edge("chatbot", "report_checker")
graph = graph_builder.compile(checkpointer=memory)
[img]https://i.sstatic .net/261ANI2M.png[/img]
Почему по умолчаниюtools_condition маршрутизирует основной узел куда-то, кроме узла END?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ead-of-end