背景 :在处理复杂、多变量、且具有模糊边界的任务时,细粒度 Skill + 任务分解是唯一可靠的解决方案。
📋 技术报告:面向复杂决策场景的 Agent 架构设计
------以"智能航班订购系统"为例
摘要
本报告针对高歧义、多约束条件的复杂任务场景(如智能航班订购)进行架构分析。通过对比粗粒度与细粒度 Skill 的应用表现,论证了**"细粒度 Skill 拆解 + 任务动态编排"**在处理多变量决策(如时间、预算、身体状况、人数)时的绝对优势。
一、 场景定义:为什么航班订购是"高难度"场景?
在构建航班订购 Agent 时,任务并非简单的"下单"动作,而是包含多重歧义与动态约束的复杂系统:
- 目标歧义:用户意图不明确。
- 是要"最快到达"?还是"最省钱到达"?还是"舒适度最高"?
- 预算限制模糊(只要不差就行,还是必须低于某个价格?)。
- 环境歧义:外部条件复杂。
- 时空约束:多机场选择、多时间段叠加。
- 用户状态:老人/小孩/孕妇(可能需要特定座位,或拒绝红眼航班)。
- 同伴约束:多人同行时的座位匹配问题。
- 流程歧义:没有标准流水线。
- 查票 -> 比价 -> 询问退改政策 -> 确认余票 -> 下单 -> 通知。
- 中间可能出现"无票"、"价格超预算"、"时间不合适"等异常分支,需要复杂的逻辑回退和重新决策。
👉 结论: 此类场景无法通过一个"万能大流程"(粗粒度 Skill)来覆盖所有情况,必须依赖细粒度拆解。
二、 方案对比:粗粒度 vs 细粒度
- 粗粒度 Skill 方案(❌ 不可行)
设计逻辑:将"航班订购"封装为一个巨大的 ComplexFlightBookingSkill 。
- System Prompt:包含庞大的固定流程代码。
- 执行逻辑:Agent 拿到任务后,执行固定 workflow。
痛点分析:
- 脆性系统:如果用户身体状况不适合红眼航班,代码逻辑需要死在流程里,无法动态绕行。
- 维护灾难:若新增"考虑行李额度"逻辑,必须重构整个大 Skill,无法局部修改。
- 歧义无解:当用户说"我想找个便宜点的,但不要太晚到的",这种多目标权衡的问题,固定流程无法处理。
- 细粒度 Skill 方案(✅ 最佳实践)
设计逻辑:把复杂任务拆解为原子化、可组合的小技能。
- 核心思路:任务分解 + 技能编排。
- Agent 不再是"无脑执行流程",而是变成了"项目经理",负责拆解任务、挑选工具、组装结果。
三、 核心设计:细粒度 Skill 拆解清单(航班订购场景)
为了应对上述复杂场景,我们需要以下细粒度 Skill 库。每个技能只做一件事,且具备高复用性。
- 理解与诊断层(Input Processing)
- Skill_UserIntentExtractor :提取用户核心意图(是求快还是求省?)。
- Skill_ConstraintValidator :校验输入约束的合法性(如:日期是否合法,预算是否为负数)。
- Skill_UserProfileAnalyzer :分析用户画像(从历史对话判断是否是老人/孕妇,是否敏感)。
- 工具调用层(External Integration)
- Skill_FlightSearch :调用 API 查票,返回所有符合基础条件的航班列表。
- Skill_PriceTrendAnalyzer :分析票价波动趋势,预测是否应该等待。
- Skill_SeatAvailabilityCheck :特定座位(如靠窗/前排)的余票查询。
- Skill_RefundPolicyQuery :查询所选航班的退改政策(风险评估)。
- 决策与编排层(Core Logic)
- Skill_OptionRanking :多维度评分(时间、价格、舒适度综合打分)。
- Skill_TimeConflictChecker :检查用户日程是否冲突(关联日历工具)。
- Skill_NotificationGenerator :生成给用户的汇报文案(整理结果)。
四、 工程实现 Demo:动态任务编排(Task Orchestration)
下面是基于 ModestAgent 架构的演示代码。它展示了当面对"多约束、高歧义"任务时,Agent 如何利用细粒度 Skill 进行动态逻辑组装。
python
def run_agent_logic(user_request):
==========================
步骤 1:接收复杂歧义任务
用户说:"我要带爸妈去广州,他们有高血压,不要坐红眼航班,预算800块左右,帮我看看怎么选。"
==========================
# 【细粒度 Skill 1:意图拆解】
# 拆解用户复杂意图,分解成多个子任务
sub_tasks = Skill_IntentSplitter.run(
input=user_request,
expected_output=["目的地", "同行人数", "身体状况", "预算限制", "时间偏好"]
)
# 输出: {'目的地':'广州', '人数':3, '身体状况':'高血压(忌红眼航班)', '预算':800, '偏好':'非红眼'}
# ==========================
# 步骤 2:按需调用技能(懒加载)
# ==========================
# 根据拆解结果,动态加载所需技能,而不是全量加载
# 因为用户提到了"身体状况",加载健康相关判断技能
health_check_skill = Skill_Loader.load("health_condition_filter")
# 【细粒度 Skill 2:数据获取】
raw_flight_data = Skill_FlightSearch.run(
dep_city=sub_tasks['出发城市'],
arr_city=sub_tasks['目的地'],
date=sub_tasks['出发日期']
)
# ==========================
# 步骤 3:复杂逻辑过滤与决策(核心编排)
# ==========================
# 【细粒度 Skill 3:多轮过滤】
# 先剔除红眼航班(调用健康技能)
filtered_data = health_check_skill.run(raw_flight_data)
# 再剔除超预算航班
filtered_data = Skill_BudgetFilter.run(filtered_data, max_budget=sub_tasks['预算'])
# 【细粒度 Skill 4:综合评分】
# 此时剩下的数据可能有多条,Agent 需要根据"省钱+省时"权重进行排序
final_recommendation = Skill_OptionRanking.run(
data=filtered_data,
weights={"time_score": 0.4, "price_score": 0.6} # 权重也是动态决定的
)
# ==========================
# 步骤 4:结果生成
# ==========================
# 【细粒度 Skill 5:文案生成】
reply = Skill_ReportGenerator.run(final_recommendation)
return reply
五、 为什么此方案优于粗粒度?
对比维度 粗粒度 Skill (大流程) 细粒度 Skill (原子化) 本场景收益点
处理歧义 无法处理。固定流程遇到不按剧本走的需求(如临时加人、改预算)会直接报错。 完美处理。Agent 可根据新条件动态决定调用哪个技能、调整权重。 满足用户多变的需求
维护扩展 低效率。新增一个判断条件(如"需要腿部空间"),必须重写整个大流程。 高复用。只需要新增一个 Skill_LegroomChecker ,核心逻辑不变。 降低技术迭代成本
错误鲁棒性 全崩。中间某一步出错,后续流程全部无法执行。 局部失效。例如"查票"失败,Agent 可以重试查票,不影响其他环节。 提升系统稳定性
可视化 黑盒。用户不知道系统卡在那一步,也没有解释空间。 可解释。Agent 可以展示"我先排除了红眼航班,因为你提到父母身体状况",提升信任。 提升用户体验
六、 总结与论文应用建议
核心结论:
在涉及多变量决策、用户画像动态变化、外部环境复杂的 AI Agent 开发中,细粒度 Skill 不仅是更好的选择,而是唯一的工程级解法。
论文/报告写作建议:
- 引用你的场景:在论文引言部分,详细描述"航班订购"等场景的歧义性和挑战,论证现有固定 workflow 的局限性。
- 突出你的贡献:强调你基于 ModestAgent 实现的动态任务编排机制,证明其能解决复杂场景下的逻辑灵活性问题。
- 对比实验:设计对比实验,分别用粗粒度和细粒度 Agent 处理同一组复杂测试用例,展示细粒度方案的准确率和成功率提升。
💡 后续服务建议:
既然你已经理清了逻辑,需要我帮你进一步设计"多维度评分权重"的算法细节,或者为你的论文生成这部分的可视化架构图?