Skapa en generativ AI-assistent med Slack och Amazon Bedrock

Tycka om
Gillade

Datum:

Sömlös integrering av kundupplevelse, samarbetsverktyg och relevant data är grunden för att leverera kunskapsbaserade produktivitetsvinster. I det här inlägget visar vi dig hur du integrerar den populära meddelandetjänsten Slack med AWS generativ AI tjänster för att bygga en naturlig språkassistent där affärsanvändare kan ställa frågor om en ostrukturerad datamängd.

För att demonstrera skapar vi en generativ AI-aktiverad Slack-assistent med en integration till Kunskapsbaser för Amazons berggrund som kan exponera den kombinerade kunskapen om AWS välarkitekterade ramverk samtidigt som man implementerar skyddsåtgärder och ansvarsfull AI-användning Amazon berggrundsskydd.

Amazonas berggrund är en helt hanterad tjänst som erbjuder ett urval av högpresterande grundmodeller (FM) från ledande AI-företag som AI21 labs, Anthropic, Cohere, Meta, Stability AI och Amazon genom ett enda API.

Amazon Bedrock Knowledge Bases tillhandahåller ett fullt hanterat RAG-arbetsflöde (Retrieval Augmented Generation), en teknik som hämtar data från företagets datakällor och berikar uppmaningen att ge mer relevanta och korrekta svar på naturliga språkfrågor. Detta gör Amazon Bedrock Knowledge Bases till ett attraktivt alternativ för att integrera avancerade generativa AI-funktioner i produkter och tjänster utan behov av omfattande maskininlärningsexpertis.

Amazon Bedrock Guardrails gör det möjligt för dig att implementera skyddsåtgärder för att bygga och anpassa säkerhets-, integritets- och sanningsskydd för dina generativa AI-applikationer för att anpassas till ansvarsfulla AI-policyer. Skyddsräcken kan hjälpa till att förhindra oönskat innehåll, blockera snabba injektioner och ta bort känslig information för att skydda ditt företags varumärke och rykte.

Detta innehåll bygger på inlägg som t.ex Distribuera en Slack-gateway för Amazon Bedrock genom att lägga till integrationer till Amazon Bedrock Knowledge Bases och Amazon Bedrock Guardrails, och Bolt for Python-biblioteket för att förenkla Slack-meddelandebekräftelse och autentiseringskrav.

Lösningsöversikt

Koden i den medföljande GitHub-repo som tillhandahålls i den här lösningen möjliggör en automatiserad distribution av Amazon Bedrock Knowledge Bases, Amazon Bedrock Guardrails och de nödvändiga resurserna för att integrera Amazon Bedrock Knowledge Bases API med en Slack slash-kommandoassistent med hjälp av Bolt for Python-biblioteket.

I det här exemplet tar vi in ​​dokumentationen av Amazon Well-Architected Framework i kunskapsbasen. Sedan använder vi integrationen till Amazon Bedrock Knowledge Bases API för att tillhandahålla en Slack-assistent som kan svara på användarfrågor om bästa praxis för AWS-arkitektur. Du kan ersätta exempeldokumentationen för din företagsdatauppsättning, såsom din företags-, HR-, IT- eller säkerhetspolicy, eller användar- eller underhållsguider för utrustning.

Följande diagram illustrerar lösningsarkitekturen på hög nivå.

I de följande avsnitten diskuterar vi nyckelkomponenterna mer i detalj.

Slack integration

Slack-integrationen tillhandahålls genom Slack Bolt Library för Python som körs i Request Processor AWS Lambda fungera. Slack Bolt Library hanterar autentisering och behörigheter till Slack-applikationen vi bygger, och kommer med inbyggt stöd för asynkron förfrågningshantering. Slack Bolt ger en dedikerad användarhandbok att distribuera och köra biblioteket i en Lambda-funktion.

Retrieval Augmented Generation

Amazon Bedrock Knowledge Bases ger FMs kontextuell information från dina privata datakällor för att RAG ska kunna leverera mer relevanta, exakta och anpassade svar.

