Sсhneider Electric применяет Retrieval Augmented LLMs на SageMaker, чтобы обеспечить обновления в режиме реального времени в их системах управления предприятием (ERP).

Sсhneider Electric использует Retrieval Augmented LLMs на SageMaker для обеспечения обновлений в режиме реального времени в ERP-системах управления предприятием.

Этот пост написан совместно с Антонио Медейрошем, менеджером по решениям инженерии и архитектуры искусственного интеллекта для Северной Америки, и Блейком Сантским, менеджером по бизнес-аналитике из компании Schneider Electric. Другие эксперты Schneider Electric включают в себя Джесси Миллера, Сомика Чоудхури, Шасвата Бабхулгаонкара, Дэвид Уоткинса, Марка Карлсона и Барбару Слечковски.

Системы планирования ресурсов предприятия (ERP) используются компаниями для управления несколькими функциями бизнеса, такими как бухгалтерия, продажи или управление заказами, в одной системе. В частности, они регулярно используются для хранения информации, связанной с клиентскими аккаунтами. Разные организации внутри компании могут использовать разные ERP-системы, и объединение их – это сложная техническая задача масштаба, требующая специфических знаний в области.

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

Решение о связывании основано на самой последней информации, доступной публично в Интернете или в СМИ, и может быть повлияно последними сделками, рыночными новостями или структурными изменениями. Примером связывания аккаунтов может быть идентификация связи между Amazon и его дочерним предприятием Whole Foods Market [источник].

Schneider Electric внедряет большие языковые модели для своих возможностей в ответах на вопросы в различных областях конкретных знаний, но дата обучения модели ограничивает ее знания. Они решили эту проблему, используя открытую модель больших языков, усиленную Retriever-Augmented Generation, доступную в Amazon SageMaker JumpStart, для обработки большого объема внешних знаний и отображения корпоративных или общественных связей между ERP-записями.

В начале 2023 года Schneider Electric решила автоматизировать часть процесса связи своих аккаунтов с помощью искусственного интеллекта (ИИ) и заключила партнерство с AWS Machine Learning Solutions Lab (MLSL). Благодаря экспертам MLSL в области консалтинга и выполнения машинного обучения Schneider Electric смогла разработать архитектуру ИИ, которая сократила ручные усилия в рамках их рабочих процессов по связыванию и обеспечила быстрый доступ к данным для команд аналитики.

Генеративный ИИ

Генеративный искусственный интеллект и большие языковые модели (LLM) преобразуют способ решения традиционно сложных задач, связанных с обработкой и пониманием естественного языка, в бизнес-организациях. Некоторые из преимуществ LLM включают возможность понимания больших объемов текста и отвечать на связанные вопросы, создавая ответы, похожие на человеческие. AWS помогает клиентам экспериментировать с LLM и производственной работой, предоставляя множество вариантов через Amazon SageMaker JumpStart, Amazon Bedrock и Amazon Titan.

Получение внешних знаний

LLM известны своей способностью сжимать человеческие знания и продемонстрировали замечательные возможности в ответах на вопросы в различных областях конкретных знаний, но их знания ограничены по дате обучения модели. Мы решаем эту проблему, соединяя LLM с Google Search API, чтобы предоставить мощную Retrieval-Augmented LLM (RAG), которая решает задачи Schneider Electric. RAG способна обрабатывать большое количество внешних знаний, полученных из поиска Google, и показывать корпоративные или общественные связи между ERP-записями.

Рассмотрим следующий пример:

Вопрос: Какая компания является родительской для One Medical? Запрос в Google: “One Medical parent company” → информация → Ответ LLM: One Medical, дочернее предприятие Amazon…

Приведенный пример (взят из клиентской базы данных Schneider Electric) касается сделки, которая произошла в феврале 2023 года и не была бы обнаружена только LLM из-за ограничений знаний. Добавление поиска Google гарантирует самую актуальную информацию.

Модель Flan-T5

В этом проекте мы использовали модель Flan-T5-XXL из семейства моделей Flan-T5.

Модели Flan-T5 настроены по инструкции, поэтому они способны выполнять различные задачи NLP без обучающих данных. В рамках нашей задачи не было необходимости учитывать большое количество мировых знаний, а скорее проявить хорошую производительность при ответе на вопросы, основанные на контексте текстов, предоставленных через результаты поиска. Поэтому модель T5 с 11 миллиардами параметров показала хорошие результаты.

