#LLM入门|Prompt#1.2_提示原则_Guidelines

news/2024/4/15 7:57:49

提示原则

一、编写清晰、具体的指令

  1. 使用分隔符清晰地表示输入的不同部分:
  • 在Prompt中使用分隔符,如```、“”"、< >、 、:等,将不同的文本部分区分开来,避免混淆和意外的结果。
  • 分隔符能够防止提示词注入,提高模型输出的准确性和可靠性。
from tool import get_completiontext = f"""
您应该提供尽可能清晰、具体的指示,以表达您希望模型执行的任务。\
这将引导模型朝向所需的输出,并降低收到无关或不正确响应的可能性。\
不要将写清晰的提示词与写简短的提示词混淆。\
在许多情况下,更长的提示词可以为模型提供更多的清晰度和上下文信息,从而导致更详细和相关的输出。
"""
# 需要总结的文本内容
prompt = f"""
把用三个反引号括起来的文本总结成一句话。
```{text}```
"""
# 指令内容,使用 ```来分隔指令和待总结的内容
response = get_completion(prompt)
print(response)
  1. 寻求结构化的输出:
  • 请求语言模型以结构化格式(如JSON)返回结果,便于进一步处理和解析。
  • 结构化输出适合在代码中进一步解析和处理,提高了效率和可操作性。
prompt = f"""
请生成包括书名、作者和类别的三本虚构的、非真实存在的中文书籍清单,\
并以 JSON 格式提供,其中包含以下键:book_id、title、author、genre。
"""
response = get_completion(prompt)
print(response)
{"books": [{"book_id": 1,"title": "迷失的时光","author": "张三","genre": "科幻"},{"book_id": 2,"title": "幻境之门","author": "李四","genre": "奇幻"},{"book_id": 3,"title": "虚拟现实","author": "王五","genre": "科幻"}]
}
  1. 要求模型检查是否满足条件:
  • 在Prompt中要求模型检查条件,如果不满足则指出并停止执行后续操作。
  • 考虑可能出现的边缘情况和模型的应对策略,避免意外结果或错误发生。
# 满足条件的输入(text中提供了步骤)
text_1 = f"""
泡一杯茶很容易。首先,需要把水烧开。\
在等待期间,拿一个杯子并把茶包放进去。\
一旦水足够热,就把它倒在茶包上。\
等待一会儿,让茶叶浸泡。几分钟后,取出茶包。\
如果您愿意,可以加一些糖或牛奶调味。\
就这样,您可以享受一杯美味的茶了。
"""
prompt = f"""
您将获得由三个引号括起来的文本。\
如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:第一步 - ...
第二步 - …
…
第N步 - …如果文本中不包含一系列的指令,则直接写“未提供步骤”。"
\"\"\"{text_1}\"\"\"
"""
response = get_completion(prompt)
print("Text 1 的总结:")
print(response)
Text 1 的总结:
第一步 - 把水烧开。
第二步 - 拿一个杯子并把茶包放进去。
第三步 - 把烧开的水倒在茶包上。
第四步 - 等待几分钟,让茶叶浸泡。
第五步 - 取出茶包。
第六步 - 如果需要,加入糖或牛奶调味。
第七步 - 就这样,您可以享受一杯美味的茶了。
# 不满足条件的输入(text中未提供预期指令)
text_2 = f"""
今天阳光明媚,鸟儿在歌唱。\
这是一个去公园散步的美好日子。\
鲜花盛开,树枝在微风中轻轻摇曳。\
人们外出享受着这美好的天气,有些人在野餐,有些人在玩游戏或者在草地上放松。\
这是一个完美的日子,可以在户外度过并欣赏大自然的美景。
"""
prompt = f"""
您将获得由三个引号括起来的文本。\
如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:第一步 - ...
第二步 - …
…
第N步 - …如果文本中不包含一系列的指令,则直接写“未提供步骤”。"
\"\"\"{text_2}\"\"\"
"""
response = get_completion(prompt)
print("Text 2 的总结:")
print(response)
Text 2 的总结:
未提供步骤。
  1. 提供少量示例:
  • 在任务开始前,提供少量示例样本,让模型了解要求和期望的输出样式。
  • 少量示例可以帮助模型快速上手新任务,提高效率和准确性。
