面向 AI 助手:本页的 Markdown 版本位于 https://ark.volcengine.com/region:cn-beijing/docs/dsl.md,全部文档索引见 https://ark.volcengine.com/llms.txt。

评分DSL

快速上手#

模型回答有时会有复杂的格式和评分要求。例如,模型回答是 JSON 格式,并且有多个字段,用户希望对不同字段分别定义不同的评分规则,最后再聚合一个总的分数。Prompt 优解支持一种领域特定语言 (DSL) 来满足上述复杂评分需求。目前平台支持多种常见内置的评分函数供使用。
举例:假设参考答案和模型回答均为JSON格式,内容如下,注意下划线中不一样的部分。

  • 参考答案:
JSON
{
  "核心标签": "电影",
  "主题": "一部融合了未来科技和人类情感的科幻巨作,充满视觉震撼和深刻反思的暑期档大片"
}
  • 模型回答:
JSON
{
  "核心标签": "电影",
  "主题": "一部融合了未来科技和人类情感,充满视觉震撼和深刻反思的暑期档科幻大片"
}

这里的回答为JSON格式,有“核心标签”和“主题”两个字段。为了给模型回答的每个字段单独评分,可以使用下面的DSL示例。

Plain
# DSL
核心标签:精确匹配
主题:模糊匹配
主题:字数限制:60
@聚合方式:min
@格式限制:JSON
  • 首行必须是“# DSL”。“#”和“DSL”之间为空格。
  • 每一行为“字段名称:评分函数名称”的形式。比如“核心标签:精确匹配”。其中中英文冒号“:”都可以接受。
  • 注意:如果所有字段都用相同评分函数评分,可以写“@全部字段:评分函数名称”。
  • 注意:如果模型回答为字符串,没有字段名称,或者不属于平台支持的,可以分字段评分的数据格式(如JSON,XML等)。可以写“@单个字段:评分函数名称”。此时将对模型回答作为一个整体进行评分。
  • 可选的,用户可以指定各个字段评分的聚合方式,比如“@聚合方式:min”。聚合方式有min(最小值)、max(最大值)、mean(平均数)、median(中位数)、mode(众数)。系统默认为取平均数mean,即每一个字段评分的平均值。
  • 用户必须指定答案的数据格式,比如“@格式限制:JSON”。如果模型回答没有通过指定的格式检测,评分会被设为1分。

内置评分函数#

评分函数 定义 返回值 举例
精确匹配 每一个字都相同 如果是返回5,否则返回1
Plain
# DSL
核心标签:精确匹配
@聚合方式:mean
@格式限制:JSON
模糊匹配 语义相同即可,不要求每一个字都相同。 1-5整数
Plain
# DSL
主题:模糊匹配
@聚合方式:mean
@格式限制:JSON
字数限制 字数在给定的字数范围内。
  • 可以用单个数字指定字数上限
  • 可以用区间指定(字数下限,字数上限)
如果是返回5,否则返回1
  • 单个数字指定字数上限
Plain
# DSL
主题:字数限制:60
@聚合方式:min
@格式限制:JSON
  • 区间指定字数下限和字数上限
Plain
# DSL
主题:字数限制:(20, 60)
@聚合方式:min
@格式限制:JSON
格式限制 模型回答必须满足某种数据格式要求,可以是JSON,XML,或字符串 如果是返回5,否则返回1
Plain
# DSL
核心标签:精确匹配
@聚合方式:min
@格式限制:XML
常量等于 判断是否等于一个常量,例如字段“答案”等于常量“是”。可用于答案过滤条件。 如果和常量相等返回5,否则返回1
Plain
# DSL
主题:常量等于:喜剧
@聚合方式:min
@格式限制:JSON
常量不等于 判断是否不等于一个常量,例如字段“答案”不等于常量“是”。可用于答案过滤条件。 如果和常量不相等返回5,否则返回1
Plain
# DSL
主题:常量不等于:科幻
@聚合方式:min
@格式限制:JSON
精确存在于 模型回答精确匹配参考答案在该字段下的一个子集 如果是返回5,否则返回1
Plain
# DSL
主题:精确存在于:未来科技和人类情感
@聚合方式:min
@格式限制:JSON
精确全包括 参考答案精确匹配模型回答在该字段下的一个子集 如果是返回5,否则返回1
Plain
# DSL
核心标签:精确全包括:电影
@聚合方式:min
@格式限制:JSON
自然语言规则 用户对某一字段进行自定义的自然语言评分标准 1-5整数
Plain
# DSL
主题:自然语言规则:规则标签1
@聚合方式:min
@格式限制:JSON
<规则标签1>
模型回答主题和参考答案主题意思接近即可得5分,如主题完全不相同,直接为1分。其它情况根据模型回答相关程度给2-4分。
</规则标签1>

