Accessing ChatGPT-4 in JavaScript Through OpenAI APIs

GPT-4, the model behind ChatGPT can be accessed in JavaScript through an API for making natural language applications.

Blog> Categories: JavaScript, AI-ML

Table of Contents

Get Access to GPT-4 #

To get an API key for GPT models, including ChatGPT, you can follow these steps:

Visit the OpenAI website at https://openai.com/.

  1. Click on the “Get started” or “Sign up” button to create an account.
  2. Fill out the required information to create your account.
  3. Once your account is created and logged in, navigate to the OpenAI API section.
  4. Review the pricing details and terms of use for the API.
  5. Click on the “Get started” button to access the API.
  6. Follow the instructions provided to request access to the API.
  7. Once your request is approved, you will receive an API key that you can use to authenticate your requests.

Keep in mind that the availability of the API and the process to obtain an API key may be subject to change, so it’s always recommended to refer to the official OpenAI documentation or website for the most up-to-date information on accessing GPT models via their API.

Call ChatGPT API in JavaScript #

To call the ChatGPT-4 API using JavaScript from a browser, you can use the fetch or axios library to make HTTP requests. Fetch is a default function that comes in the browser, axios is a library for use in node.js. Here’s an example using the fetch API:

// Define the API endpoint URL
const apiUrl = 'https://api.openai.com/v1/chat/completions';

// Define your API key
const apiKey = 'YOUR_API_KEY';

// Define the payload for the API request
const payload = {
  messages: [
    {
      role: 'system',
      content: 'You are a helpful assistant.',
    },
    {
      role: 'user',
      content: 'Who won the world series in 2020?',
    },
  ],
};

// Make the API request
fetch(apiUrl, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${apiKey}`,
  },
  body: JSON.stringify(payload),
})
  .then(response => response.json())
  .then(data => {
    // Handle the API response
    console.log(data);
  })
  .catch(error => {
    // Handle any errors
    console.error(error);
  });

In this example, you need to replace ‘YOUR_API_KEY’ with your actual API key. Additionally, you can modify the payload object to customize the messages and role as per your requirements.

Remember to follow the OpenAI API documentation for the correct endpoint URL and any additional parameters or headers required for the specific API call you want to make.

In the provided code example, the role field is used to indicate the role of each message in the conversation when making an API request to ChatGPT. The roles used in the example are ‘system’ and ‘user’. Here’s the meaning of each role:

  • ‘system’: This role is typically used for providing instructions or setting the behavior of the model. In the example, the system message ‘You are a helpful assistant.’ serves as an instruction or prompt for the model to understand its role as an assistant and guide its responses accordingly.

  • ‘user’: This role represents the messages or queries from the user or end-user of the system. In the example, the user message ‘Who won the world series in 2020?’ represents a question posed by the user, which the model will generate a response to based on the given context.

By providing different roles for each message, you can create a more interactive conversation and guide the model’s behavior by setting the context and expectations. The model will generate responses based on the conversation history, including both system and user messages, allowing for back-and-forth interactions with the AI model.

Response Structure #

The typical response from a GPT model like ChatGPT will be in the form of a JSON object containing the generated message. Here’s an example of how a typical response may look like:

{
  "id": "chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWUzVe",
  "object": "chat.completion",
  "created": 1655426418,
  "model": "gpt-4.0-turbo",
  "usage": {
    "prompt_tokens": 56,
    "completion_tokens": 31,
    "total_tokens": 87
  },
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "The Los Angeles Dodgers won the World Series in 2020 and 1988."
      },
      "finish_reason": "stop",
      "index": 0
    }
  ]
} In this example, the response includes the following fields:

– id: A unique identifier for the API call. – object: Indicates the type of response, in this case, it’s a chat completion. – created: The timestamp of when the response was generated. – model: The specific model that generated the response. – usage: Information about the token usage in the API call. – choices: An array containing the generated message(s).

Within the choices array, you can find the generated message(s) along with additional details such as the role (e.g., “assistant”) and the content of the message. In this example, the assistant’s response is “The Los Angeles Dodgers won the World Series in 2020 and 1988.”

You can access the generated response in your JavaScript code by accessing the appropriate fields of the response object returned from the API call.

Providing Context #

Unlike the ChatGPT WebApp, the API does not remember the conversation. To provide context for longer conversations when interacting with GPT models, including ChatGPT, you can include previous messages in the conversation history. Each message in the history should have a role (such as system or user) and content (the text of the message). By including the conversation history, you can provide context for the model and ensure that it understands the preceding messages when generating a response.

Here’s an example of how you can structure the payload to include a longer conversation history:

const payload = {
  messages: [
    { role: 'system', content: 'You are a helpful assistant.' },
    { role: 'user', content: 'Who won the world series in 2020?' },
    { role: 'assistant', content: 'The Los Angeles Dodgers won the World Series in 2020.' },
    { role: 'user', content: 'That\'s great! Did they win any previous year?' },
    { role: 'assistant', content: 'Yes, the Los Angeles Dodgers also won the World Series in 1981, 1965, and 1959.' },
  ],
};

In this example, the conversation history includes the system message, two user messages, and two assistant messages. The model will take into account the entire conversation history to generate an appropriate response based on the given context.

By extending the conversation history, you can have more interactive and context-aware conversations with the model, allowing for more detailed and meaningful interactions.

Best Practices for Using the ChatGPT-4 API #

When using the API, there are several best practices you can follow to ensure effective and responsible usage:

Provide clear and specific instructions: Start the conversation with a system message that provides clear instructions or context to guide the model’s behavior. This helps set the right expectations and improves the relevance of the generated responses.

Limit the response length: Set a max_tokens parameter to limit the length of the response. This helps control the response size and prevents excessively long or irrelevant outputs.

Review and validate generated content: Always review and validate the generated content before using or sharing it. While the models strive to provide accurate information, they may occasionally generate incorrect or biased responses.

Experiment and iterate: Don’t hesitate to experiment with different instructions, prompts, or conversation structures to achieve the desired results. Iterate and refine your inputs based on the generated responses to improve the quality of the interaction.

Handle errors and retries: Implement error handling and retry mechanisms to handle any issues that may arise during API calls. Network issues, timeouts, or rate limits can occur, so it’s essential to have appropriate error handling in place.

Handle Incomplete Responses: Sometimes the model might return incomplete or cut-off responses. You can check the finish_reason field in the API response to determine if the response is complete or if it was truncated. If necessary, you can make another API call to continue the conversation.

Implement Rate Limiting: If you make multiple API calls in quick succession, ensure you implement rate limiting to avoid hitting rate limits and to manage your usage effectively. Follow the guidelines provided by the API provider to determine the optimal rate limit for your application.

Validate and Preprocess User Input: Validate and preprocess user input before including it in the conversation. This helps ensure the input is appropriate and relevant. Sanitize and filter user input to prevent any potentially harmful or sensitive content from being sent to the model.

Respect Ethical and Legal Guidelines: Ensure that the content generated by the model aligns with ethical and legal standards. Avoid using the API for generating inappropriate, offensive, or harmful content. Familiarize yourself with the terms of service and usage guidelines provided by the API provider.