MNOT Bot: verschil tussen versies

Uit Met Nerds om Tafel - Wiki
Naar navigatie springen Naar zoeken springen
k Wiki bijlezen gebeurt nu wekelijks in plaats van maandelijks (via Claude)
 
(13 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 8: Regel 8:
== MNOT Bot ✕ OpenAI ==
== MNOT Bot ✕ OpenAI ==
=== Algemeen ===
=== Algemeen ===
MNOT Bot is gekoppeld aan het [https://beta.openai.com/docs/models/gpt-3 GPT-3 model van OpenAI]. Dit maakt het mogelijk om gesprekken te voeren met de bot.  
MNOT Bot is gekoppeld aan de GPT-modellen van [https://openai.com/ OpenAI]. Dit maakt het mogelijk om gesprekken te voeren met de bot.  
Wanneer je de bot @-mentioned waar dan ook op Slack (de bot moet wel in het betreffende kanaal aanwezig zijn) zal hij in thread op je reageren. Vervolgens kun je in die thread het gesprek vervolgen. Ook andere mensen kunnen in het gesprek meedoen.
Wanneer je de bot @-mentioned waar dan ook op Slack (de bot moet wel in het betreffende kanaal aanwezig zijn) zal hij in thread op je reageren. Vervolgens kun je in die thread het gesprek vervolgen. Ook andere mensen kunnen in het gesprek meedoen.


=== Prompt ===
=== Wat je hem kunt vragen ===
De OpenAI API die gebruikt wordt is [https://beta.openai.com/docs/guides/completion/introduction Text Completion]. We geven de bot een prompt (een stuk tekst) en hij zal die prompt vervolgens aanvullen.
Behalve gewoon kletsen kun je de bot ook om een paar concrete dingen vragen:
Omdat we willen dat de interactie aanvoelt als een gesprek bouwen we de prompt op als gesprek.
* '''Een samenvatting van een thread'''<br />Noem de bot in een thread en vraag bijvoorbeeld ''"vat deze thread samen"''.
De huidige opzet van de prompt is als volgt:
* '''Een samenvatting van een kanaal'''<br />Vraag ''"vat samen wat hier gezegd is"'', dan leest de bot de recente berichten in het kanaal terug.
 
* '''Een plaatje'''<br />Vraag bijvoorbeeld ''"maak een plaatje van een nerd met een Spa Rood"''. Je kunt drie plaatjes per dag laten maken.
<nowiki>
* '''Iets over de podcast of de community'''<br />De bot kent de afleveringen, de [[Best Buy Guide]], de [[MNOT Travel Guide]] en deze wiki, en beantwoordt daar vragen over.
Dit is een gesprek tussen vrienden en MNOT Bot. MNOT Bot is slim maar sarcastisch en soms cynisch. Dennis is Chief Emoji Officer & MNOT Bot dev.
 
Dennis: Hallo @MNOT Bot, hoe gaat het?
MNOT Bot: Hoi Dennis, het gaat goed, dank je. Met jou ook?
Dennis: Ja hoor, prima. Kun je een mop vertellen?
MNOT Bot:</nowiki>
 
In de intro geven we aan dat het om een gesprek gaat tussen vrienden. Ook proberen we het karakter van de bot te sturen door hem te omschrijven.
We kunnen ook meer context geven over alle gespreksdeelnemers in de thread. Wanneer je op Slack je '''Title''' en/of '''Pronouns''' hebt ingevuld zal je in de intro benoemd worden. Dit geeft de bot meer informatie over jou die hij kan gebruiken in zijn antwoorden.
Vervolgens pakken we de '''laatste 15 berichten''' uit de thread om mee te sturen. Dit geeft de bot de gesprekscontext die nodig is om langere gesprekken te kunnen voeren. (Anders zou hij alles vóór het huidige bericht alweer vergeten zijn!)
 
=== Tokens & kosten ===
Het opsturen van een bericht naar OpenAI en het ontvangen van het antwoord kost [https://beta.openai.com/docs/introduction/tokens tokens]. Een token vertegenwoordigt ongeveer 4 letters of driekwart van een gemiddeld Engels woord en ons gebruikte model Davinci kost $0.02 per 1000 tokens. De prompt zoals hierboven in het voorbeeld is bijvoorbeeld 129 tokens lang, maar als een thread langer doorgaat en er langere antwoorden van de bot gevraagd worden kunnen die berichten oplopen tot honderden of zelfs duizenden tokens per request.
 
==== Verbruik verminderen ====
Dit is ook de reden dat we voor de gesprekscontext alleen de laatste 15 berichten meesturen en niet de hele thread. Dat zou op een gegeven moment zorgen voor extreem "dure" berichten en tot nu toe hebben we gemerkt dat 10-15 berichten aan context voldoende is voor een leuk gesprek.
 
Wat we ook doen om de prompt kleiner te houden is berichten weglaten die niet nodig zijn voor de gesprekscontext. Wanneer je bijvoorbeeld in een thread iets wil vragen aan iemand anders, of een opmerking wil maken over de reactie van de bot kun je je bericht prefixen met <code># </code>. Dit zullen wij herkennen en dat bericht laten we dan weg.  
 
==== API keys ====
Gelukkig hebben we tot nu toe niets uit eigen zak hoeven te betalen. Wanneer je een [https://beta.openai.com/signup gratis account aanmaakt bij OpenAI] krijg je $18 aan gratis tegoed die je kunt gebruiken. Als je vervolgens een [https://beta.openai.com/account/api-keys API key aanvraagt] en je DM't die op Slack naar Dennis (@CEO) dan voegen we hem toe aan de bot. Momenteel zijn er meerdere API keys in gebruik en voor elk request pakken we random een key van de lijst zodat het verbruik eerlijk verdeeld wordt.
 
=== Temperature ===
Eén van de instellingen van de bot is de [https://towardsdatascience.com/how-to-sample-from-language-models-682bceb97277 ''Temperature'']. Deze instelling bepaald hoe strikt of hoe vrij de bot is in het antwoorden op berichten. De waarde van de temperature ligt tussen de <code>0</code> en de <code>1</code> waarbij <code>0</code> erg strikt is en bij <code>1</code> zal hij erg creatief zijn in zijn antwoord.
 
=== Karakter van de bot ===
Om de gesprekken met de bot gevarieerder te maken krijgt hij elke ochtend om 09:00 uur nieuwe karaktereigenschappen. We stellen een willekeurige nieuwe ''Temperature'' in tussen de <code>0</code> en<code>1</code> en we kiezen uit een lijst met voorgedefinieerde karakteromschrijvingen willekeurig een nieuwe. Zo zal de bot elke dag iets anders reageren.


=== Handig om te weten ===
=== Handig om te weten ===
Er zijn nog een aantal dingen goed om te weten of om rekening mee te houden wanneer je met de bot praat:
Er zijn nog een aantal dingen goed om te weten of om rekening mee te houden wanneer je met de bot praat:
* De bot heeft geen toegang tot Slack of de kanalen en gebruikers in Slack. Het enige dat hij 'weet' is wat er in de afgelopen 15 berichten is gezegd en eventueel informatie over de gespreksdeelnemers.
* De bot ziet het gesprek waarin je hem aanspreekt, en kan de recente berichten van dát kanaal teruglezen wanneer je om een samenvatting vraagt. In andere kanalen en in je DM's kan hij niet kijken.
* De bot kan geen plaatjes 'zien' of informatie bekijken achter een link. Hij reageert alleen op de aangeleverde berichten.
* De bot kan ook plaatjes 'zien' die je upload bij je bericht!
* Davinci (het GPT-3 model dat we gebruiken) is bijgeleerd tot halverwege 2021. Van recentere gebeurtenissen is de bot dus niet op de hoogte.
* Het GPT model dat we gebruiken is bijgeleerd t/m februari 2026. Gaat je vraag over iets van daarna, dan zoekt de bot het voor je op op internet.
* In '''#adhd''' is de bot niet actief.


== Slash commands ==
== Slash commands ==
Regel 55: Regel 29:
De bot reageert op een aantal ingebouwde Slash-commands:
De bot reageert op een aantal ingebouwde Slash-commands:
* <code>/mnot help</code><br />Toont een lijst van mogelijke Slash commands die je kunt gebruiken.
* <code>/mnot help</code><br />Toont een lijst van mogelijke Slash commands die je kunt gebruiken.
* <code>/mnot poll</code><br />Opent een modal waarmee je een poll kan starten in het huidige kanaal.
* <code>/mnot poll</code><br />Opent een modal waarmee je een poll kan starten in het huidige kanaal. Weet je al wat je wilt vragen, dan kan het ook in één keer: <code>/mnot poll "vraag" "antwoord 1" "antwoord 2"</code>.
* <code>/mnot slap @user</code><br />Oude IRC functie. Mep een mede-Slacker met een forel!
* <code>/mnot slap @user</code><br />Oude IRC functie. Mep een mede-Slacker met een forel!
* <code>/mnot invite</code><br />Opent een modal waarmee je een uitnodiging kan posten naar een specifiek private channel.
* <code>/mnot invite</code><br />Opent een modal waarmee je een uitnodiging kan posten naar een specifiek private channel.
* <code>/mnot mock [tekst]</code><br />ZeT jE tEkSt In AfWiSsElEnDe HoOfDlEtTeRs.
* <code>/spoiler</code><br />Post een spoiler die de rest pas te zien krijgt als ze erop klikken.
* <code>/mnot wrapped</code><br />Haalt je persoonlijke [[#MNOT Wrapped|MNOT Wrapped]] op.
<code>/mock</code>, <code>/spoiler</code> en <code>/wrapped</code> werken ook zonder <code>/mnot</code> ervoor.
== Polls ==
Een poll start je met <code>/mnot poll</code> in het kanaal waar hij moet komen. Bij het maken kies je of er meerdere antwoorden aangevinkt mogen worden, of er anoniem gestemd wordt, en of anderen zelf antwoordopties mogen toevoegen (tot maximaal tien opties in totaal).
Iets vergeten? Als starter van de poll kun je hem tot '''15 minuten''' na het starten nog bewerken of verwijderen met de knop ''Bewerken''. Daarna staat hij vast. Een poll sluit automatisch '''twee weken''' nadat hij gestart is.


== Automatische functies ==
== Automatische functies ==
Regel 65: Regel 50:
* '''Portal Parrot Matcher'''<br />Wanneer je twee berichten post met in de ene een [[Bestand:portal-1.gif|16px|link=]] :portal-1: en in de andere een [[Bestand:portal-2.gif|16px|link=]] :portal-2: emoji,<br />dan zal MNOT Bot deze berichten aan elkaar koppelen (de portal creëren) door in thread op deze berichten te reageren met een link.
* '''Portal Parrot Matcher'''<br />Wanneer je twee berichten post met in de ene een [[Bestand:portal-1.gif|16px|link=]] :portal-1: en in de andere een [[Bestand:portal-2.gif|16px|link=]] :portal-2: emoji,<br />dan zal MNOT Bot deze berichten aan elkaar koppelen (de portal creëren) door in thread op deze berichten te reageren met een link.
* '''Illegale [[Bestand:1337.png|16px|link=]] afkeuring'''<br />Een [[Bestand:1337.png|16px|link=]] mag natuurlijk alleen om 13:37 uur in '''#huiskamer''' gepost worden. Wanneer dat op een ander tijdstip gebeurd zal MNOT Bot afwijzend reageren met een [[Bestand:x.png|16px|link=]] reacji.
* '''Illegale [[Bestand:1337.png|16px|link=]] afkeuring'''<br />Een [[Bestand:1337.png|16px|link=]] mag natuurlijk alleen om 13:37 uur in '''#huiskamer''' gepost worden. Wanneer dat op een ander tijdstip gebeurd zal MNOT Bot afwijzend reageren met een [[Bestand:x.png|16px|link=]] reacji.
* '''Stemmen op luistervragen'''<br />Elke nieuwe vraag in '''#vragen-van-de-luisteraar''' krijgt van de bot een <code>:upvote:</code>-reacji, zodat de rest meteen kan stemmen op de vragen die ze het liefst behandeld zien.
* '''This is the way'''<br />Post je ''this is the way'' in een kanaal waar de bot bij zit, dan antwoordt hij zoals het hoort.
* '''Welkom voor nieuwe leden'''<br />Komt er iemand nieuw binnen op de Slack, dan post de bot een persoonlijk welkomstbericht in '''#huiskamer'''.
* '''Nieuwe kanalen'''<br />Wordt er een nieuw openbaar kanaal aangemaakt, dan voegt de bot zichzelf daar automatisch aan toe.
* '''Berichten- en reacji teller'''<br />De bot telt alle geplaatste berichten en reacji's in kanalen waarin de bot is toegevoegd. Hierbij wordt opgeslagen wie het bericht/de reacji plaatst, wanneer dat gebeurd en in welk kanaal. Berichtinhoud wordt '''niet''' opgeslagen. Deze informatie wordt gebruikt om elke maandag de Slack statistieken te kunnen posten.
* '''Berichten- en reacji teller'''<br />De bot telt alle geplaatste berichten en reacji's in kanalen waarin de bot is toegevoegd. Hierbij wordt opgeslagen wie het bericht/de reacji plaatst, wanneer dat gebeurd en in welk kanaal. Berichtinhoud wordt '''niet''' opgeslagen. Deze informatie wordt gebruikt om elke maandag de Slack statistieken te kunnen posten.


Regel 71: Regel 60:
De bot voert ook bepaalde taken uit op bepaalde vastgelegde tijdstippen:
De bot voert ook bepaalde taken uit op bepaalde vastgelegde tijdstippen:


* '''Goedemorgen'''<br />Een random goedemorgen bericht inclusief de weersverwachting van vandaag uit een random weerstation.<br /><code>Dagelijks tussen 07:00 en 10:00 uur</code>
=== Goedemorgen ===
* '''[[Bestand:1337.png|15px|link=]]'''<br />Zoals traditie is op Slack post ook de bot dagelijks een [[Bestand:1337.png|15px|link=]] emoji.<br /><code>Dagelijks tussen 13:37:00 en 13:37:55 uur</code>
Een random goedemorgen bericht inclusief de weersverwachting van vandaag uit een random weerstation.<br /><code>Dagelijks tussen 07:00 en 10:00 uur</code>
* '''Shownotes posten'''<br />Na elke nieuwe podcast episode post de bot de bijbehorende shownotes in '''#napraten'''<br /><code>Direct na elke nieuwe podcast episode (RSS triggered)</code>
 
=== 1337 [[Bestand:1337.png|15px|link=]] ===
Zoals traditie is op Slack post ook de bot dagelijks een [[Bestand:1337.png|15px|link=]] emoji. Kort daarna post hij in thread de uitslag van die dag: wie er het snelst bij was, en wie er net naast zat met een 13:36 of een 13:38.<br /><code>Dagelijks tussen 13:37:00 en 13:37:55 uur</code>
 
=== Slack statistieken ===
Een overzicht van de berichten en reacji's van de afgelopen week, per kanaal en per persoon.<br /><code>Elke maandagochtend, na het goedemorgenbericht</code>
 
=== Shownotes posten ===
Na elke nieuwe podcast episode post de bot de bijbehorende shownotes in '''#napraten'''<br /><code>Direct na elke nieuwe podcast episode (RSS triggered)</code>
 
=== Wiki bijlezen ===
De bot leest deze wiki helemaal door, zodat hij je vragen erover met de laatste stand van zaken kan beantwoorden. Wat hier staat, is dus ook wat de bot erover vertelt.<br /><code>Elke maandag om 03:00 uur</code>


== Civilization VI functies ==
== Civilization VI functies ==
Regel 81: Regel 81:
* Notificaties posten wanneer een volgende speler aan de beurt is.
* Notificaties posten wanneer een volgende speler aan de beurt is.
* Een lijst geven van alle openstaande potjes en wie daarin aan de beurt is (via <code>!civbeurt</code>)
* Een lijst geven van alle openstaande potjes en wie daarin aan de beurt is (via <code>!civbeurt</code>)
* Een overzicht geven van de potjes die op dit moment lopen (via <code>!civgames</code>)
* Elke ochtend melden hoeveel beurten er de dag ervoor gespeeld zijn.
* Elke maandag posten hoe de beurten over de dagen van de week ervoor verdeeld waren.
== MNOT Wrapped ==
Aan het eind van het jaar maakt de bot een persoonlijk jaaroverzicht van jouw jaar op de Slack: de MNOT Wrapped. Je vraagt hem op met <code>/mnot wrapped</code>. De bot stuurt je dan een DM met een link naar je eigen Wrapped-pagina, plus een kaart die je kunt delen in de Slack.
Je Wrapped is op te vragen van '''21 december''' tot en met '''20 januari'''.

Huidige versie van 28 sep 2026 05:56

Algemene informatie

De bot is geschreven in C#, wordt gehost in Microsoft Azure en werkt daarin hoofdzakelijk via Azure Functions. De bot wordt ontwikkeld door Slack-admin Dennis (@CEO).

Voor vragen of suggesties over de bot kun je terecht op Slack in #mnotbot.

Meekijken met de ontwikkeling of meehelpen? Meld je dan bij @CEO op Slack.

MNOT Bot ✕ OpenAI

Algemeen

MNOT Bot is gekoppeld aan de GPT-modellen van OpenAI. Dit maakt het mogelijk om gesprekken te voeren met de bot. Wanneer je de bot @-mentioned waar dan ook op Slack (de bot moet wel in het betreffende kanaal aanwezig zijn) zal hij in thread op je reageren. Vervolgens kun je in die thread het gesprek vervolgen. Ook andere mensen kunnen in het gesprek meedoen.

Wat je hem kunt vragen

Behalve gewoon kletsen kun je de bot ook om een paar concrete dingen vragen:

  • Een samenvatting van een thread
    Noem de bot in een thread en vraag bijvoorbeeld "vat deze thread samen".
  • Een samenvatting van een kanaal
    Vraag "vat samen wat hier gezegd is", dan leest de bot de recente berichten in het kanaal terug.
  • Een plaatje
    Vraag bijvoorbeeld "maak een plaatje van een nerd met een Spa Rood". Je kunt drie plaatjes per dag laten maken.
  • Iets over de podcast of de community
    De bot kent de afleveringen, de Best Buy Guide, de MNOT Travel Guide en deze wiki, en beantwoordt daar vragen over.

Handig om te weten

Er zijn nog een aantal dingen goed om te weten of om rekening mee te houden wanneer je met de bot praat:

  • De bot ziet het gesprek waarin je hem aanspreekt, en kan de recente berichten van dát kanaal teruglezen wanneer je om een samenvatting vraagt. In andere kanalen en in je DM's kan hij niet kijken.
  • De bot kan ook plaatjes 'zien' die je upload bij je bericht!
  • Het GPT model dat we gebruiken is bijgeleerd t/m februari 2026. Gaat je vraag over iets van daarna, dan zoekt de bot het voor je op op internet.
  • In #adhd is de bot niet actief.

Slash commands

De bot reageert op een aantal ingebouwde Slash-commands:

  • /mnot help
    Toont een lijst van mogelijke Slash commands die je kunt gebruiken.
  • /mnot poll
    Opent een modal waarmee je een poll kan starten in het huidige kanaal. Weet je al wat je wilt vragen, dan kan het ook in één keer: /mnot poll "vraag" "antwoord 1" "antwoord 2".
  • /mnot slap @user
    Oude IRC functie. Mep een mede-Slacker met een forel!
  • /mnot invite
    Opent een modal waarmee je een uitnodiging kan posten naar een specifiek private channel.
  • /mnot mock [tekst]
    ZeT jE tEkSt In AfWiSsElEnDe HoOfDlEtTeRs.
  • /spoiler
    Post een spoiler die de rest pas te zien krijgt als ze erop klikken.
  • /mnot wrapped
    Haalt je persoonlijke MNOT Wrapped op.

/mock, /spoiler en /wrapped werken ook zonder /mnot ervoor.

Polls

Een poll start je met /mnot poll in het kanaal waar hij moet komen. Bij het maken kies je of er meerdere antwoorden aangevinkt mogen worden, of er anoniem gestemd wordt, en of anderen zelf antwoordopties mogen toevoegen (tot maximaal tien opties in totaal).

Iets vergeten? Als starter van de poll kun je hem tot 15 minuten na het starten nog bewerken of verwijderen met de knop Bewerken. Daarna staat hij vast. Een poll sluit automatisch twee weken nadat hij gestart is.

Automatische functies

De bot reageert ook op andere zaken binnen Slack, zoals bepaalde berichten of reacji's die gepost worden:

  • Nadoen van een -reacji
    Wanneer iemand een als reacji geeft op een bericht zal MNOT Bot diezelfde reacji kopiëren.
  • Portal Parrot Matcher
    Wanneer je twee berichten post met in de ene een :portal-1: en in de andere een :portal-2: emoji,
    dan zal MNOT Bot deze berichten aan elkaar koppelen (de portal creëren) door in thread op deze berichten te reageren met een link.
  • Illegale afkeuring
    Een mag natuurlijk alleen om 13:37 uur in #huiskamer gepost worden. Wanneer dat op een ander tijdstip gebeurd zal MNOT Bot afwijzend reageren met een reacji.
  • Stemmen op luistervragen
    Elke nieuwe vraag in #vragen-van-de-luisteraar krijgt van de bot een :upvote:-reacji, zodat de rest meteen kan stemmen op de vragen die ze het liefst behandeld zien.
  • This is the way
    Post je this is the way in een kanaal waar de bot bij zit, dan antwoordt hij zoals het hoort.
  • Welkom voor nieuwe leden
    Komt er iemand nieuw binnen op de Slack, dan post de bot een persoonlijk welkomstbericht in #huiskamer.
  • Nieuwe kanalen
    Wordt er een nieuw openbaar kanaal aangemaakt, dan voegt de bot zichzelf daar automatisch aan toe.
  • Berichten- en reacji teller
    De bot telt alle geplaatste berichten en reacji's in kanalen waarin de bot is toegevoegd. Hierbij wordt opgeslagen wie het bericht/de reacji plaatst, wanneer dat gebeurd en in welk kanaal. Berichtinhoud wordt niet opgeslagen. Deze informatie wordt gebruikt om elke maandag de Slack statistieken te kunnen posten.

Getimede functies

De bot voert ook bepaalde taken uit op bepaalde vastgelegde tijdstippen:

Goedemorgen

Een random goedemorgen bericht inclusief de weersverwachting van vandaag uit een random weerstation.
Dagelijks tussen 07:00 en 10:00 uur

1337

Zoals traditie is op Slack post ook de bot dagelijks een emoji. Kort daarna post hij in thread de uitslag van die dag: wie er het snelst bij was, en wie er net naast zat met een 13:36 of een 13:38.
Dagelijks tussen 13:37:00 en 13:37:55 uur

Slack statistieken

Een overzicht van de berichten en reacji's van de afgelopen week, per kanaal en per persoon.
Elke maandagochtend, na het goedemorgenbericht

Shownotes posten

Na elke nieuwe podcast episode post de bot de bijbehorende shownotes in #napraten
Direct na elke nieuwe podcast episode (RSS triggered)

Wiki bijlezen

De bot leest deze wiki helemaal door, zodat hij je vragen erover met de laatste stand van zaken kan beantwoorden. Wat hier staat, is dus ook wat de bot erover vertelt.
Elke maandag om 03:00 uur

Civilization VI functies

Een groepje MNOT'ers speelt via #games-civilization-vi al een tijdje Civilization VI online tegen elkaar via async cloud multiplayer (Play by Cloud). De bot ondersteunt hier als volgt bij:

  • Notificaties posten wanneer een volgende speler aan de beurt is.
  • Een lijst geven van alle openstaande potjes en wie daarin aan de beurt is (via !civbeurt)
  • Een overzicht geven van de potjes die op dit moment lopen (via !civgames)
  • Elke ochtend melden hoeveel beurten er de dag ervoor gespeeld zijn.
  • Elke maandag posten hoe de beurten over de dagen van de week ervoor verdeeld waren.

MNOT Wrapped

Aan het eind van het jaar maakt de bot een persoonlijk jaaroverzicht van jouw jaar op de Slack: de MNOT Wrapped. Je vraagt hem op met /mnot wrapped. De bot stuurt je dan een DM met een link naar je eigen Wrapped-pagina, plus een kaart die je kunt delen in de Slack.

Je Wrapped is op te vragen van 21 december tot en met 20 januari.