Гид по технологиям

Как установить ChatGPT локально на вашем компьютере

• 10 min read • Руководство • Обновлено 11 Dec 2025
Установка ChatGPT локально — пошагово
Установка ChatGPT локально — пошагово

Установка приложения ChatGPT локально

Важно: это руководство не заменяет официальную документацию OpenAI и не даёт способа «скачать» закрытую модель ChatGPT себе на диск — оно показывает, как создать локальную оболочку (frontend + сервер), которая обращается к OpenAI API. Если вы хотите полностью автономную локальную LLM, рассматривайте независимые модели (см. раздел “Альтернативные подходы”).

Зачем устанавливать приложение ChatGPT локально?

Локальная установка имеет несколько преимуществ:

  • Быстрый отклик — запуск части кода на вашем устройстве уменьшает сетевые задержки.
  • Конфиденциальность — сообщения не передаются дополнительно через чужие интерфейсы (хотя запросы всё равно отправляются в OpenAI, если вы используете их API).
  • Кастомизация — вы контролируете интерфейс, логику и вид приложения.
  • Независимость от веб‑интерфейса — можно работать без привязки к конкретному сайту.

Когда это не подходит: если вам нужна полностью автономная модель без зависимостей от внешних сервисов, локальный клиент + OpenAI API не решит задачу — потребуется локальная LLM и бóльшие ресурсы.

Краткий обзор архитектуры

Минимальная архитектура, используемая в руководстве:

  • Клиент (client) — статический фронтенд с HTML/CSS/JS (Vite + vanilla JS). Отправляет запросы на ваш локальный/удалённый сервер.
  • Сервер (server) — Node.js (Express) с библиотекой openai. Принимает POST с prompt и пересылает запрос в OpenAI API, затем возвращает ответ клиенту.
  • Хранилище секретов — файл .env на сервере локально; при деплое секреты задаются в настройках платформы (Render).

Быстрый список требований и проверок перед началом

  • Windows (рекомендуется) или другая ОС с установленным Node.js и npm.
  • Visual Studio Code для редактирования и терминала.
  • Git (Git Bash) — если вы будете публиковать код на GitHub и деплоить.
  • Аккаунт OpenAI и созданный API‑ключ.
  • Аккаунты Render и Vercel для деплоя (опционально).

Проверьте:

  • Установлен ли Node.js: в терминале node -v.
  • Работает ли npm: npm -v.
  • Установлен ли git: git --version.

Подробная пошаговая инструкция

В этом разделе переведены и уточнены исходные шаги. Все команды выполняйте в терминале VS Code. Если используете другую ОС — адаптируйте слеши и команды соответственно.

1. Создайте папку проекта и откройте её в Visual Studio Code

  1. На рабочем столе создайте новую папку и назовите её Open_AI_ChatGPT. Создание новой папки Open_AI_ChatGPT
  2. Запустите Visual Studio Code и выберите File → Open Folder, затем укажите Open_AI_ChatGPT. Открыть папку в VS Code
  3. Откройте встроенный терминал: View → Terminal. Вид терминала в VS Code

2. Проверка и установка Node.js

  1. В терминале выполните: node -v.
  2. Если команда не найдена, скачайте и установите Node.js с официального сайта. Скачивание Node.js
  3. Запустите установщик и следуйте инструкциям (Next → Accept → Install). Установка Node.js шаг 1 Установка Node.js шаг 2 Установка Node.js финал
  4. Перезапустите VS Code после установки.

Создаём клиентский проект с помощью Vite:

npm create vite@latest client --template vanilla

При вопросах укажите рамки проекта (Vanilla → JavaScript). Создание проекта Vite с шаблоном Vanilla

3. Установка зависимостей в клиенте

  1. Перейдите в папку client:
cd client
  1. Установите зависимости:
npm install

Команда npm install для клиента

  1. Скачайте архив assets (содержит иконки) и распакуйте в папку client/assets. Копирование папки assets в client
  2. Удалите ненужные файлы vite.svg и counter.js в корне клиентского шаблона. Удаление файлов vite.svg и counter.js
  3. Перенесите favicon из assets в папку public.

4. Файл style.css

Создайте/отредактируйте style.css и вставьте следующий CSS точно как указано (шрифт, стили контейнера чата и формы): Редактирование style.css

