Хотя Google был нашим другом в течение очень долгого времени, помогая нам находить нужную нам информацию, все знают, что копаться в страницах с информацией иногда может быть довольно утомительно, и иногда мы не получаем то, что ищем … и это может быть довольно разочаровывающим. Часто наше время может быть лучше всего использовано для создания вещей или решения проблем, особенно когда есть дефицит времени, чтобы выполнить работу вовремя, и кто-то другой позаботится о защите нашего кода и приложения.

Когда дело доходит до защиты приложений или кода, если в организации нет специальной команды, которая занимается этим, очень утомительно просить разработчиков исследовать и создавать безопасную архитектуру с нуля. И именно здесь ChatGPT ярко сияет своими огромными знаниями из Большой языковой модели (LLM), обученной большому количеству тем, включая кибербезопасность.

Экспериментируя с возможностями ChatGPT и выясняя, насколько хорошо он помогает мне давать ответы и рекомендации (и это довольно хорошо), связанные с веб-приложениями и серверной частью, которую я создаю сам, я решил создать базового чат-бота, с которым вы можете взаимодействовать с помощью РЕСТ API.

Создание простого чат-бота с использованием javascript и express.js

Вот фрагмент простого REST API с использованием express.js, который использует библиотеку API, предоставленную OpenAI (https://www.npmjs.com/package/openai) сделать запрос к ChatGPT, используя ввод, предоставленный пользователем.

Обработка запросов пользователей

Запрос поступает от пользователя в виде строки в теле запроса API с использованием типа содержимого как text/plain. Чтобы сделать это, трюк здесь заключается в использовании пакета body-parser, затем мы можем использовать промежуточное программное обеспечение bodyParser.text(), чтобы сохранить тело запроса в виде простого текста. Делая это, вы можете напрямую обращаться к неструктурированному вводу от пользователя как к объекту req.body. Вы также можете использовать JSON в качестве входных данных для пользователя и соответствующим образом анализировать ввод, но прямое использование текста для этого варианта использования просто проще.

Использование правильной модели ChatGPT

На момент публикации этой публикации я все еще нахожусь в списке ожидания для использования модели GPT-4 (хотя я уже давно запросил доступ :( ), поэтому последняя и лучшая модель, которую мы можем использовать для чат-бота, — это gpt-3.5. Для этого Я использовал чат-бот gpt-3.5-turbo-16k, который дает в 4 раза больше контекста в ответе, но будьте осторожны, это также означает, что максимальный лимит токенов также в 4 раза выше (16 384 токена).Это может не иметь большого значения, если вы просто экспериментируете и не ожидайте, что будет много запросов, но они, безусловно, могут быстро сложиться.Вы можете использовать только gpt-3.5-turbo и все будет в порядке.

Разработка подсказки

Что следует отметить при использовании модели gpt-3.5 -turbo (особенно если вы получаете ошибки 404), так это то, что модель поддерживает только конечную точку завершения чата. Итак, если вы пытаетесь использовать эту модель через конечную точку завершения (либо через библиотеку openai, либо напрямую с помощью https://api.openai.com/v1/completions), то она не будет работать, и вы получите ошибку 404. Если внимательно прочитать документацию от OpenAI (https://platform.openai.com/docs/guides/gpt), там есть информация о том, какой метод API использовать и конечную точку.

Использование конечной точки завершения чата означает…. что не очень просто просто предоставить модели приглашение напрямую (как в случае с поддержкой конечной точки завершения), предоставленное пользователем, и покончить с этим. Использование модели завершения чата и API означает, что нам придется разработать и предоставить модели тщательно продуманные диалоговые сообщения, а затем ввести запрос от пользователя. Сообщения должны представлять собой массив объектов сообщений, где каждый объект имеет роль (например, система, пользователь или помощник) и предоставляет содержимое для каждой роли. Таким образом, модель очень хорошо улавливает контекст запроса и может предоставить очень точную информацию в качестве ответа. Вы можете спроектировать это как разговорное сообщение туда и обратно, если хотите повысить точность. В моем фрагменте кода я предоставляю контекст модели, поскольку она является экспертом по безопасности в этой области, а затем напрямую отправляю пользовательский запрос, как определено как роль «пользователя».

Чтобы проверить это, просто создайте каталог и назовите его как-нибудь весело, например, «securityguru». В каталоге запустите npm init -y, чтобы инициализировать новый проект npm. Вам нужно будет загрузить некоторые необходимые зависимости, чтобы вы могли добавить их в свой файл package.json и запустить npm install:

"axios": "^1.3.4",
"cors": "^2.8.5",
"express": "^4.18.2",
"nodemon": "^2.0.22",
"openai": "^3.3.0"

После завершения установки создайте файл с именем index.js и скопируйте и вставьте приведенный ниже код. Перейдите на OpenAI и получите ключ API для использования в этом проекте. Вы можете предоставить ключ API непосредственно в код, но это очень плохая практика, поскольку вы можете в конечном итоге отправить ключ в свой общедоступный репозиторий и использовать его. Вместо этого безопасно введите ключ API в качестве переменной среды и получите доступ к нему с помощью process.env или управляйте файлом конфигурации (снова убедитесь, что вы .gitignore его, чтобы он не попал в ваше удаленное репо :))

const express = require("express");
const app = express();
const bodyParser = require("body-parser");
const cors = require("cors");
const { Configuration, OpenAIApi } = require("openai");

app.use(cors());
app.use(bodyParser.text());
app.use(bodyParser.urlencoded({ extended: true }));

const configuration = new Configuration({
  apiKey: process.env.api_key,
});

const openai = new OpenAIApi(configuration);
app.post("/chat", async (req, res) => {
  try {
    // Get user input from the request body
    const userInput = req.body;
    console.log(userInput);

    const prompt = [
      {
        role: "system",
        content: "You are a security expert from a cybersecurity company",
      },
      { role: "user", content: userInput },
    ];

    const chatGptResponse = await openai.createChatCompletion({
      model: "gpt-3.5-turbo-16k",
      messages: prompt,
    });

    // Send the ChatGPT response back to the user
    res.status(200).json(chatGptResponse.data.choices[0].message.content);
  } catch (error) {
    console.error(`Error: ${error}`);
    res.status(500).json({ message: "An error has occurred." });
  }
});

const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Server is running on port ${port}`));

Теперь давайте перейдем к самой интересной части… запустим экспресс-сервер, чтобы он мог обслужить наш запрос.

Я использую nodemon для запуска сервера, поэтому каждый раз, когда я вношу изменения в код, сервер мгновенно обновляется, что помогает нам эффективно тестировать код и вносить изменения.

Вы можете запустить следующую команду прямо в терминале, чтобы запустить сервер:

nodemon index.js

или вы можете создать скрипт в package.json, чтобы вы могли запустить

запуск запуска нпм

По умолчанию сервер будет работать на порту 3000, поэтому убедитесь, что порт не занят каким-либо другим процессом. Вы можете объявить свой собственный порт для запуска, указав значение порта в качестве переменной среды.

PORT=4000 н/мин пуск.

Затем сервер запустится и будет прослушивать запрос на указанном порту.

Давайте зададим наш первый вопрос:

Затем наш бот передаст вопрос в ChatGPT и предоставит ответ, чтобы помочь вам, как вы можете видеть ниже:

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

Мы изучим дальнейшие варианты использования, опираясь на этот основополагающий подход!