| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- from __future__ import annotations
- """定稿渲染节点:调用FinalizationService将审核通过的方案渲染为面向用户的Markdown最终答复。"""
- from typing import Any
- from app.graph.state import TravelState
- from app.services.finalization_service import (
- FinalizationService,
- )
- def make_finalization_node(
- service: FinalizationService | None = None,
- ):
- """创建最终回答生成节点。"""
- finalization_service = (
- service or FinalizationService()
- )
- def finalization_node(
- state: TravelState,
- ) -> dict[str, Any]:
- """定稿节点:收集请求、方案、校验与审查结果,渲染为完整的最终旅行方案文本。"""
- request = state.get("travel_request")
- plan = state.get("itinerary_plan")
- validation = state.get(
- "plan_validation_result"
- )
- review = state.get(
- "trip_review_result"
- )
- missing: list[str] = []
- if request is None:
- missing.append("travel_request")
- if plan is None:
- missing.append("itinerary_plan")
- if validation is None:
- missing.append(
- "plan_validation_result"
- )
- if review is None:
- missing.append(
- "trip_review_result"
- )
- if missing:
- message = (
- "最终输出阶段缺少必要状态:"
- + "、".join(missing)
- )
- existing_errors = list(
- state.get("errors", [])
- )
- existing_errors.append(message)
- return {
- "errors": existing_errors,
- "workflow_status": "failed",
- "final_answer": message,
- }
- workflow_status = state.get(
- "workflow_status",
- "completed_with_risks",
- )
- approved = (
- workflow_status == "approved"
- )
- answer = finalization_service.render(
- request=request,
- plan=plan,
- validation=validation,
- review=review,
- approved=approved,
- planning_attempts=state.get(
- "planning_attempts",
- 0,
- ),
- supervisor_reason=state.get(
- "supervisor_reason",
- "未提供Supervisor说明。",
- ),
- )
- return {
- "final_answer": answer,
- }
- return finalization_node
|