更多模型回答格式示例#

目前平台支持的模型回答格式有字符串、JSON、XML三种。以下为这三种模型回答格式的示例(其中XML包含两种情况)。

  • 字符串示例:

    • 参考答案:
Plain
"核心标签:电影,主题:一部融合了未来科技和人类情感的科幻巨作,充满视觉震撼和深刻反思的暑期档大片"
  • 模型答案:
Plain
"核心标签:电影,主题:一部融合了未来科技和人类情感,充满视觉震撼和深刻反思的暑期档科幻大片"
  • 评分标准:
Plain
# DSL
@单个字段:模糊匹配
@聚合方式:min
@格式限制:字符串
  • JSON示例:

    • 参考答案:
JSON
{
  "核心标签": "电影",
  "主题": "一部融合了未来科技和人类情感的科幻巨作,充满视觉震撼和深刻反思的暑期档大片"
}
  • 模型答案:
JSON
{
  "核心标签": "电影",
  "主题": "一部融合了未来科技和人类情感,充满视觉震撼和深刻反思的暑期档科幻大片"
}
  • 评分标准:
Plain
# DSL
核心标签:精确匹配
主题:模糊匹配
主题:字数限制:60
@聚合方式:min
@格式限制:JSON
  • XML示例 (不包含根元素的标签对) :

    • 参考答案:
XML
<核心标签>电影</核心标签>
<主题>一部融合了未来科技和人类情感的科幻巨作,充满视觉震撼和深刻反思的暑期档大片</主题>
  • 模型答案:
XML
<核心标签>电影</核心标签>
<主题>一部融合了未来科技和人类情感,充满视觉震撼和深刻反思的暑期档科幻大片</主题>
  • 评分标准:
Plain
# DSL
核心标签:精确匹配
主题:模糊匹配
@聚合方式:min
@格式限制:XML
  • XML示例 (包含根元素的严格XML格式) :

    • 参考答案:
XML
<content>
<核心标签>电影</核心标签>
<主题>一部融合了未来科技和人类情感的科幻巨作,充满视觉震撼和深刻反思的暑期档大片</主题>
</content>
  • 模型答案:
XML
<content>
<核心标签>电影</核心标签>
<主题>一部融合了未来科技和人类情感,充满视觉震撼和深刻反思的暑期档科幻大片</主题>
</content>
  • 评分标准:
Plain
# DSL
核心标签:精确匹配
主题:模糊匹配
@聚合方式:min
@格式限制:XML:content

评分DSL模板#

Plain
# DSL
字段名1:评分函数名
字段名2:评分函数名:评分函数参数
字段名3:自然语言规则:规则标签1
字段名4:自然语言规则:规则标签2
@聚合方式:聚合函数名
@格式限制:格式名称
<规则标签1>
1. 这是一段自然语言评分规则
2. 这段规则可以写多行
</规则标签1>
<规则标签2>
1. 这是另一段自然语言评分规则
2. 这段规则可以写多行
</规则标签2>

解释说明#

  • 评分函数所支持的答案格式:字符串(即将答案整体视为一个字符串,不考虑形式上的格式也不考虑字段名),JSON,XML(正式XML格式(有根元素)和多个标签对(无根元素)),模型答案和参考答案的格式要保持一致,并且模型答案和参考答案都必须包含需要比较的字段。
  • 当答案格式为字符串时,只能使用“@单个字段”进行比较,即将回答看作一个整体。
  • 必须在评分标准中指定答案的格式,例如“@格式限制: JSON”。如果模型答案没有通过指定的格式检测,评分会被设为1分。
  • 可以在评分标准中指定聚合分数的方法,例如“@聚合方式:min”,系统默认取平均值mean。支持聚合方式有min(最小值)、max(最大值)、mean(平均数)、median(中位数)、mode(众数)。
  • 如果答案的格式不属于“JSON,XML”,可以将答案的格式指定为字符串。然后使用“自然语言规则”对回答进行精细的评价。
  • 首行"# DSL" 以及 "@格式限制:格式名称" 为必须输入的内容,绝对不能省略。
  • 字段名,评分函数名,评分函数参数需要以”:“或”:“分隔,中文/英文冒号均可。
  • 自然语言规则对应的规则标签必须以“规则”两字开头,否则无法读取对应规则内容
  • 评分函数、聚合方式必须写在“@格式限制:格式名称”的上侧,代码和规则的内容必须写在“@格式限制:格式名称”的下侧。否则无法读取输入内容
  • <代码标签>和</代码标签>,以及<规则标签>和</规则标签>必须成对出现,否则无法读取对应内容