В этом руководстве мы создадим чат-бота в реальном времени с использованием 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 .
Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.