home
navigate_next
Blog
navigate_next
Team News

The Humble Beginnings of the Imposter Bot

The story of how Team Humble Wisdom's Hackathon project - the Imposter Bot - came to life. Written by team captain and fearless leader Ming Cheuk, CTO of ElementX
The Humble Beginnings of the Imposter Bot

It was through the 8th iteration of the ElementX hackathon that the Slack application “Imposter Bot” was born. This app is able to impersonate anyone (with their permission) on your slack Workspace, inserting replies in conversations at unsuspecting times using the most advanced AI language models.

The idea started as a joke, a seemingly useless invention — but we realised it had so much more potential. This is the story of how it came to be.

On a sunny Thursday morning, and the team assembled together in the quiet neighbourhood of Hobsonville Point to start the hackathon. We had our idea ready, the team ready, and we were ready to win this hackathon. For these two days, we were known as Humble Wisdom, and we were the first, second, third, and fourth Wise ones.

Straight to the tools we know in our sleep, we started planning our feature set on Miro and Github.


Planning

We wanted to build something realistic in the two days we had, but we also wanted something that would impress. Working backwards, we first figured out what we wanted to present at the end of the two days. From there, we decided what features we needed to support the plan and how we achieve it in the technical solution. Finally, we wanted to build iteratively to ensure we had something working in each release, following general best practices of short release cycles of product development.

What good is a product without some solid marketing behind it? Another thing we wanted to come out with a bang with was solid content. None of us were video producers, writers, or songsmiths, so why not employ some AI to help us with that? We decided very early on to let AI dictate our product launch content and to stay as true as we can to the output from AI.

It was probably one of the fastest and most efficient planning sessions we’ve done! All set in stone within 20 minutes.


Execution

The responsibilities were quickly distributed amongst the team. The first and second Wise Ones were in charge of content and creative, and the third and fourth Wise Ones were in charge of performing the engineering feat needed to make this work.

Engineering

Everything we did we wanted to do as true to a real-life product launch as possible. We had setup a Github repo, Kanban board with the tickets to make the bot work, and finally a new Slack Workspace for testing. One of the first things the we did after scaffolding the project was to setup continuous deployment pipeline so that all the code merged into the main branch was pushed automatically to a production instance (thanks fourth Wise one!). This reduces the human-error-prone nature of manual deployments and made it much easier for everyone to contribute to the code.

For natural language understanding, we used GPT-3, one of the most famous language models in the world. Trained on billions of text samples, it’s able to comprehend human language and generate convincing outputs to mimic the rest of the input or be instructed to carry out some natural language task such as sentence classification. This was something we were also quite familiar with, having worked on several projects for clients that use this technology.

We started with a bit of prompt engineering to design the best prompt to make it work. With a combination of experience and experimentation, the second and third Wise Ones were able to create a prompt that will take a conversation history and both recommend the next person who should reply as well as what they should reply with.

Testing GPT-3 along the way (green text is what it generated)

To integrate with Slack, we made use of the Bolt SDK, which is the modern day way of interfacing with the Slack API and makes development of Slack bots much cleaner. This library was new to us but the third Wise One was able to quickly get it all integrated for us to understand all the capabilities and shortcomings…

Creative

Every legend has a story, and we wanted to create one for Humble Wisdom. Using the GPT-3 playground, we generated a very well written in a single attempt.

We knew this was the one when we saw it

But why stop there? We decided to have this narrated with AI synthesised voices, using WellSaid Labs. We then decided that the narration should come with some artwork to go with the story, which we generated using dream by WOMBO (based on GANs). The second Wise One pulled all this together along with some royalty free music and voilà: we had an awesome video (before we discovered AI generated music, more on that later).

Now we needed a video for the product. To keep on brand, we had GPT-3 generate us a script as well. Too bad it didn’t quite understand the concept of a Slack bot impersonating people (to be fair most people wouldn’t), so instead, we decided to market it as an “employee engagement product”. Behold, it generated a video script for us! We needed some cheesy advertising music to go with it as well, at which point we found Soundraw which uses AI to synthesise music.

True to script, sans a few human errors and one deliberate replacement

After some fun filming it around windy Hobsonville, sticking as close as we could to the script GPT-3 generated (we decided on one deliberate phrase replacement and we had some human error in remembering the lines).

Our final touch was a team profile on the website. We generated profile pictures that represented the roles we had in the team.

Our roles stylised in AI generated avatars, clockwise from the upper left. First Wise One project management. Second Wise One prompt engineering, video editing, music composition. Third Wise One — orchestration, data translation. Fourth Wise One authentication, databases, CI/CD


Yes, we did create a theme song, with lyrics generated by GPT-3 and music generated with AI. But that’s for ElementX eyes only.

Roadblocks

What’s a project without a few roadblocks? They say that you’re not pushing yourself hard enough if you don’t run into challenges.

The first problem we hit in the engineering department was that the bot could easily impersonate anyone in a Slack workspace, but it would show the “APP” label, which would easily give it away. Also, it wouldn’t take on the person’s status, and if you clicked on the profile, you’ll see the Imposter bot’s profile. This is probably a good thing otherwise you’ll have applications maliciously posing as people in the Slack workspace which opens up phishing problems. But not what we wanted. After much scouring through Slack developer forums, we finally found that you can have the app properly impersonate someone if they explicitly authorise the application to post as them.


Time to test! Except this took us hours of trying to get OAuth permissions to work properly as we had to setup proper authentication for this to work. We had to overhaul how we did things, and the fourth Wise One had to build a whole new database to store workspace installation configurations (which had tokens and everything per workspace). Even after all the re-engineering, it still wasn’t working!

Stuck

What do you do when you’re not getting anywhere? You take a break and play some board games. The second Wise One brought along Here to Slay, which was heaps of fun. I might need to grab a copy myself some day!

Board games fuel the mind


During the game, we had a eureka moment and we managed to get the authentication flow to work correctly! It was 11 pm by then and time to retire for the night and recharge for the morning…

It’s alive!!

After everyone headed home, I did some more cheeky testing and development to confirm everything was working. Everything was in a good spot!

I did not say “test”. That was the Imposter bot.


Once we re-convened early morning, we made it a priority to merge all the code together and doing some integration testing. It was mostly there, but there were a few bugs here and there that took us the rest of the day to fix — typical of the last 10% of work to do. We also had quite a bit more filming and editing to do, which we managed to do simultaneously as the engineering was happening.

In typical project fashion, everything was coming together in the final hour before presentation. We were filming the last scene, the videos were rendering, and we were trying to get some conversation going on the ElementX workspace. We managed to get it working live in the company workspace, without anyone noticing! We were happy. It was time to present…



Did we win in the end? No. But what we gained were awesome AI generated & directed videos and we had loads of fun making them. What we created was an awesome Slack bot waiting to wreck havoc on your team’s Slack workspace 😈



Due to security restrictions, the Imposter Bot is not available to wreak havoc in your Slack workspace but you can learn more by visiting its website. If you'd like a live demo of the Imposter Bot, please contact us or the Wise Ones to see it in action.

arrow_back
Back to blog