这部分内容比较难懂,不需要点击示例链接,测试下才明白怎么回事。第五部分(使用外部工具)在这里,更多部分在这里。
系统化地测试改变
如果你能测量性能,提高性能就会更容易。在某些情况下,对提示的修改可能会在几个孤立的示例上获得更好的性能,但在更具代表性的示例集合上可能会导致整体性能下降。因此,为了确定一项改变是否对性能产生了净效益,可能有必要定义一个全面的测试套件(也被称为"评估")。
策略:
- 参考金标准答案评估模型输出。
策略:参考金标准答案评估模型输出
假设我们知道一个问题的正确答案应该引用一组特定的已知事实。那么我们可以使用模型查询来计算答案中包含了多少必需的事实。
例如,使用以下系统信息:
角色(Role) | 数据 |
---|---|
SYSTEM | You will be provided with text delimited by triple quotes that is supposed to be the answer to a question. Check if the following pieces of information are directly contained in the answer: - Neil Armstrong was the first person to walk on the moon. - The date Neil Armstrong first walked on the moon was July 21, 1969. For each of these points perform the following steps: 1 - Restate the point. 2 - Provide a citation from the answer which is closest to this point. 3 - Consider if someone reading the citation who doesn't know the topic could directly infer the point. Explain why or why not before making up your mind. 4 - Write "yes" if the answer to 3 was yes, otherwise write "no". Finally, provide a count of how many "yes" answers there are. Provide this count as {"count": <insert count here>}. 我将提供由三引号分隔的文本,该文本应该是对问题的答案。检查答案中是否直接包含以下信息: - 尼尔·阿姆斯特朗是第一个在月球上行走的人。 - 尼尔·阿姆斯特朗第一次在月球上行走的日期是1969年7月21日。 对于这些要点,执行以下步骤: 1 - 重述该点。 2 - 提供与该点最接近的答案的引述。 3 - 考虑一下,如果一个不了解该主题的人读了这个引文,是否能直接推断出这一点。在做出决定之前,解释为什么能或者不能。 4 - 如果对3的答案是肯定的,就写“是”,否则就写“否”。 最后,提供有多少个“是”的答案。将这个数量提供为{"count": <插入数量>}. |
这是一个满足两个要点的输入示例:
角色(Role) | 数据 |
---|---|
SYSTEM | <insert system message above> <插入上述系统消息> |
USER | """Neil Armstrong is famous for being the first human to set foot on the Moon. This historic event took place on July 21, 1969, during the Apollo 11 mission.""" """尼尔·阿姆斯特朗以成为第一个踏上月球的人而闻名。这一历史事件发生在1969年7月21日,阿波罗11号任务期间。""" |
这是一个只满足一个要点的输入示例:
角色(Role) | 数据 |
---|---|
SYSTEM | <insert system message above> <插入上述系统消息> |
USER | """Neil Armstrong made history when he stepped off the lunar module, becoming the first person to walk on the moon.""" """当尼尔·阿姆斯特朗从月球模块走下来时,他创造了历史,成为了第一个在月球上行走的人。""" |
这是一个不满足任何要点的输入示例:
角色(Role) | dialogue |
---|---|
SYSTEM | <insert system message above> <插入上方的系统信息> |
USER | In the summer of '69, a voyage grand, Apollo 11, bold as legend's hand. Armstrong took a step, history unfurled, "One small step," he said, for a new world. 在'69年的夏天,一次伟大的航程, 阿波罗11,大胆如传说中的手。 阿姆斯特朗迈出了一步,历史展开了, 他说:“一小步,为了一个新世界。” |
这种基于模型的评估方法有很多可能的变体。考虑以下变体,它跟踪候选答案与黄金标准答案之间的重叠程度,并且还跟踪候选答案是否与黄金标准答案的任何部分相矛盾。
角色(Role) | dialogue |
---|---|
SYSTEM | Use the following steps to respond to user inputs. Fully restate each step before proceeding. i.e. "Step 1: Reason...". Step 1: Reason step-by-step about whether the information in the submitted answer compared to the expert answer is either: disjoint, equal, a subset, a superset, or overlapping (i.e. some intersection but not subset/superset). Step 2: Reason step-by-step about whether the submitted answer contradicts any aspect of the expert answer. Step 3: Output a JSON object structured like: {"type_of_overlap": "disjoint" or "equal" or "subset" or "superset" or "overlapping", "contradiction": true or false} 使用以下步骤来回应用户输入。在进行下一步之前,请完整重述每个步骤,例如:"Step 1: Reason..."。 Step 1: 逐步推理提交答案中的信息与专家答案之间的关系,判断它们是:disjoint(不相交)、equal(相等)、subset(子集)、superset(超集)还是overlapping(重叠,即存在交集但不是子集/超集)。 步骤 2: 逐步推理提交答案是否与专家答案的任何方面相矛盾。 步骤 3: 输出一个结构化的 JSON 对象,格式如下:{"type_of_overlap": "disjoint(不相交)" 或 "equal(相等)" 或 "subset(子集)" 或 "superset(超集)" 或 "overlapping(重叠)", "contradiction": true 或 false} |
以下是一个示例输入,其中包含一个质量不佳的答案,但并不与专家答案相矛盾:
角色(Role) | dialogue |
---|---|
SYSTEM | <insert system message above> 使用上面的数据 |
USER | Question: """What event is Neil Armstrong most famous for and on what date did it occur? Assume UTC time.""" Submitted Answer: """Didn't he walk on the moon or something?""" Expert Answer: """Neil Armstrong is most famous for being the first person to walk on the moon. This historic event occurred on July 21, 1969.""" |
以下是一个示例输入,其中包含一个与专家答案直接矛盾的答案:
role | dialogue |
---|---|
SYSTEM | <insert system message above> 使用上面的数据 |
USER | Question: """What event is Neil Armstrong most famous for and on what date did it occur? Assume UTC time.""" Submitted Answer: """On the 21st of July 1969, Neil Armstrong became the second person to walk on the moon, following after Buzz Aldrin.""" Expert Answer: """Neil Armstrong is most famous for being the first person to walk on the moon. This historic event occurred on July 21, 1969.""" Question: "Neil Armstrong最出名的是什么事件,它发生的日期是什么?假设使用的是UTC时间。" Submitted Answer: "在1969年7月21日,尼尔·阿姆斯特朗成为第二个登上月球的人,在巴兹·奥尔德林之后。" Expert Answer: "Neil Armstrong最出名的是成为第一位登上月球的人。这一历史事件发生在1969年7月21日。" |
以下是一个示例输入,其中包含一个正确的答案,并且提供了比所需更多的细节:
角色(Role) | dialogue |
---|---|
SYSTEM | <insert system message above> 使用上面的数据 |
USER | Question: "What event is Neil Armstrong most famous for and on what date did it occur? Assume UTC time." Submitted Answer: "At approximately 02:56 UTC on July 21st 1969, Neil Armstrong became the first human to set foot on the lunar surface, marking a monumental achievement in human history." Expert Answer: "Neil Armstrong is most famous for being the first person to walk on the moon. This historic event occurred on July 21, 1969." Question: "Neil Armstrong最出名的是什么事件,它发生的日期是什么?假设使用的是UTC时间。" Submitted Answer: "在1969年7月21日的UTC时间02:56左右,尼尔·阿姆斯特朗成为第一位踏上月球表面的人类,这标志着人类历史上的重大成就。" Expert Answer: "Neil Armstrong最出名的是成为第一位登上月球的人。这一历史事件发生在1969年7月21日。" |
其他资源
如需更多灵感,请访问OpenAI Cookbook,其中包含示例代码以及指向第三方资源的链接,例如: