| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- from __future__ import annotations
- """测试方案校验阶段子图:验证确定性规则校验与校验失败后的路由。"""
- import asyncio
- from rich.console import Console
- from rich.table import Table
- from app.graph.planner_builder import (
- build_planner_graph,
- )
- console = Console()
- async def main() -> None:
- graph = await build_planner_graph()
- result = await graph.ainvoke(
- {
- "user_query": (
- "我和妻子计划2026年8月10日"
- "从上海去成都,8月13日返回,"
- "总预算8000元。"
- "喜欢熊猫、自然景观和川菜,"
- "希望行程轻松一些。"
- "酒店每晚不超过600元,"
- "评分不低于4.5,"
- "并且希望靠近地铁。"
- "机票价格和便利性综合考虑。"
- ),
- "errors": [],
- "missing_fields": [],
- "planning_attempts": 0,
- "revision_feedback": [],
- }
- )
- console.rule(
- "[bold]Validator工作流结果"
- )
- console.print(result["final_answer"])
- validation = result.get(
- "plan_validation_result"
- )
- if validation is None:
- console.print(
- {
- "系统错误": result.get("errors"),
- }
- )
- return
- console.print(
- {
- "校验通过": validation.is_valid,
- "错误数": validation.error_count,
- "警告数": validation.warning_count,
- "已知费用": (
- validation.budget.known_total
- ),
- "用户预算": (
- validation.budget.user_budget
- ),
- "预算状态": (
- validation.budget.status
- ),
- "已知预算余额": (
- validation
- .budget
- .remaining_known_budget
- ),
- }
- )
- issue_table = Table(
- title="确定性校验问题"
- )
- issue_table.add_column("级别")
- issue_table.add_column("代码")
- issue_table.add_column("日期序号")
- issue_table.add_column("活动序号")
- issue_table.add_column("问题")
- for issue in validation.issues:
- issue_table.add_row(
- issue.severity,
- issue.code,
- (
- str(issue.day_index)
- if issue.day_index is not None
- else ""
- ),
- (
- str(issue.activity_sequence)
- if issue.activity_sequence
- is not None
- else ""
- ),
- issue.message,
- )
- console.print(issue_table)
- console.rule("[bold]预算覆盖说明")
- console.print(
- validation.budget.coverage_note
- )
- if validation.revision_feedback:
- console.rule(
- "[bold yellow]需要Planner修改"
- )
- for feedback in (
- validation.revision_feedback
- ):
- console.print(f"- {feedback}")
- if __name__ == "__main__":
- asyncio.run(main())
|