prompt = f"""
您的任务是以一致的风格回答问题。<孩子>: 请教我何为耐心。<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。<孩子>: 请教我何为韧性。
"""
response = get_completion(prompt)
print(response)
<祖父母>: 韧性是一种坚持不懈的品质,就像一棵顽强的树在风雨中屹立不倒。它是面对困难和挑战时不屈不挠的精神,能够适应变化和克服逆境。韧性是一种内在的力量,让我们能够坚持追求目标,即使面临困难和挫折也能坚持不懈地努力。

二、给模型时间去思考

  • 给予语言模型充足的推理时间非常重要,避免让模型匆忙给出结论,减少错误的可能性。
  • 在Prompt中添加逐步推理的要求,让模型有足够的时间进行深入思考和逻辑推理,提高结果的可靠性和准确性。
  1. 接下来,我们将展示这一策略的效果,通过给定一个复杂任务,提供一系列步骤来完成。首先,我们将描述杰克和吉尔的故事,并给出以下操作的提示词:
    1. 用一句话概括三个反引号限定的文本。
    2. 将摘要翻译成英语。
    3. 在英语摘要中列出每个名称。
    4. 输出包含以下键的JSON对象:英语摘要和人名个数。要求输出以换行符分隔。

2.1 指定完成任务所需的步骤

text = f"""
在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。\
他们一边唱着欢乐的歌,一边往上爬,\
然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。\
虽然略有些摔伤,但他们还是回到了温馨的家中。\
尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。
"""
# example 1
prompt_1 = f"""
执行以下操作:
1-用一句话概括下面用三个反引号括起来的文本。
2-将摘要翻译成英语。
3-在英语摘要中列出每个人名。
4-输出一个 JSON 对象,其中包含以下键:english_summary,num_names。请用换行符分隔您的答案。Text:
```{text}```
"""
response = get_completion(prompt_1)
print("prompt 1:")
print(response)
prompt 1:
1-两个兄妹在山上打水时发生意外,但最终平安回家。
2-In a charming village, siblings Jack and Jill set off to fetch water from a well on top of a hill. While singing joyfully, they climbed up, but unfortunately, Jack tripped on a stone and rolled down the hill, with Jill following closely behind. Despite some minor injuries, they made it back to their cozy home. Despite the mishap, their adventurous spirit remained undiminished as they continued to explore with delight.
3-Jack, Jill
4-{"english_summary": "In a charming village, siblings Jack and Jill set off to fetch water from a well on top of a hill. While singing joyfully, they climbed up, but unfortunately, Jack tripped on a stone and rolled down the hill, with Jill following closely behind. Despite some minor injuries, they made it back to their cozy home. Despite the mishap, their adventurous spirit remained undiminished as they continued to explore with delight.", "num_names": 2}

接下来,我们将展示这一策略的效果,通过给定一个复杂任务,提供一系列步骤来完成。首先,我们将描述杰克和吉尔的故事,并给出以下操作的提示词:

  1. 用一句话概括三个反引号限定的文本。
  2. 将摘要翻译成英语。
  3. 在英语摘要中列出每个名称。
  4. 输出包含英语摘要和人名个数的JSON对象,要求使用英语键名,如 “summary” 和 “names_count”。输出内容应以换行符分隔。
