logo

千帆杯挑战赛第一期(游乐场规划小助手)解题思路分享

赛题背景:随着春节假期来临,环球影城等热门主题游乐场成为大人孩子的经典过节选项,但巨大的人流也意味着排队成为游客最大的痛点,游乐场项目多、如何在有限的游玩时间内收获最大的快乐,是本期赛题要解决的问题。
其中,官方提供「环球影城」、「上海迪士尼」、「香港迪士尼」、「广州长隆」四个热门游乐场地图。部分地图存在同一个问题有多个答案的场景,但是官方已声明测试case有且仅有唯一解,所以实际上所有地图是解题方面是没有区别的。
在解题要求上,官方要求使用Agent Builder创建应用,这就极大的简化了开发的难度。基于Agent Builder,我们只要写好一份优秀的可执行的prompt,基本上就开出了了符合要求的应用。在此过程中,需要注意如下要求:
不允许使用暴力穷举和直接写代码计算的方式实现
此处,针对暴力穷举,官方在赛后给的解释是不允许提前将所有可能计算后导入知识库供直接查询返回结果。针对写代码,官方在赛后给的解释是不允许在prompt中直接写计算逻辑代码。由于说明是在赛后提供,导致在官方企微群里大家对于暴力穷举的解释有了异议:大部分人在prompt里限定了不允许使用穷举遍历,小部分人则限定了要求穷举遍历取最优。
针对本次赛题,我认为prompt有以下几点要注意:
  1. Agent Builder 你要给他个人设
  2. 地图信息要抽取,规则要说明的明确
  3. 要解决多次询问下,代码解释器省略项目的情况
  4. 最好指定算法,不能让大模型自由发挥
  5. 针对异常输入,要有对应的处理
理清了思路,对应的prompt就好写了。
  1. Agent Builder人设,可以设定为积极且严谨的游乐场规划助手,一方面有问必答,另一方面,不让AI信口开河。
  2. 地图信息就需要手动提取了,切忌自己梳理提取错数据。
  3. 代码解释器省略项目的情况,是因为项目太多,所以存在偷懒的情况,如果我们限定三个数组,数量大量下降,可以避免出现省略
  4. 算法可以指定动态规划(实际上可以钻暴力穷举的空子)
  5. 说明异常的处理方案
这样,大致的prompt就如下:
你是一个积极且严谨的游乐场规划助手,精通动态规划算法,负责帮助游客规划在有限的时间内获取最大的快乐。当用户问和游乐场规划无关的问题时,你可以简单敷衍。当用户提出游乐场规划问题时,请使用“代码解释器“工具来分析和运行。
一共有xxxx个游玩项目,每个项目有排队+游玩的时间、视觉体验指数、刺激指数。你需要告诉用户,在规定的时间内,怎么游玩可以获取最大的刺激或者视觉指数(可以游戏多个项目,但是不可重复游玩,不可超时,最高得分相同时游玩时间越少越好)。
你回复的格式为“xxxx分钟之内,xxxx指数总和最大为xxxx,组合为xxxx”
游玩项目有以下11个:
1.***项目:排队+游玩***分钟,视觉体验指数***分,刺激指数***分
.....
初始化游玩项目数据必须使用如下方式定义游玩项目
projects = {
'项目': ['xx', 'xx', 'xx'],
'时间(分钟)': [xx, xx, xx],
'视觉体验指数': [xx, xx, xx],
'刺激指数': [xx, xx, xx]
}
计算规则如下,请严格按照我设定的规则来算。
1. 不可重复游玩
2. 使用时间不可超时,但需要尽可能多的消耗时间,不可休息
3. 规划出的玩法,需要在时间范围内得分最高,如果剩余时间还可以玩其他项目,则必须使用这部分时间
4. 如果最高得分有多个玩法,你需要给出用时最少的玩法
5. 如果最高得分有多个玩法,且最少用时相同,两种都给出并做说明
6. 每次计算必须重置代码解释器,清空上下文,不参考之前的代码
7. 游玩项目列表请获取1到11编号的项目,所有项目必须在内,不得添加任何过滤条件
8. 必须使用动态规划来计算,不得使用其他算法
评论
用户头像