JumpStart обеспечивает удобную развертывание семейства этой модели через Amazon SageMaker Studio и SageMaker SDK.Это включает модели Flan-T5 Small, Flan-T5 Base, Flan-T5 Large, Flan-T5 XL и Flan-T5 XXL. Кроме того, JumpStart предоставляет несколько версий Flan-T5 XXL на разных уровнях квантования. Мы развернули Flan-T5-XXL на эндпоинт для вывода результатов при помощи Amazon SageMaker Studio Jumpstart.

Путь к SageMaker JumpStart для Flan-T5

Улучшенная извлекающая модель языка с помощью LangChain

LangChain – популярный и быстрорастущий фреймворк, позволяющий создавать приложения на основе LLMs. Он основан на концепции цепочек, которые представляют собой комбинации различных компонентов, разработанных для улучшения функциональности LLMs для заданной задачи. Например, это позволяет нам настраивать подсказки и интегрировать LLMs с различными инструментами, такими как внешние поисковые движки или источники данных. В нашем случае мы использовали Google Serper для поиска в Интернете и развернули модель Flan-T5-XXL, которая доступна на Amazon SageMaker Studio Jumpstart. LangChain выполняет общую оркестрацию и позволяет результаты поиска передавать в экземпляр Flan-T5-XXL.

Процесс улучшенного извлечения (RAG) состоит из двух этапов:

  1. Извлечение соответствующих текстовых фрагментов из внешних источников
  2. Расширение фрагментов с контекстом в подсказке, предоставленной LLM.

Для нашего случая использования Schneider Electric процесс RAG проходит следующим образом:

  1. Название компании объединяется с вопросом типа “Кто является материнской компанией X”, где X – заданная компания) и передается в запрос Google, используя искусственный интеллект Serper
  2. Извлеченная информация объединяется с подсказкой и исходным вопросом и передается в LLM для получения ответа.

Следующая диаграмма иллюстрирует этот процесс.

RAG Workflow

Используйте следующий код для создания эндпоинта:

# Создание FLAN-T5-XXL Sagemaker Endpointllm = SagemakerEndpoint(...)

Создание поискового инструмента:

search = GoogleSerperAPIWrapper()search_tool = Tool( name="Search",  func=search.run,    description="полезно, когда нужно выполнить запрос с помощью поиска",  verbose=False)

В следующем коде мы объединяем компоненты получения и расширения:

my_template = """Ответьте на следующий вопрос, используя информацию. \nВопрос : {question}? \nИнформация : {search_result} \nОтвет: """prompt_template = PromptTemplate(   input_variables=["question", 'search_result'],  template=my_template)question_chain = LLMChain( llm=llm,    prompt=prompt_template, output_key="answer")def search_and_reply_company(company):  # Поискsearch_result = search_tool.run(f"{company} материнская компания")    # Расширение  output = question_chain({       "question":f"Кто является материнской компанией {company}?",      "search_result": search_result})    return output["answer"]search_and_reply_company("Whole Foods Market")"Amazon"

Проектирование подсказки

Комбинация контекста и вопроса называется подсказкой. Мы заметили, что обобщенная подсказка, которую мы использовали (вариации вокруг вопроса о материнской компании), хорошо сработала в большинстве общих отраслей, но не так хорошо подходит для образования или здравоохранения, поскольку понятие материнской компании в них не имеет смысла. В образовании мы использовали “X”, а в здравоохранении – “Y”.

Для активации этого выбора конкретной области подсказок нам также нужно было определить область, к которой принадлежит определенный аккаунт. Для этого мы также использовали RAG, где в первом шаге ставится множественный выбор вопроса “Какая область принадлежит {account}?”, а на основе ответа мы разбирались с материнской компанией аккаунта, используя соответствующую подсказку в качестве второго шага. См. следующий код:

