Bir işletme ortamında üretken yapay zeka ve büyük dil modellerinin (LLM'ler) en yaygın uygulamalarından biri, kuruluşun bilgi birikimine dayalı olarak soruları yanıtlamaktır. Amazon Lex'i inşa etmek için çerçeve sağlar AI tabanlı sohbet botları. Önceden eğitilmiş temel modeller (FM'ler), çok çeşitli konularda özetleme, metin oluşturma ve soru yanıtlama gibi doğal dili anlama (NLU) görevlerinde iyi performans gösterir, ancak doğru (halüsinasyonlar olmadan) yanıtlar vermekte zorlanır veya ilgili soruları yanıtlamada tamamen başarısız olur. eğitim verilerinin bir parçası olarak görmedikleri içerik. Ayrıca FM'ler, verilerin belirli bir zamandaki enstantane görüntüsüyle eğitilir ve çıkarım zamanında taze verilere erişmek için doğal bir yeteneğe sahip değildir; bu yetenek olmadan, potansiyel olarak yanlış veya yetersiz yanıtlar verebilirler.
Bu sorunu çözmek için yaygın olarak kullanılan bir yaklaşım, Geri Alma Artırılmış Üretim (RAG) adı verilen bir teknik kullanmaktır. RAG tabanlı yaklaşımda, kullanıcı sorusunu bir LLM kullanarak vektör yerleştirmelerine dönüştürürüz ve ardından bu yerleştirmeler için kurumsal bilgi derleminin yerleştirmelerini tutan önceden doldurulmuş bir vektör veritabanında bir benzerlik araştırması yaparız. Az sayıda benzer belge (tipik olarak üç) başka bir LLM'ye sağlanan "soruya" kullanıcı sorusuyla birlikte bağlam olarak eklenir ve daha sonra bu LLM, bilgi isteminde bağlam olarak sağlanan bilgileri kullanarak kullanıcı sorusuna bir yanıt üretir. RAG modelleri tarafından tanıtıldı Lewis ve ark. 2020'de parametrik belleğin önceden eğitilmiş bir seq2seq modeli olduğu ve parametrik olmayan belleğin Wikipedia'nın önceden eğitilmiş bir nöral alıcı ile erişilen yoğun bir vektör dizini olduğu bir model olarak. RAG tabanlı bir yaklaşımın genel yapısını anlamak için bkz. Amazon SageMaker JumpStart'ta temel modellerle Retrieval Augmented Generation kullanarak soru yanıtlama.
Bu gönderide, soru yanıtlama botu gibi kurumsal kullanıma hazır bir RAG uygulaması oluşturmak için tüm yapı taşlarını içeren adım adım bir kılavuz sunuyoruz. Farklı AWS hizmetlerinin, açık kaynaklı temel modellerin (FLAN-T5 XXL metin üretimi için ve GPT-j-6B yerleştirmeler için) ve aşağıdakiler gibi paketler Dil Zinciri tüm bileşenlerle arayüz oluşturmak için ve Akışlı bot ön ucunu oluşturmak için.
Bu çözümü oluşturmak için gereken tüm kaynakları desteklemek için bir AWS Cloud Formation şablonu sağlıyoruz. Daha sonra her şeyi birbirine bağlamak için LangChain'in nasıl kullanılacağını gösteriyoruz:
- Amazon SageMaker'da barındırılan LLM'lerle arayüz oluşturma.
- Bilgi bankası belgelerinin parçalanması.
- Belge yerleştirmelerini Amazon OpenSearch Service'e alma.
- Soru cevaplama görevinin uygulanması.
Açık kaynak modelleri ile değiştirmek için aynı mimariyi kullanabiliriz. Amazon Titanı modeller. Sonrasında Amazon Ana Kayası piyasaya sürüldüğünde, benzer üretken AI uygulamalarının Amazon Bedrock kullanılarak nasıl uygulanacağını gösteren bir takip gönderisi yayınlayacağız, bu yüzden bizi izlemeye devam edin.
Çözüme genel bakış
Biz kullanın SageMaker belgeleri bu gönderi için bilgi külliyatı olarak. Bu sitedeki HTML sayfalarını daha küçük örtüşen bilgi parçalarına dönüştürüyoruz (parçalar arasında bazı bağlam sürekliliğini korumak için) ve ardından bu parçaları gpt-j-6b modelini kullanarak yerleştirmelere dönüştürüyor ve yerleştirmeleri OpenSearch Hizmetinde saklıyoruz. RAG işlevini, tüm isteklerin Lambda'ya yönlendirilmesi için Amazon API Gateway ile bir AWS Lambda işlevi içinde uyguluyoruz. Streamlit'te, API Ağ Geçidi aracılığıyla işlevi çağıran bir sohbet robotu uygulaması uyguluyoruz ve işlev, OpenSearch Service dizininde kullanıcı sorusunun katıştırmaları için benzerlik araması yapıyor. Eşleşen belgeler (parçalar), Lambda işlevi tarafından bilgi istemine bağlam olarak eklenir ve ardından işlev, kullanıcı sorusuna bir yanıt oluşturmak için bir SageMaker uç noktası olarak dağıtılan flan-t5-xxl modelini kullanır. Bu gönderi için tüm kod şu adreste mevcuttur: GitHub repo.
Aşağıdaki şekil, önerilen çözümün üst düzey mimarisini temsil etmektedir.
Adım adım açıklama:
- Kullanıcı, Streamlit web uygulaması aracılığıyla bir soru sağlar.
- Streamlit uygulaması, API Ağ Geçidi uç noktası REST API'sini çağırır.
- API Ağ Geçidi, Lambda işlevini çağırır.
- İşlev, kullanıcı sorusunu yerleştirmelere dönüştürmek için SageMaker uç noktasını çağırır.
- İşlev, kullanıcı sorusuna benzer belgeleri bulmak için bir OpenSearch Hizmet API'sini çağırır.
- İşlev, kullanıcı sorgusu ve bağlam olarak "benzer belgeler" ile bir "istem" oluşturur ve SageMaker uç noktasından bir yanıt oluşturmasını ister.
- Yanıt, işlevden API Ağ Geçidine sağlanır.
- API Ağ Geçidi, Streamlit uygulamasına yanıt sağlar.
- Kullanıcı, yanıtı Streamlit uygulamasında görüntüleyebilir,
Mimari şemasında gösterildiği gibi, aşağıdaki AWS hizmetlerini kullanıyoruz:
Bu çözümde kullanılan açık kaynaklı paketler açısından, Dil Zinciri OpenSearch Hizmeti ve SageMaker ile arayüz oluşturmak için ve HızlıAPI Lambda'da REST API arayüzünü uygulamak için.
Bu gönderide sunulan çözümü kendi AWS hesabınızda başlatmak için iş akışı aşağıdaki gibidir:
- Hesabınızda bu gönderiyle sağlanan CloudFormation şablonunu çalıştırın. Bu, bu çözüm için gereken tüm gerekli altyapı kaynaklarını oluşturacaktır:
- LLM'ler için SageMaker uç noktaları
- OpenSearch Hizmet kümesi
- API ağ geçidi
- Lambda işlevi
- SageMaker Defter
- IAM rolleri
- Çalıştır data_ingestion_to_vectordb.ipynb veri almak için SageMaker not defterindeki not defteri SageMaker belgeleri bir OpenSearch Hizmet dizinine.
- Streamlit uygulamasını Studio'daki bir terminalde çalıştırın ve uygulamanın URL'sini yeni bir tarayıcı sekmesinde açın.
- Streamlit uygulaması tarafından sağlanan sohbet arabirimi aracılığıyla SageMaker hakkındaki sorularınızı sorun ve LLM tarafından oluşturulan yanıtları görüntüleyin.
Bu adımlar aşağıdaki bölümlerde ayrıntılı olarak ele alınmıştır.
Önkoşullar
Bu gönderide sağlanan çözümü uygulamak için bir AWS hesabı ve LLM'ler, OpenSearch Hizmeti ve SageMaker ile aşinalık.
LLM'leri barındırmak için hızlandırılmış örneklere (GPU'lar) erişmemiz gerekiyor. Bu çözüm, ml.g5.12xlarge ve ml.g5.24xlarge'ın her bir örneğini kullanır; AWS hesabınızda bu örneklerin kullanılabilirliğini kontrol edebilir ve aşağıdaki ekran görüntüsünde gösterildiği gibi bu örnekleri bir Sevice Kota artırma isteği aracılığıyla gerektiği şekilde talep edebilirsiniz.
Çözüm yığınını oluşturmak için AWS Cloud Formation'ı kullanın
adlı bir SageMaker not defteri oluşturmak için AWS CloudFormation kullanıyoruz. aws-llm-apps-blog
ve adı verilen bir IAM rolü LLMAppsBlogIAMRole
. Seçin Yığını Başlat kaynakları dağıtmak istediğiniz Bölge için. Sağlamanız gereken OpenSearch Hizmeti parolası dışında, CloudFormation şablonunun ihtiyaç duyduğu tüm parametreler önceden doldurulmuş varsayılan değerlere sahiptir. OpenSearch Hizmeti kullanıcı adını ve şifresini not edin, bunları sonraki adımlarda kullanırız. Bu şablonun tamamlanması yaklaşık 15 dakika sürer.
AWS Bölgesi | Link |
---|---|
us-east-1 |
|
us-west-2 |
|
eu-west-1 |
|
ap-northeast-1 |
Yığın başarıyla oluşturulduktan sonra AWS CloudFormation konsolunda yığının Çıktılar sekmesine gidin ve şu değerleri not edin: OpenSearchDomainEndpoint
ve LLMAppAPIEndpoint
. Bunları sonraki adımlarda kullanırız.
Verileri OpenSearch Hizmetine alın
Verileri almak için aşağıdaki adımları tamamlayın:
- SageMaker konsolunda, Defterler Gezinti bölmesinde.
- Not defterini seçin
aws-llm-apps-blog
Ve seç JupyterLab'ı aç. - Klinik data_ingestion_to_vectordb.ipynb JupyterLab'da açmak için. Bu not defteri SageMaker belgeleri adlı bir OpenSearch Hizmet dizinine
llm_apps_workshop_embeddings
. - Not defteri açıkken, Çalıştır menüsünde Tüm Hücreleri Çalıştır bu not defterindeki kodu çalıştırmak için. Bu, veri kümesini yerel olarak not defterine indirecek ve ardından onu OpenSearch Service dizinine alacaktır. Bu not defterinin çalışması yaklaşık 20 dakika sürer. Not defteri ayrıca verileri, adı verilen başka bir vektör veritabanına alır. FAİS. FAISS dizin dosyaları yerel olarak kaydedilir ve Amazon Simple Storage Service'e (S3) yüklenir, böylece alternatif bir vektör veritabanı kullanımının bir örneği olarak Lambda işlevi tarafından isteğe bağlı olarak kullanılabilirler.
Artık belgeleri parçalara ayırmaya hazırız, bunlar daha sonra OpenSearch'e alınmak üzere gömmelere dönüştürülebilir. LangChain'i kullanıyoruz RecursiveCharacterTextSplitter
belgeleri parçalamak ve ardından LangChain'i kullanmak için sınıf SagemakerEndpointEmbeddingsJumpStart
gpt-j-6b LLM'yi kullanarak bu parçaları gömmelere dönüştürmek için sınıf. Yerleştirmeleri LangChain aracılığıyla OpenSearch Hizmetinde depolarız OpenSearchVectorSearch
sınıf. Bu kodu, SageMaker Processing Job'a özel bir kap aracılığıyla sağlanan Python betiklerinde paketliyoruz. Bkz. data_ingestion_to_vectordb.ipynb tam kod için not defteri.
- Özel bir kapsayıcı oluşturun, ardından içine LangChain ve opensearch-py Python paketlerini kurun.
- Bu kapsayıcı görüntüsünü Amazon Elastic Container Registry'ye (ECR) yükleyin.
- Birden çok düğümde çalışacak bir SageMaker İşleme işi oluşturmak için SageMaker ScriptProcessor sınıfını kullanıyoruz.
- Amazon S3'te bulunan veri dosyaları, SageMaker İşleme iş eşgörünümlerinde otomatik olarak dağıtılır.
s3_data_distribution_type='ShardedByS3Key'
bir parçası olarakProcessingInput
işleme işine sağlanır. - Her düğüm, dosyaların bir alt kümesini işler ve bu, verileri OpenSearch Hizmetine almak için gereken toplam süreyi azaltır.
- Her düğüm ayrıca dosya işlemeyi dahili olarak paralel hale getirmek için Python çoklu işlemeyi kullanır. Öyleyse, Biri bireysel düğümlerin işi (dosyaları) kendi aralarında dağıttığı küme düzeyinde, diğeri ise bir düğümdeki dosyaların aynı zamanda düğümde çalışan birden fazla işlem arasında bölündüğü düğüm düzeyinde olmak üzere iki paralelleştirme düzeyi vardır..
- Amazon S3'te bulunan veri dosyaları, SageMaker İşleme iş eşgörünümlerinde otomatik olarak dağıtılır.
- Tüm hücreler hatasız çalıştıktan sonra not defterini kapatın. Verileriniz artık OpenSearch Hizmetinde mevcuttur. Belge sayısını almak için tarayıcınızın adres çubuğuna aşağıdaki URL'yi girin.
llm_apps_workshop_embeddings
dizin. Aşağıdaki URL'deki CloudFormation yığın çıktılarından OpenSearch Service etki alanı uç noktasını kullanın. Sizden OpenSearch Hizmeti kullanıcı adı ve şifresi istenecektir, bunlar CloudFormations yığınından temin edilebilir.
Tarayıcı penceresi aşağıdakine benzer bir çıktı göstermelidir. Bu çıktı, 5,667 belgenin sisteme alındığını gösterir. llm_apps_workshop_embeddings index. {"count":5667,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0}}
Streamlit uygulamasını Studio'da çalıştırın
Artık soru yanıtlama botumuz için Streamlit web uygulamasını çalıştırmaya hazırız. Bu uygulama, kullanıcının bir soru sormasına izin verir ve ardından yanıtı /llm/rag
Lambda işlevi tarafından sağlanan REST API uç noktası.
Studio, Streamlit web uygulamasını barındırmak için uygun bir platform sağlar. Aşağıdaki adımlarda, Streamlit uygulamasının Studio'da nasıl çalıştırılacağı açıklanmaktadır. Alternatif olarak, uygulamayı dizüstü bilgisayarınızda çalıştırmak için aynı prosedürü de uygulayabilirsiniz.
- Studio'yu açın ve ardından yeni bir terminal açın.
- Bu gönderi için kod deposunu klonlamak ve uygulamanın ihtiyaç duyduğu Python paketlerini yüklemek için terminalde aşağıdaki komutları çalıştırın:
- CloudFormation yığın çıktısında bulunan API Ağ Geçidi uç nokta URL'sinin webapp.py dosyasında ayarlanması gerekir. Bu, aşağıdakileri çalıştırarak yapılır
sed
emretmek. değiştirinreplace-with-LLMAppAPIEndpoint-value-from-cloudformation-stack-outputs
değeri ile kabuk komutlarındaLLMAppAPIEndpoint
alanını CloudFormation yığın çıktısından alın ve ardından Studio'da bir Streamlit uygulaması başlatmak için aşağıdaki komutları çalıştırın. - Uygulama başarılı bir şekilde çalıştığında aşağıdakine benzer bir çıktı göreceksiniz (Göreceğiniz IP adresleri bu örnekte gösterilenlerden farklı olacaktır). Çıkıştan bağlantı noktası numarasını (tipik olarak 8501) not edin sonraki adımda uygulamanın URL'sinin bir parçası olarak kullanmak için.
- Uygulamaya, Studio alan URL'nize benzer bir URL kullanarak yeni bir tarayıcı sekmesinden erişebilirsiniz. Örneğin, Studio URL'niz
https://d-randomidentifier.studio.us-east-1.sagemaker.aws/jupyter/default/lab?
ardından Streamlit uygulamanızın URL'sihttps://d-randomidentifier.studio.us-east-1.sagemaker.aws/jupyter/default/proxy/8501/webapp
(dikkat edinlab
ile değiştirildiproxy/8501/webapp
). Önceki adımda belirtilen bağlantı noktası numarası 8501'den farklıysa, Streamlit uygulaması için URL'de 8501 yerine bunu kullanın.
Aşağıdaki ekran görüntüsü, uygulamayı birkaç kullanıcı sorusuyla birlikte göstermektedir.
Lambda işlevindeki RAG uygulamasına daha yakından bakış
Artık uygulamayı uçtan uca çalıştırdığımıza göre, Lambda işlevine daha yakından bakalım. Lambda işlevi kullanır HızlıAPI RAG için REST API'sini uygulamak ve Mangum API'yi işlevde paketlediğimiz ve dağıttığımız bir işleyici ile sarmak için paket. İşlevi çağırmak ve yönlendirmeyi uygulamamız içinde dahili olarak işlemek için gelen tüm istekleri yönlendirmek için API Ağ Geçidini kullanırız.
Aşağıdaki kod parçacığı, kullanıcı sorusuna benzer belgeleri OpenSearch dizininde nasıl bulduğumuzu ve ardından soru ile benzer belgeleri birleştirerek nasıl bir bilgi istemi oluşturduğumuzu gösterir. Bu bilgi istemi daha sonra kullanıcı sorusuna bir yanıt oluşturmak için LLM'ye sağlanır.
Temizlemek
Gelecekte masraflara maruz kalmamak için kaynakları silin. Aşağıdaki ekran görüntüsünde gösterildiği gibi CloudFormation yığınını silerek bunu yapabilirsiniz.
Sonuç
Bu gönderide, AWS hizmeti, açık kaynak LLM'ler ve açık kaynak Python paketlerinin bir kombinasyonunu kullanarak kurumsal kullanıma hazır bir RAG çözümünün nasıl oluşturulacağını gösterdik.
Keşfederek daha fazlasını öğrenmenizi öneririz. HızlıBaşlangıç, Amazon Titanı modelleri, Amazon Ana Kayası, ve Açık Arama Hizmeti ve bu gönderide sağlanan örnek uygulamayı ve işinizle ilgili bir veri kümesini kullanarak bir çözüm oluşturmak. Sorularınız veya önerileriniz varsa, yorum bırakın.
Yazarlar Hakkında
Amit Arora Amazon Web Services'ta Yapay Zeka ve Makine Öğrenimi Uzmanı Mimardır ve kurumsal müşterilerin yeniliklerini hızla ölçeklendirmek için bulut tabanlı makine öğrenimi hizmetlerini kullanmalarına yardımcı olur. Ayrıca Washington DC'deki Georgetown Üniversitesi'nde MS veri bilimi ve analitik programında yardımcı öğretim görevlisidir.
Doktor Xin Huang Amazon SageMaker JumpStart ve Amazon SageMaker yerleşik algoritmaları için Kıdemli Uygulamalı Bilim İnsanıdır. Ölçeklenebilir makine öğrenimi algoritmaları geliştirmeye odaklanıyor. Araştırma ilgi alanları, doğal dil işleme, tablo verileri üzerinde açıklanabilir derin öğrenme ve parametrik olmayan uzay-zaman kümelemenin sağlam analizi alanındadır. ACL, ICDM, KDD konferanslarında ve Royal Statistical Society: Series A'da birçok makale yayınladı.
Navneet Tuteja Amazon Web Services'ta Veri Uzmanıdır. Navneet, AWS'ye katılmadan önce veri mimarilerini modernize etmek ve kapsamlı AI/ML çözümleri uygulamak isteyen kuruluşlar için kolaylaştırıcı olarak çalıştı. Thapar Üniversitesi'nden mühendislik derecesine ve Texas A&M Üniversitesi'nden istatistik alanında yüksek lisans derecesine sahiptir.
- SEO Destekli İçerik ve Halkla İlişkiler Dağıtımı. Bugün Gücünüzü Artırın.
- PlatoAiStream. Web3 Veri Zekası. Bilgi Genişletildi. Buradan Erişin.
- Adryenn Ashley ile Geleceği Basmak. Buradan Erişin.
- PREIPO® ile PRE-IPO Şirketlerinde Hisse Al ve Sat. Buradan Erişin.
- Kaynak: https://aws.amazon.com/blogs/machine-learning/build-a-powerful-question-answering-bot-with-amazon-sagemaker-amazon-opensearch-service-streamlit-and-langchain/