Как создать полностью функциональный локальный чат-бот в стиле GPT с помощью Hugging Face Transformers

В этом руководстве мы создадим собственную систему чата в стиле GPT с нуля, используя локальную модель Hugging Face. Мы начнём с загрузки лёгкой модели, настроенной на инструкции, которая понимает разговорные запросы, а затем поместим её в структурированную систему чата, включающую системную роль, пользовательскую память и ответы помощника.

Установка необходимых библиотек

Сначала мы установим основные библиотеки и импортируем необходимые модули. Мы убедимся, что в среде есть все необходимые зависимости, такие как transformers, torch и sentencepiece, готовые к использованию. Эта настройка позволяет нам без проблем работать с моделями Hugging Face внутри Google Colab.

«`python
!pip install transformers accelerate sentencepiece —quiet
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from typing import List, Tuple, Optional
import textwrap, json, os
«`

Настройка модели

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

«`python
MODEL_NAME = «microsoft/Phi-3-mini-4k-instruct»
BASESYSTEMPROMPT = (
«You are a custom GPT running locally. «
«Follow user instructions carefully. «
«Be concise and structured. «
«If something is unclear, say it is unclear. «
«Prefer practical examples over corporate examples unless explicitly asked. «
«When asked for code, give runnable code.»
)
MAXNEWTOKENS = 256
«`

Загрузка модели

Мы загрузим токенизатор и модель из Hugging Face в память и подготовим их для логического вывода. Мы автоматически настроим сопоставление устройств на основе доступного оборудования, обеспечив ускорение на GPU, если это возможно. Как только модель будет загружена, она будет готова генерировать ответы.

«`python
print(«Loading model…»)
tokenizer = AutoTokenizer.frompretrained(MODELNAME)
if tokenizer.padtokenid is None:
tokenizer.padtokenid = tokenizer.eostokenid
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
torchdtype=torch.float16 if torch.cuda.isavailable() else torch.float32,
device_map=»auto»
)
model.eval()
print(«Model loaded.»)
«`

Создание чат-промоутера

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

«`python
ConversationHistory = List[Tuple[str, str]]
history: ConversationHistory = [(«system», BASESYSTEMPROMPT)]

def wrap_text(s: str, w: int = 100) -> str:
return «\n».join(textwrap.wrap(s, width=w))

def buildchatprompt(history: ConversationHistory, user_msg: str) -> str:
prompt_parts = []
for role, content in history:
if role == «system»:
prompt_parts.append(f»<|system|>\n{content}\n»)
elif role == «user»:
prompt_parts.append(f»<|user|>\n{content}\n»)
elif role == «assistant»:
prompt_parts.append(f»<|assistant|>\n{content}\n»)
promptparts.append(f»<|user|>\n{usermsg}\n»)
prompt_parts.append(«<|assistant|>\n»)
return «».join(prompt_parts)
«`

Добавление инструмента маршрутизации

Мы добавим лёгкий инструмент маршрутизации, который расширит возможности нашего GPT для выполнения таких задач, как поиск или извлечение документации. Мы определим логику для обнаружения специальных префиксов, таких как «search:» или «docs:» в пользовательских запросах. Этот простой агентский дизайн придаёт нашему помощнику контекстуальную осведомлённость.

«`python
def localtoolrouter(user_msg: str) -> Optional[str]:
msg = user_msg.strip().lower()
if msg.startswith(«search:»):
query = user_msg.split(«:», 1)[-1].strip()
return f»Search results about ‘{query}’:\n- Key point 1\n- Key point 2\n- Key point 3″
if msg.startswith(«docs:»):
topic = user_msg.split(«:», 1)[-1].strip()
return f»Documentation extract on ‘{topic}’:\n1. The agent orchestrates tools.\n2. The model consumes output.\n3. Responses become memory.»
return None
«`

Генерация ответа

Мы определяем основную функцию генерации ответов, которая объединяет историю, контекст и логический вывод модели для получения связных выходных данных. Мы также добавляем функции для сохранения и загрузки прошлых разговоров для обеспечения постоянства. Этот фрагмент формирует операционное ядро нашего пользовательского GPT.

«`python
def generatereply(history: ConversationHistory, usermsg: str) -> str:
toolcontext = localtoolrouter(usermsg)
if tool_context:
usermsg = usermsg + «\n\nUseful context:\n» + tool_context
prompt = buildchatprompt(history, user_msg)
inputs = tokenizer(prompt, return_tensors=»pt»).to(model.device)
with torch.no_grad():
output_ids = model.generate(
inputs,
maxnewtokens=MAXNEWTOKENS,
do_sample=True,
top_p=0.9,
temperature=0.6,
padtokenid=tokenizer.eostokenid
)
decoded = tokenizer.decode(outputids[0], skipspecial_tokens=True)
reply = decoded.split(«<|assistant|>«)[-1].strip() if «<|assistant|>» in decoded else decoded[len(prompt):].strip()
history.append((«user», user_msg))
history.append((«assistant», reply))
return reply
«`

