Создайте доверие и безопасность для генеративных приложений искусственного интеллекта с помощью Amazon Comprehend и LangChain.

Установление доверия и обеспечение безопасности в генеративных приложениях искусственного интеллекта с помощью Amazon Comprehend и LangChain.

Мы становимся свидетелями резкого увеличения применения больших языковых моделей (ЛМ), которые обеспечивают работу генеративных интеллектуальных приложений в различных отраслях. Большие языковые модели способны выполнять различные задачи, такие как генерация творческого контента, ответы на запросы через чат-боты, генерация кода и многое другое.

Организации, желающие использовать ЛМ для работы своих приложений, все больше осознают необходимость обеспечения конфиденциальности данных, чтобы сохранить доверие и безопасность в рамках генеративных интеллектуальных приложений. Это включает правильную обработку персонально идентифицируемой информации (PII) клиентов. Это также включает предотвращение распространения абузивного и небезопасного контента в ЛМ и проверку соответствия данных, генерируемых ЛМ, тем же принципам.

В этой статье мы рассмотрим новые функции, предоставляемые Amazon Comprehend, которые обеспечивают безопасное интегрирование для обеспечения конфиденциальности данных, безопасности контента и быстрого реагирования на новые и существующие генеративные интеллектуальные приложения.

Amazon Comprehend – это сервис обработки естественного языка (NLP), который использует машинное обучение (ML) для извлечения информации из неструктурированных данных и текстов документов. В этой статье мы обсудим, почему доверие и безопасность с ЛМ имеют значение для вашей работы. Мы также более подробно рассмотрим, как эти новые возможности модерации используются в популярной платформе разработки генеративного искусственного интеллекта LangChain для создания настраиваемого механизма доверия и безопасности для вашего случая использования.

Почему важны доверие и безопасность с ЛМ

Доверие и безопасность являются важнейшими аспектами при работе с ЛМ из-за их глубокого воздействия на широкий спектр приложений, от чат-ботов для поддержки клиентов до генерации контента. Поскольку эти модели обрабатывают огромные объемы данных и генерируют ответы, приближенные к человеческим, возможность злоупотребления или непреднамеренных последствий увеличивается. Обеспечение работы этих ИИ-систем в рамках этических и надежных границ является критическим, не только для репутации бизнеса, использующего их, но и для сохранения доверия конечных пользователей и клиентов.

Более того, по мере того, как ЛМ все более интегрируются в нашу повседневную цифровую среду, их влияние на наши восприятия, убеждения и решения растет. Обеспечение доверия и безопасности при работе с ЛМ требует не только технических мер, но и соответствия этическим нормам со стороны практиков ИИ и организаций. Приоритизация доверия и безопасности позволяет организациям не только защитить своих пользователей, но и обеспечить устойчивый и ответственный рост ИИ в обществе. Это также помогает снизить риск создания вредоносного контента и соблюдать регуляторные требования.

В сфере доверия и безопасности модерация контента является механизмом, который обращается к различным аспектам, включая, но не ограничиваясь:

  • Конфиденциальность – Пользователи могут непреднамеренно предоставить текст, содержащий конфиденциальную информацию, что может нарушить их конфиденциальность. Обнаружение и удаление любой ПИИ является необходимым.
  • Токсичность – Распознавание и фильтрация вредоносного контента, такого как ненавистные высказывания, угрозы или злоупотребление, имеет важное значение.
  • Интенция пользователя – Определение, является ли входящий запрос (подсказка) безопасным или небезопасным, имеет критическое значение. Небезопасные подсказки могут явно или неявно выражать злонамеренные намерения, такие как запросы личной или конфиденциальной информации и создание оскорбительного, дискриминационного или незаконного контента. Подсказки могут также неявно выражать или запрашивать советы в медицинских, юридических, политических, спорных, личных или финансовых вопросах.

Модерация контента с помощью Amazon Comprehend

В этом разделе мы рассмотрим преимущества модерации контента с помощью Amazon Comprehend.

Обеспечение конфиденциальности

Amazon Comprehend уже обеспечивает конфиденциальность через свои существующие возможности обнаружения и удаления ПИИ с помощью API DetectPIIEntities и ContainsPIIEntities. Эти два API поддерживаются моделями NLP, которые могут обнаруживать большое количество ПИИ, таких как номера социального страхования (SSN), номера кредитных карт, имена, адреса, номера телефонов и т. д. Для полного списка сущностей см. универсальные типы сущностей ПИИ. DetectPII также предоставляет позицию сущности ПИИ на уровне символов в тексте; например, начальная позиция символа для сущности NAME (John Doe) в предложении “Мое имя John Doe” равна 12, а конечная позиция символа равна 19. Эти смещения могут использоваться для маскировки или удаления значений, тем самым уменьшая риски распространения конфиденциальных данных в ЛМ.

