research_builder.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. from __future__ import annotations
  2. """地图研究阶段子图:对目的地执行高德地图POI搜索与天气查询,为路线评估准备数据。"""
  3. from langgraph.graph import (
  4. END,
  5. START,
  6. StateGraph,
  7. )
  8. from app.agents.map_agent import MapResearchAgent
  9. from app.agents.requirement_agent import (
  10. RequirementAgent,
  11. )
  12. from app.agents.resource_agent import (
  13. ResourceSearchAgent,
  14. )
  15. from app.graph.map_nodes import (
  16. make_map_research_node,
  17. route_after_resources,
  18. )
  19. from app.graph.nodes import (
  20. clarification_node,
  21. error_node,
  22. make_parse_request_node,
  23. route_after_parse,
  24. )
  25. from app.graph.resource_nodes import (
  26. make_resource_search_node,
  27. )
  28. from app.graph.state import TravelState
  29. from app.mcp_client import load_mcp_tools
  30. async def build_research_graph():
  31. """构建需求、旅行资源和地图研究工作流。"""
  32. tool_bundle = await load_mcp_tools()
  33. requirement_agent = RequirementAgent()
  34. resource_agent = ResourceSearchAgent(
  35. tools=tool_bundle.travel_tools,
  36. )
  37. map_agent = MapResearchAgent(
  38. tools=tool_bundle.amap_tools,
  39. )
  40. builder = StateGraph(TravelState)
  41. builder.add_node(
  42. "parse_request",
  43. make_parse_request_node(
  44. requirement_agent
  45. ),
  46. )
  47. builder.add_node(
  48. "clarify",
  49. clarification_node,
  50. )
  51. builder.add_node(
  52. "error",
  53. error_node,
  54. )
  55. builder.add_node(
  56. "search_resources",
  57. make_resource_search_node(
  58. resource_agent
  59. ),
  60. )
  61. builder.add_node(
  62. "research_destination",
  63. make_map_research_node(
  64. map_agent
  65. ),
  66. )
  67. builder.add_edge(
  68. START,
  69. "parse_request",
  70. )
  71. builder.add_conditional_edges(
  72. "parse_request",
  73. route_after_parse,
  74. {
  75. "clarify": "clarify",
  76. "error": "error",
  77. "ready": "search_resources",
  78. },
  79. )
  80. builder.add_edge("clarify", END)
  81. builder.add_edge("error", END)
  82. builder.add_conditional_edges(
  83. "search_resources",
  84. route_after_resources,
  85. {
  86. "research_destination": (
  87. "research_destination"
  88. ),
  89. "end": END,
  90. },
  91. )
  92. builder.add_edge(
  93. "research_destination",
  94. END,
  95. )
  96. return builder.compile()