千帆大模型提示词调优实践
大模型开发/技术交流
- LLM
- 文心大模型
- Prompt
11月18日1862看过
千帆大模型提示词调优实践
☞ 如果您在大模型落地过程中遇到任何问题,可以提交工单咨询:https://console.bce.baidu.com/ticket/#/ticket/create?productId=279
☞ 同时,大模型技术专家可为您提供效果调优、应用定制和技术培训等付费专属服务:https://cloud.baidu.com/product/llmservice.html
原始提示词
以下是减重训练计划的提示词
# 能力与角色:作为一名经验丰富的注册营养师和运动健身教练,我将根据您的具体情况,为您制定一个为期{duration}周的安全有效的个性化减重计划,并帮助您养成健康的生活方式。# 背景:* 性别: {gender} (例如:女)* 年龄: {age}岁 (例如:25岁)* 体重: {weight}kg (例如:65kg)* 身高: {height}cm (例如:160cm)# 指令:1. 制定一个为期{duration}周的个性化减重计划,包含每周的详细安排,并充分考虑减重者的个体信息,避免千篇一律的方案。2. 计划需结合运动科学的原理和营养学知识,详细说明训练强度、运动类型、运动时间、心率区间等运动参数。饮食计划需包含每日三餐及零食的具体食谱建议,并控制每日的卡路里摄入。3. 计划必须考虑安全性,避免过度运动或节食,并提供相关的风险提示及应对措施。此处省略......# 输出示例:严格按照以下示例的相同风格输出内容:减重训练计划第1周* 训练目标: 建立基础运动习惯,适应低强度训练。* 总运动时间: 150分钟* 训练课程:* 有氧运动(快走/慢跑):60分钟* 力量训练(全身):30分钟 (例如:深蹲、俯卧撑、平板支撑等,根据自身情况选择重量和组数)* 瑜伽/拉伸:60分钟 (放松肌肉,提高柔韧性)* 日常饮食: 每日摄入热量减少500卡路里,控制精制糖、油脂摄入。 多食用蔬菜水果,保证蛋白质摄入。 参考食谱:* 早餐:燕麦粥+水果* 午餐:鸡胸肉沙拉+蔬菜* 晚餐:清蒸鱼+西兰花* 零食:水果、坚果 (少量)* 作息: 每日保证7-8小时睡眠。 规律作息,避免熬夜。
当前问题
-
提示词要求输出每周的计划,但实际输出时会存在不稳定的问题,比如会省略部分周,或者合并周期。
-
省略部分周。
省略场景一: 第13,14,15周直接输出同第12周。
第13周·同第12周第14周·同第12周第15周·无具体训练计划,充分休息。
省略场景二:省略数周,如下:“...(中间周数省略,按照递增原则逐渐增加训练时间和强度)”。
* 训练目标: 提升运动强度和耐力,增加肌肉量。* 总运动时间: 每周200分钟。* 训练课程:* 有氧运动: 每周3次,每次60分钟,增加运动强度或时间,例如快跑、游泳、骑自行车等。 心率保持在最大心率的70-80%。* 力量训练: 每周2次,每次45分钟,增加训练重量或组数,选择更多复合动作。 例如:深蹲、硬拉、卧推、引体向上等。* 瑜伽/HIIT: 每周1次瑜伽,1次HIIT (高强度间歇训练),例如:跳绳、开合跳、波比跳等,每次30分钟。* 饮食: 维持第1-4周的饮食原则,根据运动量适当调整卡路里摄入。 可以适量增加蛋白质的摄入,帮助肌肉恢复和增长。* 早餐:燕麦粥50克+脱脂牛奶200ml+香蕉1根* 午餐:鸡胸肉100克+西兰花100克+糙米饭100克* 晚餐:清蒸鱼100克+紫甘蓝100克+豆腐50克* 零食:苹果半个、酸奶100ml (低脂)...(中间周数省略,按照递增原则逐渐增加训练时间和强度)第7周* 训练目标:巩固训练成果,调整运动强度,预防平台期。
-
合并周期
部分周合并在一起输出了,如下面的“第1-4周:基础阶段”。
第1-4周:基础阶段* 训练目标: 建立基础运动习惯,适应低强度训练,提高心肺功能。* 总运动时间: 每周150分钟。* 训练课程:* 有氧运动(快走/慢跑): 每周3次,每次45分钟,心率保持在最大心率的60-70% (最大心率≈220-年龄)。* 力量训练(全身): 每周2次,每次30分钟,选择自重训练或轻重量器械训练。 例如:深蹲、弓步蹲、俯卧撑、平板支撑、哑铃划船等。* 瑜伽/拉伸: 每周2次,每次30分钟,提高柔韧性,放松肌肉。* 日常饮食: 每日摄入热量减少500卡路里,控制精制糖、油脂摄入。 多食用蔬菜水果,保证蛋白质摄入。* 早餐: 燕麦粥+牛奶+水果 (香蕉/苹果)* 午餐: 鸡胸肉沙拉 (蔬菜+低脂沙拉酱)+糙米饭* 晚餐: 清蒸鱼+西兰花+紫薯* 零食: 水果 (苹果/香蕉/橙子)、酸奶 (低脂)、坚果 (少量)* 作息: 每日保证7-8小时睡眠,规律作息,避免熬夜。
-
输出周期长度被截断。
-
比如输出没有完成就停止了。
* 训练目标: 提升运动强度和耐力,增加肌肉量。* 总运动时间: 每周200分钟。* 训练课程:* 有氧运动: 每周3次,每次60分钟,增加运动强度或时间,例如快跑、游泳、骑自行车等。 心率保持在最大心率的70-80%。* 力量训练: 每周2次,每次45分钟,增加训练重量或组数,选择更多复合动作。 例如:深蹲、硬拉、卧推、引体向上等。* 瑜伽/HIIT: 每周1次瑜伽,1次HIIT (高强度间
这里输出就停止了, 可以明显的看出并没有完整输出, 统计token结果如下:
1015 Tokens 首Token:0.77s 44.67s
-
冗余输出
如下,增加了“风险提示”事项,这在预期是不必要的输出内容。
* 训练目标: 巩固训练成果,调整运动强度,预防平台期。* 总运动时间: 每周180分钟。* 训练课程: 调整运动强度和类型,避免过量运动。 可以增加一些新的运动项目,保持运动的乐趣。 继续保持力量训练,维持肌肉量。* 有氧运动(快走/慢跑):75分钟 (心率保持在最大心率的65-75%,目标心率127-146)* 力量训练(全身):30分钟 (增加组数,例如深蹲15-18次x3-4组,或者增加重量,但仍需保证动作规范)* 瑜伽/拉伸:60分钟* 饮食: 继续维持健康的饮食习惯,逐渐恢复正常的卡路里摄入量。 避免暴饮暴食,保持适量饮食。* 早餐:鸡蛋2个+全麦面包片2片+蔬菜沙拉* 午餐:鸡胸肉120克+西红柿1个+糙米饭120克* 晚餐:牛肉100克(瘦肉)+西兰花150克+玉米50克* 零食:香蕉1根、杏仁一小把风险提示: 本计划仅供参考,个体差异很大。 建议您根据自身情况进行调整,并咨询专业人士以获得更个性化的指导。 保持积极乐观的心态,坚持下去,祝您成功减重
解决方案
-
省略、合并周期与冗余输出的问题解决
由于我们对输出内容,格式要求严格,要逐周输出,不得省略,合并内容,不需要输出总结,注意,解释,概括类的内容。满足要求的同时,还要稳定的输出,不能出现时不时有一两次输出不合要求。
我们采用输出格式为json的输出方式,因为json是一种结构化的输出,它可以包含数组(列表),每一周当作数组(列表)的一个元素,同时再通过fewshot限定每周的输出内容。
我们修改提示词,将输出示例修改如下:
输出示例:严格按照以下示例的相同风格输出内容:{"减重训练计划": {"第1周": {"训练目标": "建立基础运动习惯,适应低强度训练","总运动时间": "150分钟","训练课程": {"有氧运动(快走/慢跑)": "60分钟","力量训练(全身)": "30分钟 (例如:深蹲、俯卧撑、平板支撑等,根据自身情况选择重量和组数)","瑜伽/拉伸": "60分钟 (放松肌肉,提高柔韧性)"},"饮食": {"说明": "每日摄入热量减少500卡路里,控制精制糖、油脂摄入。 多食用蔬菜水果,保证蛋白质摄入。""饮食参考": {"早餐":"燕麦粥+水果","午餐":鸡胸肉沙拉+蔬菜","晚餐":清蒸鱼+西兰花","零食":水果、坚果 (少量)"}},"作息": "每日保证7-8小时睡眠。 规律作息,避免熬夜。"}}}
采用json格式输出后,保证了指定输出周期不会被省略,合并,同时也不会再出现格式之外的总结、注意类话术内容。
-
长度截断问题的解决方案
-
优化一:更换大模型,并调整大模型的最大输出长度参数
在之前的测试中,我们有发现模型在输出到第7或第8周左右就停止输出了,最后有提示输出
同时可以考虑更换千帆大模型ERNIE-3.5-128K或千帆大模型ERNIE-4.0-Turbo-128K,这两者的最大输出长度为
1015Tokens 首Token:0.77s 44.67s
,这里实际上是超出大模型的最大输出长度被截断了。千帆大模型ERNIE-3.5-8K模型默认最大输出token数为1024
,可以通过设置max_output_tokens
将最大输出长度设置为2048
。同时可以考虑更换千帆大模型ERNIE-3.5-128K或千帆大模型ERNIE-4.0-Turbo-128K,这两者的最大输出长度为
4096
tokens
经过调整后,可以保证大模型的最终输出长度能够达到10~15周左右, 但如果需要更长周期的输出,还要进一步优化。
-
优化二: 压缩json内容
1) 当我们选择用json格式结构化输出时,就意味着输出结果需要再用程序来解析成易读的内容。在保证程序能够解析的情况下,我们将json格式中的换行,缩进取消掉,因为缩进中的空格仍然会占用大量的tokens。
新的输出示例如下:
{"减重训练计划":{"第1周":{"训练目标":"建立基础运动习惯,适应低强度训练","总运动时间":"150分钟","训练课程":{"有氧运动(快走/慢跑)":"60分钟 (心率保持在最大心率的60-70%)","力量训练(全身)":"30分钟 (例如:深蹲12-15次x3组,俯卧撑尽可能多次数x3组,平板支撑30秒x3组,根据自身情况调整重量和组数)","瑜伽/拉伸":"60分钟 (侧重全身拉伸,放松肌肉,提高柔韧性)"},"饮食":{"说明":"每日摄入热量控制在1500-1600卡路里左右 (具体数值需要根据个体情况调整),控制精制糖、油脂摄入,多食用蔬菜水果,保证蛋白质摄入。","饮食参考":{"早餐":"燕麦粥50克+脱脂牛奶200ml+香蕉1根","午餐":"鸡胸肉100克+西兰花100克+糙米饭100克","晚餐":"清蒸鱼100克+紫甘蓝100克+豆腐50克","零食":"苹果半个、酸奶100ml (低脂)"}},"作息":"每日保证7-8小时睡眠。规律作息,避免熬夜。"},"第2周":{"训练目标":"提升有氧运动耐力,增强力量训练强度","总运动时间":"165分钟","训练课程":{"有氧运动(快走/慢跑)":"75分钟 (心率保持在最大心率的65-75%)","力量训练(全身)":"30分钟 (增加组数,例如深蹲15-18次x3-4组,或者增加重量,但仍需保证动作规范)","瑜伽/拉伸":"60分钟"},"饮食":{"说明":"维持第1周的饮食原则,可根据自身情况微调卡路里摄入,例如增加蛋白质摄入量以支持肌肉增长。","饮食参考":{"早餐":"鸡蛋2个+全麦面包片2片+蔬菜沙拉","午餐":"鸡胸肉120克+西红柿1个+糙米饭120克","晚餐":"牛肉100克(瘦肉)+西兰花150克+玉米50克","零食":"香蕉1根、杏仁一小把"}},"作息":"每日保证7-8小时睡眠。规律作息,避免熬夜。"}}}
经过压缩后的节约在大约三分之一的tokens, 可以输出15~20周的内容。
2)当然还可以进一步压缩,比如我们可以结合实际业务的理解,对输出结果中的固定内容进行省略或者使用简写替代。如像“减重训练计划”, “第x周”, “训练目标”这些是固定内容的标题, 每周都一样,可以省略或者简写,但同时需要在提示词中对内容位置或者简写做补充说明,增加了prompt的复杂度,这里就不再推荐此方式。
-
优化三: 多轮输出
大模型的输出是有上限的,无论更换模型还是压缩输出,超出长度限制终究会被截断,我们可以考虑通过提示词进行多轮输出,最后整合大模型的多次输出生成完整的内容。
1) 最简单的就是当模型输出由于截断而停止时,通过输入提示词“继续”来让大模型输出剩余的部分。但我们在API调用时,需要将大模型上一轮的输出做为上下文传递给大模型。
2) 也可以在提示词中说明每次输出的周期。
假如需要大模型输出15周的减重计划,在提示词最后说明,”请先输出1~10周的减重计划”, 待模型输出完毕后,同样携带上下文,让大模型“输出10~15周的减重计划”,反复多轮直到输出完毕。
假如需要大模型输出15周的减重计划,在提示词最后说明,”请先输出1~10周的减重计划”, 待模型输出完毕后,同样携带上下文,让大模型“输出10~15周的减重计划”,反复多轮直到输出完毕。
多轮输出需要把之前的交互内容携带在上下文中,多轮的请求示例可以参考千帆大模型ERNIE-4.0-Tubro-128K多轮交互示例。
评论