Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3546543
А
Аноним
17 января 2026 20:46 · публичный вопрос
А
Аноним

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

Ответ нейросети
17 января 2026 20:46

Отличная задача. Ниже даю подробное решение и готовые примеры кода, чтобы можно было быстро начать проект интеллект-носового собеседника, который общается как человек. Так как цель — понять принцип, я распишу архитектуру, шаги реализации и дам рабочие примеры кода (через API OpenAI и локальную модель). Поскольку параметры не указаны, беру общий подход, подходящий для школьного/базового уровня.

  1. Что именно мы делаем
  • Создаем чат-собеседника, который отвечает естественно и «человечно»: используя продвинутую языковую модель и продуманный промпт, чтобы стиль общения был дружелюбным, эмпатичным, с небольшими неформальностями и юмором по мере уместности.
  • В project будут:
    • менеджер диалога (история разговора для контекста)
    • интерфейс ввода/вывода (командная строка или простой UI позже)
    • безопасные ограничители: система-промпт, запреты на вредоносный контент, общая этика общения
    • модуль расширяемости: можно заменить backend на локальную модель или облачный API
  1. Архитектура и подход
  • Модуль "Промпт/пратик" (System prompt): задает стиль общения и характер собеседника.
  • Модуль диалога (History): хранит цепочку сообщений пользователя и модели для поддержания контекста.
  • Модуль генерации ответа:
    • Вариант A: через API OpenAI (gpt-3.5-turbo или gpt-4)
    • Вариант B: локальная модель (DialoGPT/Mistral и т.д.)
  • Модуль интерфейса: командная строка (для старта) + (по желанию) простой веб-интерфейс позже.
  1. Вариант 1 — чат через API OpenAI (самый простой и эффективный способ) Что нужно:
  • API-ключ OpenAI
  • Установить пакет openai: pip install openai
  • API-ключ хранить в переменной окружения OPENAI_API_KEY

Пояснения к коду:

  • systems prompt задаёт стиль общения, чтобы получался «человеко-говорящий» собеседник.
  • история разговора сохраняется в списке сообщений и подается в каждый запрос, чтобы поддерживать контекст диалога.
  • можно настроить температуру, максимальное число токенов и т.д.

Код 1. chat_human_like_openai.py

#!/usr/bin/env python3
# Устанавливайте: pip install openai

import os
import openai

# Система: описывает характер собеседника
SYSTEM_PROMPT = (
    "You are a warm, human-like conversational partner. "
    "Respond with natural language, use everyday phrases, mild humor when appropriate, "
    "and show empathy. Avoid robotic repetition and overly formal language. "
    "If you don't know something, say so honestly and offer to discuss related ideas."
)

def build_messages(history, user_input):
    # history: список словарей с ролями "user"/"assistant"
    messages = [{"role": "system", "content": SYSTEM_PROMPT}]
    for h in history:
        messages.append({"role": h["role"], "content": h["content"]})
    messages.append({"role": "user", "content": user_input})
    return messages

def main():
    api_key = os.environ.get("OPENAI_API_KEY")
    if not api_key:
        print("ERROR: Установите OPENAI_API_KEY в переменных окружения.")
        print("Пример: export OPENAI_API_KEY=sk-...")
        return

    openai.api_key = api_key
    model = "gpt-3.5-turbo"  # можно сменить на gpt-4 или другой доступный
    history = []

    print("Запустили чат-собеседника. Введите сообщение. Введите 'выход' для завершения.")
    while True:
        user_input = input("Вы: ").strip()
        if user_input.lower() in {"выход", "exit", "quit"}:
            print("Чат завершён.")
            break

        messages = build_messages(history, user_input)

        try:
            resp = openai.ChatCompletion.create(
                model=model,
                messages=messages,
                temperature=0.7,
                max_tokens=500
            )
            text = resp.choices[0].message["content"].strip()
        except Exception as e:
            print(f"Ошибка запроса к API: {e}")
            break

        print("ИИ:", text)
        # сохраняем историю
        history.append({"role": "user", "content": user_input})
        history.append({"role": "assistant", "content": text})

if __name__ == "__main__":
    main()

Как использовать:

  • Установите ключ API OpenAI в переменную окружения OPENAI_API_KEY.
  • Запустите файл: python chat_human_like_openai.py
  • Пишите ваши фразы, получаете человеческие ответы.
  1. Вариант 2 — локальная модель (офлайн, без API) Если доступа к OpenAI нет или хочется автономности, можно использовать локальную модель. Самый простой старт — DialoGPT (Microsoft) на HF Transformers.

