Bu yazıda, Büyük Dil Modeli ( LLM ) eğitimi ve Alma Artırılmış Üretim ( RAG ) gibi kritik aşağı yönlü görevlerin merkezinde yer alan belge metni ayıklamak için MinIO Bucket Notifications ve Apache Tika'yı kullanacağız.
Daha sonra kullanabileceğim bir metin veri kümesi oluşturmak istediğimi varsayalım.
Apache Tika'yı çalışır hale getirmenin en basit yolu,
Bu örnekte, varsayılan bağlantı noktası olan 9998'i kullanmasına ve göstermesine izin veriyorum.
docker pull apache/tika:<version> docker run -d -p 127.0.0.1:9998:9998 apache/tika:<version>
Tika konteynerinin çalıştığını ve 9998 numaralı bağlantı noktasına sahip olduğunu doğrulamak için docker ps
veya Docker Desktop'ı kullanın.
Artık Tika çalıştığına göre, yeni nesneler için Tika çıkarma isteklerini programlı olarak yapabilecek bir sunucu oluşturmamız gerekiyor. Bunu takiben, bu sunucuyu yeni nesnelerin (başka bir deyişle bir grup için PUT olayları) gelişi konusunda uyarmak için bir MinIO kümesinde web kancaları yapılandırmamız gerekir. Adım adım üzerinden geçelim.
İşleri nispeten basit tutmak ve bu yaklaşımın taşınabilirliğini vurgulamak için metin çıkarma sunucusu popüler Flask çerçevesi kullanılarak Python'da oluşturulacak. İşte sunucunun kodu (aşağıdaki MinIO Blog Kaynakları deposunda da mevcuttur)
""" This is a simple Flask text extraction server that functions as a webhook service endpoint for PUT events in a MinIO bucket. Apache Tika is used to extract the text from the new objects. """ from flask import Flask, request, abort, make_response import io import logging from tika import parser from minio import Minio # Make sure the following are populated with your MinIO details # (Best practice is to use environment variables!) MINIO_ENDPOINT = '' MINIO_ACCESS_KEY = '' MINIO_SECRET_KEY = '' # This depends on how you are deploying Tika (and this server): TIKA_SERVER_URL = 'http://localhost:9998/tika' client = Minio( MINIO_ENDPOINT, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY, ) logger = logging.getLogger(__name__) app = Flask(__name__) @app.route('/', methods=['POST']) async def text_extraction_webhook(): """ This endpoint will be called when a new object is placed in the bucket """ if request.method == 'POST': # Get the request event from the 'POST' call event = request.json bucket = event['Records'][0]['s3']['bucket']['name'] obj_name = event['Records'][0]['s3']['object']['key'] obj_response = client.get_object(bucket, obj_name) obj_bytes = obj_response.read() file_like = io.BytesIO(obj_bytes) parsed_file = parser.from_buffer(file_like.read(), serverEndpoint=TIKA_SERVER_URL) text = parsed_file["content"] metadata = parsed_file["metadata"] logger.info(text) result = { "text": text, "metadata": metadata } resp = make_response(result, 200) return resp else: abort(400) if __name__ == '__main__': app.run()
Çıkarma sunucusunu başlatalım:
Flask uygulamasının çalıştığı ana bilgisayar adını ve bağlantı noktasını not edin.
Artık geriye kalan tek şey, MinIO sunucusundaki paket için web kancasını yapılandırmaktır; böylece paketteki herhangi bir PUT olayı (başka bir deyişle, eklenen yeni nesneler), çıkarma uç noktasına bir çağrıyı tetikleyecektir. mc
aracıyla bunu sadece birkaç komutla yapabiliriz.
Öncelikle MinIO sunucunuza bir web kancasını etkinleştirdiğinizi ve çağrılacak ilgili uç noktayı işaret etmek için birkaç ortam değişkeni ayarlamamız gerekiyor. <FONKSİYON ADI> kısmını seçtiğiniz bir fonksiyon adıyla değiştirin. Basit olması açısından 'çıkarma' yöntemini tercih ettim. Ayrıca uç nokta ortam değişkeninin çıkarım sunucunuz için doğru ana makineye ve bağlantı noktasına ayarlandığından emin olun. Bu durumda http://localhost:5000 Flask uygulamamızın çalıştığı yerdir.
export MINIO_NOTIFY_WEBHOOK_ENABLE_<YOURFUNCTIONNAME>=on export MINIO_NOTIFY_WEBHOOK_ENDPOINT_<YOURFUNCTIONNAME>=http://localhost:5000
Bu ortam değişkenlerini ayarladıktan sonra,mc
de kullanacağız, bu yüzden ona sahip olduğunuzdan emin olun.
Daha sonra paketimiz için etkinlik bildirimini ve hakkında bilgilendirilmek istediğimiz etkinlik türünü yapılandıralım. Bu projenin amaçları doğrultusunda ' çıkarma ' olarak da adlandırılan yepyeni bir kova oluşturdum. Bunu da yapabilirsinmc
mc event add ALIAS/BUCKET arn:minio:sqs::<YOURFUNCTIONNAME>:webhook --event put
Son olarak, bu komutu çalıştırdığınızda s3:ObjectCreated:*
çıktısının alınıp alınmadığını doğrulayarak paket bildirimleri için doğru olay türünü yapılandırıp yapılandırmadığınızı kontrol edebilirsiniz:
mc event ls ALIAS/BUCKET arn:minio:sqs::<YOURFUNCTIONNAME>:webhook
Paket etkinliklerini bir web kancasında yayınlama hakkında daha fazla bilgi edinmek istiyorsanız şuraya göz atın:
İşte metni çıkarmak istediğim bir belge. Bu bir
Bu PDF'yi MinIO Konsolunu kullanarak ' çıkarma ' kovama koydum.
Bu PUT olayı, daha sonra çıkarma sunucusu uç noktasına yayınlanacak bir paket bildirimini tetikler. Buna göre metin Tika tarafından çıkartılarak konsola yazdırılır.
Şimdilik yalnızca çıkarılan metnin çıktısını alıyor olsak da, bu metin, The Premise'da ima edildiği gibi, birçok alt görev için kullanılmış olabilir. Örneğin:
LLM ince ayarı için veri kümesi oluşturma : Çeşitli dosya formatlarında (örn. PDF, DOCX, PPTX, Markdown, vb.) bulunan kurumsal belgeler koleksiyonu üzerinde büyük bir dil modeline ince ayar yapmak istediğinizi düşünün. Bu göreve yönelik LLM dostu metin veri kümesini oluşturmak için tüm bu belgeleri benzer bir web kancasıyla yapılandırılmış bir MinIO kümesinde toplayabilir ve her belge için çıkarılan metni ince ayar/eğitim kümesinin bir veri çerçevesine aktarabilirsiniz. Ayrıca veri kümenizin kaynak dosyalarının MinIO'da bulunmasıyla veri kümelerinizin kompozisyonunu yönetmek, denetlemek ve takip etmek çok daha kolay hale gelir.
Alma Artırılmış Üretim : RAG, LLM uygulamalarının hassas bağlamdan yararlanabilmesinin ve halüsinasyonu önleyebilmesinin bir yoludur. Bu yaklaşımın merkezi bir yönü, belgelerinizin metninin çıkartılıp vektörlere gömülebilmesini ve böylece anlamsal aramanın mümkün kılınmasını sağlamaktır. Ayrıca, bu vektörlerin gerçek kaynak belgelerini bir nesne deposunda (MinIO gibi!) saklamak genellikle en iyi uygulamadır. Bu yazıda özetlenen yaklaşımla her ikisine de kolayca ulaşabilirsiniz. RAG ve faydaları hakkında daha fazla bilgi edinmek istiyorsanız buna göz atın
Yüksek Lisans Başvurusu : Yeni saklanan bir belgeden metni anında çıkarmanın programlı bir yolu ile, özellikle bir Yüksek Lisans'tan faydalanabiliyorsanız, olanaklar sonsuzdur. Anahtar kelime tespitini (örneğin, İstem: "Hangi hisse senedi göstergelerinden bahsediliyor?"), içerik değerlendirmesini (örneğin, İstem: "Değerlendirme anahtarına göre, bu makale gönderimi hangi puanı almalı?") veya hemen hemen her türlü metin tabanlı analizi düşünün. (örn. İstem: "Bu günlük çıktısına göre ilk hata ne zaman oluştu?").
Bu görevler için Bucket Notifications'ın kullanımının ötesinde MinIO, Powerpoint'ler, görüntüler veya kod parçacıkları olsun, her tür ve sayıda nesneye birinci sınıf hata toleransı ve performans sağlayacak şekilde tasarlanmıştır.
Herhangi bir sorunuz varsa bize katılın