MNOT Bot
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-4 Turbo 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 amicaal 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.01 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 #
. 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 gratis account aanmaakt bij OpenAI krijg je $18 aan gratis tegoed die je kunt gebruiken. Als je vervolgens een 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 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 0
en de 1
waarbij 0
erg strikt is en bij 1
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 0
en1
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
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 geen plaatjes 'zien' of informatie bekijken achter een link. Hij reageert alleen op de aangeleverde berichten.
- Davinci (het GPT-3 model dat we gebruiken) is bijgeleerd tot halverwege 2021. 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 eerste bookmark in het kanaal #duurzaamheid-en-klimaat toont de huidige kWh-prijs. Deze 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 mee:
(kale MWh-prijs ÷ 1000 × BTW) + energiebelasting (€ 0,13165) + gemiddelde opslag van de energieleverancier (€ 0,02)
Wat we nog gaan toevoegen is het tijdstip wanneer de stroom het duurst en het goedkoopst is.
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
)