RAG-arbetsflödet består av två nyckelkomponenter: datainmatning och textgenerering.

  • Arbetsflöde för datainmatning – Under datainmatning separeras ostrukturerad data från datakällan i bitar. Bitar är korta serier av text från varje källdokument åtskilda av ett fast antal ord, stycken eller en enda tanke. Bitar vektoriseras och lagras i en vektordatabas. Amazon Bedrock Knowledge Bases stöder ett antal vektordatabaser, Såsom Amazon OpenSearch Serverless, Amazon Aurora, Pinecone, Redis Enterprise Cloud och Mongo DB Atlas. I det här exemplet använder vi standardalternativet OpenSearch Serverless.
  • Arbetsflöde för textgenerering – Efter att källdata har matats in i vektordatabasen kan vi utföra en semantisk sökning för att hitta bitar av data som är relevanta för användarfrågan baserat på kontextualiserad betydelse istället för bara bokstavlig strängmatchning. För att slutföra processen presenteras både användarfrågan och relevanta databitar för den valda stora språkmodellen (LLM) för att skapa ett naturligt språksvar.

Amazon Bedrock Knowledge Bases API:er

Amazon Bedrock Knowledge Bases tillhandahåller ett fullt hanterat RAG-arbetsflöde som exponeras med två huvud-API:er:

  • hämta – Detta API hämtar relevanta databitar med hjälp av semantisk sökning, som du sedan kan bearbeta vidare i applikationslogik
  • RetrieveAndGenerate – Detta API slutför ett fullständigt arbetsflöde för RAG-textgenerering för att returnera ett naturligt språksvar till en mänsklig fråga i den givna datamängden

Lösningen i det här inlägget kallar RetrieveAndGenerate API för att returnera det naturliga språksvaret till Slack Bolt-integrationsbiblioteket.

Amazon berggrundsskydd

Amazon Bedrock Guardrails tillhandahåller ytterligare anpassningsbara skydd utöver inbyggda skydd som erbjuds av FM:er, och levererar säkerhetsfunktioner som är bland de bästa i branschen.

I den här lösningen konfigurerar vi Amazon Bedrock Guardrails med innehållsfilter, filter för känslig information och ordfilter.

Innehållsfilter hjälper till att upptäcka och filtrera skadliga användarinmatningar och modellgenererade utdata i sex kategorier: snabba injektioner, tjänstefel, förolämpningar, hat, våld och sexuellt explicit innehåll. I den här lösningen använder vi alla sex innehållsfilterkategorier.

Känsliga informationsfilter upptäcker känslig information som personligt identifierbar information (PII) i en prompt eller modellsvar. För att anpassa till ditt specifika fall kan du använda anpassade filter för känslig information genom att definiera dem med reguljära uttryck (regex).

I den här lösningen konfigurerar vi filter för känslig information enligt följande:

  • Email med en handling av Anonymize
  • Phone med en handling av Anonymize
  • Name med en handling av Anonymize
  • Credit_Debit_Card_Number med en handling av Block

Ordfilter används för att blockera ord och fraser i inmatningsmeddelanden och modellsvar. I den här lösningen har vi aktiverat filtret för svordomar som tillhandahålls av AWS. För att passa ditt användningsfall kan du skapa anpassade ordfilter.

Lösning genomgång

Slack gränssnitt med ett enkelt REST API, konfigurerat med Lambda proxy-integration som i sin tur interagerar med Amazon Bedrock Knowledge Bases API:er.

Lösningen distribueras med följande steg på hög nivå:

  1. Skapa en ny Slack-applikation.
  2. Aktivera åtkomst till tredjepartsmodeller i Amazon Bedrock.
  3. Distribuera Slack till Amazon Bedrock-integration med hjälp av AWS Cloud Development Kit (AWS CDK).
  4. Ta in AWS Well-Architected Framework-dokumenten till kunskapsbasen.

Förutsättningar

För att implementera denna lösning behöver du följande förutsättningar:

  • En Slack-arbetsyta där du har behörighet att skapa en Slack-app (om du inte har en Slack-arbetsyta, registrera dig för en arbetsyta på Slack.com)
  • An AWS-konto
  • Tillgång till följande AWS-tjänster:

Det här inlägget förutsätter en praktisk kunskap om de listade AWS-tjänsterna. Viss förståelse för vektordatabaser, vektorisering och RAG skulle vara fördelaktigt, men inte nödvändigt.

Skapa en ny Slack-applikation