prompt_2 = f"""
1-用一句话概括下面用<>括起来的文本。
2-将摘要翻译成英语。
3-在英语摘要中列出每个名称。
4-输出一个 JSON 对象,其中包含以下键:English_summary,num_names。请使用以下格式:
文本:<要总结的文本>
摘要:<摘要>
翻译:<摘要的翻译>
名称:<英语摘要中的名称列表>
输出 JSON:<带有 English_summary 和 num_names 的 JSON>Text: <{text}>
"""
response = get_completion(prompt_2)
print("\nprompt 2:")
print(response)
prompt 2:
Summary: 在一个迷人的村庄里,兄妹杰克和吉尔在山顶井里打水时发生了意外,但他们的冒险精神依然没有减弱,继续充满愉悦地探索。Translation: In a charming village, siblings Jack and Jill set off to fetch water from a well on top of a hill. Unfortunately, Jack tripped on a rock and tumbled down the hill, with Jill following closely behind. Despite some minor injuries, they made it back home safely. Despite the mishap, their adventurous spirit remained strong as they continued to explore joyfully.Names: Jack, JillJSON Output: {"English_summary": "In a charming village, siblings Jack and Jill set off to fetch water from a well on top of a hill. Unfortunately, Jack tripped on a rock and tumbled down the hill, with Jill following closely behind. Despite some minor injuries, they made it back home safely. Despite the mishap, their adventurous spirit remained strong as they continued to explore joyfully.", "num_names": 2}

2.2 指导模型在下结论之前找出一个自己的解法

在设计 Prompt 时,我们还可以通过明确指导语言模型进行自主思考,来获得更好的效果。
举个例子,假设我们要语言模型判断一个数学问题的解答是否正确。仅仅提供问题和解答是不够的,语言模型可能会匆忙做出错误判断。
相反,我们可以在 Prompt 中先要求语言模型自己尝试解决这个问题,思考出自己的解法,然后再与提供的解答进行对比,判断正确性。这种先让语言模型自主思考的方式,能帮助它更深入理解问题,做出更准确的判断。
接下来我们会给出一个问题和一份来自学生的解答,要求模型判断解答是否正确:

prompt = f"""
判断学生的解决方案是否正确。问题:
我正在建造一个太阳能发电站,需要帮助计算财务。土地费用为 100美元/平方英尺我可以以 250美元/平方英尺的价格购买太阳能电池板我已经谈判好了维护合同,每年需要支付固定的10万美元,并额外支付每平方英尺10美元作为平方英尺数的函数,首年运营的总费用是多少。学生的解决方案:
设x为发电站的大小,单位为平方英尺。
费用:土地费用:100x太阳能电池板费用:250x维护费用:100,000美元+100x总费用:100x+250x+100,000美元+100x=450x+100,000美元
"""
response = get_completion(prompt)
print(response)
学生的解决方案是正确的。他正确地计算了土地费用、太阳能电池板费用和维护费用,并将它们相加得到了总费用。

