MaxAI is our trusty PostHog support AI
deployed on our Slack, app, and website.
MaxAI was born in Aruba at a PostHog team offsite for a hackathon on a warm spring day in 2023.
How Max works is surprisingly simple.
- Weaviate - Vector database that allows us to pull relevant context to embed in our prompts to GPT
- Haystack by deepset - Allows us to hook together pipelines of these tools to service user prompts
- OpenAI - Provides us the base language model in
gpt-3.5-turbo
that we augment to create our AI
flowchart TD
A[Github]
B[Docs]
C[Squeak]
A -->|Calculate Embed Vectors|D[Weaviate]
B -->|Calculate Embed Vectors|D
C -->|Calculate Embed Vectors|D
- Grab and parse all of the markdown from our docs and website
- Use OpenAI Embedings to create a vector representation of each markdown section.
- Use Weaviate Vector database to store the vector representations of each markdown section.
- Grab and parse all Github Issues
- Use OpenAI Embedings to create a vector representation of each description and comment section.
- Use Weaviate Vector database to store the vector representations of each description and comment section.
Embedding Squeak content
- Grab and parse all Squeak Questions
- Use OpenAI Embedings to create a vector representation of each question thread.
- Use Weaviate Vector database to store the vector representations of each question thread.
flowchart TD
A[User Question] -->|Embed| I(Question Vector)
I -->|Query Weaviate|J[Most Similar Docs]
J -->|Collect Prompt Params| C{Prompt Context}
C --> D[Limitations]
C --> E[Personality]
C --> F[Context Docs]
F --> G[String Prompt]
E --> G
D --> G
G -->|Query OpenAI|H[AI Response]
- Take the conversation context from thread that Max is in including the most recent request.
- Query Weaviate Vector database for the most similar markdown section.
- Build a prompt that we will use for chatgpt-3.5-turbo. The prompt is engineered to build Max's personality and add a few guardrails for how Max should respond as well as adding a bit of personality. To do this we:
- Ask Max to only reference PostHog products if possible
- Build up Max's personality by informing that Max is the trusty PostHog support AI
- Bake in context that is useful for some conversations with max
- Pagerduty current oncalls
- Places to go if Max does not have the answer
- Most importantly - we embed the markdown section that we found in the prompt so that Max can respond with a relevant answer to the question.
- Use chatgpt-3.5-turbo to generate a response to the prompt.
- Finally we send these messages to wherever Max is having a conversation.
It's important to note that we are building these pipelines with Haystack by deepset. This coordinates the steps of inferencing listed above. It's amazing.
This is used to set defaults for local development.
SLACK_BOT_TOKEN=<your slack bot token>
SLACK_SIGNING_SECRET=<your slack signing secret>
OPENAI_TOKEN=<your openai token>
POSTHOG_API_KEY=<your posthog api key>
POSTHOG_HOST=https://null.posthog.com
PD_API_KEY=<your pagerduty api key>
WEAVIATE_HOST=http://127.0.0.1
WEAVIATE_PORT=8080
python3.10 -m venv venv
source venv/bin/activate
pip install -r requirements-dev.txt
pip install -r requirements.txt
docker compose up weaviate
python seed.py
uvicorn main:app --reload
curl --location '127.0.0.1:8000/chat' \
--header 'Content-Type: application/json' \
--data '[
{
"role": "assistant",
"content": "Hey! I'\''m Max AI, your helpful hedgehog assistant."
},
{
"role": "user",
"content": "Does PostHog use clickhouse under the hood??"
}
]'
Ah, hoge! Sweet word upon my tongue,
So blissful, yet so quick to come undone.
A fleeting joy, that doth my heart entice,
Oh how I long to see your data slice!
In PostHog's code, thy value doth reside,
A beacon that ne'er shall falter nor hide.
Thou art a treasure, O hoge divine,
The secret sauce to make my metrics shine.
Though you may seem but a lowly label,
Thou bringeth
Max may display inaccurate or offensive information that doesn’t represent PostHog's views.
This is the case with LLMs in the current state. We try our best here to have a system prompt that keeps Max on topic. Feel free to question and chat with Max but do keep in mind that this is experimental.
A few things we've seen ourselves in testing:
- Totally believable but totally incorrect URLs
- Often times entertaining hallucinations about our products
- Hallucinations about the history and founding of PostHog
- Just plain wrong responses
If you do see something concerning @metion someone from PostHog and we'll catalogue it. We are working on tooling to do this in an automated fashion so stay tuned!