From 2feaede14e494ebb5d44af824f25007c27de7cb9 Mon Sep 17 00:00:00 2001 From: Guido van Dijk Date: Mon, 21 Sep 2026 09:24:26 +0200 Subject: [PATCH] DSL-exports van de apps, installatie-instructie in README Co-Authored-By: Claude Opus 5 --- 01-workflow/tekst-op-niveau.dify.yml | 256 ++++++ .../schoolgids-assistent.dify.yml | 123 +++ .../ouderbrief-assistent.dify.yml | 121 +++ 03-schoolcommunicatie/schoolnieuws.dify.yml | 642 +++++++++++++++ 05-transcriptietool/transcriptietool.dify.yml | 386 +++++++++ .../studiecoach-biologie.dify.yml | 746 ++++++++++++++++++ CHANGELOG.md | 4 + README.md | 25 + 8 files changed, 2303 insertions(+) create mode 100644 01-workflow/tekst-op-niveau.dify.yml create mode 100644 02-agent-kennisbank/schoolgids-assistent.dify.yml create mode 100644 03-schoolcommunicatie/ouderbrief-assistent.dify.yml create mode 100644 03-schoolcommunicatie/schoolnieuws.dify.yml create mode 100644 05-transcriptietool/transcriptietool.dify.yml create mode 100644 08-chatflow-studiecoach/studiecoach-biologie.dify.yml diff --git a/01-workflow/tekst-op-niveau.dify.yml b/01-workflow/tekst-op-niveau.dify.yml new file mode 100644 index 0000000..bc42fe1 --- /dev/null +++ b/01-workflow/tekst-op-niveau.dify.yml @@ -0,0 +1,256 @@ +app: + description: '' + icon: 🤖 + icon_background: '#FFEAD5' + icon_type: emoji + mode: workflow + name: Tekst op niveau - voorbeeld + use_icon_as_answer_icon: false +dependencies: +- current_identifier: null + type: marketplace + value: + marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb + version: null +kind: app +version: 0.7.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: + attachment_image_file_size_limit: 2 + audio_file_size_limit: 50 + batch_count_limit: 5 + file_size_limit: 15 + file_upload_limit: 50 + image_file_batch_limit: 10 + image_file_size_limit: 10 + knowledge_file_size_limit: 15 + single_chunk_attachment_limit: 10 + skill_file_size_limit: 50 + 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: start + targetType: llm + id: 1789888267707--1789888371048-target + source: '1789888267707' + sourceHandle: source + target: '1789888371048' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: llm + targetType: llm + id: 1789888371048--1789888421836-target + source: '1789888371048' + sourceHandle: source + target: '1789888421836' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: llm + targetType: end + id: 1789888421836--1789888459304-target + source: '1789888421836' + sourceHandle: source + target: '1789888459304' + targetHandle: target + type: custom + zIndex: 0 + nodes: + - data: + selected: false + title: User Input + type: start + variables: + - default: '' + hint: '' + label: De tekst die je wilt aanpassen + options: [] + placeholder: '' + required: true + type: paragraph + variable: tekst + - hint: '' + label: Voor welk niveau + options: + - groep 7 + - brugklas + - 3 havo + - 5 vwo + placeholder: '' + required: true + type: select + variable: niveau + height: 134 + id: '1789888267707' + position: + x: 80 + y: 282 + positionAbsolute: + x: 80 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + context: + enabled: false + variable_selector: [] + model: + completion_params: {} + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + prompt_template: + - id: 067a0e93-fc5f-4238-94ee-5bc4a742e673 + role: system + text: 'Herschrijf de onderstaande tekst zodat een leerling van dit niveau + hem kan lezen. Behoud alle inhoudelijke informatie. Verander geen vakbegrippen, + maar leg ze uit in een bijzin. Schrijf korte zinnen. + + + Niveau: {{#1789888267707.niveau#}} + + + Tekst: {{#1789888267707.tekst#}}' + selected: false + title: LLM + type: llm + vision: + enabled: false + height: 87 + id: '1789888371048' + position: + x: 382 + y: 282 + positionAbsolute: + x: 382 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + context: + enabled: false + variable_selector: [] + model: + completion_params: {} + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + prompt_template: + - id: ecf64b48-3410-408c-b487-c9339e079d83 + role: system + text: 'Maak drie begripsvragen bij de onderstaande tekst. Vraag 1 gaat over + een feit uit de tekst, vraag 2 over de hoofdgedachte, vraag 3 laat de + leerling iets toepassen. Geef geen antwoorden. + + + Tekst: {{#1789888371048.text#}}' + selected: true + title: LLM 2 + type: llm + vision: + enabled: false + height: 87 + id: '1789888421836' + position: + x: 684 + y: 282 + positionAbsolute: + x: 684 + y: 282 + selected: true + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + outputs: + - value_selector: + - '1789888371048' + - text + value_type: string + variable: herschreven_tekst + - value_selector: + - '1789888421836' + - text + value_type: string + variable: vragen + selected: false + title: Output + type: end + height: 114 + id: '1789888459304' + position: + x: 986 + y: 282 + positionAbsolute: + x: 986 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + viewport: + x: -981.8515625 + y: -217.875 + zoom: 2 + rag_pipeline_variables: [] diff --git a/02-agent-kennisbank/schoolgids-assistent.dify.yml b/02-agent-kennisbank/schoolgids-assistent.dify.yml new file mode 100644 index 0000000..66336be --- /dev/null +++ b/02-agent-kennisbank/schoolgids-assistent.dify.yml @@ -0,0 +1,123 @@ +app: + description: '' + icon: 🤖 + icon_background: '#FFEAD5' + icon_type: emoji + mode: agent-chat + name: Schoolgids-assistent + use_icon_as_answer_icon: false +dependencies: +- current_identifier: null + type: marketplace + value: + marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb + version: null +kind: app +model_config: + agent_mode: + enabled: true + max_iteration: 10 + prompt: null + strategy: function_call + tools: [] + annotation_reply: + enabled: false + chat_prompt_config: + prompt: + - role: system + text: '' + completion_prompt_config: + conversation_histories_role: + assistant_prefix: '' + user_prefix: '' + prompt: + text: '' + dataset_configs: + datasets: + datasets: + - dataset: + enabled: true + id: 53e10f53-027b-4885-8117-a57b7b18dee5 + reranking_enable: true + reranking_mode: reranking_model + reranking_model: + reranking_model_name: qwen3-rerank + reranking_provider_name: langgenius/tongyi/tongyi + retrieval_model: multiple + top_k: 4 + dataset_query_variable: '' + external_data_tools: [] + file_upload: + allowed_file_extensions: + - .JPG + - .JPEG + - .PNG + - .GIF + - .WEBP + - .SVG + - .MP4 + - .MOV + - .MPEG + - .WEBM + allowed_file_types: [] + allowed_file_upload_methods: + - remote_url + - local_file + enabled: false + image: + detail: high + enabled: false + number_limits: 3 + transfer_methods: + - remote_url + - local_file + number_limits: 3 + model: + completion_params: + stop: [] + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + more_like_this: + enabled: false + opening_statement: '' + pre_prompt: 'Je bent de schoolgids-assistent van Het Voorbeeldcollege. Je beantwoordt + vragen van ouders en leerlingen over de schoolregels. + + + Regels: + + - Baseer je antwoord alleen op de schoolgids in je kennisbank. + + - Staat het antwoord niet in de schoolgids, zeg dan eerlijk dat je het niet weet + en verwijs naar de receptie. + + - Antwoord kort en in gewoon Nederlands, maximaal vijf zinnen. + + - Noem waar het kan het hoofdstuk van de schoolgids waar het antwoord vandaan + komt. + + + Balie-stand: als een medewerker begint met "Balie:" en daarna een vraag van een + ouder plakt, dan schrijf je het antwoord dat de medewerker naar die ouder kan + sturen. Volg dan de schrijfwijzer in je kennisbank: spreek de ouder aan met u, + taalniveau B1, geen afkortingen, geen woorden uit de lijst te vermijden woorden, + maximaal zes zinnen, en sluit af met een contactmogelijkheid. Weet je het antwoord + niet uit de schoolgids, schrijf dan een kort bericht waarin je zegt dat je het + navraagt en zet [INVULLEN] waar de medewerker het echte antwoord moet aanvullen.' + prompt_type: simple + 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: '' + user_input_form: [] +version: 0.7.0 diff --git a/03-schoolcommunicatie/ouderbrief-assistent.dify.yml b/03-schoolcommunicatie/ouderbrief-assistent.dify.yml new file mode 100644 index 0000000..47daced --- /dev/null +++ b/03-schoolcommunicatie/ouderbrief-assistent.dify.yml @@ -0,0 +1,121 @@ +app: + description: '' + icon: 🤖 + icon_background: '#FFEAD5' + icon_type: emoji + mode: agent-chat + name: Ouderbrief-assistent + use_icon_as_answer_icon: false +dependencies: +- current_identifier: null + type: marketplace + value: + marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb + version: null +kind: app +model_config: + agent_mode: + enabled: true + max_iteration: 10 + prompt: null + strategy: function_call + tools: [] + annotation_reply: + enabled: false + chat_prompt_config: + prompt: + - role: system + text: '' + completion_prompt_config: + conversation_histories_role: + assistant_prefix: '' + user_prefix: '' + prompt: + text: '' + dataset_configs: + datasets: + datasets: + - dataset: + enabled: true + id: 53e10f53-027b-4885-8117-a57b7b18dee5 + reranking_enable: true + reranking_mode: reranking_model + reranking_model: + reranking_model_name: qwen3-rerank + reranking_provider_name: langgenius/tongyi/tongyi + retrieval_model: multiple + top_k: 4 + dataset_query_variable: '' + external_data_tools: [] + file_upload: + allowed_file_extensions: + - .JPG + - .JPEG + - .PNG + - .GIF + - .WEBP + - .SVG + - .MP4 + - .MOV + - .MPEG + - .WEBM + allowed_file_types: [] + allowed_file_upload_methods: + - remote_url + - local_file + enabled: false + image: + detail: high + enabled: false + number_limits: 3 + transfer_methods: + - remote_url + - local_file + number_limits: 3 + model: + completion_params: + stop: [] + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + more_like_this: + enabled: false + opening_statement: '' + pre_prompt: 'Je bent de ouderbrief-assistent van Het Voorbeeldcollege. Docenten, + mentoren en teamleiders plakken een conceptbrief of een paar losse zinnen, en + jij maakt er een brief van die ouders in één keer begrijpen. + + + Werkwijze: + + 1. Raadpleeg altijd eerst de schrijfwijzer in je kennisbank. Pas de regels toe + over taalniveau B1, u en je, te vermijden woorden, de opbouw van een ouderbrief + en de lengte. + + 2. Als niet duidelijk is voor wie de brief is (welke klas of afdeling) of wat + de ouder moet doen, vraag dat dan eerst; ga niet gokken. + + 3. Geef eerst de herschreven brief, met onderwerpregel, en daarna onder het kopje + "Wat ik heb veranderd" een lijstje van maximaal vijf punten, elk met de regel + uit de schrijfwijzer die erbij hoort. + + 4. Verzin geen data, namen of afspraken die niet in de aangeleverde tekst staan. + Ontbreekt iets wat een ouder moet weten, zet dan [INVULLEN] op die plek. + + 5. Wees kort. Geen inleiding, geen compliment, geen afsluiting van jouw kant.' + prompt_type: simple + 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: '' + user_input_form: [] +version: 0.7.0 diff --git a/03-schoolcommunicatie/schoolnieuws.dify.yml b/03-schoolcommunicatie/schoolnieuws.dify.yml new file mode 100644 index 0000000..44af22d --- /dev/null +++ b/03-schoolcommunicatie/schoolnieuws.dify.yml @@ -0,0 +1,642 @@ +app: + description: '' + icon: 🤖 + icon_background: '#FFEAD5' + icon_type: emoji + mode: workflow + name: Schoolnieuws + use_icon_as_answer_icon: false +dependencies: +- current_identifier: null + type: marketplace + value: + marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb + version: null +- current_identifier: null + type: marketplace + value: + marketplace_plugin_unique_identifier: langgenius/tongyi:0.2.22@9cea96ffc7977f536c02999c80ff1283b1819aab9b6fa2fdf789d0c6c7d03715 + version: null +kind: app +version: 0.7.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: + attachment_image_file_size_limit: 2 + audio_file_size_limit: 50 + batch_count_limit: 5 + file_size_limit: 15 + file_upload_limit: 50 + image_file_batch_limit: 10 + image_file_size_limit: 10 + knowledge_file_size_limit: 15 + single_chunk_attachment_limit: 10 + skill_file_size_limit: 50 + 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: start + targetType: knowledge-retrieval + id: 1789912805545--1789913220684-target + selected: false + source: '1789912805545' + sourceHandle: source + target: '1789913220684' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: knowledge-retrieval + targetType: llm + id: 1789913220684--1789913283624-target + selected: false + source: '1789913220684' + sourceHandle: source + target: '1789913283624' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: llm + targetType: llm + id: 1789913283624--1789913447671-target + selected: false + source: '1789913283624' + sourceHandle: source + target: '1789913447671' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: llm + targetType: llm + id: 1789913447671--1789914224310-target + source: '1789913447671' + sourceHandle: source + target: '1789914224310' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: llm + targetType: llm + id: 1789914224310--1789921225442-target + source: '1789914224310' + sourceHandle: source + target: '1789921225442' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: llm + targetType: code + id: 1789921225442--1789921317767-target + source: '1789921225442' + sourceHandle: source + target: '1789921317767' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: code + targetType: if-else + id: 1789921317767--1789921457891-target + source: '1789921317767' + sourceHandle: source + target: '1789921457891' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: if-else + targetType: end + id: 1789921457891-true-1789921490100-target + source: '1789921457891' + sourceHandle: 'true' + target: '1789921490100' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: if-else + targetType: end + id: 1789921457891-false-1789921594492-target + source: '1789921457891' + sourceHandle: 'false' + target: '1789921594492' + targetHandle: target + type: custom + zIndex: 0 + nodes: + - data: + selected: false + title: User Input + type: start + variables: + - default: '' + hint: '' + label: Wat is er gebeurd of gaat er gebeuren? (wie, wat, waar, wanneer) + options: [] + placeholder: '' + required: true + type: paragraph + variable: kernboodschap + - default: '' + hint: '' + label: 'Voor welke klas of afdeling? (of: hele school)' + options: [] + placeholder: '' + required: true + type: text-input + variable: afdeling + - hint: '' + label: Welke toon past bij dit bericht? + options: + - informatief + - feestelijk + - dringend + placeholder: '' + required: true + type: select + variable: toon + height: 160 + id: '1789912805545' + position: + x: 80 + y: 282 + positionAbsolute: + x: 80 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + dataset_ids: + - IV2tjRVYYkvBu0I6hVYVdNJjRHrmp51bTmvGIX9NBOn/1djPKkYpUIg0wBgi7B9m + multiple_retrieval_config: + reranking_enable: true + reranking_mode: reranking_model + reranking_model: + model: qwen3-rerank + provider: langgenius/tongyi/tongyi + top_k: 4 + query_attachment_selector: [] + query_variable_selector: + - '1789912805545' + - kernboodschap + retrieval_mode: multiple + selected: false + title: Knowledge Retrieval + type: knowledge-retrieval + height: 89 + id: '1789913220684' + position: + x: 382 + y: 282 + positionAbsolute: + x: 382 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + context: + enabled: true + variable_selector: + - '1789913220684' + - result + model: + completion_params: {} + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + prompt_template: + - id: 1a49e20d-2818-4aba-b105-370c308a6f25 + role: system + text: 'Begin je antwoord met de regel WEBSITE en daarna een lege regel. + + + Je schrijft voor Het Voorbeeldcollege, een school voor voortgezet onderwijs. + Schrijf een nieuwsbericht voor de website van maximaal 200 woorden. De + kop is een actieve zin van maximaal acht woorden, zonder uitroepteken. + De eerste alinea beantwoordt wie, wat, waar en wanneer. Sluit af met een + vervolgstap of contactmogelijkheid. Houd je strikt aan de schrijfwijzer + hieronder: taalniveau B1, u voor ouders, te vermijden woorden, namen en + foto''s van leerlingen. Pas de toon aan die is gekozen. Verzin geen feiten. + Ontbreekt iets, schrijf dan [INVULLEN]. + + + Schrijfwijzer: {{#context#}} + + + Afdeling: {{#1789912805545.afdeling#}} + + Toon: {{#1789912805545.toon#}} + + Kernboodschap: {{#1789912805545.kernboodschap#}}' + selected: false + title: Website + type: llm + vision: + enabled: false + height: 87 + id: '1789913283624' + position: + x: 684 + y: 282 + positionAbsolute: + x: 684 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + context: + enabled: true + variable_selector: + - '1789913220684' + - result + model: + completion_params: {} + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + prompt_template: + - id: 6c41b62b-abf0-44df-9daa-bdcecce7a7eb + role: system + text: 'Begin je antwoord met de regel OUDERAPP en daarna een lege regel. + + + Je schrijft voor Het Voorbeeldcollege, een school voor voortgezet onderwijs. + Schrijf een bericht voor de ouderapp van maximaal 80 woorden: ouders lezen + dit op hun telefoon. Eén boodschap, één datum, één actie; geen inleiding + en geen kop. Spreek ouders aan met u. Houd je strikt aan de schrijfwijzer + hieronder. Pas de toon aan die is gekozen. Verzin geen feiten. Ontbreekt + iets, schrijf dan [INVULLEN]. + + + Schrijfwijzer: {{#context#}} + + + Afdeling: {{#1789912805545.afdeling#}} + + Toon: {{#1789912805545.toon#}} + + Kernboodschap: {{#1789912805545.kernboodschap#}}' + selected: false + title: Ouderapp + type: llm + vision: + enabled: false + height: 87 + id: '1789913447671' + position: + x: 986 + y: 282 + positionAbsolute: + x: 986 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + context: + enabled: true + variable_selector: + - '1789913220684' + - result + model: + completion_params: {} + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + prompt_template: + - id: 9cabb98b-c62a-4ab2-b7b7-1f1f43556a13 + role: system + text: 'Begin je antwoord met de regel SOCIAL en daarna een lege regel. + + + Je schrijft voor Het Voorbeeldcollege, een school voor voortgezet onderwijs. + Schrijf een bericht voor de sociale media van de school (Instagram en + LinkedIn) van maximaal 60 woorden. Warm en concreet, geen jubeltaal. Sluit + af met maximaal drie hashtags, waarvan altijd #Voorbeeldcollege. Geen + namen van leerlingen en geen verwijzing naar herkenbare foto''s van leerlingen. + Houd je aan de schrijfwijzer hieronder. Pas de toon aan die is gekozen. + Verzin geen feiten. Ontbreekt iets, schrijf dan [INVULLEN]. + + + Schrijfwijzer: {{#context#}} + + + Afdeling: {{#1789912805545.afdeling#}} + + Toon: {{#1789912805545.toon#}} + + Kernboodschap: {{#1789912805545.kernboodschap#}}' + selected: false + title: Social + type: llm + vision: + enabled: false + height: 87 + id: '1789914224310' + position: + x: 1288 + y: 282 + positionAbsolute: + x: 1288 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + context: + enabled: true + variable_selector: + - '1789913220684' + - result + model: + completion_params: {} + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + prompt_template: + - id: 7eac55b9-216b-467a-bb85-252c3f21cc98 + role: system + text: 'Je bent de controleur van Het Voorbeeldcollege. Hieronder staat een + conceptbericht voor de ouderapp. Beoordeel het op deze punten uit de schrijfwijzer: + maximaal 80 woorden; ouders worden aangesproken met u; één boodschap, + één datum en één actie; geen afkortingen en geen woorden uit de lijst + te vermijden woorden; geen namen van leerlingen; taalniveau B1 (korte + zinnen, gewone woorden). + + + Werk in twee stappen. Stap 1: noem kort wat niet klopt (of schrijf: niets). + Stap 2: geef de verbeterde versie. Verzin geen feiten; wat niet in het + concept staat, blijft [INVULLEN]. Haal geen feiten, data of tijden weg + die in het concept staan; een uiterste datum om aan te melden hoort bij + de actie en blijft staan. Verander cijfers niet in woorden. + + + Geef als antwoord ALLEEN de verbeterde tekst, zonder stap 1, zonder kop + en zonder uitleg. Is het concept al goed, geef het dan ongewijzigd terug. + + + Schrijfwijzer: {{#context#}} + + + Conceptbericht: {{#1789913447671.text#}}' + selected: false + title: Controleur + type: llm + vision: + enabled: false + height: 87 + id: '1789921225442' + position: + x: 1590 + y: 282 + positionAbsolute: + x: 1590 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + code: "def main(website: str, ouderapp: str, social: str) -> dict:\n redenen\ + \ = []\n verboden = [\"middels\", \"omtrent\", \"z.s.m.\", \"d.m.v.\"\ + , \" a.s.\", \"gelieve\", \"ouder(s)/verzorger(s)\"]\n teksten = ((\"\ + website\", website, 230), (\"ouderapp\", ouderapp, 90), (\"social\", social,\ + \ 70))\n for naam, tekst, maximum in teksten:\n aantal = len(tekst.split())\n\ + \ if aantal > maximum:\n redenen.append(f\"{naam}: {aantal}\ + \ woorden, maximaal {maximum}\")\n if \"[INVULLEN]\" in tekst:\n\ + \ redenen.append(f\"{naam}: bevat [INVULLEN], er ontbreekt informatie\"\ + )\n for woord in verboden:\n if woord in tekst.lower():\n\ + \ redenen.append(f\"{naam}: bevat het te vermijden woord\ + \ '{woord.strip()}'\")\n if \"#voorbeeldcollege\" not in social.lower():\n\ + \ redenen.append(\"social: #Voorbeeldcollege ontbreekt\")\n return\ + \ {\n \"ok\": 0 if redenen else 1,\n \"redenen\": \"\\n\"\ + .join(redenen) if redenen else \"Alle regels in orde.\",\n }\n" + code_language: python3 + outputs: + ok: + children: null + type: number + redenen: + children: null + type: string + selected: false + title: Poortwachter + type: code + variables: + - value_selector: + - '1789913283624' + - text + value_type: string + variable: website + - value_selector: + - '1789921225442' + - text + value_type: string + variable: ouderapp + - value_selector: + - '1789914224310' + - text + value_type: string + variable: social + height: 51 + id: '1789921317767' + position: + x: 1892 + y: 282 + positionAbsolute: + x: 1892 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + cases: + - case_id: 'true' + conditions: + - comparison_operator: '=' + id: 82d4d0c5-8725-45db-abd5-ec4977e37d2f + value: '1' + varType: number + variable_selector: + - '1789921317767' + - ok + logical_operator: and + selected: false + title: IF/ELSE + type: if-else + height: 123 + id: '1789921457891' + position: + x: 2194 + y: 282 + positionAbsolute: + x: 2194 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + outputs: + - value_selector: + - '1789913283624' + - text + value_type: string + variable: website + - value_selector: + - '1789921225442' + - text + value_type: string + variable: ouderapp + - value_selector: + - '1789914224310' + - text + value_type: string + variable: social + selected: false + title: Goedgekeurd + type: end + height: 140 + id: '1789921490100' + position: + x: 2496 + y: 282 + positionAbsolute: + x: 2496 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + outputs: + - value_selector: + - '1789921317767' + - redenen + value_type: string + variable: afgekeurd_omdat + - value_selector: + - '1789913283624' + - text + value_type: string + variable: concept_website + - value_selector: + - '1789921225442' + - text + value_type: string + variable: concept_ouderapp + - value_selector: + - '1789914224310' + - text + value_type: string + variable: concept_social + selected: false + title: Naar de communicatiemedewerker + type: end + height: 166 + id: '1789921594492' + position: + x: 2496 + y: 461 + positionAbsolute: + x: 2496 + y: 461 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + viewport: + x: -1050.7133416209424 + y: 53.85916780978505 + zoom: 0.558163294467307 + rag_pipeline_variables: [] diff --git a/05-transcriptietool/transcriptietool.dify.yml b/05-transcriptietool/transcriptietool.dify.yml new file mode 100644 index 0000000..bfa6d6b --- /dev/null +++ b/05-transcriptietool/transcriptietool.dify.yml @@ -0,0 +1,386 @@ +app: + description: '' + icon: 🤖 + icon_background: '#FFEAD5' + icon_type: emoji + mode: workflow + name: Transcriptietool + use_icon_as_answer_icon: false +dependencies: +- current_identifier: null + type: marketplace + value: + marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb + version: null +kind: app +version: 0.7.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: + attachment_image_file_size_limit: 2 + audio_file_size_limit: 50 + batch_count_limit: 5 + file_size_limit: 15 + file_upload_limit: 50 + image_file_batch_limit: 10 + image_file_size_limit: 10 + knowledge_file_size_limit: 50 + single_chunk_attachment_limit: 10 + skill_file_size_limit: 50 + 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: start + targetType: tool + id: 1789905909545--1789907829506-target + source: '1789905909545' + sourceHandle: source + target: '1789907829506' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: tool + targetType: llm + id: 1789907829506--1789907910221-target + source: '1789907829506' + sourceHandle: source + target: '1789907910221' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: llm + targetType: end + id: 1789907910221--1789908001102-target + source: '1789907910221' + sourceHandle: source + target: '1789908001102' + targetHandle: target + type: custom + zIndex: 0 + nodes: + - data: + selected: false + title: User Input + type: start + variables: + - allowed_file_extensions: [] + allowed_file_types: + - audio + allowed_file_upload_methods: + - local_file + default: '' + hide: false + hint: '' + label: Opname van het overleg (mp3, m4a of wav) + options: [] + placeholder: '' + required: true + type: file + variable: opname + height: 108 + id: '1789905909545' + position: + x: 80 + y: 282 + positionAbsolute: + x: 80 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + is_team_authorization: true + paramSchemas: + - auto_generate: null + default: null + form: llm + human_description: + en_US: The audio file to be converted. + ja_JP: The audio file to be converted. + pt_BR: The audio file to be converted. + zh_Hans: 要转换的音频文件。 + input_schema: null + label: + en_US: Audio File + ja_JP: Audio File + pt_BR: Audio File + zh_Hans: 音频文件 + llm_description: The audio file to be converted. + max: null + min: null + multiple: false + name: audio_file + options: [] + placeholder: null + precision: null + required: true + scope: null + template: null + type: file + - auto_generate: null + default: null + form: form + human_description: + en_US: All available ASR models. You can config model in the Model Provider + of Settings. + ja_JP: All available ASR models. You can config model in the Model Provider + of Settings. + pt_BR: All available ASR models. You can config model in the Model Provider + of Settings. + zh_Hans: 所有可用的 ASR 模型。你可以在设置中的模型供应商里配置。 + input_schema: null + label: + en_US: Model + ja_JP: Model + pt_BR: Model + zh_Hans: Model + llm_description: null + max: null + min: null + multiple: false + name: model + options: + - icon: null + label: + en_US: gpt-4o-mini-transcribe-2025-12-15(langgenius/openai/openai) + ja_JP: gpt-4o-mini-transcribe-2025-12-15(langgenius/openai/openai) + pt_BR: gpt-4o-mini-transcribe-2025-12-15(langgenius/openai/openai) + zh_Hans: gpt-4o-mini-transcribe-2025-12-15(langgenius/openai/openai) + value: langgenius/openai/openai#gpt-4o-mini-transcribe-2025-12-15 + - icon: null + label: + en_US: gpt-4o-mini-transcribe(langgenius/openai/openai) + ja_JP: gpt-4o-mini-transcribe(langgenius/openai/openai) + pt_BR: gpt-4o-mini-transcribe(langgenius/openai/openai) + zh_Hans: gpt-4o-mini-transcribe(langgenius/openai/openai) + value: langgenius/openai/openai#gpt-4o-mini-transcribe + - icon: null + label: + en_US: gpt-4o-transcribe-diarize(langgenius/openai/openai) + ja_JP: gpt-4o-transcribe-diarize(langgenius/openai/openai) + pt_BR: gpt-4o-transcribe-diarize(langgenius/openai/openai) + zh_Hans: gpt-4o-transcribe-diarize(langgenius/openai/openai) + value: langgenius/openai/openai#gpt-4o-transcribe-diarize + - icon: null + label: + en_US: gpt-4o-transcribe(langgenius/openai/openai) + ja_JP: gpt-4o-transcribe(langgenius/openai/openai) + pt_BR: gpt-4o-transcribe(langgenius/openai/openai) + zh_Hans: gpt-4o-transcribe(langgenius/openai/openai) + value: langgenius/openai/openai#gpt-4o-transcribe + - icon: null + label: + en_US: whisper-1(langgenius/openai/openai) + ja_JP: whisper-1(langgenius/openai/openai) + pt_BR: whisper-1(langgenius/openai/openai) + zh_Hans: whisper-1(langgenius/openai/openai) + value: langgenius/openai/openai#whisper-1 + placeholder: null + precision: null + required: true + scope: null + template: null + type: select + params: + audio_file: '' + model: '' + plugin_id: null + plugin_unique_identifier: '' + provider_icon: https://cloud.dify.ai/console/api/workspaces/current/tool-provider/builtin/audio/icon + provider_id: audio + provider_name: audio + provider_show_name: Audio + provider_type: builtin + selected: false + title: Speech To Text + tool_configurations: + model: + type: constant + value: langgenius/openai/openai#gpt-4o-transcribe-diarize + tool_description: Convert audio file to text. + tool_label: Speech To Text + tool_name: asr + tool_node_version: '2' + tool_parameters: + audio_file: + type: variable + value: + - '1789905909545' + - opname + type: tool + height: 87 + id: '1789907829506' + position: + x: 382 + y: 282 + positionAbsolute: + x: 382 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + context: + enabled: false + variable_selector: [] + model: + completion_params: {} + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + prompt_template: + - id: 0f390951-257b-4ed0-9cc8-4db2ff8f9c51 + role: system + text: 'Begin je antwoord met de regel # VERSLAG en daarna een lege regel. + + + Je maakt een verslag van een overleg op een school, op basis van het transcript + hieronder. Het transcript komt van automatische spraakherkenning en kan + fouten bevatten in namen en getallen; schrijf dan op wat het meest waarschijnlijk + is en zet een vraagteken tussen haakjes achter wat je niet zeker weet. + + + Schrijf in het Nederlands, zakelijk en kort. Gebruik precies deze indeling + met deze kopjes: + + + ## Overleg + + Een regel: welk overleg, datum, aanwezigen (als dat uit het transcript + blijkt). + + + ## Samenvatting + + Maximaal vijf zinnen over wat er is besproken. + + + ## Besluiten + + Genummerde lijst. Alleen wat echt is besloten, geen voornemens. + + + ## Actiepunten + + Tabel met kolommen: Wat, Wie, Wanneer. Staat er geen datum, schrijf dan + "niet genoemd". + + + ## Doorgeschoven + + Punten die bewust naar een volgend overleg zijn verplaatst, met de reden. + + + Laat zijpaden en informele opmerkingen weg. Verzin niets wat niet in het + transcript staat. + + + Transcript: + + {{#1789907829506.text#}}' + selected: true + title: Verslag + type: llm + vision: + enabled: false + height: 87 + id: '1789907910221' + position: + x: 684 + y: 282 + positionAbsolute: + x: 684 + y: 282 + selected: true + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + outputs: + - value_selector: + - '1789907910221' + - text + value_type: string + variable: verslag + - value_selector: + - '1789907829506' + - text + value_type: string + variable: transcript + selected: false + title: Output + type: end + height: 114 + id: '1789908001102' + position: + x: 986 + y: 282 + positionAbsolute: + x: 986 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + viewport: + x: -187.14285714285688 + y: -54.355400696864024 + zoom: 1.0452961672473866 + rag_pipeline_variables: [] diff --git a/08-chatflow-studiecoach/studiecoach-biologie.dify.yml b/08-chatflow-studiecoach/studiecoach-biologie.dify.yml new file mode 100644 index 0000000..c75525b --- /dev/null +++ b/08-chatflow-studiecoach/studiecoach-biologie.dify.yml @@ -0,0 +1,746 @@ +app: + description: '' + icon: 🤖 + icon_background: '#FFEAD5' + icon_type: emoji + mode: advanced-chat + name: Studiecoach biologie + use_icon_as_answer_icon: false +dependencies: +- current_identifier: null + type: marketplace + value: + marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb + version: null +- current_identifier: null + type: marketplace + value: + marketplace_plugin_unique_identifier: langgenius/tongyi:0.2.22@9cea96ffc7977f536c02999c80ff1283b1819aab9b6fa2fdf789d0c6c7d03715 + version: null +kind: app +version: 0.7.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: + attachment_image_file_size_limit: 2 + audio_file_size_limit: 50 + batch_count_limit: 5 + file_size_limit: 15 + file_upload_limit: 50 + image_file_batch_limit: 10 + image_file_size_limit: 10 + knowledge_file_size_limit: 50 + single_chunk_attachment_limit: 10 + skill_file_size_limit: 50 + 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: Hoi! Ik ben de studiecoach biologie voor thema 4, Ecologie. + Ik leg begrippen uit, help je op weg bij opdrachten (zonder het antwoord te + verklappen) en weet alles van de planning en de toets. Wat wil je weten? + retriever_resource: + enabled: true + sensitive_word_avoidance: + enabled: false + speech_to_text: + enabled: false + suggested_questions: + - Wat is het verschil tussen een populatie en een levensgemeenschap? + - Wanneer is de toets en wat moet ik kennen? + suggested_questions_after_answer: + enabled: false + text_to_speech: + enabled: false + language: '' + voice: '' + graph: + edges: + - data: + isInIteration: false + isInLoop: false + sourceType: start + targetType: question-classifier + id: 1789923857633--1789923937488-target + source: '1789923857633' + sourceHandle: source + target: '1789923937488' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: question-classifier + targetType: knowledge-retrieval + id: 1789923937488-1-1789924472272-target + source: '1789923937488' + sourceHandle: '1' + target: '1789924472272' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: knowledge-retrieval + targetType: llm + id: 1789924472272--1789924628356-target + source: '1789924472272' + sourceHandle: source + target: '1789924628356' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: llm + targetType: answer + id: 1789924628356--1789924833591-target + source: '1789924628356' + sourceHandle: source + target: '1789924833591' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: question-classifier + targetType: llm + id: 1789923937488-2-1789924909192-target + source: '1789923937488' + sourceHandle: '2' + target: '1789924909192' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: llm + targetType: answer + id: 1789924909192--1789925010730-target + source: '1789924909192' + sourceHandle: source + target: '1789925010730' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: question-classifier + targetType: knowledge-retrieval + id: 1789923937488-1789924020089-1789925051203-target + source: '1789923937488' + sourceHandle: '1789924020089' + target: '1789925051203' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: knowledge-retrieval + targetType: llm + id: 1789925051203--1789925089041-target + source: '1789925051203' + sourceHandle: source + target: '1789925089041' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: llm + targetType: answer + id: 1789925089041--1789925225843-target + source: '1789925089041' + sourceHandle: source + target: '1789925225843' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: question-classifier + targetType: human-input + id: 1789923937488-1789924050627-1789925274256-target + source: '1789923937488' + sourceHandle: '1789924050627' + target: '1789925274256' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: human-input + targetType: answer + id: 1789925274256-verstuur-1789925491921-target + source: '1789925274256' + sourceHandle: verstuur + target: '1789925491921' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: human-input + targetType: answer + id: 1789925274256-__timeout-1789925527376-target + source: '1789925274256' + sourceHandle: __timeout + target: '1789925527376' + targetHandle: target + type: custom + zIndex: 0 + - data: + isInIteration: false + isInLoop: false + sourceType: question-classifier + targetType: answer + id: 1789923937488-1789924050627-1789925581141-target + source: '1789923937488' + sourceHandle: '1789924050627' + target: '1789925581141' + targetHandle: target + type: custom + zIndex: 0 + nodes: + - data: + selected: false + title: User Input + type: start + variables: [] + height: 72 + id: '1789923857633' + position: + x: 80 + y: 282 + positionAbsolute: + x: 80 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + classes: + - id: '1' + label: CLASS 1 + name: 'Begripsvraag: de leerling wil iets uit de lesstof begrijpen of uitgelegd + krijgen, bijvoorbeeld wat een begrip betekent, hoe iets werkt, waarom + iets zo is, of een voorbeeld.' + - id: '2' + label: CLASS 2 + name: 'Huiswerkvraag: de leerling vraagt het antwoord op een opdracht, oefening + of toetsvraag, of wil dat het huiswerk gemaakt of nagekeken wordt.' + - id: '1789924020089' + label: CLASS 3 + name: 'Planningsvraag: de leerling vraagt naar de toets, de datum, wat er + geleerd moet worden, het huiswerk voor een bepaalde les, de steunles, + het practicum of andere afspraken uit de studiewijzer.' + - id: '1789924050627' + label: CLASS 4 + name: 'Persoonlijk of zorgelijk: de leerling schrijft over zichzelf, bijvoorbeeld + dat het niet lukt, stress, faalangst, problemen thuis of in de klas, ziekte, + gepest worden, of wil met de docent of mentor praten. Ook alles wat niet + over biologie gaat.' + model: + completion_params: + temperature: 0.7 + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + query_variable_selector: + - '1789923857633' + - sys.query + selected: true + title: Question Classifier + type: question-classifier + vision: + enabled: false + height: 261 + id: '1789923937488' + position: + x: 382 + y: 282 + positionAbsolute: + x: 382 + y: 282 + selected: true + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + dataset_ids: + - Uqn0Z4GGwZhu/HhmwEuyZw98elYRlHr+Qlx64oIA3fK4DjLQWqrTbgrsSTkyMncc + multiple_retrieval_config: + reranking_enable: true + reranking_mode: reranking_model + reranking_model: + model: qwen3-rerank + provider: langgenius/tongyi/tongyi + top_k: 4 + query_attachment_selector: [] + query_variable_selector: + - '1789923857633' + - sys.query + retrieval_mode: multiple + selected: false + title: Knowledge Retrieval + type: knowledge-retrieval + height: 89 + id: '1789924472272' + position: + x: 684 + y: 282 + positionAbsolute: + x: 684 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + context: + enabled: true + variable_selector: + - '1789924472272' + - result + memory: + query_prompt_template: '{{#sys.query#}} + + + {{#sys.files#}}' + role_prefix: + assistant: '' + user: '' + window: + enabled: false + size: 50 + model: + completion_params: {} + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + prompt_template: + - id: 74adce4b-ee1a-4ea4-94bb-a1c39e020a1e + role: system + text: 'Je bent de studiecoach biologie van Het Voorbeeldcollege voor leerlingen + van 3 havo. Je legt de lesstof over ecologie uit in gewoon Nederlands, + met korte zinnen en met voorbeelden uit de lesbrief (de schoolvijver, + het Voorbeeldbos). + + + Regels: + + - Gebruik alleen de lesstof hieronder. Staat het antwoord er niet in, + zeg dat dan en verwijs naar de docent of de steunles. + + - Spreek de leerling aan met je. Maximaal acht zinnen. + + - Eindig met één korte controlevraag waarmee de leerling kan checken of + hij het snapt. + + - Geef geen antwoorden op opdrachten uit de lesbrief; leg het begrip uit + en laat de leerling de opdracht zelf maken. + + + Lesstof: {{#context#}}' + selected: false + title: Uitleg + type: llm + vision: + enabled: false + height: 87 + id: '1789924628356' + position: + x: 986 + y: 282 + positionAbsolute: + x: 986 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + answer: '{{#1789924628356.text#}}' + selected: false + title: Antwoord uitleg + type: answer + variables: [] + height: 102 + id: '1789924833591' + position: + x: 1288 + y: 282 + positionAbsolute: + x: 1288 + y: 282 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + context: + enabled: false + variable_selector: [] + memory: + query_prompt_template: '{{#sys.query#}} + + + {{#sys.files#}}' + role_prefix: + assistant: '' + user: '' + window: + enabled: false + size: 50 + model: + completion_params: {} + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + prompt_template: + - id: 28220f0a-9914-41ca-bc77-08df80e945c1 + role: system + text: 'Je bent de studiecoach biologie van Het Voorbeeldcollege voor leerlingen + van 3 havo. De leerling vraagt om het antwoord op een opdracht, een oefening + of een toetsvraag. Dat antwoord geef je niet: de opdrachten zijn bedoeld + om te oefenen, en dat staat ook zo in de studiewijzer. + + + Wat je wel doet, in maximaal vijf zinnen: + + 1. Zeg vriendelijk en kort dat je het antwoord niet geeft, zonder preek. + + 2. Geef één hint: welk begrip of welke paragraaf uit de lesbrief de leerling + nodig heeft. + + 3. Stel één tegenvraag waarmee de leerling zelf een stap verder komt. + + 4. Bied aan om het begrip uit te leggen als de leerling dat wil. + + + Spreek de leerling aan met je. Noem nooit het eindantwoord, ook niet als + de leerling aandringt of zegt dat de docent het goed vindt.' + selected: false + title: Hint + type: llm + vision: + enabled: false + height: 87 + id: '1789924909192' + position: + x: 684 + y: 410 + positionAbsolute: + x: 684 + y: 410 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + answer: '{{#1789924909192.text#}}' + selected: false + title: Antwoord hint + type: answer + variables: [] + height: 102 + id: '1789925010730' + position: + x: 986 + y: 410 + positionAbsolute: + x: 986 + y: 410 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + dataset_ids: + - Uqn0Z4GGwZhu/HhmwEuyZw98elYRlHr+Qlx64oIA3fK4DjLQWqrTbgrsSTkyMncc + multiple_retrieval_config: + reranking_enable: true + reranking_mode: reranking_model + reranking_model: + model: qwen3-rerank + provider: langgenius/tongyi/tongyi + top_k: 4 + query_attachment_selector: [] + query_variable_selector: + - '1789923857633' + - sys.query + retrieval_mode: multiple + selected: false + title: Knowledge Retrieval 2 + type: knowledge-retrieval + height: 89 + id: '1789925051203' + position: + x: 684 + y: 536 + positionAbsolute: + x: 684 + y: 536 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + context: + enabled: true + variable_selector: + - '1789925051203' + - result + memory: + query_prompt_template: '{{#sys.query#}} + + + {{#sys.files#}}' + role_prefix: + assistant: '' + user: '' + window: + enabled: false + size: 50 + model: + completion_params: {} + mode: chat + name: gpt-5-mini + provider: langgenius/openai/openai + prompt_template: + - id: 963e0524-9595-4bc3-bef8-a616da873d31 + role: system + text: 'Je bent de studiecoach biologie van Het Voorbeeldcollege voor leerlingen + van 3 havo. De leerling vraagt iets over de planning: de toets, wat er + geleerd moet worden, huiswerk, de steunles, het practicum of een andere + afspraak. + + + Regels: + + - Antwoord alleen op basis van de studiewijzer hieronder. Noem data, lesuren + en lokalen precies zoals ze daar staan. + + - Staat het er niet in, zeg dat dan en verwijs naar de docent (biologie@voorbeeldcollege.nl) + of de steunles op dinsdag het 8e uur in B12. + + - Spreek de leerling aan met je. Kort en concreet, maximaal vijf zinnen. + Gebruik een opsomming als het om meerdere dingen gaat. + + + Studiewijzer: {{#context#}}' + selected: false + title: Planning + type: llm + vision: + enabled: false + height: 87 + id: '1789925089041' + position: + x: 986 + y: 536 + positionAbsolute: + x: 986 + y: 536 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + answer: '{{#1789925089041.text#}}' + selected: false + title: Antwoord planning + type: answer + variables: [] + height: 102 + id: '1789925225843' + position: + x: 1288 + y: 536 + positionAbsolute: + x: 1288 + y: 536 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + delivery_methods: + - config: + body: 'Een leerling van 3 havo stelde de Studiecoach een persoonlijke + vraag die de coach niet zelf beantwoordt. Lees het gesprek en schrijf + een kort antwoord; dat krijgt de leerling in de chat te zien. Reageer + via deze link: {{#url#}}' + debug_mode: true + recipients: + items: + - email: biologie@voorbeeldcollege.nl + type: external + whole_workspace: false + subject: 'Studiecoach biologie: een leerling heeft je nodig' + enabled: true + id: 9f54978b-77e0-4cc7-a8cf-42158ddbeac4 + type: email + form_content: "Bericht van de leerling: {{#sys.query#}}\n\nJouw antwoord aan\ + \ de leerling (dit komt letterlijk in de chat): \n{{#$output.antwoord_docent#}}\n" + inputs: + - default: + selector: [] + type: constant + value: '' + output_variable_name: antwoord_docent + type: paragraph + selected: false + timeout: 3 + timeout_unit: day + title: Docent + type: human-input + user_actions: + - button_style: default + id: verstuur + title: Verstuur aan de leerling + height: 163 + id: '1789925274256' + position: + x: 684 + y: 664 + positionAbsolute: + x: 684 + y: 664 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + answer: ' + + + Bericht van je docent: + + + {{#1789925274256.antwoord_docent#}}' + selected: false + title: Antwoord docent + type: answer + variables: [] + height: 118 + id: '1789925491921' + position: + x: 986 + y: 664 + positionAbsolute: + x: 986 + y: 664 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + answer: 'Je docent heeft nog niet kunnen reageren. Je bericht is niet verloren: + spreek je docent of mentor morgen even aan, of mail naar biologie@voorbeeldcollege.nl. + Gaat het echt niet goed met je? Praat dan vandaag nog met iemand thuis of + op school, of bel of chat met De Kindertelefoon (0800-0432).' + selected: false + title: Geen reactie + type: answer + variables: [] + height: 227 + id: '1789925527376' + position: + x: 986 + y: 802 + positionAbsolute: + x: 986 + y: 802 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + - data: + answer: Dank je dat je dit vertelt. Dit is iets voor een mens, niet voor mij. + Ik heb je bericht doorgestuurd naar je docent biologie; zodra die reageert, + zie je het antwoord hier in de chat. Wil je nu meteen met iemand praten? + Ga naar je mentor, of bel of chat met De Kindertelefoon (0800-0432, gratis + en anoniem). + selected: false + title: Doorgestuurd + type: answer + variables: [] + height: 227 + id: '1789925581141' + position: + x: 684 + y: 866 + positionAbsolute: + x: 684 + y: 866 + selected: false + sourcePosition: right + targetPosition: left + type: custom + width: 242 + zIndex: 0 + viewport: + x: 84.2113567509017 + y: 16.36118740102927 + zoom: 0.7697721474443565 + rag_pipeline_variables: [] diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a096e4..13e40ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ Dify verandert snel. Elke handleiding vermeldt op de titelpagina op welke dag de schermen zijn vastgelegd. Hier staat per uitgave wat er veranderde. +## 2026-09-21, DSL-bestanden + +- Elke Studio-app staat als `.dify.yml` in de map van zijn handleiding, te importeren via Studio, Create, Import DSL file. Installatie-instructie in de README. + ## 2026-09-20, eerste uitgave - Handleidingen 04 (Agent Console: Toetsweekplanner) en 06 (Agent Console: Lesmateriaal-check met eigen Edurep-zoektool). diff --git a/README.md b/README.md index c2772f0..9fce625 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,31 @@ De apps uit de handleidingen staan live om uit te proberen: - Lesmateriaal-check (06): https://udify.app/agent/lkWKedkSW2d3nqBV - Studiecoach biologie (08): https://udify.app/chat/fP0TJW3s8IXOj9BO +## Apps installeren in je eigen Dify + +Elke Studio-app staat ook als bestand in de map van zijn handleiding: `.dify.yml`. Dat is de +DSL-export van Dify. Zo zet je hem in je eigen werkruimte (online of zelf gehost): + +1. Download het `.dify.yml`-bestand uit de map. +2. Ga in Dify naar **Studio**, klik **Create** en kies **Import DSL file**. +3. Sleep het bestand in het venster en klik **Create**. +4. Kies bij elke LLM-stap je eigen model (de export verwijst naar gpt-5-mini via OpenAI) en koppel + bij **Knowledge** je eigen kennisbank; die reist niet mee. Maak hem eerst aan met het + voorbeelddocument uit dezelfde map (handleiding 02, stap 1 tot 5). +5. **Publish**. + +De bestanden bevatten geen sleutels. De Agent Console-apps van 04 en 06 kennen (nog) geen export; +die bouw je met de handleiding na. + +| Bestand | Handleiding | +| --- | --- | +| 01-workflow/tekst-op-niveau.dify.yml | 01 | +| 02-agent-kennisbank/schoolgids-assistent.dify.yml | 02 (inclusief de Balie-stand uit 03) | +| 03-schoolcommunicatie/ouderbrief-assistent.dify.yml | 03 | +| 03-schoolcommunicatie/schoolnieuws.dify.yml | 03 en 07 (versie 2, met Controleur en Poortwachter) | +| 05-transcriptietool/transcriptietool.dify.yml | 05 | +| 08-chatflow-studiecoach/studiecoach-biologie.dify.yml | 08 | + ## Zelf bouwen of bewerken Elke map heeft dezelfde opbouw: