MNOT Bot: verschil tussen versies
(4 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://platform.openai.com/docs/models/gpt- |
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. |
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. |
||
Regel 16: | Regel 16: | ||
De huidige opzet van de prompt is als volgt: |
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 |
<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. |
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. |
||
Regel 23: | Regel 23: | ||
=== Tokens & kosten === |
=== 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. |
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 ==== |
==== 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. |
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 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 |
* 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 74: | Regel 64: | ||
Na elke nieuwe podcast episode post de bot de bijbehorende shownotes in '''#napraten'''<br /><code>Direct na elke nieuwe podcast episode (RSS triggered)</code> |
Na elke nieuwe podcast episode post de bot de bijbehorende shownotes in '''#napraten'''<br /><code>Direct na elke nieuwe podcast episode (RSS triggered)</code> |
||
=== BTC |
=== BTC koers === |
||
Elke |
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 == |
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
)