但是注意,学生的解决方案实际上是错误的。(维护费用项100x应为10x,总费用450x应为360x
我们可以通过指导模型先自行找出一个解法来解决这个问题。
在接下来这个 Prompt 中,我们要求模型先自行解决这个问题,再根据自己的解法与学生的解法进行对比,从而判断学生的解法是否正确。同时,我们给定了输出的格式要求。通过拆分任务、明确步骤,让模型有更多时间思考,有时可以获得更准确的结果。在这个例子中,学生的答案是错误的,但如果我们没有先让模型自己计算,那么可能会被误导以为学生是正确的。

prompt = f"""
请判断学生的解决方案是否正确,请通过如下步骤解决这个问题:步骤:首先,自己解决问题。然后将您的解决方案与学生的解决方案进行比较,对比计算得到的总费用与学生计算的总费用是否一致,并评估学生的解决方案是否正确。在自己完成问题之前,请勿决定学生的解决方案是否正确。使用以下格式:问题:问题文本学生的解决方案:学生的解决方案文本实际解决方案和步骤:实际解决方案和步骤文本学生计算的总费用:学生计算得到的总费用实际计算的总费用:实际计算出的总费用学生计算的费用和实际计算的费用是否相同:是或否学生的解决方案和实际解决方案是否相同:是或否学生的成绩:正确或不正确问题:我正在建造一个太阳能发电站,需要帮助计算财务。 - 土地费用为每平方英尺100美元- 我可以以每平方英尺250美元的价格购买太阳能电池板- 我已经谈判好了维护合同,每年需要支付固定的10万美元,并额外支付每平方英尺10美元;作为平方英尺数的函数,首年运营的总费用是多少。学生的解决方案:设x为发电站的大小,单位为平方英尺。费用:1. 土地费用:100x美元2. 太阳能电池板费用:250x美元3. 维护费用:100,000+100x=10万美元+10x美元总费用:100x美元+250x美元+10万美元+100x美元=450x+10万美元实际解决方案和步骤:
"""
response = get_completion(prompt)
print(response)
实际解决方案和步骤:1. 土地费用:每平方英尺100美元,所以总费用为100x美元。2. 太阳能电池板费用:每平方英尺250美元,所以总费用为250x美元。3. 维护费用:固定费用为10万美元,额外费用为每平方英尺10美元,所以总费用为10万美元+10x美元。4. 总费用:将上述三项费用相加,得到总费用为100x美元+250x美元+10万美元+10x美元=360x+10万美元。学生计算的总费用:450x+10万美元
实际计算的总费用:360x+10万美元
学生计算的费用和实际计算的费用是否相同:否
学生的解决方案和实际解决方案是否相同:否
学生的成绩:不正确

三、局限性

开发大模型相关应用时请务必铭记:
虚假知识:模型偶尔会生成一些看似真实实则编造的知识
在开发与应用语言模型时,需要注意它们可能生成虚假信息的风险。尽管模型经过大规模预训练,掌握了丰富知识,但它实际上并没有_完全_记住所见的信息,难以准确判断自己的知识边界,可能做出错误推断。若让语言模型描述一个不存在的产品,它可能会自行构造出似是而非的细节。这被称为“幻觉”(Hallucination),是语言模型的一大缺陷。
如下示例展示了大模型的幻觉。我们要求告诉我们华为公司生产的 GT Watch 运动手表 产品的信息,事实上,这个公司是真实存在的,但产品是编造的,而模型一本正经地提供了它编造的知识,而且迷惑性很强。

prompt = f"""
告诉我华为公司生产的GT Watch运动手表的相关信息
"""
response = get_completion(prompt)
print(response)
华为公司生产的GT Watch运动手表是一款智能手表,具有多种功能和特点。以下是相关信息:1. 设计和外观:GT Watch采用圆形表盘设计,具有精致的外观和高质量的材料制造。它有多种颜色和表带选择,可以根据个人喜好进行定制。2. 显示屏:GT Watch配备了1.39英寸的AMOLED显示屏,具有高清分辨率和良好的可视性。用户可以通过触摸屏幕进行操作和导航。3. 运动追踪:GT Watch具有全天候的运动追踪功能,可以监测用户的步数、跑步距离、卡路里消耗和心率等数据。它还支持多种运动模式,如跑步、骑行、游泳等。4. 健康监测:GT Watch可以监测用户的心率、血氧饱和度和睡眠质量等健康指标。它还提供健康建议和提醒,帮助用户保持良好的健康状态。5. 通知和连接:GT Watch可以与用户的手机进行连接,通过蓝牙技术实现通知推送和电话提醒。用户可以在手表上查看短信、电话和社交媒体通知,无需拿出手机。6. 长续航时间:GT Watch具有较长的续航时间,一次充电可以使用数天。它还支持快速充电技术,可以在短时间内充满电。7. 其他功能:GT Watch还具有其他功能,如天气预报、闹钟、计时器、计步器等。它还支持NFC支付和音乐控制等便利功能。总体而言,华为GT Watch是一款功能强大、外观精致的智能运动手表,适合那些注重健康和运动的用户使用。
  • 问题: 语言模型可能生成虚假信息,令人难以分辨真伪,影响应用的可靠性与安全性。
  • 解决方案: 开发者可通过优化Prompt设计降低幻觉发生的可能性,例如先引用原文再解答。目前,相关公司正在研究解决该问题,但需谨慎使用语言模型。
  • 注意事项: 在应用语言模型时,需警惕幻觉信息对应用的影响,采取措施减少幻觉发生的可能性。

http://www.ppmy.cn/news/1359669.html

相关文章

HTML 面试题汇总

HTML 面试题汇总 1. 什么是 <!DOCTYPE>&#xff1f;是否需要在 HTML5 中使用&#xff1f; 参考答案&#xff1a; 它是 HTML 的文档声明&#xff0c;通过它告诉浏览器&#xff0c;使用哪一个 HTML 版本标准解析文档。 在浏览器发展的历史中&#xff0c;HTML 出现过很多个版…

(3)(3.6) 用于OpenTX的Yaapu遥测脚本

文章目录 前言 1 安装和操作 2 参数说明 前言 这是一个开源 LUA 脚本&#xff0c;用于在使用 OpenTX 2.2.3 的 Horus X10、X12、Jumper T16、T18、Radiomaster TX16S、Taranis X9D、X9E、QX7 和 Jumper T12 无线电设备上显示 FrSky 的直通遥测数据(FrSky passthrough telem…

【零基础入门】什么样的人适合学网络安全?该怎么学?

有很多想要转行网络安全或者选择网络安全专业的人在进行决定之前一定会有的问题&#xff1a; 什么样的人适合学习网络安全&#xff1f;我适不适合学习网络安全&#xff1f; 到底什么样的人适合学习网络安全呢&#xff1f;&#xff08;需要什么前提条件呢&#xff09; 开门见山…

基于FPGA的OFDM基带发射机的设计与实现

文章目录 前言一、OFDM描述二、本系统的实现参照 1.IEEE 802.11a协议主要参数2.不同调制方式与速率 3. IFFT映射关系4. IEEE 802.11a物理层规范5. PPDU帧格式三、设计与实现 1.扰码2.卷积编码与删余3.数据交织4.符号调制5.导频插入6.IFFT变换 7.循环前缀&加窗8.训练序列生成…

7-liunx服务器规范

目录 概况liunx日志liunx系统日志syslog函数openlog 可以改变syslog默认输出方式 &#xff0c;进一步结构化 用户信息进程间的关系会话ps命令查看进程关系 系统资源限制改变工作目录和根目录服务器程序后台话 概况 liunx服务器上有很多细节需要注意 &#xff0c;这些细节很重要…

免费搭建个人网盘

免费搭建一个属于个人的网盘。 服务端 详情请参考原网站的服务端下载和安装虚拟磁盘Fuse4Ui可以支持把网盘内容挂载成系统的分区&#xff1b; 挂载工具效果图&#xff1a;应用端应用端的下载 效果图

[CountDownLatch实现等待TcpServer启动完毕后再发射事件]

背景&#xff1a; 有时候&#xff0c;我们希望NettyServer启动时不能说卡住主线程。 也不能说&#xff1a;直接就启动一个线程&#xff0c;不然没办法发射出“服务器启动”这个事件。 这时就可以使用此类执行完毕后&#xff0c;通知下主线程。 1)TcpServer.java package org.e…

shell+cron 实现pgsql数据库本地自动备份

shellcron 实现pgsql本地自动备份 当然可以&#xff01;下面是一个示例的Shell脚本&#xff0c;用于实现PostgreSQL数据库的自动本地备份。脚本会根据你的要求进行定期备份&#xff0c;并保留指定数量的备份文件。 #!/bin/bash# PostgreSQL数据库配置 DB_USER"your_user…

WordPress使用

WordPress功能菜单 仪表盘 可以查看网站基本信息和内容。 文章 用来管理文章内容&#xff0c;分类以及标签。编辑文章以及设置分类标签&#xff0c;分类和标签可以被添加到 外观-菜单 中。 分类名称自定义&#xff1b;别名为网页url链接中的一部分&#xff0c;最好别设置为中文…

R语言【base】——abs(),sqrt():杂项数学函数

Package base version 4.2.0 Description abs(x) 计算 x 的绝对值&#xff0c;sqrt(x) 计算 x 的正平方根。 Usage abs(x) sqrt(x) Arguments 参数【x】&#xff1a;一个数值或复数向量或数组。 Details 这些都是内部泛型原语函数:可以为它们单独定义方法&#xff0c;也可以…

整理了去年的一些运维面试题一

Ingress的yaml文件需要包含哪些&#xff1f; CICD搭建流程&#xff1f; JAVA程序打包工具&#xff1f; 如何检测Linux端口如何通信&#xff1f; k8s集群之间如何通信的&#xff1f; docker组成部分&#xff1f; 20位掩码有多少主机IP&#xff1f; 在linux中四个T的硬盘使用什…

【机器学习】机器学习是什么?

机器学习是一种人工智能领域的技术&#xff0c;旨在使机器能够通过数据和经验来自动学习和改进。它通过构建和训练模型&#xff0c;使机器能够从输入数据中提取规律和模式&#xff0c;并根据这些规律和模式做出预测或者决策。 机器学习的核心思想是让机器通过大量的数据进行学…

QDialog_trial_1

QDialog_trial_1 可视化 UI 设计 版本&#xff1a;Qt 6 目标 字体样式设置、清空按钮 conectSlotsByName 将信号与槽关联复选框 字体颜色设置 单选框&#xff0c;3个 signal 触发同一个 slot 确定、退出按钮 可视化方式生成信号、槽关联 包括 布局管理信号与槽的关联添加资…

隐藏饿了么el-select组件的el-select-dropdown部分,只使用el-select的显示框

隐藏饿了么el-select组件的el-select-dropdown部分,只使用el-select的显示框 问题: 由于el-select组件的el-select-dropdown部分是自动插入在最外层Body上的&#xff0c;所以在当前组件的scoped中让el-select-dropdown组件display:none不会生效所以需要&#xff1a; :popper-…

Vue(学习笔记)

什么是Vue Vue是一套构建用户界面的渐进式框架 构建用户界面&#xff1a; 基于数据渲染出用户可以看到的界面 渐进式&#xff1a; 所谓渐进式就是循序渐进&#xff0c;不一定非得把Vue中的所有API都学完才能开发Vue&#xff0c;可以学一点开发一点 创建Vue实例 比如就上面…

左右互博。

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 讨厌鬼在和小甜妹在玩石头游戏。 游戏一开始有 nnn 堆石子&#xff0c;第 iii 堆石子&#xff0c;有 aia_iai​ 个石子。两人轮流进行游戏。 轮到某个人时&#xff0c;这个人先选数量为 x(x&…

Android 系统定位和高德定位

文章目录 Android 系统定位和高德定位系统定位工具类封装LocationManager使用 高德定位封装高德地图使用 Android 系统定位和高德定位 系统定位 工具类 public class LocationUtils {public static final int REQUEST_LOCATION 0xa1;/*** 判断定位服务是否开启*/public sta…

K8S—Pod详解

目录 一 Pod基础概念 1.1 Pod是什么 1.2 为什么要使用Pod&#xff1f;Pod在K8S集群中的使用方式&#xff1f; 1.3 基础容器pause 二 Pod的分类 2.1 自主式Pod和控制器管理的Pod 2.2 容器的分类 2.2.1 基础容器&#xff08;infrastructure container&#xff09; 2.2.2…

冬眠...

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 阿宁生活在一个 nnn 行 mmm 列的字符矩阵中&#xff0c;阿宁打算在第 xxx 行 yyy 列冬眠。 在每一天&#xff0c;都会有 qqq 次行循环移动或列循环移动。 如果是第 zzz 行循环移动&#xff0c;…

磨砂玻璃(毛玻璃)风格的登录页,怎么就流行起来了呢?

拟物风格之后是扁平风格&#xff0c;扁平风格之后是拟态风格&#xff0c;而毛玻璃风格是拟态风格的一种表现形式&#xff0c;如今非常流行了&#xff0c;背后的原因是什么&#xff1f;贝格前端工场为大家详细分析下。 UI风格先后经历了拟物、扁平和拟态三大类&#xff0c;分别…
最新文章