В мире здравоохранения каждая секунда имеет решающее значение, и доступ к точной и надежной медицинской информации имеет решающее значение. Но что, если бы мы могли сделать еще один шаг и иметь помощника с искусственным интеллектом, который может дать квалифицированный медицинский совет за считанные секунды? Это именно то, что мы собираемся создать с помощью языковой модели OpenAI GPT-3.
В этом блоге мы рассмотрим процесс создания API-интерфейса медицинского помощника, который использует языковую модель OpenAI GPT-3 для предоставления экспертных медицинских услуг. совет. Мы будем использовать Node.js, Express и OpenAI API для создания этого помощника.
Прежде чем углубляться в код, давайте сначала разберемся с концепцией этого медицинского помощника. Идея этого помощника состоит в том, чтобы давать медицинские советы пациентам, которые не могут посетить врача или нуждаются в быстром ответе. Помощник сможет предоставить варианты самодиагностики, если болезнь можно вылечить с помощью домашних средств.

Предпосылки

Чтобы следовать этому руководству, вам понадобятся:

  • Базовое понимание HTML, CSS, JavaScript и Node js.
  • Текстовый редактор, установленный на вашем компьютере, например Visual Studio Code или Sublime Text.
  • Расширение живого сервера Visual Studio Code

Прежде чем мы углубимся в код, нам нужно убедиться, что у нас установлены необходимые инструменты. Нам нужно иметь:

  • узел js
  • нпм

Если у вас не установлен Node.js, вы можете загрузить его с официального сайта Node.js.

Для настройки проекта мы:

  1. Создайте новую папку для нашего проекта.
  2. Перейдите в эту папку в терминале.

Выполните следующую команду, чтобы инициализировать новый проект Node.js:

npm init -y

Это создаст файл package.json в каталоге нашего проекта. В этом файле будет храниться информация о нашем проекте, такая как его имя, версия и зависимости.

Папка нашего проекта должна выглядеть примерно так:

Проект в виде двух подпапок в нем, api и chatbot_UI. Как следует из названия, API отвечает за запросы API от чат-бота. Папка chatbot_UI содержит пользовательский интерфейс, с которым взаимодействует пользователь.

Как только мы настроим наш проект, мы можем начать кодировать!

Первый шаг — импортировать необходимые библиотеки и модули в наш файл index.js в папку API.

const { Configuration, OpenAIApi } = require('openai');
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
require('dotenv').config();

Мы будем использовать модуль openai для связи с API OpenAI. Нам также нужен модуль express для создания нашего API, модуль body-parser для анализа входящих запросов и модуль cors для обработки совместного использования ресурсов между источниками. Наконец, мы используем dotenv для загрузки переменных среды.
Затем мы создаем экспресс-приложение и настраиваем промежуточное ПО:

const app = express();
app.use(bodyParser.json());
app.use(cors());

Мы используем body-parser для анализа входящих запросов с полезными данными JSON и cors для включения совместного использования ресурсов между источниками. Теперь давайте настроим наши учетные данные OpenAI API:

const config = new Configuration({
  apiKey: process.env.OPENAI_KEY
});

const openai = new OpenAIApi(config);

Мы создаем новый экземпляр конфигурации с нашим ключом API OpenAI, который загружается из наших переменных среды с использованием process.env.OPENAI_KEY. Затем мы передаем эту конфигурацию для создания нового экземпляра класса OpenAIApi.

Теперь, когда мы настроили промежуточное ПО и учетные данные API, давайте создадим конечные точки. Начнем с корневой конечной точки, которая просто возвращает приветственное сообщение:

app.get('/', (req, res) => {
  res.send('Welcome to the Medical Health Assistant API with GPT-3 language model');
});

Эта конечная точка возвращает простое приветственное сообщение, когда к корневому URL-адресу отправляется запрос GET.
Затем мы определяем наше приглашение, которое будет использоваться в качестве базового приглашения для каждого сообщения:

const prompt = `You are an AI assistant that is an expert in medical health and is part of a hospital system called medicare AI
You know about symptoms and signs of various types of illnesses.
You can provide expert advice on self-diagnosis options in the case where an illness can be treated using a home remedy.
If a query requires serious medical attention with a doctor, recommend them to book an appointment with our doctors
If you are asked a question that is not related to medical health respond with "Im sorry but your question is beyond my functionalities".
Do not use external URLs or blogs to refer
Format any lists on individual lines with a dash and a space in front of each line.

>`;

