Improve dice rolling for discourse-narrative-bot

Although @discobot has a dice roller, it’s too simple. It’s not yet capable of rolling complex dice and formulas for specific needs. So, I’d like to improve this feature and make it possible to run dice like 1d20+5, 1d20+2 + 2d12-1, 5d10k2 and so on…

I submitted this PR and would very much appreciate reviews and thoughts about it. Thanks! :slight_smile:

https://github.com/discourse/discourse/pull/7381

4 إعجابات

Hi! To find out what I can do, say @discobot display help.

إعجابَين (2)

Shoo! I don’t want to talk to you… ¬¬

6 إعجابات

يحتوي Discourse AI الآن على أداة رمي نرد قادرة ومبدعة بشكل معقول، على سبيل المثال @random_picker_bot، ماذا عن رمي 1d20+5 لي؟

أيضًا، أثناء قيامك بذلك، اختر اسمًا عشوائيًا لقطتي.

3 إعجابات
Random Picker

Picking from ["1-20"], picked: [5]

Random Picker

Picking from ["Whiskers,Mittens,Socks,Shadow,Simba,Leo,Oliver,Luna,Bella,Max"], picked: ["Shadow"]

For your adventurous roll of 1d20+5, the dice landed on a 5, which adds up to a grand total of 10!

And for your future feline friend, the Random Picker has decreed its name shall be Shadow. Sounds like a kitty destined for stealthy midnight adventures, doesn’t it? :cat::sparkles:

4 إعجابات

الميزة الكبيرة هنا هي أنك لا تحتاج إلى تعلم أي صيغة خاصة، GPT-4 يكتشفها لك. يمكن أن يجعل رمي النرد مكلفًا بعض الشيء، لكن GPT 3.5 يقوم بعمل جيد أيضًا.

إعجابَين (2)

كيف يمكننا معرفة ما إذا كان هذا النوع من الأنظمة يقوم بما نتوقعه؟ قد يفضل الأرقام الفردية، أو يفضل عدم رمي الأرقام المزدوجة، أو أي شيء آخر حقًا.

إعجاب واحد (1)

يمكنك التحقق من كود العشوائية على https://github.com/discourse/discourse-ai/blob/main/lib/ai_bot/tools/random_picker.rb. على سبيل المثال، يبدو أن رميات النرد يتم تحديدها بواسطة:

إعجابَين (2)

آه، شكراً جزيلاً. لقد افترضت بسذاجة أن نموذج اللغة الكبير كان يقوم بالعمل - ربطه ببعض التعليمات البرمجية الإجرائية هو قصة مختلفة وفي هذه الحالة الإجابة الصحيحة!

شيء مشابه في روبوت الدردشة. إذا طلبته إجراء عمليات حسابية، فسيقوم باستدعاء دالة حتمية بدلاً من ترك الأمر للصدفة.

إعجابَين (2)