• Главная
  • Курсы
  • События
  • Блог
  • Контакты
  • Магазин
    • Загрузки
  • Партнерка
  • Обо мне
Есть вопросы? Звоните:
+7 (917) 449 09 97
admin@nizamov.school
РегистрацияВход
nizamov.school
  • Главная
  • Курсы
  • События
  • Блог
  • Контакты
  • Магазин
    • Загрузки
  • Партнерка
  • Обо мне
  • Главная
  • Блог
  • Blog
  • ИИ МЕНЕДЖЕР НА БАЗЕ GIGACHAT

ИИ МЕНЕДЖЕР НА БАЗЕ GIGACHAT

  • Опубликовано Илья Низамов
  • Разделы Blog
  • Дата 12.02.2024
  • Комментарии Нет комментариев
gigachat ии менеджер

Запишись на тренинг

ЗАКРОЙ ВСЕ ВОПРОСЫ ПО РАБОТЕ С HTTP В 1С ЗА ОДНО ЗАНЯТИЕ
ЗАПИСАТЬСЯ
Скачать исходники

Привет программисты 1С. В этом видео покажу, как создать ИИ менеджера на базе языковой модели от Сбера GigaChat. ИИ сотрудники это в принципе новый тип задач, решая который мы не просто программируем бота на какие-то цепочки ответов, а пытаемся обучить модель отвечать так как нам надо. Создавать сотрудника мы будем на основании данных из базы 1С, так что вот вам реальная связка 1С и ИИ. На преобразование 10тыс товаров в векторную базу у меня ушел 1млн токенов. Потом можете просто обновлять и дополнять базу.

GigaChat дает 1 млн токенов на месяц обычному пользователю, потом можете докупать либо ждать окончания периода. Так же они дают свое векторное представление, но оно платное и 10 млн токенов мне обошлись в 400 рублей.

Установка библиотек

pip install django-environ gigachain gigachat chromadb gigachain_core
import os
import environ
from langchain.schema import HumanMessage, SystemMessage
from langchain.chat_models.gigachat import GigaChat
from langchain.text_splitter import MarkdownHeaderTextSplitter
from langchain.vectorstores import Chroma
from langchain_community.embeddings import GigaChatEmbeddings

env = environ.Env()
environ.Env.read_env()


class Chat:
def __init__(self):
self.chroma_db = None
self.dev = False
self.llm = GigaChat(credentials=env('AUTH'), verify_ssl_certs=False)
self.embeddings = GigaChatEmbeddings(credentials=env('AUTH'), verify_ssl_certs=False)
self.prj_dir = os.getcwd() # Путь до каталога с проектом
self.persist_directory = self.prj_dir + "\data" # Каталог хранения векторной базы


class BaseLLM(Chat):
def __init__(self):
super().__init__()
self.all_chunks = [] self.product_base = 'base_ai.txt' # Текстовая база товаров

@staticmethod
def load_txt_file(file_name):
f = open(file_name, 'r', encoding="utf8")
file_text = f.read()
return file_text

def load_product_base(self):
load_txt = self.load_txt_file('base_ai.txt')

headers_to_split_on = [
("#", "Header 1"),
]
markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
self.all_chunks = markdown_splitter.split_text(text=load_txt)

def generate_embeddings(self):
self.load_product_base()
chunks = [] count = 0
all_count = 0
for chunk in self.all_chunks:
all_count = all_count + 1
count = count + 1
chunks.append(chunk)
if count == 10:
self.save_embeddings(chunks)
chunks = [] count = 0
print(f"Всего обработано {all_count}")

if len(chunks) > 0:
self.save_embeddings(chunks)

def save_embeddings(self, chunks):
self.chroma_db = Chroma.from_documents(
chunks,
self.embeddings,
persist_directory=self.persist_directory,
collection_name="lc_chroma_store")
self.chroma_db.persist()


class ProductManager(Chat):
def __init__(self):
super().__init__()
self.load_base()
self.messages = [] self.role_system = "Ты менеджер магазина автозапчастей. Отвечаешь на вопросы клиентов в чате. " \
"Посмотри на примеры товаров и сформируй ответ указав наименования товаров и их цены."

def load_base(self):
self.chroma_db = Chroma(persist_directory=self.persist_directory, embedding_function=self.embeddings,
collection_name="lc_chroma_store")

collection = self.chroma_db.get()
if self.dev:
print(f"Всего в базе: {len(collection['ids'])}")

if len(collection['ids']) == 0:
admin = BaseLLM()
admin.generate_embeddings()

def find_examples(self, message):
# Поиск релевантных отрезков из базы знаний
docs = self.chroma_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 send_message(self, question):
examples = self.find_examples(question)

if len(self.messages) == 0:
self.messages.append(SystemMessage(content=f"{self.role_system} Список товаров: ${examples}"))

self.messages.append(HumanMessage(content=question))
res = self.llm(self.messages)
# Сохраняем контекст разговора
self.messages.append(res)

return res.content


manager = ProductManager()

while True:
# Ввод пользователя
user_input = input("Введите сообщение: ")
if not user_input:
break
print("Менеджер: ", manager.send_message(user_input))
author avatar
Илья Низамов

Предыдущая запись

ChatGPT Антиспам. Часть 1
12.02.2024

Следующая запись

GIGACHAT ИЛИ CHATGPT ИИ МЕНЕДЖЕР ДЛЯ 1С
15.05.2024

Вам также может понравиться

gigachat
GIGACHAT ИЛИ CHATGPT ИИ МЕНЕДЖЕР ДЛЯ 1С
15 мая, 2024
chatgpt антиспам
ChatGPT Антиспам. Часть 1
5 февраля, 2024
gpt 1c
CHAT GPT 1C. МИКРОСЕРВИС PYTHON FASTAPI
17 сентября, 2023

Оставьте ответ Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

Рубрики

  • Blog

Ссылки

  • Политика конфиденциальности
  • Публичная оферта

Сайт создан в NIZAMOV.studio

Регистрация с помощью:

Войти Vkontakte

Вход через логин и пароль

Забыли пароль?

Нет аккаунта? Регистрируйся прямо сейчас

Register a new account

Are you a member? Login now