När du har loggat in på din Slack-arbetsyta, slutför följande steg:

  1. Navigera till din Slappande appar och skapa en ny applikation.
  2. Välja Från början när du uppmanas
  3. Ange ett programnamn. För det här inlägget använder vi namnet aws-war-bot.
  4. Välj din arbetsyta och välj Skapa app.
  5. För att ge behörigheter för din Slack-applikation, välj OAuth & Permissions i din Slack-applikationsnavigeringsruta.
  6. I Scopes avsnitt, under Bot Token Scopes, lägg till följande behörigheter:
    • calls:write
    • commands
    • incoming-webhook

  7. Enligt OAuth-tokens för din arbetsytaväljer Installera till [arbetsytans namn].
  8. Välj en kanal som Slack-appen kommer att nås från. Du kanske vill först skapa en dedikerad kanal i Slack för detta ändamål.
  9. Välja Tillåt.
  10. När Slack-applikationsinstallationen är klar, kopiera tokenvärdet som genererats för Botanvändare OAuth-token att använda i ett senare steg.
  11. Enligt Inställningar välj i navigeringsfönstret Grundläggande information.
  12. I Appuppgifter kopiera värdet för Signeringshemlighet och spara detta för att använda senare.

Aktivera modellåtkomst i Amazon Bedrock

Slutför följande steg för att aktivera modellåtkomst i Amazon Bedrock:

  1. Välj på Amazon Bedrock-konsolen Modellåtkomst i navigeringsfönstret.
  2. Välja Ändra modell Access or Aktivera specifika modeller (om detta är första gången du använder Amazon Bedrock på ditt konto).
  3. Välj de modeller du vill använda för inbäddnings- och RAG-frågesvarsmodellerna. I det här inlägget använder vi Amazon Titan Text Embeddings V2 som inbäddningsmodell och Anthropics Claude Sonnet 3 för RAG-frågemodellerna i US-EAST-1 AWS-regionen.
  4. Välja Nästa.
  5. Se över modellvalet och välj Skicka.

Om du inte använder US-EAST-1 Region, modellerna som kan begäras kan skilja sig åt.

När åtkomstbegäran är klar kommer du att se modellens status som Tillgång beviljad för de valda modellerna.

Distribuera Slack till Amazon Bedrock-integration

I det här avsnittet distribuerar du den kompletterande koden till det här inlägget till ditt AWS-konto, som kommer att distribuera ett API på API Gateway, en Lambda-funktion och en kunskapsbas för Amazon Bedrock med OpenSearch Serverless som vektordatabas.

Det här avsnittet kräver att AWS CDK och TypeScript är installerade i din lokala integrerade utvecklingsmiljö (IDE) och att ett AWS-konto ska bootstrappas. Om detta inte har gjorts, se Komma igång med AWS CDK.

  1. Klona koden från GitHub repository:
    git clone https://github.com/aws-samples/amazon-bedrock-knowledgebase-slackbot.git

  2. Öppna amazon-bedrock-knowledgebase-slackbot katalogen i din föredragna IDE och öppna lib/amazon-bedrock-knowledgebase-slackbot-stack.ts fil.
  3. Uppdatera variablerna om det behövs (beroende på modellåtkomst och regionalt stöd) för RAG-frågan och inbäddningsmodellerna:
    const RAG_MODEL_ID = "anthropic.claude-3-sonnet-20240229-v1:0"
    const EMBEDDING_MODEL = "amazon.titan-embed-text-v2:0"

  4. Spara ändringarna efter att alla uppdateringar är klara.
  5. Kör kommandot från roten till ditt arkiv npm install.
  6. Kör kommandot cdk synth för att utföra grundläggande validering av AWS CDK-kod. Detta genererar en CloudFormation-mall från AWS CDK-stacken, som kan granskas i cdk.out katalog skapad i roten av förvaret.
  7. För att distribuera programstacken, kör följande kommando och ersätt värdena med token och signeringshemligheten som du skapade tidigare:
    cdk deploy --context slackBotToken=%slackBotToken% --context slackSigningSecret=%slackSigningSecret%

AWS CDK kommer att distribuera stacken som en CloudFormation-mall. Du kan övervaka utvecklingen av distributionen på AWS CloudFormation-konsolen.

Dessutom kommer AWS CDK att försöka distribuera programstacken till standardkontot och regionen med hjälp av standardinloggningsfilprofilen. För att ändra profil, lägg till profile flagga. Till exempel:

cdk deploy --profile [my-profile]

När distributionen är klar kommer du att se en utdata som liknar följande skärmdump, som beskriver API-slutpunkten som just har distribuerats.

  1. Kopiera API-slutpunktens URL för senare användning.

