随着大型语言模型的进步,使用大模型构建人工智能代理(AI Agents)逐渐成为学术界和业界关注的领域。在这些新兴的研究中,大型语言模型扮演着人工智能代理的核心智能,即它们的“大脑”。这些基于大型语言模型的智能代理(LLM-based Agents)通过集成了先进的语言理解和生成能力的模型,展现出在多种任务上的灵活性和适应性。大型语言模型的引入为智能代理提供了更加深入的语义理解和决策制定能力,从而在处理复杂的语言任务时表现出更强的性能。 Agent典型的落地应用场景就是旅游行程规划助手,一个功能强大的旅游规划助手可以帮你搞定各种具体的规划任务,比如:
- 你可以帮我规划春节期间去布达佩斯的行程吗?
- 我需要预订一张明天早上从北京到上海的火车票,没有直达票可以接受换乘。
- 我想知道故宫的开放时间和门票预约方式。
- 帮我找一个适合情人节和女朋友约会的餐厅,并且支持布置场地。
- 从以上4个游乐场中任选一个,通过AppBuilder的Agent Builder创建应用,在应用名称中明确具体的游乐场,如「环球影城排队规划助手」
- 你将获得官方提供的若干问题示例以及参考答案,你的应用需要尽可能的满足用户类似问题,并返回准确的答案
- 本次赛题必须使用百度智能云千帆AppBuilder完成开发,可以使用Agent Builder中的任何工具
- 不允许使用暴力穷举和直接写代码计算的方式实现
-
游玩5个小时,玩哪些项目的组合刺激指数最大?
- 300分钟之内,刺激指数总和最大为36,组合为小熊历险记,抱抱龙冲天赛车,创极速光轮-雪佛兰呈献,小飞象,喷气背包飞行器
-
只有120分钟的时间,怎么玩视觉体验最大?
- 120分钟之内,视觉指数最大为17,组合为小熊历险记,加勒比海盗-沉落宝藏之战
-
我现在只有4小时20分钟的时间,请问玩哪些项目最刺激?
- 260分钟之内,刺激指数总和最大为32,组合为抱抱龙冲天赛车,创极速光轮-雪佛兰呈献,小飞象,喷气背包飞行器
$data = [ {name:喷气背包飞行器,time:60,view:3,thrill:9}, {name:创极速光轮-雪佛兰呈现,time:50,view:7,thrill:10}, {name:抱抱龙冲天赛车,time:100,view:3,thrill:8}, {name:小熊历险记,time:50,view:7,thrill:4}, {name:疯狂动物城,time:220,view:9,thrill:6}, {name:加勒比海盗-沉落宝藏之战,time:45,view:10,thrill:4}, {name:翱翔-飞跃地平线,time:130,view:10,thrill:8}, {name:雷鸣山漂流,time:130,view:4,thrill:9}, {name:小飞象,time:40,view:6,thrill:5}, {name:城堡迎宾阁,time:60,view:7,thrill:1}, {name:小矮人矿山车,time:145,view:3,thrill:8} ];
其中“游乐项目名称name”、“用时time”、“体验指数(视觉指数view、刺激指数thrill)”。
对于planning部分的优化,我们可以采用Chain of Thoughts(COT)和oneshot的形式。
Chain of Thoughts(COT)顾名思义,思维链,就是将解体思路的思考过程描述出来。
比如在这道赛题中,我们可以辅助Agent思考的过程,将基本的解题思路,使用自然语言来描述给大模型。其核心是如下这句话: 枚举每一种游玩组合,计算体验指数之和,并且保证组合的耗时小于设定总时长$ztime,并记录其最大的体验指数之和和对应组合。 关于这部分,我曾尝试过使用语言描述动态规划的原理启发大模型写代码,但是考虑到本题的数据量和结果的正确率,效果一直比启写枚举思路成功率偏低,因此最终采用了【启发大模型写枚举代码】思路,各位可以多多尝试。 完整的实例如下:
你作为一个人工智能算法助手, 根据下面提供的算法逻辑和遍历组合的解题思路来处理景点游玩最优规划这个情景问题。 【代码算法逻辑及步骤】: step1:分析问题,获得可用总时长$ztime(分钟); step2:加载以下全部11组$data数据: ... 其中“游乐项目名称name”、“用时time”、“体验指数(视觉指数view、刺激指数thrill)”。 step3:分析问题,设置对应要计算的指数(刺激指数:thrill;视觉指数:view); step4:判断总耗时是否小于$data中的time最小值,如果小于则直接结束运算,说明不会存在最优解。如果大于等于则进行下一步; step4:枚举每一种游玩组合,计算体验指数之和,并且保证组合的耗时小于设定总时长$ztime,并记录其最大的体验指数之和和对应组合 step5:输出最大的体验指数之和和对应组合
Fewshot和oneshot的概念是给Agent提供多个或者一个参考案例,让他模仿案例进行学习。在我们的任务中,可以参考如下形式
【示例】:{ 问题: 游玩5个小时,玩哪些项目的组合刺激指数最大? 回答:亲爱的游客您好,根据您的问题经过严密计算后得出: 300分钟之内,刺激指数总和最大为36,总耗时300分钟。 【小熊历险记】【耗时50分钟】【刺激指数:4】 【抱抱龙冲天赛车】【耗时100分钟】【刺激指数:8】 【创极速光轮-雪佛兰呈献】【耗时50分钟】【刺激指数:10】 【小飞象】【耗时40分钟】【刺激指数:5】 【喷气背包飞行器】【耗时60分钟】【刺激指数:9】}
最后,我们将上面提到的三部分组织起来,构建成一个完成的prompt,描述给大模型。
你作为一个人工智能算法助手, 根据下面提供的算法逻辑和遍历组合的解题思路来处理景点游玩最优规划这个情景问题。 【代码算法逻辑及步骤】: step1:分析问题,获得可用总时长$ztime(分钟); step2:加载以下全部11组$data数据 $data = [{name:喷气背包飞行器,time:60,view:3,thrill:9}, {name:创极速光轮-雪佛兰呈现,time:50,view:7,thrill:10}, {name:抱抱龙冲天赛车,time:100,view:3,thrill:8}, {name:小熊历险记,time:50,view:7,thrill:4}, {name:疯狂动物城,time:220,view:9,thrill:6}, {name:加勒比海盗-沉落宝藏之战,time:45,view:10,thrill:4}, {name:翱翔-飞跃地平线,time:130,view:10,thrill:8}, {name:雷鸣山漂流,time:130,view:4,thrill:9}, {name:小飞象,time:40,view:6,thrill:5}, {name:城堡迎宾阁,time:60,view:7,thrill:1}, {name:小矮人矿山车,time:145,view:3,thrill:8}]; 其中“游乐项目名称name”、“用时time”、“体验指数(视觉指数view、刺激指数thrill)”。 step3:分析问题,设置对应要计算的指数(刺激指数:thrill;视觉指数:view); step4:判断总耗时是否小于$data中的time最小值,如果小于则直接结束运算,说明不会存在最优解。如果大于等于则进行下一步; step4:枚举每一种游玩组合,计算体验指数之和,并且保证组合的耗时小于设定总时长$ztime,并记录其最大的体验指数之和和对应组合 step5:输出最大的体验指数之和和对应组合 【示例】:{ 问题: 游玩5个小时,玩哪些项目的组合刺激指数最大? 回答:亲爱的游客您好,根据您的问题经过严密计算后得出: 300分钟之内,刺激指数总和最大为36,总耗时300分钟。 【小熊历险记】【耗时50分钟】【刺激指数:4】 【抱抱龙冲天赛车】【耗时100分钟】【刺激指数:8】 【创极速光轮-雪佛兰呈献】【耗时50分钟】【刺激指数:10】 【小飞象】【耗时40分钟】【刺激指数:5】 【喷气背包飞行器】【耗时60分钟】【刺激指数:9】} 请严格按照上述算法和输出要求,运算出结果并输出。让我们一步一步来思考!
OK,完成了基本的prompt撰写我们再看看如何使用
百度智能云千帆AppBuilder这一工具构建最终应用。 第一步 报名。 第二步 进入Appbuilder页面。 第三步 创建Agent应用。 第四步 编写提示词。 点击发布应用。 第五步 执行测试用例执行结果,一起来跟我们的AI agent聊聊天吧~ 第一个用例 第二个用例 第三个用例 可以看出我们三个测试用例都完美通过了测试! 如何查看Agent代码写的如何?我们点击展开第一个用例生成的代码,可以看到如下代码。 要注意的是,每次生成结果有随机性,生成代码有所差别,下面选取了其中一次的展示:
# 1. 加载数据 data = [ {"name": "喷气背包飞行器", "time": 60, "view": 3, "thrill": 9}, {"name": "创极速光轮-雪佛兰呈现", "time": 50, "view": 7, "thrill": 10}, {"name": "抱抱龙冲天赛车", "time": 100, "view": 3, "thrill": 8}, {"name": "小熊历险记", "time": 50, "view": 7, "thrill": 4}, {"name": "疯狂动物城", "time": 220, "view": 9, "thrill": 6}, {"name": "加勒比海盗-沉落宝藏之战", "time": 45, "view": 10, "thrill": 4}, {"name": "翱翔-飞跃地平线", "time": 130, "view": 10, "thrill": 8}, {"name": "雷鸣山漂流", "time": 130, "view": 4, "thrill": 9}, {"name": "小飞象", "time": 40, "view": 6, "thrill": 5}, {"name": "城堡迎宾阁", "time": 60, "view": 7, "thrill": 1}, {"name": "小矮人矿山车", "time": 145, "view": 3, "thrill": 8} ] # 2. 筛选与排序 # 按刺激指数降序排序 data.sort(key=lambda x: x['thrill'], reverse=True) # 3. 组合与计算 max_thrill = 0 max_combination = [] def backtrack(combination, total_time, total_thrill, index): global max_thrill, max_combination # 终止条件 if total_time > 300 or index == len(data): if total_thrill > max_thrill: max_thrill = total_thrill max_combination = combination[:] return # 选择当前项目 if total_time + data[index]['time'] <= 300: combination.append(data[index]) backtrack(combination, total_time + data[index]['time'], total_thrill + data[index]['thrill'], index + 1) combination.pop() # 不选择当前项目 backtrack(combination, total_time, total_thrill, index + 1) backtrack([], 0, 0, 0) # 4. 选择最优解 # 已在backtrack函数中完成 # 5. 输出结果 print(f"在5个小时内,刺激指数总和最大的游玩项目组合为:") total_time = 0 for item in max_combination: print(f"{item['name']}【耗时{item['time']}分钟】【刺激指数:{item['thrill']}】") total_time += item['time'] print(f"总刺激指数:{max_thrill},总耗时:{total_time}分钟") # 1. 加载数据 data = [ {"name": "喷气背包飞行器", "time": 60, "view": 3, "thrill": 9}, {"name": "创极速光轮-雪佛兰呈现", "time": 50, "view": 7, "thrill": 10}, {"name": "抱抱龙冲天赛车", "time": 100, "view": 3, "thrill": 8}, {"name": "小熊历险记", "time": 50, "view": 7, "thrill": 4}, {"name": "疯狂动物城", "time": 220, "view": 9, "thrill": 6}, {"name": "加勒比海盗-沉落宝藏之战", "time": 45, "view": 10, "thrill": 4}, {"name": "翱翔-飞跃地平线", "time": 130, "view": 10, "thrill": 8}, {"name": "雷鸣山漂流", "time": 130, "view": 4, "thrill": 9}, {"name": "小飞象", "time": 40, "view": 6, "thrill": 5}, {"name": "城堡迎宾阁", "time": 60, "view": 7, "thrill": 1}, {"name": "小矮人矿山车", "time": 145, "view": 3, "thrill": 8} ] # 2. 筛选与排序 # 按刺激指数降序排序 data.sort(key=lambda x: x['thrill'], reverse=True) # 检查总时间是否小于最小项目时间 min_time = min(item['time'] for item in data) if 300 < min_time: print(f"在5个小时内,无法完成任何一个项目。") exit() # 提前退出程序 # 3. 组合与计算 max_thrill = 0 max_combination = [] def backtrack(combination, total_time, total_thrill, index): global max_thrill, max_combination # 终止条件 if total_time > 300 or index == len(data): if total_thrill > max_thrill: max_thrill = total_thrill max_combination = combination[:] return # 选择当前项目 if total_time + data[index]['time'] <= 300: combination.append(data[index]) backtrack(combination, total_time + data[index]['time'], total_thrill + data[index]['thrill'], index + 1) combination.pop() # 不选择当前项目 backtrack(combination, total_time, total_thrill, index + 1) backtrack([], 0, 0, 0) # 4. 选择最优解 # 已在backtrack函数中完成 # 5. 输出结果 print(f"在5个小时内,刺激指数总和最大的游玩项目组合为:") total_time = 0 for item in max_combination: print(f"{item['name']}【耗时{item['time']}分钟】【刺激指数:{item['thrill']}】") total_time += item['time'] print(f"总刺激指数:{max_thrill},总耗时:{total_time}分钟")
可以看到Agent自动构建了python可执行代码编写,框架代码解释器完成了代码执行,给出了运行结果。经测试其他测试用例在当前提示词下也都通过。 提示词限制字数为1400字,大家在1400字内,可以发挥自己的聪明才智,使用COT,Fewshot,自反思,多次执行过程投票结果等手法提升Agent效果。另外,想要赢得比赛要注意考虑Agent的泛化能力,以便应对测试用例之外的case。 通过这个案例,我们可以体会到Agent框架的重要性,是可以真正做到零代码编写,国内外Agent应用百花齐放,百度智能云AppBuilder作为目前国内唯一全面开放的具备代码规划与执行能力的平台,将大模型应用开发所需的框架和组件都做成了可扩展和可拼接的形式,每位开发者都可以利用AppBuilder来基于自然语言构建自己的“程序员”,快速打造属于自己的AI原生应用,探索AI大模型的无限可能。 转自:https://cloud.baidu.com/qianfandev/topic/268605 标签:thrill,指数,云千帆杯,Agent,name,解题,time,view From: https://www.cnblogs.com/liangjt/p/18044882