Skip to content

Latest commit

 

History

History
98 lines (75 loc) · 3.23 KB

README.md

File metadata and controls

98 lines (75 loc) · 3.23 KB

Azure Functions

Chat using ChatGPT (Node.js TypeScript Function)

This sample shows how to take a ChatGPT prompt as HTTP Get or Post input, calculates the completions using OpenAI ChatGPT service, and then returns the output plus caches in a Blob state store.

Open in GitHub Codespaces

Run on your local environment

Pre-reqs

  1. Node.js 16 or 18 and TypeScript 4.9
  2. Azure Functions Core Tools
  3. OpenAPI API key
  4. Export these secrets as Env Vars using values from Step 3.

Mac/Linux

export OPENAI_API_KEY=*Paste from step 3*

Windows

Search for Environment Variables in Settings, create new System Variables similarly to these instructions:

Variable Value
OPENAI_API_KEY Paste from step 3
  1. Add this local.settings.json file to the text_summarize folder to simplify local development and include Key from step 3
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "OPENAI_API_KEY": "*Paste from step 3*"
  }
}

Using Functions CLI

  1. Open a new terminal and do the following:
cd chat
npm install
func start
  1. Using your favorite REST client, e.g. RestClient in VS Code, PostMan, curl, make a post. test.http has been provided to run this quickly.

Terminal:

curl -i -X POST http://localhost:7071/api/chat/ \
  -H "Content-Type: text/json" \
  --data-binary "@testdata.json"

testdata.json

{
    "prompt": "Write a poem about Azure Functions.  Include two reasons why users love them."
}

test.http

POST http://localhost:7071/api/chat HTTP/1.1
content-type: application/json

{
    "prompt": "Write a poem about Azure Functions.  Include two reasons why users love them."
}

You will see chat happen in the Terminal standard out, the HTTP response, and saved off to a Blob for state management in the samples-chatgpt-output container.

Source Code

The key code that makes this work is as follows in ./chat/index.ts. You can customize this or learn more snippets using Examples and OpenAPI Playground.

    completion = await openaiClient.createCompletion({
      model: "text-davinci-003",
      prompt: generatePrompt(prompt),
      temperature: 0.9,
      max_tokens: 200
    });

Deploy to Azure

The easiest way to deploy this app is using the Azure Dev CLI aka AZD. If you open this repo in GitHub CodeSpaces the AZD tooling is already preinstalled.

To provision and deploy:

azd up