logo

千帆大模型提示词调优实践

千帆大模型提示词调优实践
☞ 如果您在大模型落地过程中遇到任何问题,可以提交工单咨询: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小时睡眠。 规律作息,避免熬夜。

当前问题

  1. 提示词要求输出每周的计划,但实际输出时会存在不稳定的问题,比如会省略部分周,或者合并周期。
  • 省略部分周。
省略场景一: 第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小时睡眠,规律作息,避免熬夜。
  1. 输出周期长度被截断。
  • 比如输出没有完成就停止了。
  
  
  
  
  
  
* 训练目标: 提升运动强度和耐力,增加肌肉量。
* 总运动时间: 每周200分钟。
* 训练课程:
* 有氧运动: 每周3次,每次60分钟,增加运动强度或时间,例如快跑、游泳、骑自行车等。 心率保持在最大心率的70-80%。
* 力量训练: 每周2次,每次45分钟,增加训练重量或组数,选择更多复合动作。 例如:深蹲、硬拉、卧推、引体向上等。
* 瑜伽/HIIT: 每周1次瑜伽,1次HIIT (高强度间
这里输出就停止了, 可以明显的看出并没有完整输出, 统计token结果如下:1015 Tokens 首Token:0.77s 44.67s
  1. 冗余输出
如下,增加了“风险提示”事项,这在预期是不必要的输出内容。
  
  
  
  
  
  
* 训练目标: 巩固训练成果,调整运动强度,预防平台期。
* 总运动时间: 每周180分钟。
* 训练课程: 调整运动强度和类型,避免过量运动。 可以增加一些新的运动项目,保持运动的乐趣。 继续保持力量训练,维持肌肉量。
* 有氧运动(快走/慢跑):75分钟 (心率保持在最大心率的65-75%,目标心率127-146)
* 力量训练(全身):30分钟 (增加组数,例如深蹲15-18次x3-4组,或者增加重量,但仍需保证动作规范)
* 瑜伽/拉伸:60分钟
* 饮食: 继续维持健康的饮食习惯,逐渐恢复正常的卡路里摄入量。 避免暴饮暴食,保持适量饮食。
* 早餐:鸡蛋2个+全麦面包片2片+蔬菜沙拉
* 午餐:鸡胸肉120克+西红柿1个+糙米饭120克
* 晚餐:牛肉100克(瘦肉)+西兰花150克+玉米50克
* 零食:香蕉1根、杏仁一小把
风险提示: 本计划仅供参考,个体差异很大。 建议您根据自身情况进行调整,并咨询专业人士以获得更个性化的指导。 保持积极乐观的心态,坚持下去,祝您成功减重

解决方案

  1. 省略、合并周期与冗余输出的问题解决
由于我们对输出内容,格式要求严格,要逐周输出,不得省略,合并内容,不需要输出总结,注意,解释,概括类的内容。满足要求的同时,还要稳定的输出,不能出现时不时有一两次输出不合要求。
我们采用输出格式为json的输出方式,因为json是一种结构化的输出,它可以包含数组(列表),每一周当作数组(列表)的一个元素,同时再通过fewshot限定每周的输出内容。
我们修改提示词,将输出示例修改如下:
  
  
  
  
  
  
输出示例:
严格按照以下示例的相同风格输出内容:
{
"减重训练计划": {
"第1周": {
"训练目标": "建立基础运动习惯,适应低强度训练",
"总运动时间": "150分钟",
"训练课程": {
"有氧运动(快走/慢跑)": "60分钟",
"力量训练(全身)": "30分钟 (例如:深蹲、俯卧撑、平板支撑等,根据自身情况选择重量和组数)",
"瑜伽/拉伸": "60分钟 (放松肌肉,提高柔韧性)"
},
"饮食": {
"说明": "每日摄入热量减少500卡路里,控制精制糖、油脂摄入。 多食用蔬菜水果,保证蛋白质摄入。"
"饮食参考": {
"早餐":"燕麦粥+水果",
"午餐":鸡胸肉沙拉+蔬菜",
"晚餐":清蒸鱼+西兰花",
"零食":水果、坚果 (少量)"
}
},
"作息": "每日保证7-8小时睡眠。 规律作息,避免熬夜。"
}
}
}
采用json格式输出后,保证了指定输出周期不会被省略,合并,同时也不会再出现格式之外的总结、注意类话术内容。
  1. 长度截断问题的解决方案
  • 优化一:更换大模型,并调整大模型的最大输出长度参数
在之前的测试中,我们有发现模型在输出到第7或第8周左右就停止输出了,最后有提示输出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周的减重计划”,反复多轮直到输出完毕。
多轮输出需要把之前的交互内容携带在上下文中,多轮的请求示例可以参考千帆大模型ERNIE-4.0-Tubro-128K多轮交互示例
生成式人工智能应用工程师认证培训报名咨询:报名咨询
生成式人工智能应用工程师认证培训申请地址:立即申请
评论
用户头像