ChatGPT Антиспам. Часть 1
- Опубликовано Илья Низамов
- Разделы Blog
- Дата 05.02.2024
- Комментарии Нет комментариев
Всем привет, с вами Низамов Илья. В этом уроке разработаем антиспам на базе ChatGPT буквально в 100 строк кода.
import os
import environ
import openai
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.text_splitter import MarkdownHeaderTextSplitter
env = environ.Env()
environ.Env.read_env()
class AntiSpam:
def __init__(self):
self.dev = False
self.db = None
openai.api_key = env('OPENAI_API_KEY')
self.prj_dir = os.getcwd() # Путь до каталога с проектом
self.spam_base = 'spam_base.txt' # Текстовая база спам сообщений
self.embedding = OpenAIEmbeddings() # Инициализирум модель эмбеддингов
self.load_embeddings()
self.role_system = 'Ты антиспам' # Роль ChatGPT
self.temperature = 0
self.model = 'gpt-3.5-turbo'
@staticmethod
def load_txt_file(file_name):
f = open(file_name, 'r', encoding="utf8")
file_text = f.read()
return file_text
def generate_embeddings(self, chunks):
# Создадим индексную базу
self.db = FAISS.from_documents(chunks, self.embedding)
# Сохраняем базу локально
self.db.save_local(folder_path=self.prj_dir, index_name="faiss_index")
def load_embeddings(self):
try:
self.db = FAISS.load_local(folder_path=self.prj_dir, index_name="faiss_index", embeddings=self.embeddings)
except Exception as e:
self.process_spam_db()
if self.dev:
print('Ошибка загрузки базы FAISS', e.__str__())
def process_spam_db(self):
spam_text = self.load_txt_file(self.spam_base)
headers_to_split_on = [
("#", "Header 1"),
]
markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
chunks = markdown_splitter.split_text(text=spam_text)
if self.dev:
print("Общее количество чанков: ", len(chunks))
self.generate_embeddings(chunks)
def find_examples(self, message):
# Поиск релевантных отрезков из базы знаний
docs = self.db.similarity_search(message, k=4)
db_messages = ""
for i, doc in enumerate(docs):
db_messages = db_messages + f"Пример спам сообщения №{i + 1}\n{doc.page_content}\n"
if self.dev:
print('db_messages:\n', db_messages)
return db_messages
def check_message(self, message):
try:
examples = self.find_examples(message)
role_user = f"Ответь на вопрос является ли данное сообщение спамом на основе представленных примеров спам " \
f"сообщений. Ответь коротко, да или нет, не придумывай ничего от себя. " \
f"Примеры спам сообщений: {examples}\n\n" \
f"Текст сообщения которое надо проверить на спам: \n{message}"
gpt_messages = [
{"role": "system", "content": self.role_system},
{"role": "user", "content": role_user}
]
completion = openai.ChatCompletion.create(
model=self.model,
messages=gpt_messages,
temperature=self.temperature
)
if self.dev:
print(completion)
print("-----------------")
return completion.choices[0].message.content
except Exception as e:
print('Ошибка обработки запроса ChatGPT. ', e.__str__())
return None
if __name__ == '__main__':
anti_spam = AntiSpam()
anti_spam.dev = True
chat_message = anti_spam.load_txt_file('message.txt')
spam_message = anti_spam.load_txt_file('spam.txt')
res = anti_spam.check_message(spam_message)
print("Тест spam_message: ", res)
res = anti_spam.check_message(chat_message)
print("Тест chat_message: ", res)
Вам также может понравиться
GIGACHAT ИЛИ CHATGPT ИИ МЕНЕДЖЕР ДЛЯ 1С
15 мая, 2024
ИИ МЕНЕДЖЕР НА БАЗЕ GIGACHAT
12 февраля, 2024
CHAT GPT 1C. МИКРОСЕРВИС PYTHON FASTAPI
17 сентября, 2023