Решение проблем с токсичностью и обеспечение безопасности

Сегодня мы объявляем о двух новых функциях Amazon Comprehend в виде API: обнаружение токсичности с помощью API DetectToxicContent и классификация безопасности запроса с помощью API ClassifyDocument. Обратите внимание, что DetectToxicContent – это новое API, тогда как ClassifyDocument – это существующее API, которое теперь поддерживает классификацию безопасности запроса.

Обнаружение токсичности

С помощью обнаружения токсичности Amazon Comprehend вы можете определить и пометить контент, который может быть вредным, оскорбительным или неуместным. Эта возможность особенно ценна для платформ, где пользователи создают контент, таких как социальные сети, форумы, чат-боты, разделы комментариев и приложения, использующие LLM для создания контента. Основная цель – поддерживать положительную и безопасную среду, предотвращая распространение токсичного контента.

В основе модели обнаружения токсичности лежит анализ текста для определения вероятности наличия в нем ненавистного контента, угроз, непристойностей или других форм вредоносного текста. Модель обучается на огромных наборах данных, содержащих примеры токсичного и нетоксичного контента. API обнаружения токсичности оценивает заданный текст, чтобы предоставить классификацию токсичности и оценку уверенности. Приложения на основе генеративного искусственного интеллекта могут использовать эту информацию для принятия соответствующих мер, таких как блокировка распространения текста для LLM. На данный момент этикетки, определяемые API обнаружения токсичности, включают НЕНАВИСТЬ, ГРАФИКА, ДОСАДА_ИЛИ_ЗЛОСТИ, СЕКСУАЛЬНОСТЬ, НАСИЛИЕ_ИЛИ_УГРОЗА, ОСКОРБЛЕНИЕ и НЕПРИЛИЧНОСТИ. Ниже приведен пример вызова API с использованием Python Boto3 для обнаружения токсичности Amazon Comprehend:

import boto3client = boto3.client('comprehend')response = client.detect_toxic_content(        TextSegments=[{"Text": "What is the capital of France?"},                      {"Text": "Where do I find good baguette in France?"}],       LanguageCode='en')print(response)

Классификация безопасности запроса

Классификация безопасности запроса с помощью Amazon Comprehend помогает классифицировать входной текст запроса как безопасный или небезопасный. Эта возможность крайне важна для приложений, таких как чат-боты, виртуальные помощники или инструменты модерации контента, где понимание безопасности запроса может определять ответы, действия или распространение контента для LLM.

В основе классификации безопасности запроса лежит анализ ввода пользователя на наличие явного или неявного злонамеренного намерения, такого как запрос личной или конфиденциальной информации и создание оскорбительного, дискриминационного или незаконного контента. Он также помечает запросы, направленные на получение советов по медицинским, юридическим, политическим, спорным, личным или финансовым вопросам. Классификация запроса возвращает два класса, НЕБЕЗОПАСНЫЙ_ЗАПРОС и БЕЗОПАСНЫЙ_ЗАПРОС, для соответствующего текста, а также оценочную оценку уверенности для каждого из них. Оценка уверенности находится в диапазоне от 0 до 1, и сумма оценок будет равна 1. Например, в чат-боте поддержки клиентов текст «Как я могу сбросить свой пароль?» сигнализирует о намерении получить справку о процедуре сброса пароля и помечается как БЕЗОПАСНЫЙ_ЗАПРОС. Аналогично, выражение типа “Я желаю, чтобы с тобой случилось что-то плохое” может быть помечено как потенциально опасное намерение и помечено как НЕБЕЗОПАСНЫЙ_ЗАПРОС. Важно отметить, что классификация безопасности запроса в первую очередь направлена на обнаружение намерений ввода (запросов) от людей, а не на машинно-генерируемый текст (выводы LLM). Ниже приведен пример кода для доступа к функции классификации безопасности запроса с помощью API ClassifyDocument:

import boto3client = boto3.client('comprehend')response = self.client.classify_document(                  Text=prompt_value, EndpointArn=endpoint_arn)print(response)

