搞IT的还不会大模型Prompt,是不是要失业了……
第一节:Prompt定义及基本框架
指令:想要模型执行的特定任务或指令。 上下文:包含外部信息或额外的上下文信息,引导语言模型更好地响应。 输入数据:用户输入的内容或问题。 输出指示:指定输出的类型或格式。
R-Role(角色):指定大模型担当固定角色(程序员、数据分析师、讲解员、记者等等) T-Task(任务): 任务,告诉大模型需要为我们做的事情 F-Format(格式):大模型最终结果的返回格式(比如:表格、Markdown、英文等等)
简单、方便。 指定Role角色,可以让大模型在当前的角色范围内回答知识,这在一些特定的领域中非常有效。 指定Role角色也能让工程上检索知识能够确定边界范围,配合元数据所发挥的威力会更强。 如果结合RAG知识内容检索,那么上下文回答的内容会让用户感觉更加是顺畅。
分析型或者逻辑推理型的任务 决策 解决问题(比如程序员根据错误日志找Bug)
# 数据源(与指令区分)user_datasource = """XXX……"""prompt1 = """分析一下在人工客服服务场景下,'''{user_datasource}'''中客户有哪些诉求。用一句话概括。"""prompt2 = """分析一下在人工客服服务场景下,'''{user_datasource}'''中客户有哪些诉求。用一句话概括。让我们逐步思考。"""# 模型输出结果output1:在人工客服服务场景下,客户主要诉求为:微信账号存在安全风险导致无法添加好友、单点拦截、下载安装微信出现问题等,寻求客服协助解决问题。output2:在人工客服服务场景下,客户主要诉求为:微信账号存在安全风险导致无法添加好友,以及因违规行为被限制登录,客户希望客服能够尽快处理这些问题。# 分析结果output1中的”单点拦截”并不是用户的诉求,而output2显然更加正确
R-Role:大模型扮演的角色 I-Instructions: 指示命令,和Task-任务差不多 S-Steps: 步骤 E-End Goal: 最终目标 N-Narrowing(Constraints): 缩小范围(约束条件),和RTF框架中的Format有异曲同工之妙,一个是格式的约束,而这里的约束可以是任意方面,比如回答的内容(特定领域)、字数限制等等方面
撰写具有特定约束的任务(例如博客文章) 有明确指导方针的任务(例如商业计划)
R-Role: 角色
O - Objective: 目标
D - Details: 详细的细节
E - Examples: 示例
S - Sense Check: 感官检查
总结 改进您最喜欢的提示 通过递归生成可用的长格式内容
第二节:打造高效Prompt的两大核心原则
章节标题:通过不同层级的标题区分不同内容模块。 三重双引号:""" ,在代码编写中常用于包裹较长的文本字符串。 三重单引号:''' ,功能与三重双引号类似,适用于不同的语法环境。 三重破折号:--- ,在文本中起到明显的分隔作用。 角括号:<> ,常被用于标记特定元素。 XML标签:,利用结构化的标签形式区分不同内容。
product_description = f"""这是一款全新的智能手表,具备心率监测、睡眠追踪等健康功能,还支持多种运动模式记录,拥有高清显示屏和长达7天的续航能力。"""prompt = f"""请总结以下产品描述:'''{product_description}'''"""
user_comment = f"""这款手机的拍照效果真的太棒了,色彩还原度高,夜景模式也很出色,唯一不足的是电池续航有点短。"""prompt = f"""分析以下用户评论的情感倾向:''' {user_comment}''' """
prompt = "请以json格式列出每个nodeType所体现的用户诉求、客服方案。每一个json-value不超过20个字"# 数据源(与指令区分)user_datasource = """XXX……"""# 模型输出{"IVR": {"用户诉求": "微信使用问题求助","客服方案": "引导正常使用或自助处理"},"ASYNC": {"用户诉求": "账号封禁等相关申诉","客服方案": "按规则处理或引导自助"},"AI": {"用户诉求": "支付相关问题咨询","客服方案": "要求用户详细描述问题"}}
prompt = "请以HTML格式列出三本你推荐的科幻小说及其作者。"# 模型输出<ul><li>《三体》 - 刘慈欣</li><li>《基地》 - 艾萨克·阿西莫夫</li><li>《银河帝国:机器人五部曲》 - 艾萨克·阿西莫夫</li></ul>
expression = "5 + 3 - (-2)"prompt = f"""首先检查表达式 '{expression}' 中的所有数字是否都为正数。如果是,请计算该表达式的值;如果不是,请输出'表达式中存在非正数,无法计算'。"""# 模型输出表达式中存在非正数,无法计算
prompt = """示例1:中文词汇:苹果翻译:apple造句:I like to eat apples.示例2:中文词汇:学校翻译:school造句:I go to school every day.中文词汇:图书馆翻译:造句:"""# 模型输出翻译:library造句:I often read books in the library
poem = "床前明月光,疑是地上霜。举头望明月,低头思故乡。"prompt = f"""请按照“诗歌主题 - 主要意象 - 表达情感”的格式分析这首诗:{poem}"""# 模型输出思乡之情 - 明月 - 对故乡的深切思念
prompt = "在回答如何提高公司的员工满意度之前,请先思考至少三个方面的因素,然后综合这些因素给出全面的建议。"# 模型输出首先,从薪酬福利方面,可适当提高薪资水平、完善福利体系,如增加带薪休假天数等;其次,从职业发展角度,为员工提供更多培训机会和晋升通道;再者,从工作环境来看,营造舒适、和谐的办公氛围,加强团队建设活动。综合这些方面,提高公司员工满意度可以从优化薪酬福利、提供职业发展机会以及改善工作环境等措施入手。
text = """1861年,美国爆发了南北战争,这场战争是美国历史上的重要转折点,它主要围绕奴隶制的存废问题展开,北方主张废除奴隶制,南方则坚持保留。最终北方取得了胜利,为美国的工业化发展铺平了道路。"""prompt = f"""请从上述文本中找出相关信息,回答南北战争主要围绕什么问题展开?"""# 模型输出南北战争主要围绕奴隶制的存废问题展开,北方主张废除奴隶制,南方则坚持保留。
第三节:Prompt技术剖析与应用
prompt = "判断此文本的情感倾向为积极、消极或中性:这部电影情节紧凑,特效惊人。情感:"# 模型会依据自身预训练知识对这个提示进行处理并输出结果
prompt = """“whatpu”是坦桑尼亚的一种小型毛茸茸的动物。一个使用 whatpu 这个词的句子的例子是:我们在非洲旅行时看到了这些非常可爱的whatpus。“farduddle”是指快速跳上跳下。一个使用 farduddle 这个词的句子的例子是:"""# 模型会根据前面的示例学习并生成新的句子
prompt = """Roger 有 5 个网球,他又买了 2 罐网球,每罐有 3 个球,他现在共有多少球?Roger 一开始有 5 个球。2 罐网球,每罐 3 个,共 6 个球。5 + 6 = 11。答案是 11。"""# 模型按照提示中的推理步骤进行计算和回答
prompt = """Q:林中有 15 棵树。林业工人今天将在林中种树。完成后,将有 21 棵树。林业工人今天种了多少棵树?A:我们从 15 棵树开始。后来我们有 21 棵树。差异必须是他们种树的数量。因此,他们必须种了 21 - 15 = 6 棵树。答案是 6。Q:停车场有 3 辆汽车,又来了 2 辆汽车,停车场有多少辆汽车?A:停车场已经有 3 辆汽车。又来了 2 辆。现在有 3 + 2 = 5 辆汽车。答案是 5。Q:当我 6 岁时,我的妹妹是我的一半年龄。现在我 70 岁了,我的妹妹多大?A:"""# 模型会参考前面的推理示例对最后一个问题进行回答,并从多个可能的回答中选择最一致的答案
prompt = """输入:高尔夫球的一部分是试图获得比其他人更高的得分。知识:高尔夫球的目标是以最少的杆数打完一组洞。一轮高尔夫球比赛通常包括 18 个洞。每个洞在标准高尔夫球场上一轮只打一次。每个杆计为一分,总杆数用于确定比赛的获胜者。解释和答案:"""# 模型根据生成的知识对问题进行回答
# 第一个提示用于提取相关引文prompt1 = """你是一个很有帮助的助手。你的任务是根据文档回答问题。第一步是从文档中提取与问题相关的引文,由####分隔。请使用<quotes></quotes>输出引文列表。如果没有找到相关引文,请回应“未找到相关引文!”。#### {{文档}} ####"""# 假设这里有一个文档变量 doc,将其代入提示中进行处理# 处理后得到引文列表,假设为 quotes_list# 第二个提示根据引文和文档生成回答prompt2 = """根据从文档中提取的相关引文(由<quotes></quotes>分隔)和原始文档(由####分隔),请构建对问题的回答。请确保答案准确、语气友好且有帮助。#### {{文档}} #### <quotes>{quotes_list}</quotes>"""# 模型根据第二个提示生成最终回答
# 假设给定数字为 4、9、10、13prompt = """输入: 4 9 10 134 + 9 = 13 (left 10 13 13)10 - 4 = 6 (left 6 9 13)13 - 6 = 7 13 - 9 = 44 + 6 = 10 (left 7 9 4 * 6 = 24 (left 4 6)评估是否能得到 24: sure"""# 模型按照思维树的步骤进行推理和计算,并根据评估结果继续搜索或得出答案
# 假设这里有一个检索函数 retrieve_documents 和一个生成答案的函数 generate_answerquestion = "谁是首次登上月球的人?"documents = retrieve_documents(question)prompt = "根据以下文档回答问题:" + str(documents) + " 问题是:" + questionanswer = generate_answer(prompt)# 最终得到的 answer 即为模型结合检索结果生成的答案
prompt = """计算 16 个苹果平均分给 4 个人,每人几个,再加上 3 是多少?请生成解决这个问题的程序步骤。"""# 模型会生成类似下面的程序步骤# result = (16 / 4) + 3# 然后可以在代码中执行这个程序步骤得到最终答案
# 假设这里有一个生成指令候选项的函数 generate_candidates 和一个选择最佳指令的函数 select_best_instructionarticle = "这里是一篇新闻文章的内容"candidates = generate_candidates(article)prompt = select_best_instruction(candidates) + " " + article# 模型根据最终的 prompt 生成文章总结
# 假设这里有一个查询模型生成答案的函数 query_model 和一个计算不确定度的函数 calculate_uncertaintyprompt = "对以下文本进行分类:这是一篇科技类文章。"answers = query_model(prompt, num_answers=5) # 生成 5 个答案uncertainty = calculate_uncertainty(answers)if uncertainty > threshold: # 如果不确定度大于设定阈值# 选择最不确定的问题由人类注释示例,然后更新提示并重新查询模型new_prompt = update_prompt_with_annotated_example(prompt)final_answer = query_model(new_prompt)else:final_answer = select_most_consistent_answer(answers)# 最终得到的 final_answer 即为经过 Active-Prompt 处理后的答案
article = "这里是一篇文章的内容"prompt = "请根据文章内容生成一个引导提示,重点关注文章的主要事件和结果。"# 策略 LM 会根据这个提示生成如“重点提取文章中事件的主体、发生的时间和最终结果”的引导提示# 然后可以将这个引导提示用于后续的文本摘要任务中
question = "今天是 2023 年 2 月 27 日,我出生于 25 年前,我的出生日期是多少?"prompt = """import datetimefrom dateutil.relativedelta import relativedelta# Q: 2015 年在 36 小时后到来。从今天起一周后的日期是多少(格式为 MM/DD/YYYY)?# 如果 2015 年在 36 小时后到来,那么今天是 36 小时前。today = datetime(2015, 1, 1) - relativedelta(hours=36)# 从今天起一周后,one_week_from_today = today + relativedelta(weeks=1)# 格式化后的答案one_week_from_today.strftime('%m/%d/%Y')# Q: 今天是 2023 年 2 月 27 日,我出生于 25 年前,我的出生日期是多少?"""# 模型会生成类似下面的代码# today = datetime(2023, 2 27)# born = today - relativedelta(years=25)# born.strftime('%m/%d/%Y')# 然后可以在代码中执行模型生成的代码得到最终答案
question = "除苹果遥控器外,哪些设备可控制其设计交互的程序?"prompt = """问题:除苹果遥控器外,哪些设备可控制其设计交互的程序?思考 1:我需要搜索苹果遥控器相关程序及可替代控制设备。操作 1:搜索 [苹果遥控器 可替代控制设备]观察 1:搜索结果为……思考 2:根据搜索结果,分析哪些设备符合要求。操作 2:筛选 [符合要求的设备]观察 2:筛选结果为……思考 3:整理最终答案。操作 3:整理 [最终答案]"""# 模型会按照提示中的推理轨迹和操作步骤进行处理,并最终得出答案
# 假设这里有参与者模型 actor、评估者模型 evaluator 和自我反思模型 reflexioncode = "这里是一段初始代码"# 参与者模型生成尝试解决问题的代码和动作result = actor(code)# 评估者模型评价输出score = evaluator(result)# 自我反思模型根据评价结果生成改进建议reflection = reflexion(score, result)# 将改进建议应用到下一次的代码生成中,实现自我学习和提升
附录