Du kan också hämta denna URL på fliken Utgångar i CloudFormation-stacken AmazonBedrockKnowledgebaseSlackbotStack som kördes för att distribuera den här lösningen.

  1. Växla tillbaka till Slack API-sidan.
  2. Välj under Slack-appen du skapade Slash-kommandon i navigeringsfönstret och välj sedan Skapa nytt kommando.
  3. Ange följande information (se till att inkludera det region- och API-ID som har distribuerats):
    • Ange för Kommando /ask-aws.
    • Ange för Request URL https://[AWS-URL]/slack/[command]. Till exempel, https://ab12cd3efg.execute-api.us-east-1.amazonaws.com/prod/slack/ask-aws.
    • För Kort beskrivning anger du en beskrivning (t.ex. AWS WAR Bot).

  4. Välja Save.
  5. Installera om Slack-appen på din arbetsyta i Installera app avsnitt genom att välja Installera bredvid arbetsytans namn.
  6. Välj kanalen där Slack-appen ska distribueras och välj Tillåt.

I Slack-kanalen kommer du att se ett meddelande som det i följande skärmdump, som indikerar att en integration med kanalen har lagts till.

Befolka kunskapsbasen Amazon Bedrock

Slutför följande steg för att fylla Amazon Bedrock kunskapsbas med den kombinerade informationen från AWS Well-Architected Framework:

  1. Ladda ner följande AWS Well-Architected Framework-dokument:

Du kan också inkludera alla välbyggda linser som är relevanta för din organisation genom att ladda ner från AWS Whitepapers och guider.

  1. Välj på Amazon Bedrock-konsolen Kunskapsbaser i navigeringsfönstret.
  2. Välj den kunskapsbas du distribuerade (slack-bedrock-kb).
  3. I Datakälla avsnittet under Källlänk, välj länken S3 hink som visas.

Detta kommer att öppna S3-hinken som används av kunskapsbasen Amazon Bedrock som datakälla.

  1. Välj i S3-hinken Ladda sedan Lägg till filer, och välj alla nedladdade AWS Well-Architected-dokument från föregående steg.
  2. När dokumenten har laddats upp byter du tillbaka till Kunskapsbaser sida på Amazonas berggrund konsol.
  3. Välj datakällans namn och välj Synkronisera.

Detta kommer att synkronisera dokumenten från S3-bucket till OpenSearch Serverless vektordatabasen. Processen kan ta över 10 minuter.

När synkroniseringen är klar visar datakällan en Status för tillgänglig.

Testa Slack-applikationsintegrationen med Amazon Bedrock

Utför följande steg för att testa integrationen:

  1. Öppna Slack-kanalen som valts i de föregående stegen och gå in /ask-aws.

Slack-applikationen kommer att visas.

  1. Välj Slack-applikationen och ange din prompt. För det här testet använder vi prompten "Berätta för mig om AWS Well Architected Framework."

Slack-applikationen kommer att svara med bearbetningsförfrågan och en kopia av den angivna prompten. Ansökan kommer sedan att ge ett svar på uppmaningen.

  1. För att testa att skyddsräckena fungerar som krävs, skriv en uppmaning som kommer att anropa ett skyddsräcksingrepp.

När en intervention inträffar får du följande fördefinierade meddelande som ditt svar.

Städa upp

Utför följande steg för att rensa upp dina resurser:

  1. Kör följande kommando från din terminal och ersätt värdena med token och signeringshemligheten som skapats tidigare:
    cdk destroy --context slackBotToken=%slackBotToken% --context slackSigningSecret=%slackSigningSecret%

  2. När du uppmanas, skriv y för att bekräfta borttagningen av den distribuerade stacken.

Slutsats

I det här inlägget implementerade vi en lösning som integrerar en Amazon Bedrock-kunskapsbas med en Slack-chattkanal för att göra det möjligt för företagsanvändare att ställa naturliga språkfrågor om en ostrukturerad datauppsättning från ett välbekant gränssnitt. Du kan använda den här lösningen för flera användningsfall genom att konfigurera den till olika Slack-applikationer och fylla kunskapsbasen med relevant datauppsättning.

För att komma igång, klona GitHub repo och förbättra dina kunders interaktion med Amazon Bedrock. För mer information om Amazon Bedrock, se Komma igång med Amazon Bedrock.


Om författarna

Barry Conway är en Enterprise Solutions Architect på AWS med 20 års erfarenhet inom teknikbranschen, som överbryggar klyftan mellan affärer och teknik. Barry har hjälpt bank-, tillverknings-, logistik- och detaljhandelsorganisationer att förverkliga sina affärsmål.

Dean Colcott är AWS Senior GenAI/ML Specialist Solution Architect och SME för Amazon Bedrock. Han har djupområden för att integrera generativa AI-resultat i företagsapplikationer, fullstackutveckling, videoanalys och datorseende och företagsdataplattformar.

Relaterade artiklar

plats_img

Senaste artiklar

plats_img