任务配置格式 - opendatalab/LabelLLM GitHub Wiki

类型定义

Config

interface Config {
  /** 分发次数:一条对话数据需要标注几次 */
  questionnaire_type: any; 
  /** 针对整个对话的配置 */
  conversation: {
    questions: Question[];
  };
  /** 针对每条回复的配置 */
  message: {
    questions: Question[];
    /** 是否对所有回复排序 */
    is_sortable: boolean;
    /*
    ** 序号是否可重复,默认不可重复
    ** @default true
    */
    is_sn_unique: boolean;
  };
  /** 针对每个提问的配置 */
  question: {
    questions: Question[];
  };
}

Question

interface ConditionContent {
  /** 依赖的题目的值 */
  field: string;
  /** 依赖的题目的选项的值 */
  value: string;
  /** 关联的题目id */
  question_id: string;
  /** 关联的选项id */
  option_id: string;
  /** 运算符 eq 等于;neq 不等于;in 包含;nin 不包含 */
  operator: 'eq' | 'neq' | 'in' | 'nin';
}

interface ConditionItem {
  connector: 'and' | 'or';
  items: ConditionContent[];
  children?: ConditionItem[];
}

interface Qustion {
  id: string;
  /** string 为填空题,enum 为单选题,array 为多选题 */
  type: 'string' | 'enum' | 'array';
  /** 题目内容 */
  label: string;
  /** 题目的值 */
  value: string;
  /** 题目的选项,当type为string是可为空 */
  options?: {
    /** 选项内容 */
    label: string;
    /** 选项的值 */
    value: string;
    /** 选项的 id,添加和删除题目选项时的唯一标示 */
    id: string;
    /** 是否默认选中 */
    is_default?: boolean;
  }[];
  /** 填空的最大长度, */
  max_length?: number;
  /** 是否预览默认展开 */
  is_preview_expanded?: boolean;
  /** 是否可上传附件 */
  is_upload_available?: boolean;
  /** 填空的默认值 */
  default_value?: string;
  /** 是否必填 */
  required?: boolean;
  /** 题目可见性条件,有条件存在时,默认不可见,当条件满足时才可见 */
  conditions?: ConditionItem[];
}

任务配置数据样例

1. 问题类型

// 问题基本结构,具体结构请参考后续的内容
{
  "label": "dasdweqwe", // 问题的内容
  "value": "22", // 最终导出的问题结果的字段名称
  "type": "enum", // 问题类型
  "id": "_gbcft1px8",
  "options": [
    {
      "label": "213", // 显示的选项名称
      "value": "44", // 最终导出的选项的字段名称
      "id": "_xmybap65b" // 对选项编辑时产生的唯一标识
    },
    {
      "label": "1235", // 显示的选项名称
      "value": "332", // 最终导出的选项的字段名称
      "id": "_rhrrg1xoy" // 对选项编辑时产生的唯一标识
    }
  ]
}

// 单选题
{
  "label": "dasdweqwe", // 问题的内容
  "value": "22", // 最终导出的问题结果的字段名称
  "type": "enum", // 问题类型
  "id": "_gbcft1px8",
  "options": [
    {
      "label": "213", // 显示的选项名称
      "value": "44", // 最终导出的选项的字段名称
      "id": "_xmybap65b" // 对选项编辑时产生的唯一标识
    },
    {
      "label": "1235", // 显示的选项名称
      "value": "332", // 最终导出的选项的字段名称
      "id": "_rhrrg1xoy" // 对选项编辑时产生的唯一标识
    }
  ]
}

// 多选题
{
  "label": "dasdweqwe", // 问题的内容
  "value": "22", // 最终导出的问题结果的字段名称
  "type": "array", // 问题类型
  "id": "_gbcft1px8",
  "options": [
    {
      "label": "213", // 显示的选项名称
      "value": "44", // 最终导出的选项的字段名称
      "id": "_xmybap65b" // 对选项编辑时产生的唯一标识
    },
    {
      "label": "1235", // 显示的选项名称
      "value": "332", // 最终导出的选项的字段名称
      "id": "_rhrrg1xoy" // 对选项编辑时产生的唯一标识
    }
  ]
}