Это определяет константу, содержащую подсказку, которая будет использоваться для генерации ответов из языковой модели GPT-3.

Теперь, когда мы определили нашу подсказку, давайте перейдем к обработке обработки сообщения. Мы определяем конечную точку POST /message для получения входящих сообщений и генерации ответов с использованием модели GPT-3:

app.post('/message', (req, res) => {
  const response = openai.createCompletion({
    model: 'text-davinci-003',
    prompt: prompt + req.body.message,
    temperature: 0.5,
    max_tokens: 1024,
    top_p: 1,
    frequency_penalty: 0,
    presence_penalty: 0
  });

  response
    .then((data) => {
      const message = { message: data.data.choices[0].text };
      res.send(message);
    })
    .catch((err) => {
      res.send(err);
    });
});

Эта конечная точка получает запрос POST, содержащий сообщение в теле запроса. Мы используем метод openai.createCompletion() для генерации ответа из модели GPT-3. Метод принимает различные параметры, такие как модель, подсказка, температура, max_tokens, top_p, Frequency_penalty и присутствия_penalty. Эти параметры влияют на поведение процесса генерации ответов.

Получив ответ от модели GPT-3, мы извлекаем сгенерированное сообщение и отправляем его обратно клиенту в качестве ответа.

Наконец, мы запускаем сервер, прослушивая определенный порт, в данном случае порт 3000:

app.listen(3000, () => console.log('Listening on port 3000'));

Пользовательский интерфейс чат-бота

Код HTML устанавливает базовую структуру чат-бота. Он включает в себя заголовок, метатег окна просмотра для отзывчивости, ссылку на файл CSS и основной контент:

<html>
  <head>
    <title>GPT-3</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <div class="chat-box">
        <!-- Chat Box Header -->
        <div class="chat-box-header"> AI chat</div>

        <!-- Chat Box Body -->
        <div class="chat-box-body">
          <div class="response">
            <span>Hello there, how can I help you today?</span>
          </div>
        </div>

        <!-- Chat Box Footer -->
        <div class="chat-box-footer">
          <input type="text" class="input-box" placeholder="Ask a question..." />
          <button>Send</button>
        </div>
    </div>

    <script src="index.js"></script>
  </body>
</html>
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
/* Add a background color to the chat screen */
body {
    font-family: 'Roboto', sans-serif;
    background: #E8EBF5;
    background-size: cover;
    background-position: center center;
  }


  #loading {
    font-size: 30px;
  }

  /* Style the chat box */
  .chat-box {
    margin: 80px auto;
    width: 400px;
    max-width: 100%;
    background-color: #ffffff;
    border-radius: 8px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    overflow: hidden
    height: 600px;
  }


  /* Style the chat box header */
  .chat-box-header {
    background-color: #846c38;
    color: #ffffff;
    padding: 16px;
    font-size: 20px;
    font-weight: bold;
    border-top-left-radius: 8px;
    border-top-right-radius: 8px;
  }

  /* Style the chat box body */
  .chat-box-body {
    padding: 16px;
    overflow-y: auto;
    height: calc(100% - 145px);
  }

  /* Style the chat messages */
  .chat-box-body .message,
  .chat-box-body .response {
    margin-bottom: 16px;
  }


  .message {
    color: rgb(44, 41, 41);
    font-family: Helvetica;
    font-size: 16px;
    font-weight: normal;
    text-align: right;
    clear: both;
  }

  .message span {
    line-height: 1.5em;
    display: inline-block;
    background: #F0EEED;
    padding: 20px;
    border-radius: 8px;
    border-bottom-right-radius: 2px;
    max-width: 80%;
    margin-right: 10px;
    animation: floatup .5s forwards
  }

  /* Style the chatbot's responses */
 .response {
    color: white;
    font-family: Helvetica;
    font-weight: normal;
    font-size: 16px;
    text-align: left;
  }