@import url("https://fonts.googleapis.com/css2?family=Alegreya+Sans:wght@100;300;400;500;700;800;900&display=swap");

* {

 margin: 0;

 padding: 0;

 box-sizing: border-box;

 font-family: "Alegreya Sans", sans-serif;

}

body {

 background: #343541;

}

#app {

 width: 100vw;

 height: 100vh;

 background: #343541;

 display: flex;

 flex-direction: column;

 align-items: center;

 justify-content: space-between;

}

#chat_container {

 flex: 1;

 width: 100%;

 height: 100%;

 overflow-y: scroll;

 display: flex;

 flex-direction: column;

 gap: 10px;

 -ms-overflow-style: none;

 scrollbar-width: none;

 padding-bottom: 20px;

 scroll-behavior: smooth;

}

/* hides scrollbar */

#chat_container::-webkit-scrollbar {

 display: none;

}

.wrapper {

 width: 100%;

 padding: 15px;

}

.ai {

 background: #40414F;

}

.chat {

 width: 100%;

 max-width: 1280px;

 margin: 0 auto;

 display: flex;

 flex-direction: row;

 align-items: flex-start;

 gap: 10px;

}

.profile {

 width: 36px;

 height: 36px;

 border-radius: 5px;

 background: #5436DA;

 display: flex;

 justify-content: center;

 align-items: center;

}

.ai .profile {

 background: #10a37f;

}

.profile img {

 width: 60%;

 height: 60%;

 object-fit: contain;

}

.message {

 flex: 1;

 color: #dcdcdc;

 font-size: 20px;

 max-width: 100%;

 overflow-x: scroll;

 /*

 * white space refers to any spaces, tabs, or newline characters that are used to format the CSS code

 * specifies how white space within an element should be handled. It is similar to the "pre" value, which tells the browser to treat all white space as significant and to preserve it exactly as it appears in the source code.

 * The pre-wrap value allows the browser to wrap long lines of text onto multiple lines if necessary.

 * The default value for the white-space property in CSS is "normal". This tells the browser to collapse multiple white space characters into a single space, and to wrap text onto multiple lines as needed to fit within its container.

 */

 white-space: pre-wrap;

 -ms-overflow-style: none;

 scrollbar-width: none;}

/* hides scrollbar */

.message::-webkit-scrollbar {

 display: none;

}

form {

 width: 100%;

 max-width: 1280px;

 margin: 0 auto;

 padding: 10px;

 background: #40414F;

 display: flex;

 flex-direction: row;

 gap: 10px;

}

textarea {

 width: 100%;

 color: #fff;

 font-size: 18px;

 padding: 10px;

 background: transparent;

 border-radius: 5px;

 border: none;

 outline: none;

}

button {

 outline: 0;

 border: 0;  cursor: pointer;

 background: transparent;

}

form img {

 width: 30px;

 height: 30px;

}

5. Файл index.html

Создайте index.html в клиенте с таким содержимым. Сохраните файл после вставки. index.html в клиенте













Codex - Your AI







Переименуйте файл main.js в script.js, если шаблон создал другое имя.

6. Запуск dev‑сервера клиента

  1. В терминале остановите всё (Ctrl + C) и убедитесь, что вы в папке client: cd client.
  2. Запустите:
npm run dev

npm run dev для клиента

Если появится ошибка связанная с отсутствием counter.js — это связано с удалёнными файлами шаблона; продолжайте настройку, как указано.

7. script.js (логика клиента)

Замените содержимое script.js на следующий код. Этот скрипт формирует сообщения в чате, показывает индикатор загрузки, отправляет prompt на локальный/удалённый сервер и отображает результат. Редактирование script.js

import bot from './assets/bot.svg'

import user from './assets/user.svg'

const form = document.querySelector('form');

const chatContainer = document.querySelector('#chat_container');

let loadInterval;

function loader(element) {

 element.textContent = '';

 loadInterval = setInterval(() => {

 // Update the text content of the loading indicator

 element.textContent += '.';

 // If the loading indicator has reached three dots, reset it

 if (element.textContent === '....') {

 element.textContent = '';

 }

 }, 300)

}

function typeText(element, text) {

 let index = 0;

 let interval = setInterval(() => {

 if (index < text.length) {

 element.innerHTML += text.charAt(index);

 index++;

 } else {

 clearInterval(interval);

 }

 }, 20)

}