Обновление OpenAI: GPT-5.1

OpenAI выпустила GPT-5.1 в качестве следующей итерации в семействе GPT-5 с двумя основными вариантами: GPT-5.1 Instant и GPT-5.1 Thinking. Обновление сосредоточено на трёх направлениях: адаптивное поведение при рассуждении, более чёткие объяснения и более строгий контроль над тоном и безопасностью.

GPT-5.1 Instant — это модель для повседневного использования в ChatGPT. OpenAI описывает её как наиболее используемую модель с более тёплым тоном по умолчанию и улучшенным выполнением инструкций. GPT-5.1 Thinking — это модель для продвинутого рассуждения. Она отображает явное время мышления и теперь регулирует это время более точно в зависимости от вопроса.

GPT-5.1 Instant сохраняет низкую задержку для типичного использования чата, добавляя адаптивное рассуждение. Для простых запросов модель отвечает быстро с поверхностным внутренним проходом. Для более сложных запросов, таких как многошаговые математические или кодировочные задачи, она выбирает потратить больше внутренних вычислений, прежде чем ответить.

Это поведение повышает оценки по таким тестам, как AIME 2025 и Codeforces, по сравнению с более ранними версиями GPT-5 Instant, сохраняя при этом оперативность для повседневного использования.

Ключевые выводы

  • GPT-5.1 вводит два основных варианта: GPT-5.1 Instant и GPT-5.1 Thinking, а также GPT-5.1 Auto в качестве маршрутизатора внутри ChatGPT.

  • GPT-5.1 Instant использует адаптивное рассуждение, поэтому тратит больше вычислений на сложные запросы и меньше на простые, что улучшает математические и кодировочные тесты, такие как AIME 2025 и Codeforces, сохраняя при этом низкую задержку и более строгое следование инструкциям для типичных рабочих нагрузок чата.

  • GPT-5.1 Thinking выделяет динамическое время мышления для каждого запроса, примерно в 2 раза быстрее, чем GPT-5 Thinking в простых задачах, и примерно в 2 раза медленнее в самых сложных задачах при стандартном мышлении, и даёт более ясные, менее перегруженные жаргоном объяснения для технических вопросов.

  • ChatGPT добавляет слой персонализации поверх GPT-5.1 с предустановленными стилями, такими как Default, Professional, Friendly, Efficient, Nerdy и другими, а также запланированными ползунками для краткости и теплоты, так что контроль тона частично перемещается из подсказок в постоянные настройки пользователя, которые применяются к чатам и моделям.

  • GPT-5.1 повторно использует систему безопасности GPT-5 и меры по смягчению последствий, улучшает показатели безопасности gpt-5.1-instant по всем категориям запрещённого контента по сравнению с gpt-5-instant, значительно повышает надёжность защиты от взлома на StrongReject и сохраняет оценки подготовленности, закреплённые в карточке системы GPT-5 для областей высокого риска, таких как биологические и химические возможности.

1. Какие основные библиотеки и модули необходимо установить для создания локального чат-бота в стиле GPT с помощью Hugging Face Transformers?

Ответ: для создания локального чат-бота в стиле GPT с помощью Hugging Face Transformers необходимо установить библиотеки transformers, torch и sentencepiece. Для этого можно использовать команду `!pip install transformers accelerate sentencepiece —quiet`.

2. Как в статье предлагается настроить модель для создания чат-бота?

Ответ: в статье предлагается настроить модель, определив её имя, системную подсказку и ограничения по токенам. Например, можно установить, что модель должна отвечать кратко, структурированно и практично. Это определяет основу идентичности модели и стиля инструкций.

3. Какие шаги необходимо выполнить для загрузки модели в память и подготовки её для логического вывода?

Ответ: для загрузки модели в память и подготовки её для логического вывода необходимо выполнить следующие шаги:
* загрузить токенизатор и модель из Hugging Face в память;
* автоматически настроить сопоставление устройств на основе доступного оборудования;
* обеспечить ускорение на GPU, если это возможно;
* загрузить модель и подготовить её для генерации ответов.

4. Какие функции используются для генерации ответа чат-бота?

Ответ: для генерации ответа чат-бота используются функции `generatereply` и `buildchatprompt`. Функция `generatereply` объединяет историю, контекст и логический вывод модели для получения связных выходных данных. Функция `buildchatprompt` формирует структуру диалога, чередуя роли пользователя и помощника.

5. Какие основные варианты GPT-5.1 упоминаются в статье?

Ответ: в статье упоминаются два основных варианта GPT-5.1: GPT-5.1 Instant и GPT-5.1 Thinking. GPT-5.1 Instant использует адаптивное рассуждение, а GPT-5.1 Thinking выделяет динамическое время мышления для каждого запроса.

Источник