.response {
    line-height: 1.5em;
    display: inline-block;
    background: #0084ff;
    padding: 10px;
    border-radius: 8px;
    border-bottom-left-radius: 2px;
    max-width: 80%;
    margin-left: 10px;
  }
  /* Style the chat box footer */
  .chat-box-footer {
    bottom: 0;
    display: flex;
    align-items: center;
    background-color: #846c38;
    border-top: 1px solid #846c38;
    padding: 8px 16px;
  }

  /* Style the input field */
  .chat-box-footer input[type="text"] {
    flex: 1;
    padding: 8px;
    border: 1px solid #846c38;
    border-radius: 8px;
    font-size: 16px;
    outline: none;
  }

  /* Style the button */
  .chat-box-footer button {
    margin-left: 8px;
    padding: 8px 16px;
    background-color: #0084ff;
    color: #ffffff;
    font-size: 16px;
    font-weight: bold;
    border: none;
    border-radius: 8px;
    cursor: pointer;
  }

  /* Add some hover effects to the button */
  .chat-box-footer button:hover {
    background-color: #0073e6;
  }

  .chat-box-footer button:active {
    background-color: #005bbf;
  }

Код CSS, представленный в файле style.css, добавляет стили к чат-боту и его компонентам. Он определяет макет, цвета, шрифты и анимацию пользовательского интерфейса окна чата:

Код JavaScript обрабатывает функциональность чат-бота. Он прослушивает действия пользователя, такие как нажатие кнопки отправки или нажатие клавиши ввода, и отправляет сообщение пользователя на сервер для обработки:

const chatBox = document.querySelector(".chat-box");
const inputField = chatBox.querySelector("input[type='text']");
const button = chatBox.querySelector("button");
const chatBoxBody = chatBox.querySelector(".chat-box-body");

// Send message on button click
button.addEventListener("click", sendMessage);

// Send message on enter key press
inputField.addEventListener("keypress", function(event) {
  if (event.key === "Enter") {
    sendMessage();
  }
});

function sendMessage() {
  const message = inputField.value;
  inputField.value = "";
  chatBoxBody.innerHTML += `<div class="message"><span>${message}</span></div>`;
  chatBoxBody.innerHTML += `<div id="loading" class="response loading">.</div>`;
  scrollToBottom();

  // Simulating loading animation with dots
  window.dotsGoingUp = true;
  var dots = window.setInterval(function() {
    var wait = document.getElementById("loading");
    if (window.dotsGoingUp) 
        wait.innerHTML += ".";
    else {
        wait.innerHTML = wait.innerHTML.substring(1, wait.innerHTML.length);
        if (wait.innerHTML.length < 2)
            window.dotsGoingUp = true;
    }
    if (wait.innerHTML.length > 3)
        window.dotsGoingUp = false;
  }, 250);

  fetch('http://localhost:3000/message', {
    method: 'POST',
    headers: {
      accept: 'application.json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({message})
  }).then(response => {
    return response.json();
  }).then(data => {
    document.getElementById("loading").remove();
    chatBoxBody.innerHTML += `<div class="response"><p>${data.message}</p></div>`;
    scrollToBottom();
  })
}

// Function to scroll to the bottom of the chatbox
function scrollToBottom() {
  chatBoxBody.scrollTop = chatBoxBody.scrollHeight;
}

Чтобы запустить чат-бота, откройте терминал vscode, перейдите в папку API и выполните команду:

node index.js

Это начнет слушать порт 3000.

Чтобы запустить чат-бот, выполните следующие действия:

  1. Перейдите в папку chatbot_UI.
  2. Откройте его с работающим сервером, нажав «Перейти в эфир».

Это действие инициирует порт на вашем компьютере и будет обслуживать интерфейс chatbot_UI.

Открытие вышеуказанного порта в браузере запускает наш чат-бот.

Вот и все! У нас есть базовый чат-бот, настроенный для обработки входящих сообщений, генерации ответов с использованием модели GPT-3 и отправки сгенерированного ответа обратно клиенту.

В заключение мы прошли через процесс создания API-интерфейса медицинского помощника с использованием языковой модели OpenAI GPT-3. Этот помощник ИИ может предоставить экспертную медицинскую консультацию, варианты самодиагностики. Благодаря возможностям GPT-3 мы можем повысить доступность здравоохранения и оказать быструю медицинскую помощь тем, кто в ней нуждается.