Это решение AWS содержит демонстрацию генеративного искусственного интеллекта, в частности, использования запросов на естественном языке (NLQ) для задания вопросов к базе данных Amazon RDS для PostgreSQL. Это решение предлагает три варианта архитектуры для базовых моделей: 1. Amazon SageMaker JumpStart, 2. Amazon Bedrock и 3. OpenAI API. Демонстрируемое веб-приложение, работающее на Amazon ECS на AWS Fargate, использует комбинацию LangChain, Streamlit, Chroma и HuggingFace SentenceTransformers. Приложение принимает вопросы на естественном языке от конечных пользователей и возвращает ответы на естественном языке вместе со связанным запросом SQL и набором результатов, совместимым с Pandas DataFrame.
Выбор базовой модели (FM) для запросов на естественном языке (NLQ) играет решающую роль в способности приложения точно переводить вопросы на естественном языке в ответы на естественном языке. Не все FM способны выполнять NLQ. Помимо выбора модели, точность NLQ также во многом зависит от таких факторов, как качество подсказки, шаблон подсказки, помеченные примеры запросов, используемые для контекстного обучения ( так называемые подсказки с несколькими выстрелами ), и соглашения об именах, используемые для схемы базы данных. , как таблицы, так и столбцы.
Приложение NLQ было протестировано на различных FM с открытым исходным кодом и коммерческих FM. В качестве базового уровня модели серий OpenAI Generative Pre-trainer Transformer GPT-3 и GPT-4, включая gpt-3.5-turbo
и gpt-4
, обеспечивают точные ответы на широкий спектр простых и сложных запросов на естественном языке с использованием среднего значения. объем контекстного обучения и минимальное оперативное проектирование.
Amazon Titan Text G1 — Express, amazon.titan-text-express-v1
, доступный через Amazon Bedrock, также был протестирован. Эта модель обеспечивала точные ответы на основные запросы на естественном языке с использованием некоторой оптимизации подсказок, специфичной для модели. Однако эта модель не смогла ответить на более сложные запросы. Дальнейшая оперативная оптимизация может повысить точность модели.
Модели с открытым исходным кодом, такие как google/flan-t5-xxl
и google/flan-t5-xxl-fp16
(версия полной модели в формате с плавающей запятой половинной точности (FP16)), доступны через Amazon SageMaker JumpStart. Хотя модели серии google/flan-t5
являются популярным выбором для создания приложений генеративного искусственного интеллекта, их возможности для NLQ ограничены по сравнению с новыми моделями с открытым исходным кодом и коммерческими моделями. Демонстрационный google/flan-t5-xxl-fp16
способен отвечать на основные запросы на естественном языке при достаточном контекстном обучении. Однако во время тестирования часто не удавалось вернуть ответ или предоставить правильные ответы, и это часто приводило к тайм-аутам конечной точки модели SageMaker из-за нехватки ресурсов при работе с запросами средней и сложной сложности.
В этом решении используется оптимизированная для NLQ копия базы данных с открытым исходным кодом The Museum of Modern Art (MoMA), доступная на GitHub. База данных МоМА содержит более 121 000 произведений искусства и 15 000 художников. Этот репозиторий проекта содержит текстовые файлы, разделенные вертикальной чертой, которые можно легко импортировать в экземпляр базы данных Amazon RDS для PostgreSQL.
Используя набор данных MoMA, мы можем задавать вопросы на естественном языке разного уровня сложности:
Опять же, способность приложения NLQ возвращать ответ и возвращать точный ответ в первую очередь зависит от выбора модели. Не все модели поддерживают NLQ, а другие не вернут точных ответов. Оптимизация приведенных выше подсказок для конкретных моделей может помочь повысить точность.
ml.g5.24xlarge
для google/flan-t5-xxl-fp16
модель google/flan-t5-xxl-fp16
). Обратитесь к документации модели для выбора типов экземпляров.NlqMainStack
CloudFormation. Обратите внимание: вам необходимо будет использовать хотя бы одну Amazon ECS в своей учетной записи, иначе связанная со службой роль AWSServiceRoleForECS
еще не будет существовать, и стек выйдет из строя. Перед развертыванием стека NlqMainStack
проверьте роль, связанную с сервисом AWSServiceRoleForECS
. Эта роль создается автоматически при первом создании кластера ECS в вашей учетной записи.nlq-genai:2.0.0-sm
в новый репозиторий Amazon ECR. Альтернативно создайте и отправьте образ Docker nlq-genai:2.0.0-bedrock
или nlq-genai:2.0.0-oai
для использования с Вариантом 2: Amazon Bedrock или Вариантом 3: OpenAI API.nlqapp
в базу данных MoMA.NlqSageMakerEndpointStack
CloudFormation.NlqEcsSageMakerStack
CloudFormation. Альтернативно разверните шаблон NlqEcsBedrockStack
CloudFormation для использования с вариантом 2: Amazon Bedrock или шаблон NlqEcsOpenAIStack
для использования с вариантом 3: OpenAI API. Для варианта 1: Amazon SageMaker JumpStart убедитесь, что у вас есть необходимый экземпляр EC2 для определения конечной точки Amazon SageMaker JumpStart, или запросите его с помощью квот обслуживания в консоли управления AWS (например, ml.g5.24xlarge
для google/flan-t5-xxl-fp16
модель google/flan-t5-xxl-fp16
). Обратитесь к документации модели для выбора типов экземпляров.
Прежде чем продолжить, обязательно обновите приведенные ниже секретные значения. На этом этапе будут созданы секреты учетных данных для приложения NLQ. Доступ приложения NLQ к базе данных ограничен только чтением. Для варианта 3: OpenAI API на этом этапе будет создан секрет для хранения вашего ключа OpenAI API. Учетные данные главного пользователя для экземпляра Amazon RDS устанавливаются автоматически и сохраняются в AWS Secret Manager как часть развертывания шаблона NlqMainStack
CloudFormation. Эти значения можно найти в AWS Secret Manager.
aws secretsmanager create-secret
--name /nlq/NLQAppUsername
--description " NLQ Application username for MoMA database. "
--secret-string " <your_nlqapp_username> "
aws secretsmanager create-secret
--name /nlq/NLQAppUserPassword
--description " NLQ Application password for MoMA database. "
--secret-string " <your_nlqapp_password> "
# Only for Option 2: OpenAI API/model
aws secretsmanager create-secret
--name /nlq/OpenAIAPIKey
--description " OpenAI API key. "
--secret-string " <your_openai_api_key "
Доступ к ALB и RDS будет ограничен вашим текущим IP-адресом. Вам потребуется обновить его, если ваш IP-адрес изменится после развертывания.
cd cloudformation/
aws cloudformation create-stack
--stack-name NlqMainStack
--template-body file://NlqMainStack.yaml
--capabilities CAPABILITY_NAMED_IAM
--parameters ParameterKey= " MyIpAddress " ,ParameterValue= $( curl -s http://checkip.amazonaws.com/ ) /32
Создайте образы Docker для приложения NLQ на основе выбранных вами параметров модели. Вы можете создать образ(ы) Docker локально, в конвейере CI/CD, используя среду SageMaker Notebook или AWS Cloud9. Я предпочитаю AWS Cloud9 для разработки и тестирования приложения, а также создания образов Docker.
cd docker/
# Located in the output from the NlqMlStack CloudFormation template
# e.g. 111222333444.dkr.ecr.us-east-1.amazonaws.com/nlq-genai
ECS_REPOSITORY= " <you_ecr_repository> "
aws ecr get-login-password --region us-east-1 |
docker login --username AWS --password-stdin $ECS_REPOSITORY
Вариант 1. Amazon SageMaker JumpStart
TAG= " 2.0.0-sm "
docker build -f Dockerfile_SageMaker -t $ECS_REPOSITORY : $TAG .
docker push $ECS_REPOSITORY : $TAG
Вариант 2: Коренная порода Амазонки
TAG= " 2.0.0-bedrock "
docker build -f Dockerfile_Bedrock -t $ECS_REPOSITORY : $TAG .
docker push $ECS_REPOSITORY : $TAG
Вариант 3: API OpenAI
TAG= " 2.0.0-oai "
docker build -f Dockerfile_OpenAI -t $ECS_REPOSITORY : $TAG .
docker push $ECS_REPOSITORY : $TAG
5а. Подключитесь к базе данных moma
используя предпочитаемый вами инструмент PostgreSQL. Вам потребуется временно включить Public access
для экземпляра RDS в зависимости от того, как вы подключаетесь к базе данных.
5б. Создайте две таблицы коллекции MoMA в базе данных moma
.
CREATE TABLE public .artists
(
artist_id integer NOT NULL ,
full_name character varying ( 200 ),
nationality character varying ( 50 ),
gender character varying ( 25 ),
birth_year integer ,
death_year integer ,
CONSTRAINT artists_pk PRIMARY KEY (artist_id)
)
CREATE TABLE public .artworks
(
artwork_id integer NOT NULL ,
title character varying ( 500 ),
artist_id integer NOT NULL ,
date integer ,
medium character varying ( 250 ),
dimensions text ,
acquisition_date text ,
credit text ,
catalogue character varying ( 250 ),
department character varying ( 250 ),
classification character varying ( 250 ),
object_number text ,
diameter_cm text ,
circumference_cm text ,
height_cm text ,
length_cm text ,
width_cm text ,
depth_cm text ,
weight_kg text ,
durations integer ,
CONSTRAINT artworks_pk PRIMARY KEY (artwork_id)
)
5в. Разархивируйте и импортируйте два файла данных в базу данных moma
используя текстовые файлы в подкаталоге /data
. Оба файла содержат строку заголовка и разделены вертикальной чертой ('|').
# examples commands from pgAdmin4
--command " "\copy public.artists (artist_id, full_name, nationality, gender, birth_year, death_year) FROM 'moma_public_artists.txt' DELIMITER '|' CSV HEADER QUOTE '"' ESCAPE '''';""
--command " "\copy public.artworks (artwork_id, title, artist_id, date, medium, dimensions, acquisition_date, credit, catalogue, department, classification, object_number, diameter_cm, circumference_cm, height_cm, length_cm, width_cm, depth_cm, weight_kg, durations) FROM 'moma_public_artworks.txt' DELIMITER '|' CSV HEADER QUOTE '"' ESCAPE '''';""
Создайте учетную запись пользователя базы данных приложения NLQ, доступную только для чтения. Обновите значения имени пользователя и пароля в сценарии SQL в трех местах, используя секреты, которые вы настроили на шаге 2 выше.
CREATE ROLE < your_nlqapp_username > WITH
LOGIN
NOSUPERUSER
NOCREATEDB
NOCREATEROLE
INHERIT
NOREPLICATION
CONNECTION LIMIT - 1
PASSWORD ' <your_nlqapp_password> ' ;
GRANT
pg_read_all_data
TO
< your_nlqapp_username > ;
Вариант 1. Amazon SageMaker JumpStart
cd cloudformation/
aws cloudformation create-stack
--stack-name NlqSageMakerEndpointStack
--template-body file://NlqSageMakerEndpointStack.yaml
--capabilities CAPABILITY_NAMED_IAM
Вариант 1. Amazon SageMaker JumpStart
aws cloudformation create-stack
--stack-name NlqEcsSageMakerStack
--template-body file://NlqEcsSageMakerStack.yaml
--capabilities CAPABILITY_NAMED_IAM
Вариант 2: Коренная порода Амазонки
aws cloudformation create-stack
--stack-name NlqEcsBedrockStack
--template-body file://NlqEcsBedrockStack.yaml
--capabilities CAPABILITY_NAMED_IAM
Вариант 3: API OpenAI
aws cloudformation create-stack
--stack-name NlqEcsOpenAIStack
--template-body file://NlqEcsOpenAIStack.yaml
--capabilities CAPABILITY_NAMED_IAM
Вы можете заменить стандартную модель JumpStart Foundation google/flan-t5-xxl-fp16
, развернутую с помощью файла шаблона NlqSageMakerEndpointStack.yaml
CloudFormation. Сначала вам потребуется изменить параметры модели в файле NlqSageMakerEndpointStack.yaml
и обновить развернутый стек CloudFormation, NlqSageMakerEndpointStack
. Кроме того, вам потребуется внести изменения в приложение NLQ app_sagemaker.py
, изменив класс ContentHandler
, чтобы он соответствовал полезным данным ответа выбранной модели. Затем пересоберите образ Docker Amazon ECR, увеличив версию, например nlq-genai-2.0.1-sm
, с помощью Dockerfile_SageMaker
Dockerfile и отправьте его в репозиторий Amazon ECR. Наконец, вам потребуется обновить развернутую задачу и службу ECS, которые являются частью стека NlqEcsSageMakerStack
CloudFormation.
Чтобы переключиться с базовой модели Amazon Titan Text G1 — Express ( amazon.titan-text-express-v1
) решения по умолчанию, необходимо изменить и повторно развернуть файл шаблона NlqEcsBedrockStack.yaml
CloudFormation. Кроме того, вам потребуется внести изменения в приложение NLQ, app_bedrock.py
Затем перестроить образ Docker Amazon ECR, используя Dockerfile_Bedrock
Dockerfile, и отправить полученный образ, например, nlq-genai-2.0.1-bedrock
, в репозиторий Amazon ECR. . Наконец, вам потребуется обновить развернутую задачу и службу ECS, которые являются частью стека NlqEcsBedrockStack
CloudFormation.
Переключиться с API OpenAI решения по умолчанию на API другого стороннего поставщика моделей, например Cohere или Anthropic, также просто. Чтобы использовать модели OpenAI, вам сначала необходимо создать учетную запись OpenAI и получить собственный личный ключ API. Затем измените и перестройте образ Docker Amazon ECR, используя Dockerfile_OpenAI
Dockerfile, и отправьте полученный образ, например nlq-genai-2.0.1-oai
, в репозиторий Amazon ECR. Наконец, измените и повторно разверните файл шаблона NlqEcsOpenAIStack.yaml
CloudFormation.
См. ВКЛАД для получения дополнительной информации.
Эта библиотека лицензируется по лицензии MIT-0. См. файл ЛИЦЕНЗИИ.