app: description: 动态生成考试题目 icon: 🤖 icon_background: '#FBE8FF' mode: workflow name: 恩喜-02-试题生成器-考陪练 use_icon_as_answer_icon: false dependencies: - current_identifier: null type: marketplace value: marketplace_plugin_unique_identifier: langgenius/openrouter:0.0.22@99ef4cf4e08292c28806abaf24f295ed66e04e4b9e74385b487fd0767c7f56df version: null kind: app version: 0.5.0 workflow: conversation_variables: [] 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_batch_limit: 10 image_file_size_limit: 10 single_chunk_attachment_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: '' retriever_resource: enabled: true sensitive_word_avoidance: enabled: false speech_to_text: enabled: false suggested_questions: [] suggested_questions_after_answer: enabled: false text_to_speech: enabled: false language: '' voice: '' graph: edges: - data: isInIteration: false isInLoop: false sourceType: if-else targetType: code id: 1757697174164-false-1759336370957-target source: '1757697174164' sourceHandle: 'false' target: '1759336370957' targetHandle: target type: custom zIndex: 0 - data: isInLoop: false sourceType: llm targetType: end id: 1759336189971-source-1757522219070-target source: '1759336189971' sourceHandle: source target: '1757522219070' targetHandle: target type: custom zIndex: 0 - data: isInLoop: false sourceType: if-else targetType: llm id: 1757697174164-true-17593434940720-target source: '1757697174164' sourceHandle: 'true' target: '17593434940720' targetHandle: target type: custom zIndex: 0 - data: isInLoop: false sourceType: llm targetType: end id: 17593434940720-source-17576978306140-target source: '17593434940720' sourceHandle: source target: '17576978306140' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: false sourceType: start targetType: tool id: 1757517722090-source-1766636474539-target source: '1757517722090' sourceHandle: source target: '1766636474539' targetHandle: target type: custom zIndex: 0 - data: isInLoop: false sourceType: tool targetType: if-else id: 1766636474539-source-1757697174164-target source: '1766636474539' sourceHandle: source target: '1757697174164' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false isInLoop: false sourceType: code targetType: tool id: 1759336370957-source-1766636566272-target source: '1759336370957' sourceHandle: source target: '1766636566272' targetHandle: target type: custom zIndex: 0 - data: isInLoop: false sourceType: tool targetType: llm id: 1766636566272-source-1759336189971-target source: '1766636566272' sourceHandle: source target: '1759336189971' targetHandle: target type: custom zIndex: 0 nodes: - data: desc: '' selected: false title: 开始 type: start variables: - default: '1' label: course_id max_length: 255 options: [] required: true type: number variable: course_id - default: '1' hint: '' label: position_id max_length: 48 options: [] placeholder: '' required: true type: number variable: position_id - default: '' hint: '' label: mistake_records max_length: 480000 options: [] placeholder: '' required: false type: paragraph variable: mistake_records - default: '4' hint: '' label: single_choice_count max_length: 48 options: [] placeholder: '' required: false type: number variable: single_choice_count - default: '2' hint: '' label: multiple_choice_count max_length: 48 options: [] placeholder: '' required: false type: number variable: multiple_choice_count - default: '1' hint: '' label: true_false_count max_length: 48 options: [] placeholder: '' required: false type: number variable: true_false_count - default: '2' hint: '' label: fill_blank_count max_length: 48 options: [] placeholder: '' required: false type: number variable: fill_blank_count - default: '1' hint: '' label: essay_count max_length: 48 options: [] placeholder: '' required: false type: number variable: essay_count - default: '3' hint: '' label: difficulty_level max_length: 48 options: [] placeholder: '' required: false type: number variable: difficulty_level height: 317 id: '1757517722090' position: x: 113.18367757866764 y: 380.7254702687234 positionAbsolute: x: 113.18367757866764 y: 380.7254702687234 selected: false sourcePosition: right targetPosition: left type: custom width: 242 - data: desc: '' outputs: - value_selector: - '1759336189971' - text value_type: string variable: result selected: false title: 结束 type: end height: 88 id: '1757522219070' position: x: 2675.4479082184957 y: 699.3770729563379 positionAbsolute: x: 2675.4479082184957 y: 699.3770729563379 selected: false sourcePosition: right targetPosition: left type: custom width: 242 - data: cases: - case_id: 'true' conditions: - comparison_operator: not empty id: 2b42b816-606a-4753-8494-5451b3d7ab42 value: '' varType: string variable_selector: - '1757517722090' - mistake_records id: 'true' logical_operator: and desc: '' selected: false title: 条件分支 type: if-else height: 124 id: '1757697174164' position: x: 1075.7946800832713 y: 393.17560717622047 positionAbsolute: x: 1075.7946800832713 y: 393.17560717622047 selected: false sourcePosition: right targetPosition: left type: custom width: 242 - data: desc: '' outputs: - value_selector: - '17593434940720' - text value_type: string variable: result selected: false title: 结束 (1) type: end height: 88 id: '17576978306140' position: x: 1890.5828711788172 y: 199.92291499877138 positionAbsolute: x: 1890.5828711788172 y: 199.92291499877138 selected: false sourcePosition: right targetPosition: left type: custom width: 242 - data: context: enabled: false variable_selector: [] model: completion_params: exclude_reasoning_tokens: true response_format: json_object temperature: 0.7 mode: chat name: google/gemini-2.5-flash provider: langgenius/openrouter/openrouter prompt_template: - id: df690399-5bed-4567-9b1d-5d31584d65e8 role: system text: "## 角色\n你是一位经验丰富的考试出题专家,能够依据用户提供的知识内容,结合用户的岗位特征,随机地生成{{#1759336370957.result#}}题考题。你会以专业、严谨且清晰的方式出题。\n\ \n## 输出{{#1757517722090.single_choice_count#}}道单选题\n1、每道题目只能有 1 个正确答案。\n\ 2、干扰项要具有合理性和迷惑性,且所有选项必须与主题相关。\n3、答案解析要简明扼要,说明选择理由。\n4、为每道题记录出题来源的知识点 id。\n\ 5、请以 JSON 格式输出。\n6、为每道题输出一个序号。\n\n### 输出结构:\n{\n \"num\": \"题号\",\n\ \ \"type\": \"single_choice\",\n \"topic\": {\n \"title\"\ : \"清晰完整的题目描述\",\n \"options\": {\n \"opt1\": \"A:符合语境的选项\"\ ,\n \"opt2\": \"B:符合语境的选项\",\n \"opt3\": \"C:符合语境的选项\"\ ,\n \"opt4\": \"D:符合语境的选项\"\n }\n },\n \"knowledge_point_id\"\ : \"出题来源知识点的id\",\n \"correct\": \"其中一个选项的全部原文\",\n \"analysis\"\ : \"准确的答案解析,包含选择原因和知识点说明\"\n}\n\n- 严格按照以上格式输出\n\n## 输出{{#1757517722090.multiple_choice_count#}}道多选题\n\ 1、每道题目有多个正确答案。\n2、\"type\": \"multiple_choice\"\n3、其它事项同单选题。\n\n## 输出{{#1757517722090.true_false_count#}}道判断题\n\ 1、每道题目只有 \"正确\" 或 \"错误\" 两种答案。\n2、题目表述应明确清晰,避免歧义。\n3、题目应直接陈述事实或观点,便于做出是非判断。\n\ 4、其它事项同单选题。\n\n### 输出结构:\n{\n \"num\": \"题号\",\n \"type\": \"true_false\"\ ,\n \"topic\": {\n \"title\": \"清晰完整的题目描述\"\n },\n \"\ knowledge_point_id\": \" 出题来源知识点的id\",\n \"correct\": \"正确\", // 或\ \ \"错误\",表示正确答案是对还是错\n \"analysis\": \"准确的答案解析,包含判断原因和知识点说明\"\n}\n\n\ - 严格按照以上格式输出\n\n## 输出{{#1757517722090.fill_blank_count#}}道填空题\n1. 题干应明确完整,空缺处需用横线“___”标示,且只能有一处空缺\n\ 2. 答案应唯一且明确,避免开放性表述\n3. 空缺长度应与答案长度大致匹配\n4. 解析需说明答案依据及相关知识点\n5. 其余要求与单选题一致\n\ \n### 输出结构:\n{\n \"num\": \"题号\",\n \"type\": \"fill_blank\",\n\ \ \"topic\": {\n \"title\": \"包含___空缺的题目描述\"\n },\n \"\ knowledge_point_id\": \"出题来源知识点的id\",\n \"correct\": \"准确的填空答案\",\n\ \ \"analysis\": \"解析答案的依据和相关知识点说明\"\n}\n\n- 严格按照以上格式输出\n\n### 输出{{#1757517722090.essay_count#}}道问答题\n\ 1. 问题应具体明确,限定回答范围\n2. 答案需条理清晰,突出核心要点\n3. 解析可补充扩展说明或评分要点\n4. 避免过于宽泛或需要主观发挥的问题\n\ 5. 其余要求同单选题\n\n### 输出结构:\n{\n \"num\": \"题号\",\n \"type\": \"essay\"\ ,\n \"topic\": {\n \"title\": \"需要详细回答的问题描述\"\n },\n \"\ knowledge_point_id\": \"出题来源知识点的id\",\n \"correct\": \"完整准确的参考答案(分点或连贯表述)\"\ ,\n \"analysis\": \"对答案的补充说明、评分要点或相关知识点扩展\"\n}\n\n## 特殊要求\n1. 题目难度:{{#1757517722090.difficulty_level#}}级(5\ \ 级为最难)\n2. 避免使用模棱两可的表述\n3. 选项内容要互斥,不能有重叠\n4. 每个选项长度尽量均衡\n5. 正确答案(A、B、C、D)分布要合理,避免规律性\n\ 6. 正确答案必须使用其中一个选项中的全部原文,严禁修改\n7. knowledge_point_id 必须是唯一的,即每道题的知识点来源只允许填一个\ \ id。\n\n请按以上要求生成题目,确保每道题目质量。" - id: 9cb9ef44-bbfc-464d-9634-8873babcb6e4 role: user text: '# 请针对岗位特征、待出题的知识点内容进行出题。 ## 岗位信息: {{#1766636474539.text#}} --- ## 知识点: {{#1766636566272.text#}}' selected: false structured_output_enabled: false title: 第一轮出题 type: llm vision: enabled: false height: 88 id: '1759336189971' position: x: 2233.770517088806 y: 854.8259046963252 positionAbsolute: x: 2233.770517088806 y: 854.8259046963252 selected: false sourcePosition: right targetPosition: left type: custom width: 242 - data: code: "from typing import Dict\n\n\ndef main(\n single_choice_count: float,\n\ \ multiple_choice_count: float,\n true_false_count: float,\n fill_blank_count:\ \ float,\n essay_count: float,\n) -> Dict[str, str]:\n total = (\n\ \ single_choice_count\n + multiple_choice_count\n +\ \ true_false_count\n + fill_blank_count\n + essay_count\n\ \ )\n # 将总和转换为字符串类型\n return {\n \"result\": str(total),\n\ \ }\n" code_language: python3 outputs: result: children: null type: string selected: false title: 计算总题量 type: code variables: - value_selector: - '1757517722090' - single_choice_count value_type: number variable: single_choice_count - value_selector: - '1757517722090' - multiple_choice_count value_type: number variable: multiple_choice_count - value_selector: - '1757517722090' - true_false_count value_type: number variable: true_false_count - value_selector: - '1757517722090' - fill_blank_count value_type: number variable: fill_blank_count - value_selector: - '1757517722090' - essay_count value_type: number variable: essay_count height: 52 id: '1759336370957' position: x: 1120.8286797224275 y: 773.2970549304636 positionAbsolute: x: 1120.8286797224275 y: 773.2970549304636 selected: false sourcePosition: right targetPosition: left type: custom width: 242 - data: context: enabled: false variable_selector: [] model: completion_params: response_format: json_object temperature: 0.7 mode: chat name: google/gemini-2.5-flash provider: langgenius/openrouter/openrouter prompt_template: - id: df690399-5bed-4567-9b1d-5d31584d65e8 role: system text: "## 角色\n你是一位经验丰富的考试出题专家,能够依据用户提供的错题记录,重新为用户出题。你会为每道错题重新出一题,你会以专业、严谨且清晰的方式出题。\n\ \n## 输出单选题\n1、每道题目只能有 1 个正确答案。\n2、干扰项要具有合理性和迷惑性,且所有选项必须与主题相关。\n3、答案解析要简明扼要,说明选择理由。\n\ 4、为每道题记录出题来源的知识点 id。\n5、请以 JSON 格式输出。\n6、为每道题输出一个序号。\n\n### 输出结构:\n{\n\ \ \"num\": \"题号\",\n \"type\": \"single_choice\",\n \"topic\"\ : {\n \"title\": \"清晰完整的题目描述\",\n \"options\": {\n \ \ \"opt1\": \"A:符合语境的选项\",\n \"opt2\": \"B:符合语境的选项\"\ ,\n \"opt3\": \"C:符合语境的选项\",\n \"opt4\": \"D:符合语境的选项\"\ \n }\n },\n \"knowledge_point_id\": \"出题来源知识点的id\",\n \ \ \"correct\": \"其中一个选项的全部原文\",\n \"analysis\": \"准确的答案解析,包含选择原因和知识点说明\"\ \n}\n\n- 严格按照以上格式输出\n\n\n## 特殊要求\n1. 题目难度:{{#1757517722090.difficulty_level#}}级(5\ \ 级为最难)\n2. 避免使用模棱两可的表述\n3. 选项内容要互斥,不能有重叠\n4. 每个选项长度尽量均衡\n5. 正确答案(A、B、C、D)分布要合理,避免规律性\n\ 6. 正确答案必须使用其中一个选项中的全部原文,严禁修改\n7. knowledge_point_id 必须是唯一的,即每道题的知识点来源只允许填一个\ \ id。\n\n请按以上要求生成题目,确保每道题目质量。" - id: 9cb9ef44-bbfc-464d-9634-8873babcb6e4 role: user text: '## 错题记录: {{#1757517722090.mistake_records#}}' selected: false structured_output_enabled: false title: 错题重出 type: llm vision: enabled: false height: 88 id: '17593434940720' position: x: 1542.474476799452 y: 294.89553593472453 positionAbsolute: x: 1542.474476799452 y: 294.89553593472453 selected: true sourcePosition: right targetPosition: left type: custom width: 242 - data: is_team_authorization: true paramSchemas: - auto_generate: null default: null form: llm human_description: en_US: '' ja_JP: '' pt_BR: '' zh_Hans: '' label: en_US: SQL 语句 ja_JP: SQL 语句 pt_BR: SQL 语句 zh_Hans: SQL 语句 llm_description: '' max: null min: null name: sql options: [] placeholder: en_US: '' ja_JP: '' pt_BR: '' zh_Hans: '' precision: null required: true scope: null template: null type: string params: sql: '' plugin_id: null plugin_unique_identifier: null provider_icon: background: '#FFEAD5' content: 🤖 provider_id: 2e7e915c-606c-4230-b4bd-ff95efb72f39 provider_name: 恩喜-00-SQL 执行器-考陪练专用 provider_type: workflow selected: false title: 恩喜-00-查询岗位 tool_configurations: {} tool_description: 考陪练系统专用的 sql 执行器 tool_label: 恩喜-00-SQL 执行器-考陪练专用 tool_name: SQL_executor_enxi tool_node_version: '2' tool_parameters: sql: type: mixed value: SELECT id, name, description, skills, level FROM positions WHERE id = 1 AND is_deleted = FALSE type: tool height: 52 id: '1766636474539' position: x: 680.6972117920154 y: 459.1566958608885 positionAbsolute: x: 680.6972117920154 y: 459.1566958608885 selected: false sourcePosition: right targetPosition: left type: custom width: 242 - data: is_team_authorization: true paramSchemas: - auto_generate: null default: null form: llm human_description: en_US: '' ja_JP: '' pt_BR: '' zh_Hans: '' label: en_US: SQL 语句 ja_JP: SQL 语句 pt_BR: SQL 语句 zh_Hans: SQL 语句 llm_description: '' max: null min: null name: sql options: [] placeholder: en_US: '' ja_JP: '' pt_BR: '' zh_Hans: '' precision: null required: true scope: null template: null type: string params: sql: '' plugin_id: null plugin_unique_identifier: null provider_icon: background: '#FFEAD5' content: 🤖 provider_id: 2e7e915c-606c-4230-b4bd-ff95efb72f39 provider_name: 恩喜-00-SQL 执行器-考陪练专用 provider_type: workflow selected: false title: 恩喜-00-查询知识点 tool_configurations: {} tool_description: 考陪练系统专用的 sql 执行器 tool_label: 恩喜-00-SQL 执行器-考陪练专用 tool_name: SQL_executor_enxi tool_node_version: '2' tool_parameters: sql: type: mixed value: SELECT kp.id, kp.name, kp.description, kp.topic_relation FROM knowledge_points kp INNER JOIN course_materials cm ON kp.material_id = cm.id WHERE kp.course_id = {{#1757517722090.course_id#}} AND kp.is_deleted = FALSE AND cm.is_deleted = FALSE ORDER BY RAND() LIMIT {{#1759336370957.result#}} type: tool height: 52 id: '1766636566272' position: x: 1751.0251613776625 y: 1090.0135783943633 positionAbsolute: x: 1751.0251613776625 y: 1090.0135783943633 selected: false sourcePosition: right targetPosition: left type: custom width: 242 viewport: x: 208.8157315753573 y: 57.80270447312665 zoom: 0.3556496204015805 rag_pipeline_variables: []