Week 109: My AI Team

26 Mar, 2023

Just like week 108, I started writing this post late-march, but got so busy that it wasn’t finished and published until May.

On March 21, Morten Just posted a tweet that set my brain on fire:

Morten Just tweeted about his Slack-based AI team

Morten Just tweeted about his Slack-based AI team

Apparently, he had created a Slack bot with different personas based on which slack channel he uses, e.g. #ai-copywriter for copy writing, #ai-web-developer, #ai-lawyer, etc.

I thought the idea of having an AI team was genius, and started recreating it myself. But I had never built a slack bot before.

Iteration 1: Zapier

I googled a bit and found that I could use Zapier to create the necessary glue between OpenAI’s GPT and Slack:

  1. Zapier monitors my slack channels
  2. If message appears in #ai-copywriter, then…
  3. Prompt GPT
  4. Post GPT response back into slack channel

Example of first iteration using Zapier

Example of first iteration using Zapier

It got me started quickly, but I found Zapier’s GPT integrations to be buggy, and it costs money to have the amount of Zaps that I need running. Their no-code flow was barely easier, and surely more limited, than writing my own client.

Iteration 2: SlackGPT v1

Zapier seemed unnecessary middleware, so I asked ChatGPT if it could write me a Node.JS-based Slack bot that basically does the four-step process outlined above. It generated fairly decent code that got me 90% there, and I only had to modify a few dependencies and functions to get it working.

This is a great next iteration, but has its limitations. Technically, every GPT prompt is a single prompt-response pair, meaning it won’t hold in memory any previous conversation. In my experience, GPT rarely gets anything right the first time, the power is in the conversation.

Iteration 3: SlackGPT v2

So I decided to change the bot to create new threads every time I submit a prompt. That way, it will be able to hold the thread in memory as a conversation, but there’s also a benefit for me in that I have a mental model for what I want it to remember. I.e. it’s memory is thread-based.

Limitations

Multiple channels instead of bots

I wanted each role to have it’s own user, like @Copywriter and @WebDeveloper, but it’s only possible to have a single bot per Slack App. So rather than having multiple bots, I have a single bot that monitors each channel, and based on which channel it detects a mention in, it switches persona per my prompt design:

These prompts are ok, but I know there is a lot more that can be done on this aspect of SlackGPT to make it work a lot better.

I also need to mention @SlackGPT every time I want to prompt. This should be fairly trivial to solve if I bothered reading the Slack API, but even when I’m in a thread with @SlackGPT, I currently need to mention it to trigger it. Within a thread, that shouldn’t be necessary.

Perspectives

This was a really fun experiment done in a couple of days, and a powerful prototype. There are so many features that I can see being within reach:

Higher abstraction level tasks

Currently, each member of the team solve tasks for me based on a prompt. But what if I could instead give the team higher level tasks, such as:

“I want to develop a new feature for our website where clients can book consultancy hours with me. It should appear as a small link on the website, and when clicked, go to my Calendly site”

Perhaps a #ai-product-manager role could take this task, break it into separate parts, and assign it to the various team members who will need to write copy, design visual appearance and develop the code necessary to launch the feature. Maybe the team members could even have seniority or rank, e.g. #ai-web-developer takes orders from #ai-product-manager or when in conflict, #ai-designer outranks #ai-web-developer. Suddenly introducing social dynamics into a team.

How I spend my time

I’m curious how this approach could enable me to spend less time coding and doing production work, and more time at higher level problems, which is how I’d like to spend my time nowadays. The AI team can work countless iterations, around the clock, so I would also be able to run many more iterations significantly faster.

As we work together more, I could pick the best examples of work the team has done and include it in their prompt design or even fine-tune a model so that my team is refined over time.

Being able to ask a bot to generate applications or components is fantastic, already making me significantly more efficient. But the idea of having a team that works around the clock and solving things under my direction is, at the time of writing, a superpower.

Cost and Scale

I’m currently running the first iteration of an AI-team of three roles for a few dollars per month. For example, the NodeJS server that runs the SlackGPT bot cost 490 OpenAI tokens to generate, which translates to around $0.01. And then of course 20-30 min of my time to iterate and implement the code, which hopefully will decrease as the systems become more sophisticated.

But you get the idea, right? As a generalist who knows just enough to get by in full-stack design and engineering, I can single-handedly build products at speed.

Role of Automation

The idea isn’t to replace humans, I dream of having a human partner to build products with, but I see an AI-team as a great supplement, and potentially the main resource for lower-level production tasks relating to code, design and text.

A source of inspiration for me has been the No Man’s Sky team. They built a procedurally generated game so vast that it would be impossible for them to do quality control on every planet. So they built space probes that allows them to at least do quality control on a significantly larger number of planets to fine tune the parameters.

Presentation and Curation

This system of thinking seems critical for this age of AI-enabled design and development. With smaller constraints on the amount of work that can be produced, my role will be to direct and curate the work, so that process needs to be effective and constructive too.

I’m curious how the team could present the work, whether it be code or design or text. Maybe there could be a Notion integration so that I simply click onto a “Week 109” page, where multiple solutions are laid out in front of me, and I can give the team feedback and consolidate the work?

What’s next

In summary, I think what’s next is to:

  • Fix limitations outlined above if possible
  • Write better prompts for each team member
  • Add ability for team to collaborate on tasks
  • Add a designer to the team, and ability to generate visual results
  • Add integrations with systems that allow the team to present work

The code for SlackGPT, along with instructions for how to deploy it on an online hosting service like Render, is available at https://github.com/knandersen/slackgpt.