apps/docs/content/guides/ai/examples/openai.mdx
OpenAI provides a completions API that allows you to use their generative GPT models in your own applications.
OpenAI's API is intended to be used from the server-side. Supabase offers Edge Functions to make it easy to interact with third party APIs like OpenAI.
If you haven't already, install the Supabase CLI and initialize your project:
supabase init
Scaffold a new edge function called openai by running:
supabase functions new openai
A new edge function will now exist under ./supabase/functions/openai/index.ts.
We'll design the function to take your user's query (via POST request) and forward it to OpenAI's API.
import OpenAI from 'https://deno.land/x/[email protected]/mod.ts'
Deno.serve(async (req) => {
const { query } = await req.json()
const apiKey = Deno.env.get('OPENAI_API_KEY')
const openai = new OpenAI({
apiKey: apiKey,
})
// Documentation here: https://github.com/openai/openai-node
const chatCompletion = await openai.chat.completions.create({
messages: [{ role: 'user', content: query }],
// Choose model from here: https://platform.openai.com/docs/models
model: 'gpt-3.5-turbo',
stream: false,
})
const reply = chatCompletion.choices[0].message.content
return new Response(reply, {
headers: { 'Content-Type': 'text/plain' },
})
})
Note that we are setting stream to false which will wait until the entire response is complete before returning. If you wish to stream GPT's response word-by-word back to your client, set stream to true.
You may have noticed we were passing OPENAI_API_KEY in the Authorization header to OpenAI. To generate this key, go to https://platform.openai.com/account/api-keys and create a new secret key.
After getting the key, copy it into a new file called .env.local in your ./supabase folder:
OPENAI_API_KEY=your-key-here
Serve the edge function locally by running:
supabase functions serve --env-file ./supabase/.env.local --no-verify-jwt
Notice how we are passing in the .env.local file.
Use cURL or Postman to make a POST request to http://localhost:54321/functions/v1/openai.
curl -i --location --request POST http://localhost:54321/functions/v1/openai \
--header 'Content-Type: application/json' \
--data '{"query":"What is Supabase?"}'
You should see a GPT response come back from OpenAI!
Deploy your function to the cloud by running:
supabase functions deploy --no-verify-jwt openai
supabase secrets set --env-file ./supabase/.env.local
If you're interesting in learning how to use this to build your own ChatGPT, read the blog post and check out the video:
<div class="video-container"> <iframe src="https://www.youtube-nocookie.com/embed/Yhtjd7yGGGA" frameBorder="1" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen ></iframe> </div>