function generateUniqueId() {

 const timestamp = Date.now();

 const randomNumber = Math.random();

 const hexadecimalString = randomNumber.toString(16);

 return `id-${timestamp}-${hexadecimalString}`;

}

function chatStripe(isAi, value, uniqueId) {

 return (

 `

 
${isAi ? 'bot' : 'user'}
${value}
` ) } const handleSubmit = async (e) => { e.preventDefault(); const data = new FormData(form); // user's chatstripe chatContainer.innerHTML += chatStripe(false, data.get('prompt')); // to clear the textarea input form.reset(); // bot's chatstripe const uniqueId = generateUniqueId(); chatContainer.innerHTML += chatStripe(true, " ", uniqueId); // to focus scroll to the bottom chatContainer.scrollTop = chatContainer.scrollHeight; // specific message div const messageDiv = document.getElementById(uniqueId); // messageDiv.innerHTML = "..." loader(messageDiv); const response = await fetch('http://localhost:8001/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ prompt: data.get('prompt') }) }) clearInterval(loadInterval); messageDiv.innerHTML = ''; if (response.ok) { const data = await response.json(); const parsedData = data.bot.trim(); typeText(messageDiv, parsedData); } else { const err = await response.text(); messageDiv.innerHTML = "Something went wrong"; alert(err); } } form.addEventListener('submit', handleSubmit); form.addEventListener('keyup', (e) => { if (e.keyCode === 13) { handleSubmit(e); } })

Примечание: URL в fetch по умолчанию указывает на локальный сервер http://localhost:8001/. При деплое замените URL на адрес сервера (см. раздел “Деплой сервера”).

8. Сервер: создаём папку и устанавливаем модули

  1. В корне проекта создайте папку server.
  2. Откройте новый терминал и перейдите в server:
cd server

npm init -y
  1. Установите зависимости:
npm install cors dotenv express nodemon openai

Установка зависимостей в сервере

9. Получение API‑ключа OpenAI и .env

  1. Войдите в OpenAI (https://platform.openai.com) → Personal → View API keys → Create new secret key. Скопируйте ключ. Получение API ключа в OpenAI
  2. В папке server создайте файл .env и добавьте строку:
OPENAI_API_KEY="Ваш_секретный_API_ключ"

Добавление ключа в .env

Важно: .env не должен попадать в репозиторий. Добавьте .gitignore (см. раздел публикации).

10. Файл server.js

Создайте server.js в папке server с таким содержимым. Этот код использует библиотеку openai для создания completion на модели text‑davinci‑003 (можно заменить на другой поддерживаемый моделью endpoint). Редактирование server.js

import express from 'express';

import * as dotenv from 'dotenv';

import cors from 'cors';

import { Configuration, OpenAIApi } from 'openai';

dotenv.config();

const configuration = new Configuration({

 apiKey: process.env.OPENAI_API_KEY,

});

const openai = new OpenAIApi(configuration);

const app = express();

app.use(cors());

app.use(express.json());

app.get('/', async (req, res) => {

 res.status(200).send({

 message: 'Hello from GPT!',

 })

});

app.post('/', async (req, res) => {

 try {

 const prompt = req.body.prompt;

 const response = await openai.createCompletion({

 model: "text-davinci-003",

 prompt: `${prompt}`,

 temperature: 0, // Higher values means the model will take more risks.

 max_tokens: 3000, // The maximum number of tokens to generate in the completion. Most models have a context length of 2048 tokens (except for the newest models, which support 4096).

 top_p: 1, // alternative to sampling with temperature, called nucleus sampling

 frequency_penalty: 0.5, // Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.

 presence_penalty: 0, // Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.

 });

 res.status(200).send({

 bot: response.data.choices[0].text

 });

 } catch (error) {

 console.log(error);

 res.status(500).send(error || 'Something went wrong');

 }

});

app.listen(5000, () => console.log('AI server started on http://localhost:8001'));

Примечание: код слушает порт 5000 в app.listen, но в console лог указан http://localhost:8001 — приведите в соответствие порт и адрес по необходимости. Можно изменить app.listen(8001, …).

11. package.json сервера

Пример package.json для сервера с nodemon (для разработки) выглядит так: package.json сервера

{

 "name": "server",

 "version": "1.0.0",

 "description": "",

 "type": "module",

 "scripts":{

 "server": "nodemon server"

 },

 "keywords": [],

 "author": "",

 "license": "ISC",

 "dependencies": {

 "cors": "^2.8.5",

 "dotenv": "^16.0.3",

 "express": "^4.18.2",

 "nodemon": "^2.0.20",

 "openai": "^3.1.0"

 }

}

После сохранения запустите сервер:

cd server

npm run server

12. Тестирование локально (две вкладки терминала)

  1. В VS Code откройте Split Terminal — у вас будет терминал сервера и терминал клиента. Split terminal в VS Code
  2. В терминале сервера запустите npm run server.
  3. В терминале клиента запустите npm run dev.
  4. Откройте ссылку dev (обычно http://localhost:5173) и попробуйте отправить “Hello, how are you doing” — бот должен попытаться получить ответ. Клиент отображает приложение

13. Git и GitHub: установка Git Bash и конфигурация

  1. Установите Git (Git Bash) и при установке укажите папку проекта как место установки, если хотите удобный доступ.
  2. Добавьте путь к git.exe в системную переменную PATH (если установщик не сделал это автоматически). Редактирование системных переменных PATH Редактирование PATH Добавление пути к git в PATH
  3. Настройте глобальные параметры git:
git config --global user.name "ваше_имя"

git config --global user.email "ваш_email"
  1. Для безопасной работы с GitHub можно создать Personal Access Token (fine‑grained) и использовать credential helper: Создание персонального токена на GitHub Генерация токена

Команды для менеджера учётных данных (Windows):

git config --global credential.helper wincred

git credential-manager-core configure

Следуйте подсказкам и введите токен вместо пароля при первой попытке push. Настройка credential helper для git

14. Создание репозитория и публикация кода на GitHub

14.1 Создаём репозиторий на GitHub

  1. Войдите в GitHub → Your repositories → New. Создание репозитория на GitHub
  2. Укажите имя репозитория и сделайте его Public (или Private). Настройки нового репозитория

14.2 Публикация кода

  1. В корне проекта (Open_AI_ChatGPT) создайте файл .gitignore и добавьте:
.env

node_modules

Файл .gitignore

  1. Инициализируйте git, сделайте первый коммит и добавьте удалённый origin:
git init

git add .

git commit -m "first commit"

git branch -M main

git remote add origin https://github.com/username/REPO-NAME

git push -u origin main

Замените URL на URL вашего репозитория. После пуша код будет виден в GitHub. Репозиторий с файлами

15. Деплой сервера на Render

  1. Зарегистрируйтесь на Render и подключите GitHub.
  2. Dashboard → New → Web Service. Создание веб‑сервиса в Render
  3. Подключите репозиторий, укажите Branch = main, Root Directory = server, Environment = Node, Start Command = npm run server. Настройка деплоя на Render
  4. В разделе Environment добавьте ключ OpenAI_API_Key (имя переменной возможно чувствительно к регистру) и значение — ваш секретный ключ. Добавление окружения на Render
  5. После успешного деплоя вы получите публичный URL сервиса. Обновите script.js: замените http://localhost:8001/ на URL вашего сервиса (например, https://your-app.onrender.com/). Изменение URL сервера в script.js

После правки закоммитьте изменения и запушьте в GitHub:

git add .

git commit -m "update the server URL"

git push

16. Деплой фронтенда на Vercel

  1. Зарегистрируйтесь на Vercel и нажмите Start Deploying. Начало деплоя на Vercel
  2. Импортируйте репозиторий через GitHub, укажите root directory = client. Импорт репозитория в Vercel Выбор репозитория и импорта
  3. Нажмите Deploy. После успешного билда кнопка Visit откроет хостинг фронтенда. Просмотр приложения на Vercel

Проверка работоспособности и тесты

Минимальные тесты и критерии приёмки:

  • Клиент открывается в браузере без ошибок в консоли.
  • После ввода запроса сервер получает POST и возвращает статус 200.
  • Ответ сервера отображается в интерфейсе клиента и читаем.
  • Файл .env не попал в репозиторий.

Кейс теста «от клиента к серверу»: отправьте короткий prompt, убедитесь, что на сервере нет ошибки 401 (неверный API ключ).

Безопасность, конфиденциальность и GDPR

  • Никогда не храните OPENAI_API_KEY в публичных репозиториях. Используйте .env локально и переменные окружения в облаке.
  • Логи сервера могут содержать полные тексты запросов; ограничьте логирование или обезличьте данные.
  • Для соответствия GDPR при обработке персональных данных: обеспечьте основание для обработки, минимизируйте хранение и предоставьте инструкции по удалению данных (если вы храните какие‑то логи).
  • Ограничьте доступ к панели деплоя (Render, Vercel) и используйте 2FA.

Альтернативные подходы и когда это полезно

  1. Самый простой: использовать официальный веб‑интерфейс ChatGPT — не требует деплоя.
  2. Полностью локальная LLM (без OpenAI): подойдёт, если нужен оффлайн и вы готовы выделить GPU и место.
  3. Docker‑контейнер для сервера: удобнее для воспроизводимости и деплоя.
  4. Использовать серверless функции (Netlify/Vercel) вместо постоянного сервера.

Когда текущая инструкция не подойдёт:

  • Вы хотите избежать использования OpenAI API (требуется полностью локальная модель).
  • Нужны SLA, высокая надёжность и масштабирование — потребуется архитектура с балансировкой нагрузки и мониторингом.

Чек‑лист перед публикацией

  • .env в .gitignore
  • node_modules не в репозитории
  • Проверен и корректен URL сервера в script.js
  • Ключ OpenAI задан как переменная окружения в Render
  • Минимальные тесты пройдены локально

Плейбук: шаги для быстрого развёртывания (sprint‑ready)

  1. Создать fork/репозиторий и клонировать его.
  2. Настроить .env локально (только для dev).
  3. Запустить npm run server и npm run dev в двух терминалах.
  4. Проверить ответы модели.
  5. Закоммитить изменения и запушить на main.
  6. На Render создать Web Service → root = server.
  7. На Vercel импортировать клиент → root = client.
  8. Обновить script.js, если адрес сервера изменился.

Инцидентный сценарий: утечка API‑ключа — быстрый план реагирования

  1. Немедленно отозвать ключ в OpenAI (создать новый и деактивировать старый).
  2. Обновить ключ в Render (переменные окружения).
  3. Проверить историю коммитов — не попал ли ключ в репозиторий. Если попал, пересоздать репозиторий и/или удалить секреты из истории git (git filter‑repo или BFG).
  4. Провести аудит логов сервера на подозрительную активность.

Советы по производительности и оптимизации

  • Понизьте max_tokens и увеличьте temperature только для специфичных задач.
  • Кэшируйте ответы для повторяющихся запросов.
  • Для масштабирования используйте очередь задач и пул соединений.

Совместимость, миграция и заметки по версиям

  • Node.js: предпочитаемые LTS‑версии (на момент написания — используйте актуальную LTS).
  • Библиотека openai: следите за breaking changes при обновлении major‑версий.
  • Если вы переходите с createCompletion на Chat Completions API, потребуется изменить формат запросов (messages вместо prompt).

Контроль качества: тест‑кейсы (примеры)

  1. Отправить пустой prompt — сервер должен корректно вернуть ошибку или пустой ответ.
  2. Отправить очень длинный prompt — проверить поведение max_tokens.
  3. Отправить prompt с личными данными — убедиться, что логирование не сохраняет эти данные.

Короткое объявление для команды (100–200 слов)

Развернули локальную версию интерфейса ChatGPT: frontend на Vite (client) и backend на Node.js (Express). Сервер использует OpenAI API и развёрнут на Render; фронтенд — на Vercel. Инструкция содержит все шаги: от инициализации проекта и установки зависимостей до деплоя и базовой безопасности (не хранить ключи в репозиториях). Для тестирования используйте два терминала (client/server). Перед пушем убедитесь, что файл .env включён в .gitignore. Если нужен оффлайн‑вариант (без OpenAI), рассмотрим отдельную задачу по интеграции локальной LLM.

Ресурсы и ссылки (кратко)

  • Документация OpenAI — для работы с API и ключами.
  • Render и Vercel — инструкции по деплою сервисов.

Глоссарий (1‑строчные определения)

  • prompt — текстовый запрос, который вы отправляете модели.
  • LLM — большая языковая модель (Large Language Model).
  • .env — файл для хранения секретов локально (не рекомендуется коммитить).
  • Vite — сборщик/инструмент разработчика для фронтенда.

Конец инструкции.

Если вы застряли на каком‑то шаге, напишите, что именно не работает (вывод терминала, скриншоты ошибок), и я подскажу дальнейшие шаги.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро