

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Desenvolvimento de um assistente totalmente automatizado baseado em chat usando os agentes e as bases de conhecimento do Amazon Bedrock
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases"></a>

*Jundong Qiao, Shuai Cao, Noah Hamilton, Kiowa Jackson, Praveen Kumar Jeyarajan e Kara Yang, Amazon Web Services*

## Resumo
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-summary"></a>

Muitas organizações enfrentam desafios ao criar um assistente baseado em chat capaz de orquestrar diversas fontes de dados para fornecer respostas completas. Este padrão apresenta uma solução para o desenvolvimento de um assistente de chat capaz de responder a consultas tanto de documentação quanto de bancos de dados, com uma implantação simples.

Começando com o [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html), esse serviço de inteligência artificial generativa (IA) totalmente gerenciado fornece uma ampla variedade de modelos básicos avançados (FMs). Esse serviço permite a criação de aplicações de IA generativa de forma eficiente, mantendo grande atenção à privacidade e à segurança. No contexto da recuperação de documentação, o recurso de [geração aumentada via recuperação (RAG)](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html) é fundamental. Ele emprega as [bases de conhecimento](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) para complementar os prompts dos FMs com informações contextualmente relevantes provenientes de fontes externas. Um índice [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) serve como banco de dados vetorial por trás das bases de conhecimento do Amazon Bedrock. A integração é otimizada com o uso de uma engenharia de prompts precisa, a fim de minimizar imprecisões e garantir que as respostas estejam fundamentadas em documentação factual. Para consultas de banco FMs de dados, o Amazon Bedrock transforma consultas textuais em consultas SQL estruturadas, incorporando parâmetros específicos. Isso permite a recuperação precisa de dados de bancos de dados gerenciados por [AWS Glue bancos](https://docs.aws.amazon.com/glue/latest/dg/define-database.html) de dados. O [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) é usado para executar essas consultas.

Quando se trata de consultas mais elaboradas, obter respostas completas requer informações provenientes tanto da documentação quanto de bancos de dados. Os [Agentes para Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html) são um recurso de IA generativa que auxilia na criação de agentes autônomos capazes de compreender tarefas complexas e dividí-las em tarefas mais simples para orquestração. A combinação dos insights obtidos a partir das tarefas simplificadas, facilitada pelos agentes autônomos do Amazon Bedrock, otimiza a síntese de informações, resultando em respostas mais completas e detalhadas. Este padrão demonstra como desenvolver um assistente baseado em chat usando o Amazon Bedrock e os serviços e recursos de IA generativa relacionados em uma solução automatizada.

## Pré-requisitos e limitações
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Docker, [instalado](https://docs.docker.com/engine/install/)
+ AWS Cloud Development Kit (AWS CDK), [instalado](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_tools) e [inicializado no ou](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap) `us-east-1` `us-west-2` Regiões da AWS
+ AWS CDK [Kit de ferramentas versão 2.114.1 ou posterior, instalado](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Python, versão 3.11 ou versões posteriores, [instalado](https://www.python.org/downloads/)
+ No Amazon Bedrock, [habilite o acesso](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) a Claude 2, Claude 2.1, Claude Instant e Titan Embeddings G1 – Text

**Limitações**
+ Essa solução é implantada em um único Conta da AWS.
+ Essa solução só pode ser implantada Regiões da AWS onde o Amazon Bedrock e o Amazon OpenSearch Serverless são suportados. Para obter mais informações, consulte a documentação do [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-regions.html) e do [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html#serverless-regions).

**Versões do produto**
+ Llama-index, na versão 0.10.6 ou em versões posteriores
+ Sqlalchemy, na versão 2.0.23 ou em versões posteriores
+ OpenSearch-py, na versão 2.4.2 ou em versões posteriores
+ Requests\$1aws4auth, versão 1.2.3 ou em versões posteriores
+ AWS SDK para Python (Boto3) versão 1.34.57 ou posterior

## Arquitetura
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-architecture"></a>

**Pilha de tecnologias de destino**

[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)É uma estrutura de desenvolvimento de software de código aberto para definir a infraestrutura de nuvem em código e provisioná-la por meio dela. AWS CloudFormation A AWS CDK pilha usada nesse padrão implanta os seguintes recursos: AWS  
+ AWS Key Management Service (AWS KMS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Glue Data Catalog, para o componente de AWS Glue banco de dados
+ AWS Lambda
+ AWS Identity and Access Management (IAM)
+ Amazon sem OpenSearch servidor
+ Amazon Elastic Container Registry (Amazon ECR) 
+ Amazon Elastic Container Service (Amazon ECS)
+ AWS Fargate
+ Amazon Virtual Private Cloud (Amazon VPC)
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 

**Arquitetura de destino**

![\[Diagrama da arquitetura usando uma base de conhecimento e um agente do Amazon Bedrock.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/15372718-3a5d-4918-9cfa-422c455f288d/images/ff19152e-0bb6-4758-a6dd-4f6140e55113.png)


O diagrama mostra uma configuração abrangente AWS nativa da nuvem em uma única Região da AWS, usando várias. Serviços da AWS A interface primária do assistente baseado em chat é uma aplicação [Streamlit](https://docs.streamlit.io/) hospedada em um cluster do Amazon ECS. Um [Application Load Balancer](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/) gerencia a acessibilidade. As consultas realizadas por meio desta interface acionam a função do Lambda `Invocation`, que posteriormente interage com os agentes para Amazon Bedrock. Este agente responde às consultas dos usuários consultando as bases de conhecimento para Amazon Bedrock ou invocando uma função do Lambda `Agent executor`. A função aciona um conjunto de ações associadas ao agente, de acordo com um esquema de API previamente definido. As bases de conhecimento do Amazon Bedrock usam um índice OpenSearch Serverless como base de banco de dados vetorial. Além disso, a `Agent executor` função gera consultas SQL que são executadas no AWS Glue banco de dados por meio do Amazon Athena. 

## Ferramentas
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-tools"></a>

**Serviços da AWS**
+ O [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) é um serviço de consultas interativas que ajuda a análise de dados diretamente no Amazon Simple Storage Service (Amazon S3) usando SQL padrão.
+ [O Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) é um serviço totalmente gerenciado que disponibiliza modelos básicos de alto desempenho (FMs) das principais startups de IA e da Amazon para seu uso por meio de uma API unificada.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar a infraestrutura de AWS nuvem em código.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.
+ O [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) é um serviço de gerenciamento de contêineres escalável e rápido que facilita a execução, a interrupção e o gerenciamento de contêineres em um cluster.
+ O [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos. Por exemplo, é possível distribuir o tráfego entre instâncias, contêineres e endereços IP do Amazon Elastic Compute Cloud (Amazon EC2) em uma ou mais Zonas de disponibilidade.
+ O [AWS Glue](https://docs.aws.amazon.com/glue/) é um serviço totalmente gerenciado de extração, transformação e carregamento (ETL). Ele ajuda você a categorizar de forma confiável, limpar, enriquecer e mover dados de forma confiável entre armazenamento de dados e fluxos de dados. Esse padrão usa um AWS Glue rastreador e uma AWS Glue Data Catalog tabela.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.
+ [O Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) é uma configuração sem servidor sob demanda para o Amazon Service. OpenSearch Nesse padrão, um índice OpenSearch sem servidor serve como um banco de dados vetorial para as bases de conhecimento do Amazon Bedrock.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

**Outras ferramentas**
+ O [Streamlit](https://docs.streamlit.io/) é uma estrutura de código aberto do Python para desenvolvimento de aplicações de dados.

**Repositório de código**

O código desse padrão está disponível no GitHub [genai-bedrock-agent-chatbot](https://github.com/awslabs/genai-bedrock-agent-chatbot/)repositório. O repositório de código contém os seguintes arquivos e pastas:
+ Pasta `assets`: os recursos estáticos, como o diagrama da arquitetura e o conjunto de dados público.
+ Pasta `code/lambdas/action-lambda`: o código Python da função do Lambda que atua como uma ação para o agente do Amazon Bedrock.
+ `code/lambdas/create-index-lambda`pasta — O código Python para a função Lambda que cria o índice Serverless. OpenSearch 
+ Pasta `code/lambdas/invoke-lambda`: o código Python da função do Lambda que invoca o agente do Amazon Bedrock, chamado diretamente pela aplicação Streamlit.
+ `code/lambdas/update-lambda`pasta — O código Python para a função Lambda que atualiza ou exclui recursos depois que os recursos são implantados por meio do AWS . AWS CDK
+ `code/layers/boto3_layer`pasta — A AWS CDK pilha que cria uma camada de Boto3 que é compartilhada entre todas as funções do Lambda.
+ `code/layers/opensearch_layer`pasta — A AWS CDK pilha que cria uma camada OpenSearch sem servidor que instala todas as dependências para criar o índice.
+ `code/streamlit-app`pasta — O código Python que é executado como imagem do contêiner no Amazon ECS.
+ `code/code_stack.py`— A AWS CDK construção de arquivos Python que criam AWS recursos.
+ `app.py`— A AWS CDK pilha de arquivos Python que AWS implantam recursos na conta de destino. AWS 
+ `requirements.txt`— A lista de todas as dependências do Python que devem ser instaladas para o. AWS CDK
+ `cdk.json`: o arquivo de entrada que fornece os valores necessários para criar recursos. Além disso, nos campos de `context/config`, você pode personalizar a solução conforme necessário. Para obter mais informações sobre a personalização, consulte a seção [Informações adicionais](#develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional).

## Práticas recomendadas
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-best-practices"></a>
+ O exemplo de código fornecido aqui é apenas para fins proof-of-concept (PoC) ou piloto. Se você pretende implantar o código para produção, certifique-se de seguir as seguintes práticas recomendadas:
  + Habilitar o [registro em log de acesso do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)
  + Habilitar os [logs de fluxo da VPC](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)
+ Configure o monitoramento e a geração de alertas para as funções do Lambda. Para obter mais informações, consulte [Monitorar e solucionar problemas de funções do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Para ver as melhores práticas, consulte as [Melhores práticas para trabalhar com AWS Lambda funções](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).

## Épicos
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-epics"></a>

### Configure AWS as credenciais em sua estação de trabalho local
<a name="set-up-aws-credentials-on-your-local-workstation"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exporte variáveis para a conta e para a região. | Para fornecer AWS credenciais para o AWS CDK usando variáveis de ambiente, execute os comandos a seguir.<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number><br />export CDK_DEFAULT_REGION=<Region></pre> | AWS DevOps, DevOps engenheiro | 
| Configure o perfil AWS CLI nomeado. | Para configurar o perfil AWS CLI nomeado para a conta, siga as instruções em [Configuração e configurações do arquivo de credenciais](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html). | AWS DevOps, DevOps engenheiro | 

### Configure o ambiente.
<a name="set-up-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório na sua estação de trabalho local. | Para clonar o repositório, execute o comando a seguir no seu terminal.<pre>git clone https://github.com/awslabs/genai-bedrock-agent-chatbot.git</pre> | DevOps engenheiro, AWS DevOps | 
| Configure o ambiente virtual do Python. | Para ativar o ambiente virtual do Python, execute os comandos a seguir.<pre>cd genai-bedrock-agent-chatbot<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>Para configurar as dependências necessárias, execute o comando a seguir.<pre>pip3 install -r requirements.txt</pre> | DevOps engenheiro, AWS DevOps | 
| Configure o AWS CDK ambiente. | Para converter o código em um AWS CloudFormation modelo, execute o comando`cdk synth`. | AWS DevOps, DevOps engenheiro | 

### Configuração e implantação da aplicação
<a name="configure-and-deploy-the-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante recursos na conta. | Para implantar recursos no Conta da AWS usando o AWS CDK, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.html)Após a implantação bem-sucedida, você pode acessar o aplicativo assistente baseado em bate-papo usando a URL fornecida na guia **Saídas** no console. CloudFormation  | DevOps engenheiro, AWS DevOps | 

### Limpe todos os AWS recursos da solução
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Remova os AWS recursos. | Após testar a solução, para limpar os recursos, execute o comando `cdk destroy`. | AWS DevOps, DevOps engenheiro | 

## Recursos relacionados
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-resources"></a>

**AWS documentação**
+ Recursos do Amazon Bedrock:
  + [Acesso ao modelo](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
  + [Parâmetros de inferência para modelos de fundação](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
  + [Agentes do Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)
  + [Bases de Conhecimento para Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)
+ [Criar funções do Lambda com Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ AWS CDK recursos:
  + [Comece com o AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
  + [Solução de AWS CDK problemas comuns](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)
  + [Trabalhando com o AWS CDK em Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Construtor de aplicativos de IA generativa em AWS](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)

**Outros AWS recursos**
+ [Mecanismo vetorial para Amazon OpenSearch Serverless](https://aws.amazon.com/opensearch-service/serverless-vector-engine/)

**Outros recursos**
+ [LlamaIndex documentação](https://docs.llamaindex.ai/en/stable/)
+ [Documentação do Streamlit](https://docs.streamlit.io/)

## Mais informações
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional"></a>

**Personalização do assistente baseado em chat com seus próprios dados**

Para integrar dados personalizados na implantação da solução, siga estas diretrizes estruturadas. Estas etapas foram elaboradas para garantir um processo de integração contínuo e eficiente, permitindo que você implante a solução de forma eficaz com seus dados personalizados.

*Para integração de dados da base de conhecimento*

**Preparação de dados**

1. Localize o diretório `assets/knowledgebase_data_source/`.

1. Coloque seu conjunto de dados dentro desta pasta.

**Ajustes de configuração**

1. Abra o arquivo `cdk.json`.

1. Acesse o campo `context/configure/paths/knowledgebase_file_name` e, em seguida, atualize-o conforme necessário.

1. Acesse o campo `bedrock_instructions/knowledgebase_instruction` e, em seguida, atualize-o para refletir com precisão as particularidades e o contexto do seu novo conjunto de dados.

*Para integração de dados estruturados*

**Organização dos dados**

1. No diretório `assets/data_query_data_source/`, crie uma subpasta, como `tabular_data`.

1. Coloque seu conjunto de dados estruturado (em um dos formatos aceitos, incluindo CSV, JSON, ORC e Parquet) nesta subpasta recém-criada.

1. Se você estiver estabelecendo conexão com um banco de dados existente, atualize a função `create_sql_engine()` no arquivo `code/lambda/action-lambda/build_query_engine.py` para se conectar ao banco de dados.

**Atualizações de configuração e de código**

1. No arquivo `cdk.json`, atualize o campo `context/configure/paths/athena_table_data_prefix` para alinhar com o novo caminho dos dados.

1. Revise `code/lambda/action-lambda/dynamic_examples.csv` incorporando novos text-to-SQL exemplos que correspondam ao seu conjunto de dados.

1. Analise o arquivo `code/lambda/action-lambda/prompt_templates.py` para refletir os atributos do seu conjunto de dados estruturado.

1. No arquivo `cdk.json`, atualize o campo `context/configure/bedrock_instructions/action_group_description` para explicar o propósito e a funcionalidade da função do Lambda `Action group`.

1. No arquivo `assets/agent_api_schema/artifacts_schema.json`, explique as novas funcionalidades da função do Lambda `Action group`.

*Atualização geral*

No arquivo `cdk.json`, na seção `context/configure/bedrock_instructions/agent_instruction`, forneça uma descrição detalhada da funcionalidade pretendida e do propósito de design do agente do Amazon Bedrock, considerando os novos dados integrados.