Обратите внимание, что endpoint_arn в предыдущем коде является предоставленным AWS номером ресурса Amazon (ARN) с шаблоном arn:aws:comprehend:<region>:aws:document-classifier-endpoint/prompt-safety, где <region> – это регион AWS, выбранный вами, где доступен Amazon Comprehend.

Чтобы продемонстрировать эти возможности, мы создали образец чат-приложения, в котором мы просим LLM извлекать PII-сущности, такие как адрес, номер телефона и SSN, из данного текста. LLM находит и возвращает соответствующие PII-сущности, как показано на изображении слева.

С помощью модерации Amazon Comprehend мы можем заменять ввод в LLM и вывод из LLM. На изображении справа значение SSN позволяется передавать в LLM без замены. Однако любое значение SSN в ответе LLM заменяется.

Приведенный ниже пример показывает, как препятствовать достижению LLM запроса с PII-информацией. В этом примере показано, как пользователь задает вопрос, содержащий PII-информацию. Мы используем модерацию Amazon Comprehend для обнаружения PII-сущностей в запросе и показываем ошибку, прерывая процесс.

Приведенные выше примеры чата демонстрируют, как модерация Amazon Comprehend применяет ограничения к данным, отправляемым в LLM. В следующих разделах мы объясним, как механизм модерации реализован с использованием LangChain.

Интеграция с LangChain

С бесконечными возможностями применения LLM в различных сценариях использования стало также важно упростить разработку генеративных AI-приложений. LangChain – это популярный фреймворк с открытым исходным кодом, который позволяет без труда разрабатывать генеративные AI-приложения. Модерация Amazon Comprehend расширяет фреймворк LangChain, предлагая возможности идентификации и замены PII, обнаружения токсичности и классификации безопасности запроса через AmazonComprehendModerationChain.

AmazonComprehendModerationChain является настраиваемой реализацией интерфейса базовой цепочки LangChain. Это означает, что приложения могут использовать эту цепочку со своими цепочками LLM для применения требуемой модерации к входному запросу и выводу текста из LLM. Цепочки могут быть созданы путем объединения множества цепочек или смешивания цепочек с другими компонентами. Вы можете использовать AmazonComprehendModerationChain с другими цепочками LLM для разработки сложных AI-приложений модульным и гибким способом.

Для более подробного объяснения мы предоставляем несколько примеров в следующих разделах. Исходный код реализации AmazonComprehendModerationChain можно найти в репозитории с открытым исходным кодом LangChain. Для полной документации по API-интерфейсу см. Документацию по API LangChain для модерации Amazon Comprehend chain. Использование этой цепочки модерации так же просто, как создание экземпляра класса с настройками по умолчанию:

from langchain_experimental.comprehend_moderation import AmazonComprehendModerationChain
comprehend_moderation = AmazonComprehendModerationChain()

Под капотом модерационная цепочка выполняет три последовательные проверки модерации, а именно PII, токсичность и безопасность запроса, как показано на следующей диаграмме. Это является стандартным потоком для модерации.

Приведенный ниже фрагмент кода показывает простой пример использования модерационной цепочки с LLM Amazon FalconLite (которая является квантованной версией модели Falcon 40B SFT OASST-TOP1), размещенной в Hugging Face Hub:

от langchain импортировать HuggingFaceHubот langchain экспортировать PromptTemplate, LLMChainот langchain_experimental.comprehend_moderation импортировать AmazonComprehendModerationChaintemplate = """Вопрос: {question}Ответ:"""repo_id = "amazon/FalconLite"prompt = PromptTemplate(template=template, input_variables=["question"])llm = HuggingFaceHub(repo_id=repo_id, model_kwargs={"temperature": 0.5, "max_length": 256})comprehend_moderation = AmazonComprehendModerationChain(verbose=True)chain = (    prompt     | comprehend_moderation     | { "input" : (lambda x: x['output']) | llm }      | comprehend_moderation)попробуйте:    response = chain.invoke({"question": "SSN имеет формат 123-45-6789. Можете ли вы дать мне SSN Джона Доу?"})кроме Exception as e:    print(str(e))иначе:    print(response['output'])

В представленном примере мы расширяем нашу цепь с помощью comprehend_moderation для текста, поступающего в LLM, и для текста, созданного LLM. Это выполнит базовую модерацию, которая проверит наличие личной информации (PII), токсичность и безопасность предложений в такой последовательности.

Настройка модерации с помощью конфигураций фильтров

