MNOT Bot: verschil tussen versies
(18 tussenliggende versies door dezelfde gebruiker niet weergegeven) | |||
Regel 1: | Regel 1: | ||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
== MNOT Bot ✕ OpenAI == |
|||
=== Algemeen === |
|||
MNOT Bot is gekoppeld aan het [https://platform.openai.com/docs/models/gpt-4o GPT-4o model 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. |
|||
=== Prompt === |
|||
De OpenAI API die gebruikt wordt is [https://platform.openai.com/docs/guides/gpt/chat-completions-api Chat Completion]. We geven de bot een prompt (een stuk tekst) en hij zal die prompt vervolgens aanvullen. |
|||
Omdat we willen dat de interactie aanvoelt als een gesprek bouwen we de prompt op als gesprek. |
|||
De huidige opzet van de prompt is als volgt: |
|||
<nowiki>Het is vandaag {datum} en de tijd is {tijd}. Doe alsof dit een gesprek is tussen jou en vrienden. Jij bent vriendelijk en enthousiast.</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. |
|||
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 kost $0.015 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. |
|||
=== 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 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 kan ook plaatjes 'zien' die je upload bij je bericht! |
|||
* De bot kan geen informatie bekijken achter een link. Hij reageert alleen op de aangeleverde berichten en afbeeldingen. |
|||
* Het GPT model dat we gebruiken is bijgeleerd tot oktober 2023. Van recentere gebeurtenissen is de bot dus niet op de hoogte. |
|||
== Slash commands == |
== Slash commands == |
||
Regel 12: | Regel 48: | ||
* '''Nadoen van een [[Bestand:mnot.png|16px|link=]]-reacji'''<br />Wanneer iemand een [[Bestand:mnot.png|16px|link=]] als reacji geeft op een bericht zal MNOT Bot diezelfde reacji kopiëren. |
* '''Nadoen van een [[Bestand:mnot.png|16px|link=]]-reacji'''<br />Wanneer iemand een [[Bestand:mnot.png|16px|link=]] als reacji geeft op een bericht zal MNOT Bot diezelfde reacji kopiëren. |
||
* '''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. |
||
* '''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 19: | Regel 55: | ||
De bot voert ook bepaalde taken uit op bepaalde vastgelegde tijdstippen: |
De bot voert ook bepaalde taken uit op bepaalde vastgelegde tijdstippen: |
||
=== Goedemorgen === |
|||
* '''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> |
|||
Een random goedemorgen bericht inclusief de weersverwachting van vandaag uit een random weerstation.<br /><code>Dagelijks tussen 07:00 en 10:00 uur</code> |
|||
* '''Formule 1 coureurs en sessies bijwerken'''<br />Voor de F1 functionaliteiten houdt de bot een eigen DB bij met coureurs en sessies. Deze worden wekelijks bijgewerkt vanuit een API.<br /><code>Elke maandag om 00:00 uur</code> |
|||
⚫ | |||
=== 1337 [[Bestand:1337.png|15px|link=]] === |
|||
== Formule 1 functies == |
|||
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> |
|||
In #autosport wordt gebruik gemaakt van de F1 functies van de bot: |
|||
=== Shownotes posten === |
|||
* Info opvragen van coureurs via <code>/f1 driver [coureur]</code> |
|||
⚫ | |||
* Info opvragen van teams via <code>/f1 constructors</code> |
|||
=== BTC koers === |
|||
Elke donderdag om 00:00 worden sessie reminders ingepland voor het komende raceweekend. Elke sessie wordt 10 minuten van tevoren aangekondigd in #autosport. |
|||
Elke 7 minuten worden de laatst bekende BTC-EUR en BTC-USD koersen opgehaald via de [https://coinmarketcap.com/currencies/bitcoin/btc/eur/ CoinMarketCap] API. Deze info wordt getoond in bookmarks in het kanaal '''#bitcoin-en-crypto'''.<br /><code>Elke 7 minuten tussen 06:00-23:59 in #bitcoin-en-crypto</code> |
|||
=== Energieprijzen === |
|||
De bookmarks in het kanaal '''#duurzaamheid-en-klimaat''' tonen verschillende informatie over de kWh-prijzen van de dag. |
|||
* De eerste bookmark toont de huidige kWh-prijs |
|||
* De tweede bookmark toont het goedkoopste tijdsblok van de dag |
|||
* De derde bookmark toont het duurste tijdsblok van de dag |
|||
Prijzen worden dagelijks opgehaald uit de API van [https://data.nordpoolgroup.com/auction/day-ahead/prices?deliveryDate=latest¤cy=EUR&aggregation=Hourly&deliveryAreas=NL '''Nord Pool''']. |
|||
De prijzen die uit deze API komen zijn kale MWh-prijzen dus daar sleutelen we nog aan: |
|||
:<code>(kale MWh-prijs ÷ 1000 × BTW) + energiebelasting (€ 0,13165) + gemiddelde opslag van de energieleverancier (€ 0,02)</code> |
|||
Die laatste toeslag verschilt natuurlijk per energieleverancier maar is een aardig gemiddelde. |
|||
== Civilization VI functies == |
== Civilization VI functies == |
||
Regel 38: | Regel 86: | ||
* 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>) |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ |
Huidige versie van 13 mei 2024 om 22:26
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 het GPT-4o model 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.
Prompt
De OpenAI API die gebruikt wordt is Chat Completion. We geven de bot een prompt (een stuk tekst) en hij zal die prompt vervolgens aanvullen. Omdat we willen dat de interactie aanvoelt als een gesprek bouwen we de prompt op als gesprek. De huidige opzet van de prompt is als volgt:
Het is vandaag {datum} en de tijd is {tijd}. Doe alsof dit een gesprek is tussen jou en vrienden. Jij bent vriendelijk en enthousiast.
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.
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 tokens. Een token vertegenwoordigt ongeveer 4 letters of driekwart van een gemiddeld Engels woord en ons gebruikte model kost $0.015 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.
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 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 kan ook plaatjes 'zien' die je upload bij je bericht!
- De bot kan geen informatie bekijken achter een link. Hij reageert alleen op de aangeleverde berichten en afbeeldingen.
- Het GPT model dat we gebruiken is bijgeleerd tot oktober 2023. Van recentere gebeurtenissen is de bot dus niet op de hoogte.
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./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.
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. - 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.Dagelijks tussen 13:37:00 en 13:37:55 uur
Shownotes posten
Na elke nieuwe podcast episode post de bot de bijbehorende shownotes in #napratenDirect na elke nieuwe podcast episode (RSS triggered)
BTC koers
Elke 7 minuten worden de laatst bekende BTC-EUR en BTC-USD koersen opgehaald via de CoinMarketCap API. Deze info wordt getoond in bookmarks in het kanaal #bitcoin-en-crypto.Elke 7 minuten tussen 06:00-23:59 in #bitcoin-en-crypto
Energieprijzen
De bookmarks in het kanaal #duurzaamheid-en-klimaat tonen verschillende informatie over de kWh-prijzen van de dag.
- De eerste bookmark toont de huidige kWh-prijs
- De tweede bookmark toont het goedkoopste tijdsblok van de dag
- De derde bookmark toont het duurste tijdsblok van de dag
Prijzen worden dagelijks opgehaald uit de API van Nord Pool.
De prijzen die uit deze API komen zijn kale MWh-prijzen dus daar sleutelen we nog aan:
(kale MWh-prijs ÷ 1000 × BTW) + energiebelasting (€ 0,13165) + gemiddelde opslag van de energieleverancier (€ 0,02)
Die laatste toeslag verschilt natuurlijk per energieleverancier maar is een aardig gemiddelde.
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
)