Foundational LLM Chat é um aplicativo Chainlit desenvolvido usando AWS CDK e Converse API que permite interagir com o modelo de linguagem Amazon Bedrock. Ele fornece uma interface amigável para conversar com Amazon Bedrock LLMs, fazer upload de imagens ou documentos e receber respostas multimodais. O aplicativo é implantado na AWS usando vários serviços como Amazon Bedrock, Amazon Elastic Container Service, Amazon Cognito, Amazon CloudFront e muito mais.
O diagrama de arquitetura ilustra a implantação da AWS do aplicativo Foundational LLM Chat. Os usuários interagem com o aplicativo por meio de uma interface web protegida pela autenticação do Amazon Cognito. O aplicativo é distribuído globalmente usando CDN do Amazon CloudFront. Dentro de uma região específica da AWS, o aplicativo é implantado em várias zonas de disponibilidade usando o Amazon ECS para implantação em contêineres. O back-end se integra ao Amazon Bedrock para aproveitar vários modelos de linguagem, permitindo que os usuários participem de conversas multimodais com o assistente de IA.
A aplicação é configurada por meio de um arquivo config.json
na pasta ./bin
. As principais opções de configuração incluem:
default_system_prompt
: Este campo contém o prompt padrão do sistema que será usado pelo chatbot se não for especificado abaixo no campo bedrock_models
. Ele define as instruções iniciais e o comportamento do assistente de IA. É possível modificar esse valor para alterar a personalidade ou o prompt inicial do assistente.
max_characters_parameter
: Este campo especifica o número máximo de caracteres permitidos no texto de entrada. Se definido como a string "None"
, não há limite de caracteres. Você pode alterar esse valor para limitar o comprimento do texto de entrada, se desejar.
max_content_size_mb_parameter
: Este campo define o tamanho máximo do conteúdo de entrada (por exemplo, imagens) em megabytes. Se definido como a string "None"
, não há limite de tamanho. Você pode modificar esse valor para restringir o tamanho máximo do conteúdo de entrada.
default_aws_region
: este campo especifica a região da AWS onde o aplicativo está implantado. Você também pode definir a região para cada campo do modelo Amazon Bedrock.
prefix
: Este campo permite definir um prefixo para nomes de recursos criados pelo aplicativo. Você pode deixá-lo vazio ou fornecer um prefixo personalizado, se desejar.
Este campo contém um dicionário de modelos Bedrock que o chatbot pode usar. Cada modelo é identificado por uma chave (por exemplo, "Sonnet", "Haiku") e a chave é o nome usado no perfil Chainlit Chat. Cada modelo tem no mínimo as seguintes propriedades:
id
: o ID ou ARN do modelo Amazon Bedrock. Você pode encontrar os IDs de modelo disponíveis na documentação da AWS.region
: uma matriz de regiões usadas para acessar o modelo. Um se você não habilitou a inferência entre regiões, múltiplo para inferência entre regiões.Os parâmetros de configuração opcionais incluem:
inference_profile
: configurações para inferência entre regiõesprefix
: prefixo da região (por exemplo, "nós")region
: região de inferência primáriasystem_prompt
: prompt personalizado do sistemacost
: informações sobre preçosinput_1k_price
: o custo (em dólares americanos) de 1.000 tokens de entrada. Você pode encontrar as informações de preços para diferentes modelos na página de preços do AWS Bedrock.output_1k_price
: o custo (em dólares americanos) de 1.000 tokens de saída.vision
[opcional] : verdadeiro ou falso. Se os recursos de visão estiverem habilitados para o modelo.document
[opcional] : verdadeiro ou falso. Se os recursos de documento estiverem habilitados](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) para o modelo.tool
[opcional] : verdadeiro ou falso. Se os recursos das ferramentas estiverem habilitados](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) para o modelo.default
[opcional] : verdadeiro ou falso. O modelo padrão selecionado Você pode modificar a seção bedrock_models
para incluir modelos adicionais ou atualizar os existentes de acordo com suas necessidades.
Veja um exemplo de como recuperar o ID do modelo e as informações de preço:
Para encontrar o ID do modelo ou ARN, consulte a documentação dos IDs de modelo do AWS Bedrock. Por exemplo, o ID do modelo Claude 3 Sonnet é anthropic.claude-3-sonnet-20240229-v1:0
.
Para encontrar as informações de preço, consulte a documentação de preços do AWS Bedrock. Para o modelo Claude 3 Sonnet, a precificação de insumos e produtos é a seguinte:
Depois de fazer as alterações desejadas no arquivo config.json
, você pode prosseguir com a implantação conforme descrito no README.
Aqui um exemplo do 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
}
}
}
O aplicativo aproveita o Amazon Bedrock Prompt Manager para:
Atualmente o aplicativo suporta 2 substituições automáticas de variáveis:
%Y-%m-%d
do dia;%Y-%m-%d %H:%M:%S UTC
você pode editar a função extract_and_process_prompt
dentro de chainlit_image/foundational-llm-chat_app/massages_utils.py
para adicionar substituições mais diretas.
O aplicativo usa a API Converse da Amazon Bedrock, fornecendo:
Todos os prompts do sistema são armazenados e gerenciados por meio do Amazon Bedrock Prompt Manager, oferecendo:
Ao usar prompts do sistema para configurar o comportamento dos modelos de linguagem, é crucial considerar as implicações de segurança e tomar medidas para evitar possíveis usos indevidos ou vulnerabilidades. Um risco significativo é a injeção imediata , em que entradas maliciosas podem manipular o prompt do sistema de maneiras não intencionais, levando potencialmente a resultados prejudiciais ou tendenciosos.
Um bom ponto de partida é o seguinte guia: Mitigando jailbreaks e injeções imediatas.
A engenharia de prompts refere-se à prática de elaborar cuidadosamente prompts ou instruções para orientar os modelos de linguagem na geração dos resultados desejados. A engenharia imediata e eficaz é crucial para garantir que os modelos de linguagem compreendam e respondam adequadamente ao contexto e à tarefa específicos.
O curso a seguir tem como objetivo fornecer a você uma compreensão passo a passo abrangente de como projetar prompts ideais no Claude, usando Bedrock: Prompt Engineering com Anthropic Claude v3.
Este guia cobre várias técnicas e práticas recomendadas para engenharia imediata por meio de uma série de lições e exercícios, organizados em três níveis: Iniciante, Intermediário e Avançado.
Seguindo os princípios e técnicas descritos neste guia, você pode aprimorar o desempenho e a confiabilidade de seus aplicativos de modelo de linguagem, garantindo que o assistente de IA gere respostas mais relevantes, coerentes e conscientes do contexto.
Recomendamos a implantação com AWS Cloud9. Se quiser usar o Cloud9 para implantar a solução, você precisará do seguinte antes de continuar:
m5.large
como tipo de instância.Amazon Linux 2023
como plataforma. Se você decidiu não usar o AWS Cloud9, verifique se o seu ambiente atende aos seguintes pré-requisitos:
Verifique se seu ambiente atende aos seguintes pré-requisitos:
Você tem:
Uma conta AWS
Uma política de acesso que permite criar recursos contidos na amostra AWS
Console e acesso programático
NodeJS está instalado
nvm
você pode executar o seguinte antes de continuar nvm install --lts
NPM está instalado
nvm
você pode executar o seguinte antes de continuar nvm install-latest-npm
AWS CLI instalada e configurada para uso com sua conta AWS
CLI do AWS CDK instalada
Finch instalado ou Docker instalado
Habilite o acesso aos modelos do Amazon Bedrock na região de implantação: como habilitar o acesso ao modelo do Amazon Bedrock.
Habilite pelo menos um dos seguintes:
Clone o repositório, abra a pasta, instale as dependências:
git clone https://github.com/aws-samples/foundational-llm-chat.git
cd foundational-llm-chat
npm install
[Opcional somente se você não tiver feito isso antes na região de implantação] Inicialize o ambiente CDK:
cdk bootstrap
Crie e implante a pilha:
cdk deploy --region YOUR_DEPLOY_REGION
onde YOUR_DEPLOY_REGION é a região da AWS na qual você gostaria de implantar o aplicativo. Por exemplo: us-west-2
.
Se você estiver usando o Finch em vez do Docker, adicione CDK_DOCKER=finch
no início do comando, como no exemplo a seguir:
CDK_DOCKER=finch cdk deploy --region us-west-2
Isso criará todos os recursos necessários na AWS, incluindo o cluster ECS, o grupo de usuários Cognito, a distribuição do CloudFront e muito mais.
Após a conclusão da implantação, o URL de distribuição do CloudFront será exibido no terminal. Use esta URL para acessar o aplicativo Foundational-llm-chat.
Após a implantação, você obterá algo semelhante a isto:
✅ 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
A distribuição do Amazon CloudFront é indicada na seguinte linha: FoundationalLlmChatStack.NetworkingFoundationalLlmChat = CLOUDFRONT_DISTRIBUTION_ADDRESS
foundational-llm-chat-user-pool
. Abra este grupo de usuários e crie um usuário verificando também o endereço de e-mail;Para evitar incorrer em custos desnecessários, recomenda-se limpar e eliminar os recursos criados por esta amostra quando terminar de os utilizar. Siga estas etapas para excluir a pilha e os recursos associados:
Foundational-LLM-ChatStack
.Isso excluirá toda a pilha, incluindo o cluster do ECS, o grupo de usuários do Cognito, a distribuição do CloudFront e todos os outros recursos associados.
Alternativamente, você pode usar o AWS CDK para excluir a pilha da linha de comando:
cdk destroy --region YOUR_DEPLOY_REGION
Substitua YOUR_DEPLOY_REGION
pela região da AWS onde você implantou o aplicativo.
Observe que a exclusão da pilha não excluirá automaticamente os logs do CloudWatch e a definição de tarefa do Amazon ECS criados durante a implantação. Talvez você queira excluir manualmente esses recursos se não precisar mais deles para evitar incorrer em custos adicionais.
Embora a arquitetura atual forneça um bom ponto de partida para a implantação do aplicativo Foundational LLM Chat, há considerações adicionais para uma implantação pronta para produção:
Na arquitetura atual, a comunicação entre a distribuição do CloudFront e o Application Load Balancer (ALB) é feita por HTTP. Para uma implantação de produção, é altamente recomendável usar HTTPS (TLS/SSL) para comunicação segura:
Habilitar HTTPS com terminação TLS em ambos os níveis (tarefas ALB e ECS) garante criptografia ponta a ponta e aumenta a segurança do aplicativo.
Este exemplo da AWS destina-se apenas a fins educacionais e de demonstração. Ele não foi projetado para uso em produção sem modificações e endurecimento adicionais. Antes de implantar este aplicativo em um ambiente de produção, é crucial realizar testes completos, avaliações de segurança e otimizações com base em seus requisitos específicos e práticas recomendadas.
Os prompts do sistema para claude podem ser obtidos diretamente na documentação da Anthropic aqui: Prompts do sistema
Contribuições são bem-vindas! Siga o fluxo de trabalho normal do Git:
Esta biblioteca está licenciada sob a licença MIT-0. Veja o arquivo LICENÇA.
Você deve considerar fazer sua própria avaliação independente antes de usar o conteúdo deste exemplo para fins de produção. Isso pode incluir (entre outras coisas) testar, proteger e otimizar o conteúdo fornecido neste exemplo, com base em suas práticas e padrões específicos de controle de qualidade.