<- Back to blog

Build a Celebrity Twitter Chatbot with GPT-4!


This is what you will be building: A custom chatbot using MindsDB’s connectors to Twitter, OpenAI’s GPT-4 and custom prompts.
A simple example is this Twitter bot - @Snoop_Stein - who will reply with the appropriate context and personality to any tweets which mention him. If you haven’t tried tweeting to SnoopStein yet, check it out and tweet at your new friend and rapping physicist! See what it comes up with.

SnoopStein response example

Make your own SnoopStein

To get started:

MindsDB is a popular open-source low-code machine learning platform that helps developers easily build #AI-powered solutions. It automates and integrates top machine learning frameworks into the data stack to streamline the integration of AI into applications, making it accessible to developers of all skill levels.

Now let us show you how we built the Snoop_Stein GPT-4 bot and how you can build your own.

1. Create a GPT-4 model!

Let’s first see how simple it is to create a machine learning model represented as a virtual ‘AI table’ in MindsDB. In this example, we will call our GPT4 model gptbot_model.

(Bear in mind that GPT-4 API is in HIGH demand and is rate limited, so can be slow. The following steps might each take a few seconds)

CREATE MODEL mindsdb.gpt_model
PREDICT response
engine = 'openai',
-- api_key = 'your openai key', in MindsDB cloud accounts we provide a default key 
model_name = 'gpt-4', -- you can also use 'text-davinci-003', 'gpt-3.5-turbo'
prompt_template = 'respond to {{text}} by {{author_username}}'; 


Optionally, If you are using MindsDB on docker or if you want to use your own OpenAI API key, simply pass theapi_key argument in the USING.

One important attribute here is prompt_template. This is where we tell GPT how to write answers; it is a template because you can pass values from columns, in this case the template contains {{author_username}} and {{text}}, which will be replaced from the WHERE variables in the query. Let’s see in action:

SELECT response from mindsdb.gpt_model WHERE author_username = "mindsdb" AND text="why is gravity so different on the sun?";

2. Create an ML model with personality


As you can see, the previous model gave responses that aren’t that exciting. But we can use some prompt template magic to shape how we want the model to respond. Essentially we use prompt_template to explain in plain english how we want GPT to formulate its responses. Let's create a model mindsdb.snoopstein_model with a prompt template that gives GPT a hybrid personality: he is half-Einstein, half-Snoop Dogg. A brilliant physicist who owns the rap game. His name is Snoop Stein:

CREATE MODEL mindsdb.snoopstein_model
PREDICT response
engine = 'openai',
max_tokens = 300,
-- api_key = 'your openai key, in cloud accounts we provide one',
model_name = 'gpt-4', -- you can also use 'text-davinci-003' or 'gpt-3.5-turbo'
prompt_template = 'From input message: {{text}}\
by from_user: {{author_username}}\
In less than 550 characters, write a Twitter response to {{author_username}} in the following format:\
Dear @<from_user>, <respond a rhyme as if you were Snoop Dogg but you also were as smart as Albert Einstein, still explain things like Snoop Dogg would, do not mention that you are part Einstein. If possible include references to publications for further reading. If you make a reference quoting some personality, add OG, for example;, if you are referencing Alan Turing, say OG Alan Turing and very briefly explain why you think they would be dope reads. If the question makes no sense, explain that you are a bit lost, and make something up that is both hilarious and relevant. sign with -- mdb.ai/bot by @mindsdb.';

Now let’s test this model:

SELECT response from mindsdb.snoopstein_model
author_username = "someuser" 
AND text="@snoop_stein, why is gravity so different on the sun?.";

SnoopStein response to query

Let’s try another one:

SELECT response from mindsdb.snoopstein_model
author_username = "someuser" 
AND text="@snoop_stein, Apart from yourself, which rappers would make the best physicists and why?!";

SnoopStein response to another query

3. Connect your GPT-4 model to Twitter!

We are going to prepare a MindsDB SQL statement to connect to twitter with read-only access:

WITH ENGINE = 'twitter';

This creates a database called my_twitter. This database ships with a table called tweets that we can use to search for tweets as well as to write tweets.

You can use the Twitter API to get a list of tweets with a particular text or hashtag, in the case below mindsdb or #mindsdb.

   id, created_at, author_username, text 
FROM my_twitter.tweets 
   query = '(@snoopstein OR @snoop_stein OR #snoopstein OR #snoop_stein) -is:retweet' 
   AND created_at > '2023-03-20' 