my_template_options = """Ответьте на следующий вопрос, используя информацию. \nВопрос :  {question}? \nИнформация : {search_result} \nВарианты ответов:\n {options} \nОтвет:"""prompt_template_options = PromptTemplate(input_variables=["question", 'search_result', 'options'],template=my_template_options)question_chain = LLMChain( llm=llm,    prompt=prompt_template_options, output_key="answer")    my_options = """- здравоохранение- образование- нефтегазовая промышленность- банковское дело- фармацевтика- другая область """def search_and_reply_domain(company):search_result = search_tool.run(f"{company} ")output = question_chain({ "question":f"Какая область принадлежит {company}?", "search_result": search_result, "options":my_options})return output["answer"]search_and_reply_domain("Exxon Mobil")"нефтегазовая промышленность"

Специфичные для отрасли подсказки повысили общий уровень точности с 55% до 71%. В целом, затраты времени и усилий на разработку эффективных подсказок, кажется, значительно улучшают качество ответа LLM.

RAG с табличными данными (SEC-10k)

Отчеты SEC 10K – это еще один надежный источник информации о филиалах и подразделениях, которые ежегодно подают публичные компании. Эти отчеты доступны непосредственно на SEC EDGAR или через API CorpWatch.

Предполагается, что информация представлена в табличном формате. Ниже приведен псевдо-набор данных CSV, который имитирует исходный формат набора данных SEC-10K. Можно объединить несколько источников данных CSV в один общий фрейм данных pandas:

# Псевдо-набор данных, аналогичный схеме набора данных API CorpWatch df.head()

индекс    relation_id     source_cw_id    target_cw_id    parent      subsidiary  1       90              22569           37              AMAZON      WHOLE FOODS MARKET873       1467            22569           781             AMAZON      TWITCH899       1505            22569           821             AMAZON      ZAPPOS900       1506            22569           821             AMAZON      ONE MEDICAL901      1507            22569           821             AMAZON      WOOT!

LangChain предоставляет абстрактный уровень для pandas с помощью create_pandas_dataframe_agent. Использование LangChain/LLM для этой задачи имеет два ключевых преимущества:

  1. После запуска он позволяет конечному потребителю работать с набором данных на естественном языке, а не с кодом
  2. Он более устойчив к орфографическим ошибкам и различным способам названия аккаунтов.

Мы запускаем точку доступа, как указано выше, и создаем агента:

# Создать dataframe агент agent = create_pandas_dataframe_agent(llm, df, varbose=True)

В следующем коде мы запрашиваем взаимосвязь “родитель/филиал”, и агент переводит запрос на язык pandas:

# Пример 1
query = "Кто является родителем WHOLE FOODS MARKET?"
agent.run(query)
#### вывод
> Выполняем цепочку нового агента...
Мысль: Мне нужно найти строку с WHOLE FOODS MARKET в колонке филиалов
Действие: python_repl_astAction
Ввод: df[df['филиал'] == 'WHOLE FOODS MARKET']
Наблюдение:source_cw_id target_cw_id parent   subsidiary22569         37              AMAZON      WHOLE FOODS MARKET
Мысль: Теперь я знаю конечный ответ
Конечный ответ: AMAZON
> Закончили цепочку.

# Пример 2
query = "Кто являются филиалами Amazon?"
agent.run(query)
#### вывод
> Выполняем цепочку нового агента...
Мысль: Мне нужно найти строку с source_cw_id 22569
Действие: python_repl_astAction
Ввод: df[df['source_cw_id'] == 22569]
...
Мысль: Теперь я знаю конечный ответ
Конечный ответ: Филиалами Amazon являются Whole Foods Market, Twitch, Zappos, One Medical, Woot!
> Закончили цепочку.'Филиалами Amazon являются Whole Foods Market, Twitch, Zappos, One Medical, Woot!.'

Заключение

В этой статье мы подробно рассмотрели, как использовать основные элементы LangChain для расширения LLM функциями поиска, чтобы выявить взаимосвязи между клиентскими счетами Schneider Electric. Мы расширили начальный конвейер до двухэтапного процесса с идентификацией домена перед использованием специфичного для домена подсказки для повышения точности.

Помимо поискового запроса в Google, можно использовать наборы данных, которые подробно описывают корпоративные структуры, такие как отчеты SEC 10K, чтобы дополнительно расширить LLM достоверной информацией. Команда Schneider Electric также сможет расширить и разработать свои собственные подсказки, имитируя способ классификации некоторых открытых секторов, что дальше повысит точность конвейера. Это позволит Schneider Electric поддерживать актуальные и точные организационные структуры своих клиентов и открыть возможность проведения аналитической работы на основе этих данных.