ИИ МЕНЕДЖЕР НА БАЗЕ GIGACHAT
- Опубликовано Илья Низамов
- Разделы Blog
- Дата 12.02.2024
- Комментарии Нет комментариев
Привет программисты 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))
Вам также может понравиться
GIGACHAT ИЛИ CHATGPT ИИ МЕНЕДЖЕР ДЛЯ 1С
15 мая, 2024
ChatGPT Антиспам. Часть 1
5 февраля, 2024
CHAT GPT 1C. МИКРОСЕРВИС PYTHON FASTAPI
17 сентября, 2023