觅食的羊
Published on 2024-12-12 / 54 Visits
0
0

使用dify 做个模拟面试的AI

生成的问题和过程还不是很详细,仅作抛砖引玉,最终结果以json 输出则可以通过api调用集成到应用中

效果如下

DSL如下


app:

  description: 分别要求用户输入简历、要面试的公司和招聘的岗位信息,系统会分析简历和岗位信息计算匹配程度,然后生成面试的问题,用户输入完答案后AI给出评分和点评

  icon: 🤖

  icon_background: '#FFEAD5'

  mode: advanced-chat

  name: 基于流程的模拟面试

  use_icon_as_answer_icon: false

kind: app

version: 0.1.4

workflow:

  conversation_variables:

  - description: 岗位匹配得分

    id: a48dc04c-d7b8-46d9-81e1-270fe8538ae3

    name: score

    selector:

    - conversation

    - score

    value: 0

    value_type: number

  - description: 问题的回答

    id: 35ef5880-8f55-46d2-9f0f-6525c4fc115c

    name: answers

    selector:

    - conversation

    - answers

    value:

    - {}

    value_type: array[object]

  - description: 当前问题索引

    id: 2128a6e0-bca9-4370-99b5-784281e6f20d

    name: qindex

    selector:

    - conversation

    - qindex

    value: 0

    value_type: number

  - description: AI生成的问题

    id: 79d662a8-848e-4ff2-ba37-28d540e1bb6f

    name: questions

    selector:

    - conversation

    - questions

    value: []

    value_type: array[object]

  - description: 工作岗位

    id: e5b1c8e7-11c6-43a8-b5c7-197857db0838

    name: job

    selector:

    - conversation

    - job

    value: ''

    value_type: string

  - description: 公司

    id: 12f8df48-d0fd-458b-8ba1-3a2d2fa94d3b

    name: company

    selector:

    - conversation

    - company

    value: ''

    value_type: string

  - description: '简历

      '

    id: d17793e5-fc23-46ff-b101-5d4d612fb20e

    name: resume

    selector:

    - conversation

    - resume

    value: ''

    value_type: string

  environment_variables: []

  features:

    file_upload:

      allowed_file_extensions:

      - .JPG

      - .JPEG

      - .PNG

      - .GIF

      - .WEBP

      - .SVG

      allowed_file_types:

      - image

      allowed_file_upload_methods:

      - local_file

      - remote_url

      enabled: false

      fileUploadConfig:

        audio_file_size_limit: 50

        batch_count_limit: 5

        file_size_limit: 15

        image_file_size_limit: 10

        video_file_size_limit: 100

        workflow_file_upload_limit: 10

      image:

        enabled: false

        number_limits: 3

        transfer_methods:

        - local_file

        - remote_url

      number_limits: 3

    opening_statement: 我是AI模拟面试助手,输入你的简历我们来开始面试吧

    retriever_resource:

      enabled: false

    sensitive_word_avoidance:

      enabled: false

    speech_to_text:

      enabled: false

    suggested_questions: []

    suggested_questions_after_answer:

      enabled: false

    text_to_speech:

      autoPlay: enabled

      enabled: true

      language: ''

      voice: ''

  graph:

    edges:

    - data:

        isInIteration: false

        sourceType: start

        targetType: if-else

      id: 1733921794336-source-1733922733310-target

      selected: false

      source: '1733921794336'

      sourceHandle: source

      target: '1733922733310'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: assigner

        targetType: answer

      id: 1733922893299-source-answer-target

      selected: false

      source: '1733922893299'

      sourceHandle: source

      target: answer

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: parameter-extractor

        targetType: if-else

      id: 1733923555480-source-1733923672344-target

      selected: false

      source: '1733923555480'

      sourceHandle: source

      target: '1733923672344'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: assigner

      id: 1733923672344-true-1733923790108-target

      selected: false

      source: '1733923672344'

      sourceHandle: 'true'

      target: '1733923790108'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: assigner

        targetType: answer

      id: 1733923790108-source-1733923838114-target

      selected: false

      source: '1733923790108'

      sourceHandle: source

      target: '1733923838114'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: answer

      id: 1733923672344-false-1733923863697-target

      selected: false

      source: '1733923672344'

      sourceHandle: 'false'

      target: '1733923863697'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: parameter-extractor

        targetType: if-else

      id: 17339239561900-source-17339240403490-target

      selected: false

      source: '17339239561900'

      sourceHandle: source

      target: '17339240403490'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: assigner

      id: 17339240403490-true-1733922893299-target

      selected: false

      source: '17339240403490'

      sourceHandle: 'true'

      target: '1733922893299'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: answer

      id: 17339240403490-false-1733924076258-target

      selected: false

      source: '17339240403490'

      sourceHandle: 'false'

      target: '1733924076258'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: parameter-extractor

        targetType: if-else

      id: 17339246619280-source-17339240382900-target

      selected: false

      source: '17339246619280'

      sourceHandle: source

      target: '17339240382900'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: assigner

      id: 17339240382900-true-1733924735950-target

      selected: false

      source: '17339240382900'

      sourceHandle: 'true'

      target: '1733924735950'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: answer

      id: 17339240382900-false-1733924792026-target

      selected: false

      source: '17339240382900'

      sourceHandle: 'false'

      target: '1733924792026'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: assigner

        targetType: if-else

      id: 1733924735950-source-1733924837700-target

      selected: false

      source: '1733924735950'

      sourceHandle: source

      target: '1733924837700'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: parameter-extractor

      id: 1733922733310-true-17339239561900-target

      selected: false

      source: '1733922733310'

      sourceHandle: 'true'

      target: '17339239561900'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: parameter-extractor

      id: 1733922733310-789b4b42-7dcb-4b62-939d-06bba9a39925-1733923555480-target

      selected: false

      source: '1733922733310'

      sourceHandle: 789b4b42-7dcb-4b62-939d-06bba9a39925

      target: '1733923555480'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: parameter-extractor

      id: 1733922733310-9670e08e-58f6-41c7-9452-b6470074e41f-17339246619280-target

      selected: false

      source: '1733922733310'

      sourceHandle: 9670e08e-58f6-41c7-9452-b6470074e41f

      target: '17339246619280'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: code

      id: 1733924837700-true-1733968153274-target

      selected: false

      source: '1733924837700'

      sourceHandle: 'true'

      target: '1733968153274'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: code

        targetType: parameter-extractor

      id: 1733968153274-source-1733968482694-target

      source: '1733968153274'

      sourceHandle: source

      target: '1733968482694'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: parameter-extractor

        targetType: assigner

      id: 1733968482694-source-1733968858346-target

      source: '1733968482694'

      sourceHandle: source

      target: '1733968858346'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: assigner

        targetType: code

      id: 1733968858346-source-1733969022861-target

      source: '1733968858346'

      sourceHandle: source

      target: '1733969022861'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: code

        targetType: answer

      id: 1733969022861-source-1733925485546-target

      source: '1733969022861'

      sourceHandle: source

      target: '1733925485546'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: code

      id: 1733922733310-8ca7bb7b-866e-40ee-bc2b-77d1f1ccfbce-1733968153274-target

      source: '1733922733310'

      sourceHandle: 8ca7bb7b-866e-40ee-bc2b-77d1f1ccfbce

      target: '1733968153274'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: code

      id: 1733922733310-false-1733974589629-target

      source: '1733922733310'

      sourceHandle: 'false'

      target: '1733974589629'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: code

        targetType: assigner

      id: 1733974589629-source-1733974949782-target

      source: '1733974589629'

      sourceHandle: source

      target: '1733974949782'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: assigner

        targetType: code

      id: 1733974949782-source-1733993557476-target

      source: '1733974949782'

      sourceHandle: source

      target: '1733993557476'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: code

        targetType: if-else

      id: 1733993557476-source-1733993854327-target

      source: '1733993557476'

      sourceHandle: source

      target: '1733993854327'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: code

      id: 1733993854327-false-1733969022861-target

      source: '1733993854327'

      sourceHandle: 'false'

      target: '1733969022861'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: if-else

        targetType: answer

      id: 1733993854327-true-1733993943204-target

      source: '1733993854327'

      sourceHandle: 'true'

      target: '1733993943204'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: answer

        targetType: code

      id: 1733993943204-source-1733994577709-target

      source: '1733993943204'

      sourceHandle: source

      target: '1733994577709'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: code

        targetType: llm

      id: 1733994577709-source-1733994965940-target

      source: '1733994577709'

      sourceHandle: source

      target: '1733994965940'

      targetHandle: target

      type: custom

      zIndex: 0

    - data:

        isInIteration: false

        sourceType: llm

        targetType: answer

      id: 1733994965940-source-1733994929597-target

      source: '1733994965940'

      sourceHandle: source

      target: '1733994929597'

      targetHandle: target

      type: custom

      zIndex: 0

    nodes:

    - data:

        desc: ''

        selected: false

        title: 开始

        type: start

        variables: []

      height: 54

      id: '1733921794336'

      position:

        x: -188

        y: 164

      positionAbsolute:

        x: -188

        y: 164

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        answer: 收到你的简历了,下面请输入你要面试的公司信息

        desc: ''

        selected: false

        title: 直接回复

        type: answer

        variables: []

      height: 116

      id: answer

      position:

        x: 1275.3641472578354

        y: -80.4362040587874

      positionAbsolute:

        x: 1275.3641472578354

        y: -80.4362040587874

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        cases:

        - case_id: 'true'

          conditions:

          - comparison_operator: empty

            id: ece6ce8d-ed56-4936-90be-143c70090944

            value: ''

            varType: string

            variable_selector:

            - conversation

            - resume

          id: 'true'

          logical_operator: and

        - case_id: 789b4b42-7dcb-4b62-939d-06bba9a39925

          conditions:

          - comparison_operator: empty

            id: 42b88271-32bf-4bc4-a215-9b7b8066dd44

            value: ''

            varType: string

            variable_selector:

            - conversation

            - company

          id: 789b4b42-7dcb-4b62-939d-06bba9a39925

          logical_operator: and

        - case_id: 9670e08e-58f6-41c7-9452-b6470074e41f

          conditions:

          - comparison_operator: empty

            id: 0ac58122-e38c-4588-a0a4-f7e25d2f8e34

            value: ''

            varType: string

            variable_selector:

            - conversation

            - job

          id: 9670e08e-58f6-41c7-9452-b6470074e41f

          logical_operator: and

        - case_id: 8ca7bb7b-866e-40ee-bc2b-77d1f1ccfbce

          conditions:

          - comparison_operator: empty

            id: 9f3c73d4-896b-477d-9c4b-c04bd8607ab0

            value: ''

            varType: array[object]

            variable_selector:

            - conversation

            - questions

          id: 8ca7bb7b-866e-40ee-bc2b-77d1f1ccfbce

          logical_operator: and

        desc: 模拟面试需要输入简历、工作岗位、公司介绍;根据这些信息来生成面试过程的问题

        selected: false

        title: 给需要个参数赋值

        type: if-else

      height: 330

      id: '1733922733310'

      position:

        x: -74

        y: 320.6804920892271

      positionAbsolute:

        x: -74

        y: 320.6804920892271

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        desc: ''

        items:

        - input_type: variable

          operation: over-write

          value:

          - sys

          - query

          variable_selector:

          - conversation

          - resume

          write_mode: over-write

        selected: false

        title: 变量赋值

        type: assigner

        version: '2'

      height: 88

      id: '1733922893299'

      position:

        x: 980.5715285962422

        y: -80.4362040587874

      positionAbsolute:

        x: 980.5715285962422

        y: -80.4362040587874

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        desc: ''

        instruction: '```xml

          <instructions>

          你将接收一段文本作为输入。你的任务是判断这段文本是否包含公司信息。判断的逻辑基于公司信息通常包含的要素,例如公司名称、地址、联系方式、经营范围等。

          请根据以下步骤进行操作:

          1. 仔细分析输入文本的内容。

          2. 判断文本是否包含公司信息的要素。

          3. 如果文本包含公司信息,则返回一个JSON格式的结果,其中`code`为0,`msg`为"是公司信息"。

          4. 如果文本不包含公司信息,则返回一个JSON格式的结果,其中`code`不为0,`msg`为解释为什么不是公司信息的原因。例如,可以是"缺少公司名称"、"缺少联系方式"、"内容不明确"等。

          5. 输出结果必须是JSON格式,并且不包含任何XML标签。

          请严格按照上述步骤进行操作,确保输出结果的准确性和一致性。

          </instructions>

          <example>

          输入: 北京字节跳动科技有限公司,地址:北京市海淀区知春路,联系电话:1234567890,经营范围:软件开发

          输出: {"code": 0, "msg": "是公司信息"}

          </example>

          <example>

          输入:  我喜欢吃苹果

          输出: {"code": 1, "msg": "缺少公司名称、地址、联系方式等信息"}

          </example>

          <example>

          输入:  招聘销售经理,要求三年以上工作经验

          输出: {"code": 2, "msg": "这看起来像招聘信息,而不是公司信息"}

          </example>

          <instructions>

          请注意以下几点:

          *  确保你的输出是有效的JSON格式。

          *  msg字段应该提供清晰的解释,说明为什么输入被判断为是或不是公司信息。

          *  对于不包含公司信息的输入,`msg`字段应该尽可能具体地指出缺少哪些信息或存在哪些问题。

          *  不要在输出中包含任何XML标签。'

        model:

          completion_params:

            temperature: 0.7

          mode: chat

          name: qwen-turbo-1101

          provider: tongyi

        parameters:

        - description: 识别结果

          name: code

          required: true

          type: number

        - description: 错误信息

          name: msg

          required: true

          type: string

        query:

        - sys

        - query

        reasoning_mode: prompt

        selected: false

        title: 公司信息识别结果参数提取器

        type: parameter-extractor

        variables: []

        vision:

          configs:

            detail: high

            variable_selector:

            - sys

            - files

          enabled: false

      height: 98

      id: '1733923555480'

      position:

        x: 294.00000000000034

        y: 219.7613213740114

      positionAbsolute:

        x: 294.00000000000034

        y: 219.7613213740114

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        cases:

        - case_id: 'true'

          conditions:

          - comparison_operator: '='

            id: 2bade5bf-bbea-47f1-864b-e28b512d7983

            value: '1'

            varType: number

            variable_selector:

            - '1733923555480'

            - __is_success

          - comparison_operator: '='

            id: 23b74502-9740-487f-a2c2-8f443ac479c2

            value: '0'

            varType: number

            variable_selector:

            - '1733923555480'

            - code

          id: 'true'

          logical_operator: and

        desc: ''

        selected: false

        title: 判断公司信息识别结果

        type: if-else

      height: 152

      id: '1733923672344'

      position:

        x: 579.0000000000007

        y: 194.00000000000023

      positionAbsolute:

        x: 579.0000000000007

        y: 194.00000000000023

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        desc: 保存公司信息到会话变量

        items:

        - input_type: variable

          operation: over-write

          value:

          - sys

          - query

          variable_selector:

          - conversation

          - company

          write_mode: over-write

        selected: false

        title: 公司信息保存

        type: assigner

        version: '2'

      height: 116

      id: '1733923790108'

      position:

        x: 980.5715285962422

        y: 168.20068851217985

      positionAbsolute:

        x: 980.5715285962422

        y: 168.20068851217985

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        answer: 下面请输入要面试的岗位信息。

        desc: ''

        selected: false

        title: 直接回复 2

        type: answer

        variables: []

      height: 100

      id: '1733923838114'

      position:

        x: 1275.3641472578354

        y: 59.986291273055286

      positionAbsolute:

        x: 1275.3641472578354

        y: 59.986291273055286

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        answer: 你的输入起来不像是公司信息,请重新输入

        desc: ''

        selected: false

        title: 直接回复 3

        type: answer

        variables: []

      height: 116

      id: '1733923863697'

      position:

        x: 980.5715285962422

        y: 311.46397159952403

      positionAbsolute:

        x: 980.5715285962422

        y: 311.46397159952403

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        desc: ''

        instruction: "```xml\n<prompt>\n<instructions>\n你将收到用户的输入文本。你的任务是判断该文本是否为简历信息。请严格按照以下步骤执行:\n\

          \n1. 仔细阅读用户的输入文本。\n\n2. 检查输入文本中是否包含典型的简历信息。典型的简历信息包括以下几种类型:\n    * 个人信息:姓名、联系方式(电话、邮箱、地址等)、出生日期、国籍等。\n\

          \     教育背景:学校名称、专业、学位、毕业时间等。\n     工作经历:公司名称、职位、工作时间、工作职责等。\n    * 项目经验:项目名称、项目描述、担任角色、项目成果等。\n\

          \     技能:熟练掌握的技能、软件、工具等。\n     获奖情况:获得的奖项、荣誉等。\n    * 自我评价:个人优势、职业目标等。\n\

          \n3.  根据包含的简历信息类型数量进行判断:\n     如果输入文本中包含*多个**上述类型的简历信息(至少两类及以上),则判断为简历信息。\n\

          \     如果输入文本中只包含*少量**(一类或以下)或**不包含**上述类型的简历信息,则判断为非简历信息。\n     如果不包含*个人信息**则判断为非简历信息。\n\

          \n4.  输出结果必须以 JSON 格式表示,例如:`{\"code\": 0, \"msg\": \"成功\"}`。其中,`code` 为\

          \ 0 表示判断为简历信息,`code` 为 1 表示判断为非简历信息,`msg` 提供判断结果的简短描述。请确保输出中不包含任何 XML 标签。\n\

          </instructions>\n<examples>\n<example>\n<input>\n张三,13800000000,zhangsan@email.com,北京市朝阳区,清华大学,计算机科学与技术,硕士,2020年毕业,微软,软件工程师,2020年至今,负责开发和维护公司核心产品\n\

          </input>\n<output>\n{\"code\": 0, \"msg\": \"是简历信息\"}\n</output>\n</example>\n\

          <example>\n<input>\n我喜欢打篮球,喜欢听音乐。\n</input>\n<output>\n{\"code\": 1, \"\

          msg\": \"不是简历信息\"}\n</output>\n</example>\n<examples>\n"

        model:

          completion_params:

            temperature: 0.7

          mode: chat

          name: qwen-turbo-1101

          provider: tongyi

        parameters:

        - description: 识别结果

          name: code

          required: true

          type: number

        - description: 错误信息

          name: msg

          required: true

          type: string

        query:

        - sys

        - query

        reasoning_mode: prompt

        selected: true

        title: 简历信息识别结果参数提取器 (1)

        type: parameter-extractor

        variables: []

        vision:

          configs:

            detail: high

            variable_selector:

            - sys

            - files

          enabled: false

      height: 98

      id: '17339239561900'

      position:

        x: 294.00000000000034

        y: 64.00000000000009

      positionAbsolute:

        x: 294.00000000000034

        y: 64.00000000000009

      selected: true

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        cases:

        - case_id: 'true'

          conditions:

          - comparison_operator: '='

            id: 2bade5bf-bbea-47f1-864b-e28b512d7983

            value: '1'

            varType: number

            variable_selector:

            - '17339246619280'

            - __is_success

          - comparison_operator: '='

            id: 23b74502-9740-487f-a2c2-8f443ac479c2

            value: '0'

            varType: number

            variable_selector:

            - '17339246619280'

            - code

          id: 'true'

          logical_operator: and

        desc: ''

        selected: false

        title: 判断岗位信息识别结果

        type: if-else

      height: 152

      id: '17339240382900'

      position:

        x: 579.0000000000007

        y: 399.87100162130776

      positionAbsolute:

        x: 579.0000000000007

        y: 399.87100162130776

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        cases:

        - case_id: 'true'

          conditions:

          - comparison_operator: '='

            id: 2bade5bf-bbea-47f1-864b-e28b512d7983

            value: '1'

            varType: number

            variable_selector:

            - '17339239561900'

            - __is_success

          - comparison_operator: '='

            id: 23b74502-9740-487f-a2c2-8f443ac479c2

            value: '0'

            varType: number

            variable_selector:

            - '17339239561900'

            - code

          id: 'true'

          logical_operator: and

        desc: ''

        selected: false

        title: 判断简历信息识别结果

        type: if-else

      height: 152

      id: '17339240403490'

      position:

        x: 579.0000000000007

        y: 15.000000000000185

      positionAbsolute:

        x: 579.0000000000007

        y: 15.000000000000185

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        answer: 输入的似乎不是简历,请重新输入吧

        desc: ''

        selected: false

        title: 直接回复 4

        type: answer

        variables: []

      height: 100

      id: '1733924076258'

      position:

        x: 980.5715285962422

        y: 46.56379594121259

      positionAbsolute:

        x: 980.5715285962422

        y: 46.56379594121259

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        desc: ''

        instruction: '```xml

          <instructions>

          你将收到一段文本,你的任务是判断这段文本是否描述了一个招聘岗位。请仔细分析文本内容,判断其中是否包含招聘岗位的关键信息,例如:职位名称、工作职责、任职要求、薪资待遇、公司名称、工作地点等。

          请根据以下步骤进行判断:

          1. 识别职位名称:  查找文本中是否明确提到了职位名称,例如“软件工程师”、“销售经理”、“市场专员”等。

          2. 识别工作职责:  查找文本中是否描述了该岗位的具体工作内容和职责,例如“负责软件开发”、“负责客户关系维护”、“负责市场推广”等。

          3. 识别任职要求:  查找文本中是否列出了该岗位的任职资格要求,例如学历、工作经验、技能要求等,例如“本科及以上学历”、“三年以上相关工作经验”、“熟练掌握Java编程语言”等。

          4. 识别其他信息:  查找文本中是否包含其他与招聘相关的信息,例如薪资待遇、公司名称、工作地点、联系方式等。

          如果文本中包含了以上多个关键信息,则可以判断该文本描述了一个招聘岗位。

          最终输出结果必须是JSON格式,例如:`{code:0,msg:''是岗位信息''}` 或 {code:1,msg:''不是岗位信息''}。

          code 为 0 表示是岗位信息,code 为 1 表示不是岗位信息。 msg 为对结果的简要说明。

          请注意,输出结果中不得包含任何 XML 标签。

          </instructions>

          <example>

          输入:诚聘高级Java工程师,5年以上工作经验,负责核心模块开发,薪资面议。

          输出:{code:0,msg:''是岗位信息''}

          </example>

          <example>

          输入:今天天气真好,适合出去玩。

          输出:{code:1,msg:''不是岗位信息''}

          </example>

          <example>

          输入:公司介绍:我们是一家致力于人工智能技术研发的创新型企业。

          输出:{code:1,msg:''不是岗位信息''}

          </example>

          <example>

          输入:招聘销售经理,负责区域市场开拓和销售团队管理,要求本科以上学历,三年以上销售经验,待遇优厚。

          输出:{code:0,msg:''不是岗位信息''}'

        model:

          completion_params:

            temperature: 0.7

          mode: chat

          name: qwen-turbo-1101

          provider: tongyi

        parameters:

        - description: 识别结果

          name: code

          required: true

          type: number

        - description: 错误信息

          name: msg

          required: true

          type: string

        query:

        - sys

        - query

        reasoning_mode: prompt

        selected: false

        title: 岗位信息识别结果参数提取器 (1)

        type: parameter-extractor

        variables: []

        vision:

          configs:

            detail: high

            variable_selector:

            - sys

            - files

          enabled: false

      height: 98

      id: '17339246619280'

      position:

        x: 294.00000000000034

        y: 420.63444624589755

      positionAbsolute:

        x: 294.00000000000034

        y: 420.63444624589755

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        desc: ''

        items:

        - input_type: variable

          operation: over-write

          value:

          - sys

          - query

          variable_selector:

          - conversation

          - job

          write_mode: over-write

        selected: false

        title: 岗位信息保存

        type: assigner

        version: '2'

      height: 88

      id: '1733924735950'

      position:

        x: 980.5715285962422

        y: 448.93091206720965

      positionAbsolute:

        x: 980.5715285962422

        y: 448.93091206720965

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        answer: 这怎么看也不像一个正经的招聘岗位,要不你再重新输入吧!

        desc: ''

        selected: false

        title: 直接回复 5

        type: answer

        variables: []

      height: 116

      id: '1733924792026'

      position:

        x: 980.5715285962422

        y: 574.7620381283225

      positionAbsolute:

        x: 980.5715285962422

        y: 574.7620381283225

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        cases:

        - case_id: 'true'

          conditions:

          - comparison_operator: not empty

            id: e136a78c-cb2e-4c89-b152-e40888146ac5

            value: ''

            varType: string

            variable_selector:

            - conversation

            - job

          - comparison_operator: not empty

            id: c3bf7414-bf6a-4aa1-9875-af437bda68ff

            value: ''

            varType: string

            variable_selector:

            - conversation

            - company

          - comparison_operator: not empty

            id: d01d1d23-f4cf-4223-a48a-ecbff2a6da83

            value: ''

            varType: string

            variable_selector:

            - conversation

            - resume

          id: 'true'

          logical_operator: and

        desc: ''

        selected: false

        title: 判断简历的匹配度以及生成面试问题

        type: if-else

      height: 178

      id: '1733924837700'

      position:

        x: 1298.7434096956752

        y: 219.7613213740114

      positionAbsolute:

        x: 1298.7434096956752

        y: 219.7613213740114

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        answer: '请回答:{{#1733969022861.result#}}

          '

        desc: ''

        selected: false

        title: 直接回复 6

        type: answer

        variables: []

      height: 103

      id: '1733925485546'

      position:

        x: 2627.171252283218

        y: 204.32550087618506

      positionAbsolute:

        x: 2627.171252283218

        y: 204.32550087618506

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        code: "def main(job: str, company: str, resume: str) -> dict:\n    result\

          \ = f\"\"\"\n##工作岗位: {job}\n=================\n招聘公司:{company}\n=================\n\

          候选人简历:{resume}\n\"\"\"\n    return {'result': result}\n"

        code_language: python3

        desc: ''

        outputs:

          result:

            children: null

            type: string

        selected: false

        title: 代码执行

        type: code

        variables:

        - value_selector:

          - conversation

          - job

          variable: job

        - value_selector:

          - conversation

          - company

          variable: company

        - value_selector:

          - conversation

          - resume

          variable: resume

      height: 54

      id: '1733968153274'

      position:

        x: 1163.0670477440478

        y: 815.0718560632378

      positionAbsolute:

        x: 1163.0670477440478

        y: 815.0718560632378

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        desc: ''

        instruction: "# Role\n你是一位能够根据用户输入并评估用户与特定岗位的匹配度,同时提出面试问题的专业助理。\n\n### Skill\

          \ 1: 评估匹配度 生成面试问题\n- 根据用户提供的简历和特定岗位的要求,评估用户与岗位的匹配度,并给出评分。\n- 根据用户的简历和岗位要求,提出针对性的面试问题,帮助用户做好面试准备。\n\

          - 面试问题应涵盖经验类问题、技能类问题和行为类问题。\n- 输出格式为json,例如:\n```json\n{\n  \"code\": 0,\n\

          \  \"msg\": \"处理成功\",\n  \"data\": {\n   \"score\": <匹配度评分>,\n    \"questions\"\

          : [\n      {\n        \"question\": \"<面试问题1>\",\n        \"category\":\

          \ \"经验类问题\"\n      },\n      {\n        \"question\": \"<面试问题2>\",\n   \

          \     \"category\": \"技能类问题\"\n      },\n      {\n        \"question\":\

          \ \"<面试问题3>\",\n        \"category\": \"行为类问题\"\n      }\n    ]\n  }\n}\n\

          ```\n\n## Constraints\n- 所有输出必须使用json格式。\n- 提供的面试问题应与用户的简历和目标岗位高度相关。\n-\

          \ 匹配度评分应基于用户的技能、经验和岗位要求的匹配程度。"

        model:

          completion_params:

            temperature: 0.7

          mode: chat

          name: qwen-turbo-1101

          provider: tongyi

        parameters:

        - description: 处理结果

          name: code

          required: true

          type: number

        - description: 处理结果信息

          name: msg

          required: true

          type: string

        - description: 匹配得分

          name: score

          required: true

          type: number

        - description: 问题列表

          name: questions

          required: true

          type: array[object]

        query:

        - '1733968153274'

        - result

        reasoning_mode: prompt

        selected: false

        title: 参数提取器 4

        type: parameter-extractor

        variables: []

        vision:

          enabled: false

      height: 98

      id: '1733968482694'

      position:

        x: 1568.4921181894215

        y: 442.01430783477167

      positionAbsolute:

        x: 1568.4921181894215

        y: 442.01430783477167

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        desc: ''

        items:

        - input_type: variable

          operation: over-write

          value:

          - '1733968482694'

          - questions

          variable_selector:

          - conversation

          - questions

          write_mode: over-write

        - input_type: variable

          operation: over-write

          value:

          - '1733968482694'

          - score

          variable_selector:

          - conversation

          - score

          write_mode: over-write

        selected: false

        title: 变量赋值 4

        type: assigner

        version: '2'

      height: 116

      id: '1733968858346'

      position:

        x: 1811.5122527506094

        y: 219.7613213740114

      positionAbsolute:

        x: 1811.5122527506094

        y: 219.7613213740114

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        code: "function main(req) {\n  let {list,qindex}=req;\n  if (!Array.isArray(list))\

          \ {\n    return {result:'系统开小差了'};\n  }\n  if (qindex < 0 || qindex >= list.length)\

          \ {\n    return {result:'系统开小差了'};\n  }\n  console.log(list,qindex)\n  return\

          \  {result:list[qindex].question};\n}\n"

        code_language: javascript

        desc: ''

        outputs:

          result:

            children: null

            type: string

        selected: false

        title: 获取问答

        type: code

        variables:

        - value_selector:

          - conversation

          - questions

          variable: list

        - value_selector:

          - conversation

          - qindex

          variable: qindex

      height: 54

      id: '1733969022861'

      position:

        x: 2440.3314057434277

        y: 420.63444624589755

      positionAbsolute:

        x: 2440.3314057434277

        y: 420.63444624589755

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        code: "function main(req) {\n  let {answer, list, index}=req\n  const results\

          \ = {\n    question:list[index].question,\n    category:list[index].category,\n\

          \    answer:answer\n  };\n  return {result:results};\n}\n"

        code_language: javascript

        desc: ''

        outputs:

          result:

            children: null

            type: object

        selected: false

        title: 保存答案

        type: code

        variables:

        - value_selector:

          - sys

          - query

          variable: answer

        - value_selector:

          - conversation

          - questions

          variable: list

        - value_selector:

          - conversation

          - qindex

          variable: index

      height: 54

      id: '1733974589629'

      position:

        x: 1231.428549906518

        y: 1004.8281427900146

      positionAbsolute:

        x: 1231.428549906518

        y: 1004.8281427900146

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        desc: ''

        items:

        - input_type: variable

          operation: append

          value:

          - '1733974589629'

          - result

          variable_selector:

          - conversation

          - answers

          write_mode: over-write

        - input_type: constant

          operation: +=

          value: 1

          variable_selector:

          - conversation

          - qindex

          write_mode: over-write

        selected: false

        title: 保存答案2

        type: assigner

        version: '2'

      height: 116

      id: '1733974949782'

      position:

        x: 1518.1512043681273

        y: 886.6413394900064

      positionAbsolute:

        x: 1518.1512043681273

        y: 886.6413394900064

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        code: "\nfunction main({qindex, list}) {\n    return {\n        result: qindex>=list.length?1:0\n\

          \    }\n}\n"

        code_language: javascript

        desc: ''

        outputs:

          result:

            children: null

            type: number

        selected: false

        title: 判断是否回答所有的问题了

        type: code

        variables:

        - value_selector:

          - conversation

          - qindex

          variable: qindex

        - value_selector:

          - conversation

          - questions

          variable: list

      height: 54

      id: '1733993557476'

      position:

        x: 1756.4911085746905

        y: 798.7297786324035

      positionAbsolute:

        x: 1756.4911085746905

        y: 798.7297786324035

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        cases:

        - case_id: 'true'

          conditions:

          - comparison_operator: '='

            id: 524119e8-bd13-437e-8a28-d6727425ddfb

            value: '1'

            varType: number

            variable_selector:

            - '1733993557476'

            - result

          id: 'true'

          logical_operator: and

        desc: ''

        selected: false

        title: 条件分支 6

        type: if-else

      height: 126

      id: '1733993854327'

      position:

        x: 1862.9636714948497

        y: 948.2313013623442

      positionAbsolute:

        x: 1862.9636714948497

        y: 948.2313013623442

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        answer: 面试结束,正在分析结果。

        desc: ''

        selected: false

        title: 直接回复 7

        type: answer

        variables: []

      height: 100

      id: '1733993943204'

      position:

        x: 2440.3314057434277

        y: 511.63444624589755

      positionAbsolute:

        x: 2440.3314057434277

        y: 511.63444624589755

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        context:

          enabled: false

          variable_selector: []

        desc: ''

        model:

          completion_params:

            temperature: 0.7

          mode: chat

          name: qwen-turbo-1101

          provider: tongyi

        prompt_template:

        - id: cf7df0a2-2bf7-4773-8a2b-c2c0b5a5d0c9

          role: system

          text: "```xml\n\n<instructions>\n\n你将扮演一个面试评估员的角色。用户会提供一份简历、公司信息、招聘岗位信息以及面试问题的答案。你的任务是根据这些信息,全面评估面试者的表现,并给出评分,最终结果用\

            \ JSON 格式输出。请注意以下几点:\n\n\n\n1. 简历评估:  仔细阅读简历,评估面试者的教育背景、工作经验、技能和项目经历是否与招聘岗位的要求匹配。特别关注与岗位相关的技能和经验,并评估其真实性和深度。\n\

            \n\n\n2. 公司和岗位匹配:  考虑公司文化、价值观和招聘岗位的具体要求,评估面试者是否适合该公司和该岗位。例如,某些岗位可能需要较强的团队合作能力,而另一些岗位则更注重独立工作能力。\n\

            \n\n\n3. 面试答案评估:  仔细分析面试者对每个问题的回答,评估其逻辑性、清晰度、深度和完整性。同时,关注面试者的沟通能力、表达能力和解决问题的能力。\n\

            \n\n\n4. 整体评估和评分:  综合考虑以上三个方面,对面试者的整体表现进行评估,并给出评分。评分范围为 0-100 分,分数越高表示面试表现越好。\n\

            \n\n\n5. JSON 输出:  最终的评估结果必须以 JSON 格式输出,包含以下字段:\n\n    * score:总分\

            \ (0-100)\n\n    * resume_evaluation:简历评估结果,简要说明简历的优缺点以及与岗位的匹配程度。\n\n\

            \     company_match:公司匹配度评估结果,简要说明面试者与公司文化和价值观的匹配程度。\n\n     interview_evaluation:面试答案评估结果,对每个问题的答案进行点评,并指出面试者的优势和不足。\n\

            \n\n\n请确保你的输出不包含任何 XML 标签。\n\n</instructions>\n\n\n\n<example>\n\n  <!--\

            \ Example 1 -->\n\n  <!-- Input:  (简历、公司信息、招聘岗位信息、面试问题答案)  Omitted for\

            \ brevity -->\n\n  <!-- Output: -->\n\n  ```json\n\n  {\n\n    \"score\"\

            : 85,\n\n    \"resume_evaluation\": \"简历内容丰富,工作经验与岗位要求高度匹配,展现了良好的专业技能和项目经验。\"\

            ,\n\n    \"company_match\": \"面试者展现了积极主动、团队合作的精神,与公司文化较为契合。\",\n\t\"interview_evaluation\"\

            :[{\n\t\"question\":\"问题1\",\n\t\"category\":\"问题分类1\",\n\t\"answer\"\

            :\"回答1\",\n\t\"evaluation\":\"用户回答的点评\"\n\t}]\n\t}\n\n"

        - id: 0d14fba3-d16e-4c5d-8fad-041bab668c43

          role: user

          text: '{{#1733994577709.result#}}'

        selected: false

        title: 分析结果

        type: llm

        variables: []

        vision:

          enabled: false

      height: 98

      id: '1733994965940'

      position:

        x: 3047.635787936875

        y: 387.8655283987931

      positionAbsolute:

        x: 3047.635787936875

        y: 387.8655283987931

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        code: "\nfunction main({resume,company,job,answers}) {\n    return {\n   \

          \     result: \"候选人简历:\" + resume+\"\\n 招聘公司:\"+company+\"\\n招聘岗位:\"+job+\"\

          \\n面试问答记录:\"+JSON.stringify(answers)\n    }\n}\n"

        code_language: javascript

        desc: ''

        outputs:

          result:

            children: null

            type: string

        selected: false

        title: 组装结果

        type: code

        variables:

        - value_selector:

          - conversation

          - resume

          variable: resume

        - value_selector:

          - conversation

          - company

          variable: company

        - value_selector:

          - conversation

          - job

          variable: job

        - value_selector:

          - conversation

          - answers

          variable: answers

      height: 54

      id: '1733994577709'

      position:

        x: 2765.317061915033

        y: 562.9101407825551

      positionAbsolute:

        x: 2765.317061915033

        y: 562.9101407825551

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    - data:

        answer: '{{#1733994965940.text#}}'

        desc: ''

        selected: false

        title: 直接回复 8

        type: answer

        variables: []

      height: 103

      id: '1733994929597'

      position:

        x: 3453.9553044080058

        y: 476.271898289582

      positionAbsolute:

        x: 3453.9553044080058

        y: 476.271898289582

      selected: false

      sourcePosition: right

      targetPosition: left

      type: custom

      width: 244

    viewport:

      x: 181.72765164612883

      y: 107.52577854459429

      zoom: 0.4923573744581653


Comment