Foundational LLM Chat — это приложение Chainlit, созданное с использованием AWS CDK и Converse API, которое позволяет взаимодействовать с языковой моделью Amazon Bedrock. Он предоставляет удобный интерфейс для общения с LLM Amazon Bedrock, загрузки изображений или документов и получения мультимодальных ответов. Приложение развертывается на AWS с использованием различных сервисов, таких как Amazon Bedrock, Amazon Elastic Container Service, Amazon Cognito, Amazon CloudFront и других.
На схеме архитектуры показано развертывание AWS приложения Foundational LLM Chat. Пользователи взаимодействуют с приложением через веб-интерфейс, защищенный аутентификацией Amazon Cognito. Приложение распространяется по всему миру с помощью CDN Amazon CloudFront. В определенном регионе AWS приложение развертывается в нескольких зонах доступности с использованием Amazon ECS для контейнерного развертывания. Серверная часть интегрируется с Amazon Bedrock для использования различных языковых моделей, позволяя пользователям участвовать в мультимодальном общении с помощником искусственного интеллекта.
Приложение настраивается с помощью файла config.json
в папке ./bin
. Ключевые параметры конфигурации включают в себя:
default_system_prompt
: это поле содержит системное приглашение по умолчанию, которое будет использоваться чат-ботом, если оно не указано ниже в поле bedrock_models
. Он определяет первоначальные инструкции и поведение ИИ-помощника. Вы можете изменить это значение, чтобы изменить личность помощника или начальную подсказку.
max_characters_parameter
: в этом поле указывается максимальное количество символов, разрешенное во входном тексте. Если установлено значение "None"
, ограничение на количество символов отсутствует. При желании вы можете изменить это значение, чтобы ограничить длину входного текста.
max_content_size_mb_parameter
: это поле устанавливает максимальный размер входного контента (например, изображений) в мегабайтах. Если установлено значение строки "None"
, ограничение размера отсутствует. Вы можете изменить это значение, чтобы ограничить максимальный размер входного содержимого.
default_aws_region
: в этом поле указывается регион AWS, в котором развернуто приложение. Вы также можете установить регион для каждого поля модели Amazon Bedrock.
prefix
: это поле позволяет вам установить префикс для имен ресурсов, созданных приложением. Вы можете оставить его пустым или при желании указать собственный префикс.
Это поле содержит словарь моделей Bedrock, которые может использовать чат-бот. Каждая модель идентифицируется ключом (например, «Sonnet», «Haiku»), а ключом является имя, используемое в профиле чата Chainlit. Каждая модель имеет как минимум следующие свойства:
id
: идентификатор или ARN модели Amazon Bedrock. Доступные идентификаторы моделей можно найти в документации AWS.region
: массив регионов, используемых для доступа к модели. Один, если вы не включили межрегиональный вывод, и несколько для межрегионального вывода.Дополнительные параметры конфигурации включают в себя:
inference_profile
: настройки межрегионального вывода.prefix
: префикс региона (например, «нас»)region
: Первичная область выводаsystem_prompt
: пользовательское системное приглашение.cost
: Информация о ценахinput_1k_price
: стоимость (в долларах США) 1000 входных токенов. Информацию о ценах на различные модели можно найти на странице цен на AWS Bedrock.output_1k_price
: стоимость (в долларах США) 1000 токенов вывода.vision
[необязательно] : истинное или ложное. Если для модели включены возможности машинного зрения.document
[необязательно] : правда или ложь. Если возможности документа включены](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) для модели.tool
[необязательно] : true или false. Если возможности инструментов включены](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) для модели.default
[необязательно] : true или false. Модель, выбранная по умолчанию Вы можете изменить раздел bedrock_models
, включив в него дополнительные модели или обновив существующие в соответствии с вашими требованиями.
Вот пример того, как получить идентификатор модели и информацию о ценах:
Чтобы найти идентификатор модели или ARN, обратитесь к документации по идентификаторам моделей AWS Bedrock. Например, идентификатор модели Claude 3 Sonnet — anthropic.claude-3-sonnet-20240229-v1:0
.
Информацию о ценах можно найти в документации по ценам на AWS Bedrock. Для модели Claude 3 Sonnet входные и выходные цены следующие:
После внесения необходимых изменений в файл config.json
вы можете продолжить развертывание, как описано в README.
Вот пример json:
{
"default_system_prompt" : " you are an assistant " ,
"max_characters_parameter" : " None " ,
"max_content_size_mb_parameter" : " None " ,
"default_aws_region" : " us-west-2 " ,
"prefix" : " " ,
"bedrock_models" : {
"Claude Sonnet 3.5 New" : {
"system_prompt" : " you are an assistant " ,
"id" : " us.anthropic.claude-3-5-sonnet-20241022-v2:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " , " us-east-2 " ],
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.015
},
"default" : true ,
"vision" : true ,
"document" : true ,
"tool" : true
},
"Meta Llama 3.2 90B Vision Instruct" : {
"id" : " us.meta.llama3-2-90b-instruct-v1:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " ],
"cost" : {
"input_1k_price" : 0.002 ,
"output_1k_price" : 0.002
},
"vision" : true ,
"document" : true ,
"tool" : true
},
"Mistral Large 2" : {
"id" : " mistral.mistral-large-2407-v1:0 " ,
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.009
},
"vision" : false ,
"document" : true ,
"tool" : true
}
}
}
Приложение использует Amazon Bedrock Prompt Manager для:
На данный момент приложение поддерживает две автоматические замены переменных:
%Y-%m-%d
дня;%Y-%m-%d %H:%M:%S UTC
вы можете отредактировать функцию extract_and_process_prompt
внутри chainlit_image/foundational-llm-chat_app/massages_utils.py
чтобы добавить больше прямых замен.
Приложение использует Converse API Amazon Bedrock, предоставляя:
Все системные подсказки хранятся и управляются с помощью Amazon Bedrock Prompt Manager, который предлагает:
При использовании системных подсказок для настройки поведения языковых моделей крайне важно учитывать последствия для безопасности и принимать меры для предотвращения потенциального неправильного использования или уязвимостей. Одним из существенных рисков является внедрение подсказки , когда вредоносные входные данные могут манипулировать системным приглашением непреднамеренным образом, что потенциально может привести к вредным или предвзятым выводам.
Хорошей отправной точкой является следующее руководство: Смягчение последствий взлома и быстрого внедрения.
Оперативное проектирование относится к практике тщательной разработки подсказок или инструкций, которые помогут языковым моделям получить желаемые результаты. Эффективное быстрое проектирование имеет решающее значение для обеспечения того, чтобы языковые модели понимали и соответствующим образом реагировали на данный контекст и задачу.
Следующий курс предназначен для того, чтобы дать вам полное пошаговое понимание того, как создавать оптимальные подсказки в Claude с помощью Bedrock: Prompt Engineering с Anthropic Claude v3.
В этом руководстве рассматриваются различные методы и передовые методы оперативного проектирования с помощью серии уроков и упражнений, разделенных на три уровня: «Начинающий», «Средний» и «Продвинутый».
Следуя принципам и методам, изложенным в этом руководстве, вы можете повысить производительность и надежность приложений языковой модели, гарантируя, что помощник ИИ будет генерировать более релевантные, последовательные и контекстно-зависимые ответы.
Мы рекомендуем выполнять развертывание с помощью AWS Cloud9. Если вы хотите использовать Cloud9 для развертывания решения, прежде чем продолжить, вам потребуется следующее:
m5.large
в качестве типа экземпляра.Amazon Linux 2023
в качестве платформы. Если вы решили не использовать AWS Cloud9, убедитесь, что ваша среда удовлетворяет следующим предварительным требованиям:
Убедитесь, что ваша среда удовлетворяет следующим предварительным требованиям:
У вас есть:
Аккаунт AWS
Политика доступа, позволяющая создавать ресурсы, содержащиеся в образце AWS.
Консольный и программный доступ
NodeJS установлен
nvm
вы можете запустить следующее, прежде чем продолжить nvm install --lts
NPM установлен
nvm
вы можете запустить следующее, прежде чем продолжить nvm install-latest-npm
AWS CLI установлен и настроен для использования с вашей учетной записью AWS.
AWS CDK CLI установлен.
Установлен Finch или установлен Docker.
Включите доступ к моделям Amazon Bedrock в регионе развертывания: как включить доступ к моделям Amazon Bedrock.
Включите хотя бы одно из:
Клонируем репозиторий, открываем папку, устанавливаем зависимости:
git clone https://github.com/aws-samples/foundational-llm-chat.git
cd foundational-llm-chat
npm install
[Необязательно, только если вы не сделали этого раньше в регионе развертывания] Загрузите среду CDK:
cdk bootstrap
Создайте и разверните стек:
cdk deploy --region YOUR_DEPLOY_REGION
где YOUR_DEPLOY_REGION — это регион AWS, в котором вы хотите развернуть приложение. Например: us-west-2
.
Если вы используете Finch вместо Docker, добавьте CDK_DOCKER=finch
в начале команды, как показано в следующем примере:
CDK_DOCKER=finch cdk deploy --region us-west-2
Это создаст все необходимые ресурсы на AWS, включая кластер ECS, пул пользователей Cognito, дистрибутив CloudFront и многое другое.
После завершения развертывания URL-адрес распространения CloudFront будет отображаться в терминале. Используйте этот URL-адрес для доступа к приложению Foundational-LLM-Chat.
После развертывания вы получите что-то похожее на это:
✅ Foundational-LLM-ChatStack
Deployment time: 465.09s
Outputs:
FoundationalLlmChatStack.CognitoUserPool = ID
FoundationalLlmChatStack.NetworkingFoundationalLlmChatChatbotStack = CLOUDFRONT_DISTRIBUTION_ADDRESS
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceLoadBalancer = ECS_LOAD_BALANCER
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceServiceURL = ECS_LOAD_BALANCER_ADDRESS
Stack ARN: ARN
Total time: 469.14s
Дистрибутив Amazon CloudFront указан в следующей строке: FoundationalLlmChatStack.NetworkingFoundationalLlmChat = CLOUDFRONT_DISTRIBUTION_ADDRESS
foundational-llm-chat-user-pool
. Откройте этот пул пользователей и создайте пользователя, также проверяющего адрес электронной почты;Чтобы избежать ненужных затрат, рекомендуется очистить и удалить ресурсы, созданные в этом примере, после того, как вы закончите их использовать. Выполните следующие действия, чтобы удалить стек и связанные с ним ресурсы:
Foundational-LLM-ChatStack
.При этом будет удален весь стек, включая кластер ECS, пул пользователей Cognito, дистрибутив CloudFront и все другие связанные ресурсы.
Альтернативно вы можете использовать AWS CDK для удаления стека из командной строки:
cdk destroy --region YOUR_DEPLOY_REGION
Замените YOUR_DEPLOY_REGION
на регион AWS, в котором вы развернули приложение.
Обратите внимание, что удаление стека не приведет к автоматическому удалению журналов CloudWatch и определения задачи Amazon ECS, созданных во время развертывания. Вы можете вручную удалить эти ресурсы, если они вам больше не нужны, чтобы избежать дополнительных затрат.
Хотя текущая архитектура обеспечивает хорошую отправную точку для развертывания приложения Foundational LLM Chat, существуют дополнительные соображения по поводу готового к эксплуатации развертывания:
В текущей архитектуре связь между дистрибутивом CloudFront и балансировщиком нагрузки приложений (ALB) осуществляется через HTTP. Для производственного развертывания настоятельно рекомендуется использовать HTTPS (TLS/SSL) для безопасной связи:
Включение HTTPS с завершением TLS на обоих уровнях (задачи ALB и ECS) обеспечивает сквозное шифрование и повышает безопасность приложения.
Этот образец AWS предназначен только для демонстрационных и образовательных целей. Не предназначен для промышленного использования без дальнейших доработок и упрочнения. Прежде чем развертывать это приложение в производственной среде, крайне важно провести тщательное тестирование, оценку безопасности и оптимизацию на основе ваших конкретных требований и передового опыта.
Системные подсказки для Клауда можно получить непосредственно из документации Anthropic здесь: Системные подсказки.
Вклады приветствуются! Пожалуйста, следуйте обычному рабочему процессу Git:
Эта библиотека лицензируется по лицензии MIT-0. См. файл ЛИЦЕНЗИИ.
Прежде чем использовать содержимое этого примера в производственных целях, вам следует рассмотреть возможность проведения собственной независимой оценки. Это может включать (помимо прочего) тестирование, защиту и оптимизацию контента, представленного в этом образце, на основе ваших конкретных методов и стандартов контроля качества.