Вы можете использовать AmazonComprehendModerationChain с определенными конфигурациями, что дает вам возможность контролировать, какие модерации вы хотите выполнить в вашем приложении на основе искусственного интеллекта. В основе каждой конфигурации фильтра есть три доступные конфигурации фильтров:

  1. ModerationPiiConfig – Используется для настройки фильтра PII.
  2. ModerationToxicityConfig – Используется для настройки фильтра токсичного контента.
  3. ModerationIntentConfig – Используется для настройки фильтра намерения.

Вы можете использовать каждую из этих конфигураций фильтров для настройки поведения ваших модераций. Конфигурации каждого фильтра имеют несколько общих параметров, а также некоторые уникальные параметры, с которыми они могут быть инициализированы. После определения конфигураций вы используете класс BaseModerationConfig для определения последовательности применения фильтров к тексту. Например, в следующем коде мы сначала определяем три конфигурации фильтров, а затем указываем порядок их применения:

из langchain_experimental.comprehend_moderation импортировать (BaseModerationConfig, ModerationPromptSafetyConfig, ModerationPiiConfig, ModerationToxicityConfig)pii_config = ModerationPiiConfig(labels=["SSN"],   redact=True,   mask_character="X")toxicity_config = ModerationToxicityConfig(threshold=0.6)prompt_safety_config = ModerationPromptSafetyConfig(threshold=0.8)moderation_config = BaseModerationConfig(filters=[ toxicity_config,       pii_config,       prompt_safety_config])comprehend_moderation = AmazonComprehendModerationChain(moderation_config=moderation_config)

Давайте немного глубже вникнем, чтобы понять, что дает эта конфигурация:

  • Вначале для фильтра токсичности мы указали порог 0.6. Это означает, что если текст содержит любые доступные токсичные ярлыки или сущности с баллом выше порога, вся цепочка будет прервана.
  • Если в тексте не найдено токсичного контента, выполняется проверка PII. В данном случае мы хотим проверить, содержит ли текст значения SSN. Поскольку параметр redact установлен в True, цепь замаскирует обнаруженные значения SSN (если таковые имеются), где уверенность сущности SSN больше или равна 0,5, с указанным символом маскировки (X). Если redact установлен в False, цепь будет прервана при обнаружении любого значимого фрагмента SSN.
  • Наконец, цепь выполняет классификацию безопасности предложений и остановит контент от дальнейшего распространения по цепочке, если контент классифицирован как UNSAFE_PROMPT с результатом уверенности больше или равным 0,8.

Ниже приведена схема этого рабочего процесса.

В случае нарушений в цепочке модерации (в данном примере, применимо для фильтров классификации токсичности и безопасности), цепочка вызывает исключение Python, фактически останавливая текущую цепочку и позволяя вам перехватить исключение (в блоке try-catch) и выполнить любое соответствующее действие. Три возможных типа исключений:

  1. ModerationPIIError
  2. ModerationToxicityError
  3. ModerationPromptSafetyError

Вы можете настроить один или несколько фильтров, используя BaseModerationConfig. Вы также можете иметь один и тот же тип фильтра с разными конфигурациями в рамках одной цепочки. Например, если ваш случай использования касается только PII, вы можете указать конфигурацию, которая должна прервать цепочку, если обнаружен SSN; в противном случае, он должен осуществлять замену на возраст и имена PII entities. Конфигурация для этого может быть определена следующим образом:

pii_config1 = ModerationPiiConfig(labels=["SSN"],    redact=False)pii_config2 = ModerationPiiConfig(labels=["AGE", "NAME"],    redact=True,     mask_character="X")moderation_config = BaseModerationConfig(filters=[ pii_config1,       pii_config2])comprehend_moderation = AmazonComprehendModerationChain(moderation_config=moderation_config)

Использование обратных вызовов и уникальных идентификаторов

Если вы знакомы с концепцией рабочих процессов, вы также можете быть знакомы с обратными вызовами. Обратные вызовы в рамках рабочих процессов – это независимые фрагменты кода, которые выполняются, когда в рамках рабочего процесса выполняются определенные условия. Обратный вызов может быть блокирующим или неблокирующим для рабочего процесса. Цепи LangChain – это, по сути, рабочие процессы для LLMs. AmazonComprehendModerationChain позволяет вам определить собственные функции обратного вызова. Первоначально реализация ограничена только асинхронными (неблокирующими) функциями обратного вызова.

