Evoluția rapidă a inteligenței artificiale generative (GenAI) din ultimii ani deschide noi orizonturi pentru crearea de asistenți conversaționali capabili de interacțiuni complexe și sarcini automatizate. Odată cu popularizarea acestei tehnologii, devine din ce în ce mai important să înțelegem pașii pentru integrarea modelelor de inteligență artificială în aplicațiile noastre într-un mod scalabil, securizat și responsabil. În acest articol, vom explora cum putem crea cu ușurință asistenți conversaționali (chatbots) utilizând Amazon Bedrock, un serviciu cloud de inteligență artificială generativă oferit de Amazon Web Services (AWS).
Inteligența artificială generativă este o ramură avansată a învățării profunde (deep learning) bazată pe rețele neuronale artificiale de dimensiuni mari, cu o arhitectură de tip transformers care au fost antrenate pe volume considerabile de date. Aceste modele sunt capabile, pe baza datelor pe care au fost antrenate, să genereze conținut nou și divers de la text și documente, până la cod sursă în diferite limbaje de programare, imagini și chiar secvențe video. În acest context, apare oportunitatea de a valorifica aceste modele pentru a implementa o gamă variată de aplicații pentru generare de text și imagini, cum ar fi crearea de conținut pentru pagini web sau platforme de social media, sau pentru a dezvolta asistenți virtuali personalizați care să caute informații și să execute numeroase sarcini de lucru.
Amazon Bedrock este un serviciu cloud care ne oferă acces la o gamă largă de modele lingvistice mari (LLMs sau FMs - foundational models) de la provideri de top precum Anthropic, Amazon, Cohere, DeepSeek, Luma, Meta, Mistral AI și Stability AI printr-o singură interfață (API), fără să fie necesară gestionarea infrastructurii din spatele modelelor. Platforma dispune de toate funcționalitățile necesare pentru a crea într-un mod rapid, scalabil și securizat aplicații GenAI. Acestea permit testarea concomitentă a performanței mai multor modele în funcție de cerințele fiecărui client, customizarea FMs cu propriile noastre surse de date prin mecanisme de reglaj (fine tuning) sau generare augmentată prin extragere (Retrieval Augmented Generation sau RAG) și, nu în ultimul rând, integrarea cu alte servicii din ecosistemul AWS. În plus, prin conceptul de guardrails avem posibilitatea de a implementa cu ușurință toate mecanismele necesare pentru a securiza aplicația noastră, a bloca conținutul neadecvat și a proteja datele confidențiale.
În continuare, vom explora mai în detaliu principalele capabilități disponibile în Bedrock. Serviciul oferă acces la o varietate mare și la cele mai recente versiuni ale modelelor lingvistice mari de la mai multe companii. Alegerea modelului depinde de cerințele specifice ale aplicației în ceea ce privește lungimea necesară pentru context, tipul de conținut procesat (text și/sau imagini), complexitatea raționamentului, dar și de constrângerile bugetare. Spre exemplu, modelele din gama Anthropic Claude, cum ar fi Claude Sonnet 3.7, pot procesa un context de până la 200.000 de tokeni, ceea ce reprezintă aproximativ 150.000 de cuvinte, la o singură solicitare (întrebare adresată modelului), având capacități avansate de raționament. Astfel, aceste modele sunt potrivite pentru situații în care avem de parcurs documente de dimensiuni mari pentru a extrage informații cheie sau pentru a crea un rezumat.
O altă funcționalitate importantă a serviciului este posibilitatea de a interacționa într-un mod simplificat cu aceste modele printr-un singur API. Converse API oferă o interfață consistentă pentru toate modelele suportate, facilitând gestiunea conversațiilor complexe și apelarea de funcții sau instrumente. Această interfață utilizează același format JSON pentru cererile pe care le trimitem la modele și aceeași structură pentru răspunsurile primite. Utilizând acest API, nu mai este necesar să modificăm codul sursă pentru a testa și integra mai multe modele, economisind astfel timp pentru dezvoltarea aplicației.
Generarea augmentată prin extragere (RAG) este o tehnică care combină puterea modelelor lingvistice mari (LLM) cu capacitatea de a accesa și utiliza informații externe relevante. În loc să se bazeze exclusiv pe cunoștințele interne dobândite în timpul antrenamentului, un sistem RAG mai întâi caută și extrage informații dintr-o sursă de date externă, în general o bază de date pentru vectori. Aceste informații sunt apoi adăugate la solicitarea inițială (prompt), oferind context suplimentar modelului lingvistic. RAG permite modelelor să fie mai actualizate și adaptate la propriile noastre surse de date, fără să fie necesară reantrenarea lor, un proces costisitor ca timp și resurse computaționale.
Modelele de inteligență artificială nu pot interpreta în mod direct documentele noastre, fie că vorbim de conținut text sau imagini. Aceste surse de date nestructurate trec printr-un proces de vectorizare prin care, în funcție de dimensiunea fiecărui fișier, sunt împărțite în secțiuni mai mici (chunking) și transformate în tokeni, care ulterior sunt reprezentați sub formă numerică în vectori multidimensionali sau embeddings. Aceste structuri de date sunt la rândul lor stocate într-o bază de date pentru vectori, printre cele mai populare fiind OpenSearch, Chroma, Pinecone sau PostgreSQL (pgvector). Operațiunea de vectorizare este realizată de un model separat numit embeddings model. Când un sistem RAG primește o solicitare, aceasta este vectorizată și utilizată pentru a căuta secțiuni relevante din documentele noastre în baza de date. Pentru a simplifica tot acest proces și a implementa rapid un sistem RAG, putem crea un Bedrock Knowledge Base. Prin această capabilitate, ne putem conecta cu ușurință la diferite surse de date pentru a procesa documente în mai multe formate și pentru a crea în mod automat o bază de date pentru vectori.
Agenții pentru Amazon Bedrock reprezintă o altă funcționalitate esențială, întrucât ne permit să orchestrăm interacțiuni complexe între LLMs, conversațiile cu utilizatorul, diferite surse de date și alte aplicații software. Prin crearea de agenți putem automatiza o gamă variată de sarcini cu aplicabilitate în multiple domenii cum ar fi customer support, gestionarea inventarului, planificare de călătorii sau procesarea dosarelor de asigurare. Pentru situații complexe, în serviciul Bedrock a fost adăugată recent și colaborarea multi-agent, care presupune utilizarea concomitentă a mai multor agenți specializați pentru a rezolva sarcini sofisticate. Agenții autonomi Bedrock pot fi creați cu ușurință atât din consola AWS, cât și prin API ori utilizând AWS SDK.
Popularizarea aplicațiilor GenAI și a asistenților conversaționali oferă numeroase oportunități de afaceri, dar atenția s-a îndreptat tot mai mult către inteligența artificială responsabilă. În acest context, în Bedrock avem conceptul de guardrails, care presupune integrarea unor mecanisme de protecție și control care permit dezvoltatorilor software să stabilească anumite limite și restricții pentru interacțiunea cu modelele lingvistice mari. În acest mod, putem bloca întrebări sau răspunsuri inadecvate, defini restricții și subiecte interzise și, de asemenea, putem masca datele cu caracter personal (PII) - totul printr-o simplă configurație. Aplicând acest mecanism, putem dezvolta aplicații GenAI sigure și aliniate cu politicile de utilizare dorite.
Vom analiza arhitectura și pașii necesari pentru dezvoltarea unui asistent conversațional folosind Bedrock și RAG cu propriile noastre surse de date:
Un prim pas în implementarea acestei soluții este încărcarea documentelor relevante într-un bucket Amazon Simple Storage Service (sau S3), un serviciu serverless de stocare a obiectelor. Putem include în aplicația noastră și o interfață vizuală care să îi permită utilizatorului să adauge propriile fișiere.
Pasul următor este crearea unui Bedrock Knowledge Base. Avem de specificat sursele noastre de date (de regulă bucket S3, dar putem adăuga și alte surse precum Salesforce, Confluence sau o pagină web), modalitatea de procesare și divizare a documentelor (chunking), dar și baza de date pentru vectori sau embeddings. Setările variază în funcție de tipul de fișiere procesate, respectiv lungimea și conținutul lor, în special dacă acestea conțin imagini sau grafice. În acest proces, putem crea în mod automat și o bază de date pentru vectori, dacă nu avem deja una, cea mai frecventă opțiune fiind Amazon OpenSearch Serverless.
Un alt pas important este dezvoltarea aplicației chatbot folosind AWS SDK care va interacționa cu modelele din Bedrock și cu Knowledge Base prin Converse API. Pentru a dezvolta soluția mai rapid putem utiliza Streamlit, un framework în python cu care putem crea, cu numai câteva linii de cod, o interfață vizuală simplă pentru conversații. Ulterior, putem testa aplicația local și, de asemenea, putem crea o imagine și un container Docker, pe care să le utilizăm în AWS. Una din cele mai simple opțiuni ar fi să folosim serviciul Elastic Container Service (ECS) cu AWS Fargate pentru a executa containerul, întrucât nu este necesar să administrăm servere sau instanțe EC2.
În continuare, vom explora ce se întâmplă când utilizatorul interacționează cu asistentul conversațional.
Întrebarea sau textul primit în conversație este vectorizat și aplicația inițiază o căutare în Knowledge Base. Astfel, sunt extrase fragmente relevante din documentele încărcate anterior.
Aplicația trimite modelului atât întrebarea utilizatorului, cât și fragmentele din documente obținute în pasul 5. Modelul oferă un răspuns care este afișat în aplicație.
În acest articol, am discutat despre principalele funcționalități ale serviciului Amazon Bedrock și pașii necesari pentru a dezvolta rapid un asistent conversațional customizat folosind surse de date externe și RAG. Dacă v-am făcut curioși și doriți să aflați mai multe informații despre cum puteți utiliza Bedrock pentru a crea propria aplicație, vă încurajez să explorați documentația AWS menționată la referințe.
AI vs. Tradițional, alternative