Like everyone and his brother, I have been getting interested in chatGPT and Large Language Models in
general. A lot of development for a website can be pretty repetitive from one site to another and so I wanted
to see if chat GPT could make me more productive and allow me to concentrate on the more interesting
parts of the project.
Here at Msasa a pilot project came along where we wanted to develop a website to show a client,
even though it may never be used. This seemed like an ideal use case for trying out chatGPT. The website
we ended up with is called MineralMarketplace, Take a look and see what we ended up with.
In preparation I took one of DeepLearning's short courses on prompt engineering for developers. If you haven't used chatGPT, or another LLM, then I recommend this, or something like it, to get you started.
The Experimant
Firstly I created a database schema for the site, using PGAdmin in my case. I could have tried to construct prompts to get chatGPT to do this, which I'm sure it could, but it seemed as though it would be shorter and quicker to do it myself. It also gave me structured language to pass to the LLM from which it could generate other parts of the website. If you prefer I'm sure you could do this either by creating objects or an Open API spec and then get chatGPT to generate a database scheme from that.
The next thing to try was to throwing the schema at chatGPT, and ask it to generate the CRUD code functions in Python to populate and query it. The good news was that chatGPT understood the schema, the bad news was that it blew out the token limit and couldn't generate much code. To solve this I asked it to generate CRUD code for each table in turn and that worked well. Following that I then asked it to generate me a flask web server and the end points for an API that would call the CRUD code and an Open API 3 spec for that code, again these both worked well, although I haven't evaluated the Swagger code to check for hallucinations.
Since I am a relatively basic front end developer and this was just a demonstration site, I decided that I
would build the front end using Flask’s Jinja templating and Bootstrap. I found that developing the Bootstrap
templates didn't work very well and in the end I gave up and downloaded a theme from an open source
Bootstrap template site. What did work was generating the forms using the LLM, although the country
dropdown again exceeded the token limit.
The token limit is, more or less, the maximum amount of text you can pass into, and get back from,
the LLM.
My final attempt using AI for the site was to try image generators to generate the background images for the various minerals, this didn't work at all and I gave up pretty quickly and search for free images that I could use.
Would I do it again?
I would, the LLM generated a lot of boilerplate for me that just worked, and I now have a set of prompts that I
could use to do the same thing again.
The fact that it failed to create the front end wasn’t actually a huge drawback, I am not a designer so it makes a lot of sense to tweak an existing theme rather than coming up with something from scratch. The MineralMarketplace theme was originally a property website.
Example Prompt
Given the Postgres SQL definition defined inside <sql></sql>
For Python 3 and the psycopg2 library:
step 1: For each table defined by a 'CREATE TABLE' statement in the SQL definition create an Insert
function that inserts all non serial fields in the 'CREATE TABLE' statement and returns the value of
the serial field. Also create Read and Delete functions using the serial field name as the key.
The function names should include the name of the table.
step 2: Using Python Flask create an api for the functions defined in step 1
step 3: Create an OpenApi v3 specification for the api defined in step 2
SQL definition: <sql>
{sql}
</sql>