Note that the parameter query supports anything that the twitter API supports as query, for more reference, read (https://developer.twitter.com/en/docs/twitter-api/tweets/search/integrate/build-a-query)

Let’s test that this model can generate outputs based on the Snoop Stein personality on many tweets, by joining the model with the tweets table:

t.id AS in_reply_to_tweet_id, 
t.text AS input_text, 
r.response AS text 
FROM my_twitter.tweets t 
JOIN mindsdb.snoopstein_model r 
WHERE t.query = '(@snoopstein OR @snoop_stein OR #snoopstein OR #snoop_stein) -is:retweet -from:snoop_stein' 
AND t.created_at >  '2023-03-20' 

4. Writing tweets using SQL

Now we are at the part where we want MindsDB to write responses back into Twitter. For this, you will need to sign up for a Twitter dev account in order to actually be able to write tweets back into Twitter (write, as opposed to read-only), if you don’t have a Twitter dev account already.

We recommend you use the Elevated access allowing you to pull 2m tweets and to avoid parameters or authentication issue error you might get sometimes. You can check this step-by-step guide describing how to apply for the Elevated access.

Twitter may take a day or so to approve your new dev account. Once you are approved, here are the steps to link your Twitter account to MindsDB:

  • Open developer portal,
  • Select the [+ Add app] button to create a new app
  • Select [Create new]
  • Select “Production” and give it a name
  • Copy and populate in the query
  •       API Key (aka. consumer_key)
  •        API Key Secret (aka. consumer_secret)
  •        Bearer Token
  • Click Setup on User authentication settings
  •       On Permissions Select: Read and Write
  •       On Type of app Select: Web App, Automated App or Bot
  •       On App info: provide any url for the callback url and website url
  •       Click Save
  • Once you are back in the app settings, click Keys and Tokens
  •       Generate Access Token and Secret and populate on the query
  •             Access Token
  •             Access Token Secret

You can create a new updated database so it can read and write as follows:

CREATE DATABASE mindsdb.my_twitter_v2
   "consumer_key": "your twitter App API key",
   "consumer_secret": "your twitter App API key secret",
   "bearer_token": "your twitter App bearer TOKEN",
   "access_token": "your twitter App Access Token",
   "access_token_secret": "your twitter App Access Token Secret"

Let's test by tweeting a few things into the MindsDB Twitter account

INSERT INTO my_twitter_v2.tweets (in_reply_to_tweet_id, text) 
 (1633439839491092482, 'MindsDB is great! now its super simple to build ML powered apps using JOBS https://docs.mindsdb.com/sql/tutorials/twitter-chatbot'),
 (1634126825377996800, 'Holy!! MindsDB is such a useful tool for developers doing ML https://docs.mindsdb.com/sql/tutorials/twitter-chatbot');

Like magic right? Those tweets should be live now on twitter, You can check your tweet responses here:
And here:

Note: you can insert any of the values of the tweepy function create_tweet: https://docs.tweepy.org/en/stable/client.html#tweepy.Client.create_tweet

5. At last: let's create the JOB

The CREATE JOB statement is great because you can use it to automate work. The idea is simple, you give it a query you want to execute and how often. Let’s set up a job for Snoop Stein!

Let’s write a JOB called gpt4_twitter_job:

  1. Checks for new tweets
  2. Generates a response using the OpenAI model
  3. Writes the responses back into Twitter

All of this can be written in one SQL command

CREATE JOB mindsdb.gpt4_twitter_job AS (
-- insert into tweets the output of joining model and new tweets
INSERT INTO my_twitter_v2.tweets (in_reply_to_tweet_id, text)
  t.id AS in_reply_to_tweet_id,
  r.response AS text
FROM my_twitter.tweets t
JOIN mindsdb.snoopstein_model r
     t.query = '(@snoopstein OR @snoop_stein OR #snoopstein OR #snoop_stein) -is:retweet -from:snoop_stein'
     AND t.created_at > "{{PREVIOUS_START_DATETIME}}"
 limit 10
EVERY hour

And there it is! Every hour, we will be checking for new tweets that mention MindsDB, and replying with responses generated by OpenAI GPT-4 using the template from step 2 that will respond in a style that combines Albert Einstein and Snoop Dogg.

You can check if your JOB is running effectively

SELECT * FROM jobs WHERE name="gpt4_twitter_job";
SELECT * FROM jobs_history WHERE name="gpt4_twitter_job";

You can stop the job as follows

DROP JOB gpt4_twitter_job


MindsDB is a powerful software platform that enables developers to easily build machine learning features into their applications. With MindsDB, developers can train machine learning models from different data sources and integration platforms, and output the generated ML results or predictions directly into the DB, queryable as tables, or output via the connected application, in this case, Twitter. This example of building a Twitter chatbot with GPT-4 integration is not the only quick solution that developers can implement in just a few minutes: MindsDB has many examples, including integration with many other models, including Hugging Face, to build applications that can summarize text, translate, analyze customer sentiment (product reviews) and perform all kinds of business forecasting. You can find many examples here https://docs.mindsdb.com/nlp/nlp-extended-examples.

In pt. 2 of this series on Twitter and GPT integration, out next week, we will walk you through some new features that will allow quick creation of a conversational chatbot, that is able to maintain the state of historical messages and provide appropriate responses in context. Make sure you don’t miss it by going here and signing up for our blog updates!

Happy coding, and please join our community Slack for feedback, support, and questions. We look forward to meeting you there!



Previous post goes here

This will be removed from the page. It's just here as a sample.

Behind me is an 'empty state' div

There are no previous posts sorry!

Go back to blog

Next post goes here

This will be removed from the page. It's just here as a sample.

Behind me is an 'empty state' div

There are no next posts

Go back to blog
This is some text inside of a div block.