DSL-exports van de apps, installatie-instructie in README

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido van Dijk
2026-09-21 09:24:26 +02:00
parent b519acc0f6
commit 2feaede14e
8 changed files with 2303 additions and 0 deletions
@@ -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
+642
View File
@@ -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: []