模型输出的评估可以由计算机、人类或两者的组合来完成。计算机可以用客观标准(如只有单一正确答案的问题)自动进行测评,也可以用其他模型查询对一些主观或模糊标准进行测评。OpenAI Evals是一个开源软件框架,提供了创建自动化测评的工具。 对于输出范围广泛且同等高质量的问题(如需要长答案的问题),基于模型的测评可发挥作用。模型测评与需要人工评估的问题界限模糊,随着模型变得越来越强大而不断扩展。我们鼓励您进行试验,了解基于模型的测评对您的用例能发挥多大作用。 技巧:
2.技巧深入上述每种策略都可以用具体的技巧来实现。这些技巧旨在提供思路,绝非面面俱到,您应随意尝试这里未涉及的创造性思路。 2.1 策略一:清晰地表达指令技巧:在查询中包含更多细节以获取更相关的回答为了获得高度相关的回复,查询需要提供任何重要的细节或上下文信息,否则就要由模型猜测您的意图。
技巧:要求模型采用特定的角色系统消息可用于指定模型在回复时采用的角色。 技巧:使用分隔符清楚地指示输入的不同部分三引号、XML标签、标题等分隔符可以帮助标记需不同对待的文本片段。 对于简单的任务,使用分隔符可能不会影响输出质量。然而,任务越复杂,明确任务细节就越重要。不要让 GPT 模型费劲理解您到底在要求什么。 技巧:指定完成任务所需的步骤有些任务最好用一系列步骤来表达。明确写出步骤可以让模型更容易遵循。 技巧:提供示例在所有示例上演示任务的各种变化通常比仅给出说明更高效,但在某些情况下提供示例可能更简单。例如,如果您希望模型模仿回复用户查询的特定风格,而这种风格难以明确表达。这被称为 “few-shot” 提示。 技巧:指定期望的输出长度您可以要求模型生成特定目标长度的输出。目标输出长度可以以单词数、句子数、段落数、项目符号数等来指定。但是,指示模型生成特定数量的单词不能高精度实现。模型可以更可靠地生成特定段落数或项目符号数的输出。 2.2 策略二:提供参考文本技巧:指示模型使用提供的参考文本进行回答如果我们能为模型提供与当前查询相关的可信信息,那么我们可以指示模型使用提供的信息来组成其回答。 鉴于 GPT 模型具有有限的上下文窗口,为了应用此技巧,我们需要某种方法根据问题动态查找相关信息并添加到模型输入中。嵌入可用于实现高效的知识检索。请参阅技巧“使用基于嵌入的搜索实现高效知识检索”以获取更多详细信息。 技巧:指示模型使用参考文本中的引文进行回答如果输入补充了相关知识,则可以轻松要求模型在答案中添加引文,引用提供文档的相关段落。输出中的引文然后可以通过与提供文档的字符串匹配来程序化验证。 2.3 策略三:将复杂任务分解为更简单的子任务技巧:使用意图分类识别与用户查询最相关的指令对于需要大量独立指令集来处理不同情况的任务,首先对查询进行分类以确定所需指令会很有益。这可以通过定义固定类别并针对每个类别硬编码相关指令来实现。该过程也可以递归应用以将任务分解成一系列阶段。这种方法的优点是每个查询只包含执行任务下一阶段所需的指令,这可以与使用单个查询执行整个任务相比降低错误率。这也可以降低成本,因为更大的提示需要更高的运行成本(查看价格信息)。 例如,对于客户服务应用,查询可以划分为以下类别: 根据客户查询的分类,可以为 GPT 模型提供更具体的指令来处理后续步骤。例如,假设客户需要“故障排除”的帮助。 注意,模型被指示在对话状态发生变化时输出特殊字符串。这使我们可以将系统转化为状态机,其中状态确定注入哪些指令。通过跟踪状态、该状态下相关的指令,以及从该状态允许的状态转移,我们可以为用户体验设置更难以用不太结构化的方法实现的约束。 技巧:对需要非常长对话的对话应用,汇总或过滤之前的对话由于 GPT 模型具有固定的上下文长度,因此将整个对话包含在上下文窗口内的用户与助手之间的对话无法无限期地继续。 这一问题有多种解决方法,一种是在输入大小达到预定阈值长度时,使用一个查询来总结对话的一部分,并将之前对话的摘要包含在系统消息中。或者,可以在整个对话的过程中异步地在后台总结之前的对话。 另一种解决方案是动态选择与当前查询最相关的之前对话部分。请参阅技巧“使用基于嵌入的搜索实现高效知识检索”。 技巧:分段摘要长文档,递归构建完整摘要由于 GPT 模型具有固定的上下文长度,它们无法在单个查询中概括比上下文长度减去生成摘要长度还要长的文本。 要摘要像书籍这样的非常长文档,我们可以使用一系列查询逐部分摘要文档。部分摘要可以连接在一起生成摘要的摘要。该过程可以递归进行,直到整个文档被摘要。如果为了理解后面部分需要使用前面部分的信息,则可以在摘要某点内容时,将该点之前文本的运行摘要也包括在内,这一技巧也很有用。OpenAI 之前的研究已经研究了使用 GPT-3 变体递归摘要书籍的效果。 2.4 策略四:给予 GPT“思考”的时间技巧:指示模型在匆忙得出结论之前自己推导出解决方案有时候明确地让模型先自行推理出答案再回复用户,可以获得更好的效果。 例如,我们想让模型评判一个学生对数学问题的解答。最直接的方法是简单地询问模型该解答是否正确。 但如果我们首先让模型自己解出题目并生成答案,再让其比较学生的答案,就更容易发现问题: 技巧:使用内心独白或一系列查询来隐藏模型的推理过程有时候我们不想让用户看到模型的全部推理过程,只需要展示最后的回复。 这时可以使用"内心独白"把需要隐藏的部分放入特定格式中,在展示给用户前把这些部分删除。 或者,可以进行一系列查询,其中只有最后一个查询的输出会展示给用户。 技巧:在前几轮后询问模型是否遗漏了相关信息当我们要求模型列举某文本中的所有相关摘录时,模型常会过早停止而未罗列全部。 这时可以在前几轮查询后,再询问模型是否还遗漏了相关内容,以获取更完整的结果。 2.5 策略:使用外部工具技巧:使用基于嵌入的搜索实现高效的知识检索我们可以在模型的输入中加入相关的外部信息,帮助其生成更准确的回复。 例如,如果用户询问一个具体的电影,将该电影的高质量信息(演员、导演等)也加入输入中会很有用。 通过使用文本嵌入可以实现高效的知识检索,从而动态地在运行时将相关信息加入模型输入中。 具体实现可以参考 OpenAI Cookbook。 技巧:使用代码执行进行更精确的计算或调用外部 APIGPT 模型自己进行算术运算或长时间计算时误差很大。这时可以让其编写代码进行运算并运行。 代码执行也可以用来调用外部 API。如果事先教会模型如何使用某 API,它可以编写调用该 API 的代码。 需要注意,运行模型生成的代码有安全风险,需要采取防护措施。 技巧:系统地测试各种改变有时候很难判断某项改变是否提升了系统性能。仅观察几个例子来判断是不可靠的。 适当的评估流程对优化系统设计非常有用。好的评估应该具有代表性、包含足够多的测试用例。 评估可以由计算机、人工或两者混合来进行。计算机可以自动进行客观的评估。OpenAI Evals 提供了用于构建自动评估的开源工具。 当存在多种可被认为同等优质的输出时,使用模型进行评估也可行。我们鼓励针对不同使用案例进行试验,衡量模型评估的可行性。 技巧:参照标准答案来评估模型输出如果问题的正确答案需要包含某些已知的事实,我们可以用模型查询来统计答案中包含了多少需要的事实。 例如: 如果答案满足所有要点,count 将为要点的总数。如果仅满足部分要点,count 将小于要点总数。 这样可以构建不同的模型评估变体来统计答案与标准答案的重合情况,以及是否存在矛盾。 更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。
https://github.com/EmbraceAGI/LangGPT/tree/main https://github.com/EmbraceAGI/LangGPT/blob/main/Docs/GPTBestPractise.md | |||||||||||||||||||||