Use this skill when the user wants to plan a trip or asks for itinerary planning. Triggers when user says "规划行程", "安排路线", "我要去XX", "从XX到XX", or provides trip details like dates and destinations. This skill orchestrates IntentionAgent, EventCollectionAgent, and ItineraryPlanningAgent; all agents take model=model and are async.
为用户规划出行行程:意图识别 → 事项收集(出发地、目的地、日期等)→ 行程规划。所有 Agent 均使用 model 对象,且 reply() 均为 async。
OpenAIChatModel(来自 config.LLM_CONFIG),再传给各 Agent 的 model 参数(本项目无 model_config_name)。reply() 都是 async,需 await。import asyncio
import json
from agentscope.message import Msg
from agentscope.model import OpenAIChatModel
from config_agentscope import init_agentscope
from config import LLM_CONFIG
from agents.intention_agent import IntentionAgent
from agents.event_collection_agent import EventCollectionAgent
from agents.itinerary_planning_agent import ItineraryPlanningAgent
async def plan_trip(user_query: str):
init_agentscope()
model = OpenAIChatModel(
model_name=LLM_CONFIG["model_name"],
api_key=LLM_CONFIG["api_key"],
client_kwargs={"base_url": LLM_CONFIG["base_url"], "timeout": 60},
temperature=LLM_CONFIG.get("temperature", 0.7),
max_tokens=LLM_CONFIG.get("max_tokens", 2000),
)
user_msg = Msg(name="user", content=user_query, role="user")
# 1. 意图识别
intention_agent = IntentionAgent(name="IntentionAgent", model=model)
intention_result = await intention_agent.reply(user_msg)
intention_data = json.loads(intention_result.content)
rewritten_query = intention_data.get("rewritten_query", user_query)
# 2. 事项收集(传入 context 格式,与 OrchestrationAgent 一致)
context = {"rewritten_query": rewritten_query, "user_preferences": {}}
event_input = Msg(name="Orchestrator", content=json.dumps({"context": context}), role="user")
event_agent = EventCollectionAgent(name="EventCollectionAgent", model=model)
event_result = await event_agent.reply(event_input)
event_data = json.loads(event_result.content) if isinstance(event_result.content, str) else event_result.content
# 3. 行程规划(传入 previous_results,包含 event_collection 结果)
previous_results = [{"agent_name": "event_collection", "data": event_data}]
plan_input = Msg(
name="Orchestrator",
content=json.dumps({"context": context, "previous_results": previous_results}, ensure_ascii=False),
role="user",
)
plan_agent = ItineraryPlanningAgent(name="ItineraryPlanningAgent", model=model)
plan_result = await plan_agent.reply(plan_input)
plan_data = json.loads(plan_result.content) if isinstance(plan_result.content, str) else plan_result.content
return plan_data
# 使用
result = asyncio.run(plan_trip("规划一下2月27日从上海到北京的路程"))
# result: {"itinerary": {"title", "duration", "route", "daily_plans", "notes", ...}, "planning_complete": bool}
origin, destination, start_date, end_date, duration_days, trip_purpose, missing_info 等itinerary: title, duration, route, daily_plans, notes, estimated_budget 等planning_complete: boolevent_data 含 missing_info,可提示用户补全再继续。【核心原则】
【规划策略】
【行程规划要点】
【任务】 基于已有信息生成实用的行程规划:
【输出格式】(严格JSON) {{ "itinerary": {{ "title": "北京3日游", "duration": "3天", "route": "北京 -> 北京", "daily_plans": [ {{ "day": 1, "date": "2024-02-27", "city": "北京", "theme": "历史文化之旅", "activities": [ {{ "time": "09:00-12:00", "location": "故宫博物院", "description": "游览故宫,感受皇家建筑群的宏伟...", "transport": "地铁1号线天安门东站" }} ], "meals": {{ "lunch": "...", "dinner": "..." }} }} ], "notes": ["建议提前7天预约故宫门票..."], "estimated_budget": "约2000元" }}, "planning_complete": true }}