// 填空题
{
  "label": "其他错误",
  "value": "else-reason",
  "type": "string",
  "max_length": 1000,
  "default_value": "",
  "id": "_7jpgyc0pa",
  "conditions": [
    {
      "field": "reason",
      "value": "else-error",
      "question_id": "_gbcft1px8",
      "option_id": "_rhrrg1xoy"
    },
    {
     "field": "reason",
      "value": "else-error",
      "question_id": "_gbcft1px8",
      "option_id": "_rhrrg1xoy"
    }
  ]
}

2. JSON样例

{
  "conversation": {
    "questions": [
      {
        "label": "选择题1",
        "value": "1",
        "type": "enum",
        "required": true,
        "options": [
          {
            "label": "选择1-1",
            "value": "1-1",
            "id": "_6lg367typ"
          },
          {
            "label": "选择1-2",
            "value": "1-2",
            "id": "_0dxygwgl9"
          }
        ],
        "id": "_d1pmfvpb9"
      },
      {
        "label": "选择题2-多选",
        "value": "2",
        "type": "array",
        "required": true,
        "options": [
          {
            "label": "选择2-1",
            "value": "2-1",
            "id": "_8hg02slwq"
          },
          {
            "label": "选项2-2",
            "value": "2-2",
            "id": "_acdb5ukxj"
          }
        ],
        "id": "_8s9sbfzs3",
        "conditions": [
          {
            connector: 'or',
            items: [{
              "value": "1-1",
              "field": "1",
              "option_id": "_6lg367typ",
              "question_id": "_d1pmfvpb9",
              "operator": "eq"
            }],
            children: []
          }
        ]
      },
      {
        "label": "输入框",
        "value": "3",
        "type": "string",
        "required": true,
        "default_value": "",
        "id": "_k0p3nrkef",
        "conditions": [
          {
            connector: 'or',
            items: [{
              "value": "2-1",
              "field": "2",
              "option_id": "_8hg02slwq",
              "question_id": "_8s9sbfzs3"
              "operator": "in"
            }],
            children: []
          }
        ]
      }
    ]
  },
  "message": {
    "questions": [],
    "is_sortable": false,
    "is_sn_unique": true
  }
}

3. 说明

image

3.1 条件设置

  1. conditions 中每个条目里的field对应上一级question中的value;value 对应 question 中的value;这个 condition 意为: 当选项中的「选择题2-多选」选中 「选择2-1」时,「输入框」方可显示;
  2. conditions中每个条目里的 option_id 和 question_id 的作用是,当条件中关联的题目或者选项发生变更(删除或修改字段名)时,与之关联的条件也同步更新。

3.2 针对每条回复和对话

  1. 两者的问题配置结构一致。

3.2.1 示例:对多个答案评估&排序

界面图

image

配置json

{
  "config": {
    "expire_time": 600,
    "questionnaire_type": "Judge",
    "distribute_num": 3,
    "conversation": {
      "questions": []
    },
    "message": {
      "questions": [
        {
          "label": "以上言论是否符合以下选项",
          "value": "1",
          "type": "enum",
          "required": true,
          "options": [
            {
              "label": "选项1",
              "value": "choice1",
              "id": "_6lg367typ"
            },
            {
              "label": "选项2",
              "value": "choice2",
              "id": "_0dxygwgl9"
            },
            {
              "label": "选项3",
              "value": "choice3",
              "id": "_2lceqgl1"
            }
          ],
          "id": "_d1pmfvpb9"
        }
      ],
      "is_sortable": true,
      "is_sn_unique": true
    }
  }
}

输出格式

// 标注提交的数据
{    
    // 针对单挑消息的评价
    "message_evaluation": {
        [messageId]: {
            [Qustion.value]: '123'
        },
        [messageId2]: {
            [Qustion.value]: 'abc'
        }
    },
    // 针对整个对话的评价
    "conversation_evaluation": {
         [Qustion.value]: '123'
    },
    // 针对整个问卷的评价
    "questionnaire_evaluation": {
        is_invalid_questionnaire: boolean
    }
}