Este repositório hospeda o código de amostra que suporta o código Re: InForce 2024 Conversa com o ID da sessão DAP341. O código deste repositório é intencionalmente simples de otimizar a legibilidade durante a sessão e não se destina ao uso em um ambiente de produção.
O objetivo do código neste repositório é demonstrar o núcleo funcional de um chatbot de geração aumentada (RAG) de recuperação, destacando algumas das considerações de proteção de dados relevantes para cargas de trabalho de IA generativas em geral.
Se você deseja implantar um estojo de uso em estilo de chatbot de trapo com a AWS na produção, considere uma das seguintes opções:
Este repositório contém uma série de "scripts" do Python que podem ser executados para demonstrar uma série de idéias. Os scripts são numerados porque, quando executados sequencialmente, eles contam uma história sobre como funciona um chatbot de pano e como os dados podem ser protegidos em uma carga de trabalho baseada em Genai. No entanto, os scripts são todos independentes e idempotentes e não precisam ser executados sequencialmente.
Alguns dos scripts Python fornecidos aqui precisam ser modificados antes de correr. Os scripts são armazenados aqui exatamente como são mostrados na apresentação Re: Inforce para consistência. As instâncias em que você deve atualizar o script são anotadas com #UPDATE_TO_RUN_YOURSELF .
Os recursos da AWS necessários para executar os scripts de exemplo do Python, por exemplo, um índice Amazon Kendra, dados de exemplo etc. podem ser fornecidos pelo usuário deste repositório, mas abaixo estão as instruções de como esses recursos podem ser criados.
Os principais recursos da AWS que precisam ser criados e referenciados antes que os scripts do Python funcionarão são um índice Amazon Kendra e uma fonte de dados do Kendra que aponta para dados em um balde do Amazon S3. Observe que um índice Amazon Kendra tem um custo não negligenciado e deve-se tomar cuidado para entender esses custos antes de implantar esta solução.
O código fornecido neste repositório deve ser complementar a uma implantação do construtor de aplicativos de IA generativo na AWS. Se você implantar o generativo construtor de aplicativos de IA na AWS e continuar a implantar uma implantação de casos de "texto" com a opção "Rag" ativada, um índice Kendra poderá ser criado para você, como mostrado na seção a seguir:
Implante o generativo Builder de aplicativos de AI na Solução da AWS de acordo com o guia de implantação.
No que se refere à proteção de dados, considere a implantação da solução com a opção VPC ativada, o que minimiza o tráfego que flui pela Internet pública, aproveitando os pontos de extremidade do VPC.
Depois que o painel de implantação for implantado, você poderá implantar um caso de uso.
Ao implantar um caso de uso, selecione a opção text . Na seção Select knowledge base , selecione yes para a opção RAG, escolha Kendra como base de conhecimento e, se você ainda não possui um índice Kendra, selecione no para "Você tem um índice Kendra existente?" ter um criado para você. Todos os outros valores padrão são bons, mas ajuste se/conforme necessário para atender às suas necessidades.
Depois que o seu construtor de aplicativos de IA generativo for implantado, você terá um índice Amazon Kendra. Agora você precisa adicionar uma fonte de dados Kendra a esse índice. Primeiro, crie ou reutilize um balde Amazon S3 existente para armazenar dados. Carregue o conteúdo do diretório data , bem como o src/kendra-acl.json neste repositório para esse balde S3, de modo que a estrutura resultante se pareça com a seguinte:
engineering/rootrunner3k-techspecs.txt
wiki/ecorobopotato.txt
kendra-acl.json
Navegue até o seu índice Amazon Kendra no console de gerenciamento da AWS e escolha a opção Add Data Sources . Escolha a opção Amazon S3 connector . Dê um nome à fonte de dados. Crie um papel de IAM ou use um existente conforme desejado. Na Configure sync settings , digite a localização do seu balde S3, defina o arquivo kendra-acl.json na configuração Access control list configuration file location , expanda Additional configuration e adicione engineering e marketing como prefixos a serem indexados. Todos os outros valores padrão são suficientes para criar e implantar sua fonte de dados Kendra. Depois que a fonte de dados for criada, você deve iniciar uma operação sync da fonte de dados pelo menos uma vez e aguardar a conclusão da sincronização antes de executar qualquer script python.
Antes de poder ligar para todos os modelos da Amazon Bedrock, você deve ativar o acesso ao modelo. Este repositório usa o Claude 3 sonetos; portanto, pelo menos esse modelo deve ser ativado.
Para executar o arquivo Python CloudWatch especificamente, você deve ativar o log de invocação do modelo Amazon Bedrock, especificamente com um destino de logs do Amazon CloudWatch.
Como parte desse processo, você criará um grupo CloudWatch Logs, que deve ser atualizado no script Python que acompanha.
Para executar os scripts do Python relacionados aos bedrock Guardrails, você deve criar um corrimão de rock. Para fazer isso usando o console de gerenciamento da AWS, navegue até o serviço Amazon Bedrock e selecione a seção Guardrails. Escolha Create guardrail . Dê um nome e configure -o com padrões ou quaisquer opções que você preferir. No entanto, verifique se, na seção Add sensitive information filters , adicione o tipo de Address PII e selecione Mask como o comportamento do corrimão. Isso garante que o seu guardrail replique o comportamento que se destina a ser demonstrado nos scripts do Python neste projeto.
Os arquivos de marcação, imagens e arquivo de código Python no diretório src devem ser vistos e executados na ordem especificada por seu esquema de numeração. A seguinte forma é uma explicação para cada arquivo para ajudar a orientar o leitor através da intenção da apresentação que acompanha essas amostras de código.
Fornece o ponto principal desses trechos de código, que é para mostrar o código Python muito simplificado que é legível e demonstra como o RAG funciona em um nível básico, além de destacar as considerações de proteção de dados para as cargas de trabalho de Genai de maneira mais ampla.
Imagem usada para introduzir o produto e a organização nocionais cujos dados estamos usando. Os dados são intencionalmente absurdos, para que o LLMS não tenha dados de treinamento acidentalmente relacionados a este produto ou organização nocional. No entanto, como esse repositório que o acompanha agora é de código aberto, é possível que um LLM possa eventualmente usar esse repositório como uma fonte de dados de treinamento, que pode eventualmente quebrar essa suposição!
Simplesmente mostra o conteúdo do balde Amazon S3 que configuramos que contém nossos dados de origem. Ele também destaca o tipo de criptografia para esses dados no S3 para enfatizar a importância de criptografar dados em repouso.
Imprime algumas das informações básicas sobre o nosso índice Amazon Kendra para introduzir o conceito de Kendra e como ele é capaz de realizar pesquisas semânticas contra nossas fontes de dados.
Demonstra uma chamada de API retrieve simples contra o nosso índice Kendra, que recupera o contexto com base na pergunta que fazemos.
Liga a Amazon Bedrock e faz uma pergunta não relacionada aos nossos dados proprietários nocionais. Isso se destina a demonstrar como um LLM é capaz de responder a muitas perguntas sobre coisas disponíveis ao público, porque os LLMs são frequentemente treinados contra grandes quantidades de dados raspados da Internet aberta.
Liga a Bedrock e faz uma pergunta sobre nossos dados proprietários. Demonstra como um LLM não pode responder a perguntas sobre dados proprietários e que não fizeram parte do conjunto de dados de treinamento.
Primeiro, Kendra recupera o contexto relevante de nossos dados proprietários e depois usa esse contexto ao chamar um LLM na Amazon Bedrock. Esse padrão é chamado de geração aumentada de recuperação, ou pano.
Adiciona a lista de controle de acesso à chamada à Amazon Kendra. Como nosso grupo de "marketing" não tem permissão para acessar o documento de especificações técnicas da Kendra, nossa resposta não inclui detalhes sobre o conteúdo de que o marketing não está autorizado a visualizar. Isso demonstra como podemos obter autorização no nível do documento ao usar uma abordagem baseada em RAG. Vale a pena notar que, se você usar seus dados proprietários para executar o ajuste fino ou o pré-treinamento continuado para personalizar um LLM, perde essa capacidade de fazer autorização de granulação fina no nível do documento; Seus usuários têm acesso a esse modelo personalizado ou não.
Executa uma consulta de pano que inclui um endereço específico. Mas talvez não queira endereços, ou outros tipos de PII ou conteúdo sensível/prejudicial para serem incluídos em nosso chatbot ...
Simplesmente lista nossos atributos de um corrinho pré -tratado da Amazon Bedrock que usaremos na etapa a seguir. Especificamente, vemos que nosso guarda -cora Rail aborda os tipos de dados.
Executa a mesma chamada baseada em pano que 09_rag_address.py, mas adiciona o bedrock guardrail como parte da chamada para a rocha. Isso, por sua vez, reduz os dados específicos do endereço PII da resposta.
Liste 3 instâncias recentes de Cloudtrail de invocar Bedrock. Isso simplesmente demonstra como o CloudTrail pode ser usado para auditar o uso do serviço Amazon Bedrock. Outros serviços da AWS também geram eventos Cloudtrail, e esses dados podem ser usados para auditar e proteger seus recursos da AWS.
Lista 3 logs recentes de invocação de modelos CloudWatch. Isso demonstra como seus dados podem ser incluídos nos logs de invocação de modelos CloudWatch. Portanto, se você ativar os logs de invocação do modelo, deverá protegê -los com o mesmo nível de atendimento que protege a própria fonte de dados.
Depois de executar os scripts do Python, você será guiado por alguns exemplos que demonstram considerações de proteção de dados para cargas de trabalho de IA generativas. Algumas das principais aceitadas são:
O básico da proteção de dados ainda se aplica.
A IA generativa apresenta algumas novas considerações
Consulte contribuindo para mais informações.
Esta biblioteca está licenciada sob a licença MIT-0. Veja o arquivo de licença.