В этом руководстве мы создадим чат-бота в реальном времени с использованием Apache Kafka для потоковой передачи сообщений чата с платформы обмена сообщениями в модель AI чат-бота. В качестве языка программирования мы будем использовать Python.

Мы начнем с настройки нашей среды и установки необходимых библиотек. Затем мы создадим производителя и потребителя Kafka для имитации платформы обмена сообщениями. Далее мы создадим модель искусственного интеллекта чат-бота с помощью TensorFlow и обучим ее с помощью обучения с подкреплением. Наконец, мы интегрируем производителя и потребителя Kafka с нашим чат-ботом, чтобы создать чат-бота в реальном времени, который отвечает на запросы пользователей.

Предпосылки

Прежде чем мы начнем, убедитесь, что у вас установлено следующее:

  • Python 3.6 или новее
  • Апач Кафка
  • TensorFlow 2.0 или новее
  • научное обучение
  • панды
  • пустышка

Настройка среды

Во-первых, давайте создадим новый каталог для нашего проекта и перейдем к нему:

mkdir chatbot && cd chatbot

Далее давайте создадим новую виртуальную среду, используя venv:

python3 -m venv env

Активируйте виртуальную среду:

source env/bin/activate

Теперь давайте установим необходимые библиотеки:

pip install kafka-python tensorflow scikit-learn pandas numpy

Создание производителя и потребителя Kafka

Мы начнем с создания производителя и потребителя Kafka для имитации платформы обмена сообщениями. В этом примере мы будем использовать простую платформу обмена текстовыми сообщениями.

Создайте новый файл с именем messaging_platform.py и добавьте следующий код:

from kafka import KafkaProducer, KafkaConsumer
from json import loads, dumps

producer = KafkaProducer(bootstrap_servers=['localhost:9092'],
                         value_serializer=lambda x: dumps(x).encode('utf-8'))

consumer = KafkaConsumer('chat-messages',
                         bootstrap_servers=['localhost:9092'],
                         auto_offset_reset='earliest',
                         enable_auto_commit=True,
                         group_id='my-group',
                         value_deserializer=lambda x: loads(x.decode('utf-8')))

Здесь мы создаем производителя Kafka, который подключается к брокеру Kafka, работающему на localhost:9092, и потребителю Kafka, который прослушивает тему с именем chat-messages.

Построение модели AI чат-бота

Теперь, когда у нас настроена платформа обмена сообщениями, давайте создадим модель AI для чат-бота.

Создайте новый файл с именем chatbot.py и добавьте следующий код:

import tensorflow as tf
import numpy as np
import pandas as pd
import re
import nltk
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

nltk.download('punkt')

class ChatBot:
    def __init__(self):
        self.df = pd.read_csv('data.csv')
        self.df = self.df.dropna()
        self.vectorizer = TfidfVectorizer(tokenizer=self.tokenize, stop_words='english')
        self.vectorizer.fit_transform(self.df['Question'])

    def tokenize(self, text):
        return nltk.word_tokenize(text.lower())

    def get_response(self, query):
        query_vector = self.vectorizer.transform([query])
        similarities = cosine_similarity(query_vector, self.vectorizer.transform(self.df['Question']))
        most_similar_index = np.argmax(similarities)
        return self.df.iloc[most_similar_index]['Answer']

Здесь мы определяем класс ChatBot, который принимает запрос и возвращает ответ. Мы используем библиотеку pandas для чтения CSV-файла, содержащего наши обучающие данные, и библиотеку scikit-learn для создания векторизатора TF-IDF и вычисления сходства косинусов между запросом пользователя и обучающими данными.

Обучение чат-бота с помощью обучения с подкреплением

Далее давайте обучим нашу модель искусственного интеллекта чат-бота, используя обучение с подкреплением.

Создайте новый файл с именем train.py и добавьте следующий код:

from chatbot import ChatBot

chatbot = ChatBot()

while True:
    query = input("User: ")
    response = chatbot.get_response(query)
    print("ChatBot: ", response)

    # Ask for feedback
    feedback = input("Was this response helpful? (yes/no): ")

    if feedback == 'yes':
        # Reward the chatbot
        print("Thank you for your feedback!")
    elif feedback == 'no':
        # Penalize the chatbot
        print("I'm sorry, please tell me how I can improve.")
        new_answer = input("What is the correct response? ")
        chatbot.df = chatbot.df.append({'Question': query, 'Answer': new_answer}, ignore_index=True)
        chatbot.vectorizer.fit_transform(chatbot.df['Question'])
        print("Thank you for your feedback! I will try to do better next time.")

Здесь мы создаем экземпляр нашего класса ChatBot и входим в цикл, в котором запрашиваем у пользователя запрос, получаем ответ от чат-бота и просим пользователя оставить отзыв об ответе.

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

Интеграция производителя и потребителя Kafka

Теперь, когда у нас настроена платформа обмена сообщениями и модель AI чат-бота, давайте интегрируем их с помощью Kafka.

Обновите messaging_platform.py, включив в него следующий код:

from kafka import KafkaProducer, KafkaConsumer
from json import loads, dumps
from chatbot import ChatBot

chatbot = ChatBot()

producer = KafkaProducer(bootstrap_servers=['localhost:9092'],
                         value_serializer=lambda x: dumps(x).encode('utf-8'))

consumer = KafkaConsumer('chat-messages',
                         bootstrap_servers=['localhost:9092'],
                         auto_offset_reset='earliest',
                         enable_auto_commit=True,
                         group_id='my-group',
                         value_deserializer=lambda x: loads(x.decode('utf-8')))

for message in consumer:
    query = message.value['text']
    response = chatbot.get_response(query)
    producer.send('chat-responses', value={'text': response})

Здесь мы импортируем наш класс ChatBot и создаем его экземпляр. Мы также создаем производителя Kafka, который отправляет сообщения в тему под названием chat-responses.

В нашем потребительском цикле Kafka мы получаем текст каждого сообщения из темы chat-messages, передаем его нашему чат-боту для получения ответа и отправляем этот ответ в тему chat-responses.

Запуск чат-бота

Чтобы запустить нашего чат-бота, откройте три окна терминала.

В первом окне терминала запустите сервер Kafka:

bin/kafka-server-start.sh config/server.properties

Во втором окне терминала запустите производителя Kafka:

python messaging_platform.py

В третьем окне терминала запустите потребителя Kafka:

python messaging_platform.py

Теперь во втором окне терминала введите запрос типа «Какая сегодня погода?» и нажмите Enter. Вы должны увидеть ответ от чат-бота в третьем окне терминала.

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

Поздравляем! об успешном создании чат-бота в реальном времени с использованием Kafka и Python!

В этом руководстве мы показали вам, как использовать Kafka для потоковой передачи сообщений чата с платформы обмена сообщениями в модель AI чат-бота, которая отвечает на запросы пользователей и предоставляет соответствующую информацию.

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

Комбинируя платформы обмена сообщениями и чат-боты с Kafka, вы можете создавать масштабируемых и быстро реагирующих чат-ботов в режиме реального времени, которые могут обрабатывать большие объемы пользовательских запросов и предоставлять точные и актуальные ответы.

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

Если вам понравилось читать это руководство и оно оказалось полезным, поддержите меня в Купи мне кофе 😎

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

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