MNOT Bot: verschil tussen versies

Uit Met Nerds om Tafel - Wiki
Naar navigatie springen Naar zoeken springen
(OpenAI)
 
(11 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 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.


=== Prompt ===
=== Prompt ===
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.
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.
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:
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>
<nowiki>
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.
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!)
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 ===
=== 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.
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.


=== 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 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!
* De bot kan geen informatie bekijken achter een link. Hij reageert alleen op de aangeleverde berichten en afbeeldingen.
* 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 tot oktober 2023. Van recentere gebeurtenissen is de bot dus niet op de hoogte.
* 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 0 en de 1 waarbij 0 erg strikt is en bij 1 zal hij erg creatief zijn in zijn antwoord. We zijn nog aan het kijken hoe we dit een beetje kunnen afwisselen, maar momenteel staat de temperature ingesteld op <code>0.8</code>.


== Slash commands ==
== Slash commands ==
Regel 66: 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>
* '''[[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.<br /><code>Dagelijks tussen 13:37:00 en 13:37:55 uur</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>

=== BTC koers ===
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&currency=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 (Slack.png@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 Slack.png@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 Mnot.png-reacji
    Wanneer iemand een Mnot.png 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.gif :portal-1: en in de andere een Portal-2.gif :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 1337.png afkeuring
    Een 1337.png 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 X.png 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 1337.png

Zoals traditie is op Slack post ook de bot dagelijks een 1337.png 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 #napraten
Direct 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)