Что нужно:

  • Python, PyTorch
  • Установить: pip install transformers torch
  • Вариант 2А: DialoGPT-medium (быстрый старт, локально)

Код 2. chat_human_like_local.py (DialoGPT)

#!/usr/bin/env python3
# Устанавливайте: pip install transformers torch

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

def main():
    model_name = "microsoft/DialoGPT-medium"
    print(f"Загрузка модели {model_name}... Это может занять время.")
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForCausalLM.from_pretrained(model_name)

    print("Начинаем локальный чат. Введите 'exit' для выхода.")
    chat_history = []

    while True:
        user_input = input("Вы: ").strip()
        if user_input.lower() in {"exit", "выход"}:
            break

        # Объединяем историю в одну строку для контекстного ввода
        # Для DialoGPT часто используют простой подход: конкатенация чатов
        new_input_ids = tokenizer.encode(user_input + tokenizer.eos_token, return_tensors="pt")

        # Если есть история, добавляем её в контекст
        if chat_history:
            # объединяем прошлые user+bot сообщения
            history_ids = torch.cat(chat_history, dim=-1)
            input_ids = torch.cat([history_ids, new_input_ids], dim=-1)
        else:
            input_ids = new_input_ids

        # Генерация ответа
        output_ids = model.generate(
            input_ids,
            max_new_tokens=150,
            pad_token_id=tokenizer.eos_token_id,
            do_sample=True,
            top_p=0.92,
            temperature=0.7
        )

        # Построение ответа из генерации
        # Ответовая часть идёт после входной части (контекст)
        bot_answer_ids = output_ids[0][input_ids.shape[-1]:]
        bot_reply = tokenizer.decode(bot_answer_ids, skip_special_tokens=True).strip()

        print("ИИ:", bot_reply)

        # Обновляем историю: сохраняем последние обмены
        chat_history.append(input_ids)
        chat_history.append(output_ids)

if __name__ == "__main__":
    main()

Важно:

  • DialoGPT может работать медленно на CPU. Для хорошей скорости нужна GPU или меньшая модель.
  • Точность и стиль общения у локальных моделей могут быть менее «человечными», чем у облачных API, поэтому можно поэкспериментировать с моделью и параметрами.
  1. Как адаптировать стиль под ваш уровень
  • Параметры промпта: аккуратно формируйте стиль в SYSTEM_PROMPT, чтобы он соответствовал желаемой «личности» собеседника.
  • Температура/Top-p: уменьшение температуры делает ответы менее случайными и более предсказуемыми; увеличение — более творческие, человеческие ответы.
  • История диалога: чем длиннее история, тем ближе выход к «человеческому» стилю, но это может привести к увеличению задержки и контекстной перегрузке.
  • Эмпатия и юмор: добавляйте примеры фраз, которые человек мог бы сказать в конкретной ситуации (например, «Понимаю как это важно» или «Хаха, да, такое бывает»).
  1. Дополнительные функциональные улучшения (для дальнейшего проекта)
  • Эмпатийные пометки: анализировать настроение пользователя и адаптировать тон (нейтральный, поддерживающий, радостный).
  • Контекст/персонализация: запоминать интересы пользователя (хобби, любимые предметы) и упоминать их в ответах.
  • Защита и безопасность: фильтры по контенту, отклонение опасных запросов, предупреждения о рисках.
  • Локальный интерфейс: добавить простое веб-окно (например, на Flask) или desktop GUI (Tkinter) для более дружелюбного UX.
  • Журнал и экспорт: сохранять диалоги в файл (JSON), чтобы позже анализировать стиль и качество.
  1. Как оценивать качество
  • Понятийность: ответы понятны, логичны, не противоречат ранее сказанному.
  • Натуральность: стиль речи близок к человеческому, с естественными паузами/фразами.
  • Эмпатия: собеседник учитывает эмоции и дает поддержку, если требуется.
  • Безопасность: отсутствуют вредоносные или неприемлемые ответы.
  1. Итог и рекомендации
  • Для быстрого старта лучше начать с варианта через API OpenAI. Быстро получить качественные результаты и фокусироваться на промптах и UX.
  • Для автономного проекта — переходите к локальным моделям на следующем этапе. Это займет больше времени на настройку и вычислительные ресурсы, но даёт автономность.

Если хочешь, могу адаптировать код под конкретную задачу (например, добавить сохранение истории в файл, простой веб-интерфейс, или сделать промпт под школьный стиль общения). Сообщи, какой вариант тебе удобнее (API OpenAI или локальная модель) и на каком языке интерфейса хочешь увидеть пример (CLI, веб).