Это позволяет использовать обратные вызовы с цепочкой модерации, они будут работать независимо от выполнения цепочки без блокировки ее выполнения. Для цепочки модерации у вас есть возможность запускать фрагменты кода с любой логикой работы после каждой модерации, независимо от цепочки.

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

Сочетание обратных вызовов и уникальных идентификаторов предоставляет вам мощный способ реализации цепочки модерации, подходящей к вашему случаю использования в более согласованной манере с меньшим количеством кода, который легче поддерживать. Обработчик обратного вызова доступен через BaseModerationCallbackHandler, с тремя доступными обратными вызовами: on_after_pii(), on_after_toxicity() и on_after_prompt_safety(). Каждая из этих функций обратного вызова вызывается асинхронно после выполнения соответствующей проверки модерации в рамках цепочки. Эти функции также получают два параметра по умолчанию:

  • moderation_beacon – Словарь, содержащий детали, такие как текст, на котором выполнялась модерация, полный JSON-вывод API Amazon Comprehend, тип модерации и были ли найдены предоставленные метки (в конфигурации) в тексте или нет
  • unique_id – Уникальный идентификатор, который вы указали при инициализации экземпляра AmazonComprehendModerationChain.

Вот пример работы реализации с обратным вызовом. В этом случае мы определили один обратный вызов, который мы хотим, чтобы цепочка выполнила после проверки PII:

from langchain_experimental.comprehend_moderation import BaseModerationCallbackHandlerclass MyModCallback(BaseModerationCallbackHandler):    async def on_after_pii(self, output_beacon, unique_id):        import json        moderation_type = output_beacon['moderation_type']        chain_id = output_beacon['moderation_chain_id']        with open(f'output-{moderation_type}-{chain_id}.json', 'w') as file:            data = { 'beacon_data': output_beacon, 'unique_id': unique_id }            json.dump(data, file)        '''    # реализуйте этот обратный вызов для токсичности    async def on_after_toxicity(self, output_beacon, unique_id):        pass    # реализуйте этот обратный вызов для безопасности подсказки    async def on_after_prompt_safety(self, output_beacon, unique_id):        pass    '''my_callback = MyModCallback()

Затем мы используем объект my_callback при инициализации цепочки модерации и также передаем unique_id. Вы можете использовать обратные вызовы и уникальные идентификаторы с настройками и без них. При создании подкласса BaseModerationCallbackHandler необходимо реализовать один или несколько методов обратного вызова в зависимости от фильтров, которые вы собираетесь использовать. В следующем примере показан способ использования обратных вызовов и unique_id без какой-либо конфигурации для краткости:

comprehend_moderation = AmazonComprehendModerationChain(moderation_callback = my_callback,unique_id = 'john.doe@email.com')

Следующая диаграмма объясняет, как работает эта цепочка модерации с обратными вызовами и уникальными идентификаторами. В частности, мы реализовали обратный вызов PII, который должен записывать файл JSON с данными, доступными в объекте moderation_beacon и переданным unique_id (это электронная почта пользователя в данном случае).

В следующем Python notebook мы собрали несколько различных способов настройки и использования цепочки модерации с различными LLM, такими как LLM, размещенные с помощью Amazon SageMaker JumpStart и размещенные в Hugging Face Hub. Мы также включили образец чат-приложения, о котором ранее говорилось, с использованием следующего Python notebook.

Вывод

Неоспоримый потенциал больших моделей языка и генеративного искусственного интеллекта очевиден. Однако их ответственное и этическое использование зависит от решения проблем доверия и безопасности. Признавая эти вызовы и активно внедряя меры для снижения рисков, разработчики, организации и общество в целом могут использовать преимущества этих технологий, сохраняя доверие и безопасность, которые являются основой их успешной интеграции. Используйте Amazon Comprehend ContentModerationChain для добавления функций доверия и безопасности в любой рабочий процесс LLM, включая реализацию рабочих процессов Generation Augmented Generation (RAG) в LangChain.

Для получения информации о создании решений на основе RAG с использованием LangChain и высокоточного машинного обучения (ML) Amazon Kendra, см. интеллектуальный поиск, см. – Быстрое создание приложений высокой точности Generative AI на основе корпоративных данных с использованием Amazon Kendra, LangChain и больших моделей языка. В качестве следующего шага обратитесь к подготовленным образцам кода для использования Amazon Comprehend moderation с LangChain. Для полной документации по API цепочки модерации Amazon Comprehend обратитесь к документации API LangChain документации.