paint-brush
Veriye Dayalı Yapay Zeka Uygulamaları Nasıl Geliştirilir: Yapay Zeka Hizmetlerini Doğrudan Veritabanından Yapma Kılavuzuile@paulparkinson
1,801 okumalar
1,801 okumalar

Veriye Dayalı Yapay Zeka Uygulamaları Nasıl Geliştirilir: Yapay Zeka Hizmetlerini Doğrudan Veritabanından Yapma Kılavuzu

ile Paul Parkinson9m2024/01/07
Read on Terminal Reader

Çok uzun; Okumak

Bu blog, yapay zeka çağrılarının doğrudan Oracle vektör veritabanından yapıldığı veri odaklı yapay zeka uygulama mimarisi için optimize edilmiş bir yaklaşımı açıklamaktadır.
featured image - Veriye Dayalı Yapay Zeka Uygulamaları Nasıl Geliştirilir: Yapay Zeka Hizmetlerini Doğrudan Veritabanından Yapma Kılavuzu
Paul Parkinson HackerNoon profile picture
0-item

Yapay zeka hizmetleri ve bunların tükettiği ve oluşturduğu veriler çeşitli uygulama ve süreçlerde daha önemli ve yaygın hale geldikçe, bunların üzerine inşa edildikleri platformlar ve mimariler de aynı şekilde önem kazanıyor. Her zamanki gibi "herkese uyan tek bir çözüm" yoktur ancak burada kısaca sunulan şey, bu tür veri odaklı yapay zeka uygulama mimarilerine yönelik optimize edilmiş bir yaklaşımdır.


Bahsedilen tüm kaynak kodları ve daha fazlasını burada ve ücretsiz bir “Oracle AI ve Database Services ile Geliştirme: Gen, Vision, Speech, Language ve OML” çalıştayını (tüm kullanım senaryolarının BM'nin 17'sini temel aldığı) bulabilirsiniz. Sürdürülebilir Kalkınma Hedefleri) daha birçok örnek vererek burada bulabilirsiniz.


Çoğu zaman, belirli bir yapay zeka uygulamasında birden fazla ağ çağrısı yapılması gerekir; bu, yapay zeka hizmetlerine yapılan çağrıların yanı sıra girdi veya içerik olan içeriği (metin, ses, görüntü, video vb. olsun) almak ve sürdürmek için yapılan çağrıları da gerektirir. çıktı. Kalıcı bilgiler daha sonra sıklıkla işlenir ve daha fazla analiz edilir ve tepki olarak yapay zeka veya başka türlü ek çağrılar yapılır.


Oracle veritabanı, ister Oracle Bulutu içinde ister harici olsun, diğer hizmetlere, yine yapay zekaya ve diğer hizmetlere çağrı yapma yeteneği sağlar.


Çağrılar veritabanının kendisinden yapıldığında, aşağıdakiler de dahil olmak üzere çeşitli avantajlara sahip optimize edilmiş bir mimari sağlar:


  1. Ağ çağrılarının azaltılması, dolayısıyla gecikmenin azaltılması.


  2. Ağ çağrılarının azaltılması, dolayısıyla güvenilirliğin artırılması.


  3. Yapay zeka ve diğer veriler üzerinde işlemsel (ACID) işlemler (ve hatta TxEventQ kullanırken mesajlaşma), aynı güçte/yinelenen işleme mantığına vb. olan ihtiyacı ve buradaki ilgili boşa harcanan kaynakları ortadan kaldırır.


  4. İşleme optimizasyonu, verinin doğrudan veritabanında mı, bir nesne deposunda mı yoksa başka bir kaynakta mı saklandığına bakılmaksızın verinin bulunduğu yere bağlıdır. Bunun nedeni, Oracle veritabanının, normalde basit olan nesne depolama grupları için sağlam bir işlevsel ön uç sağlaması ve veritabanının, nesne deposunda ve diğer veri kaynaklarında bulunan verileri senkronize etmek veya bunlar üzerinde en iyi şekilde çalışmak için birçok seçenek sunmasıdır.


  5. Ortak kimlik doğrulama mekanizması ve sağlamlığıyla bilinen veritabanı ile bulut güvenlik altyapısının yeniden kullanılması sayesinde artırılmış güvenlik.


  6. Aramalar merkezi bir konumdan yapıldığından genel yapılandırma azaltıldı. Veritabanının giriş noktası, tek bir tıklamayla (ORDS kullanılarak) bir Dinlenme uç noktası olarak gösterilebilir ve tabii ki veritabanına erişmek için çeşitli dillerdeki sürücüler de kullanılabilir.


  7. Vektör veritabanı avantajları. Bu konu başlı başına bir blogdur ve özellikle Oracle'ın bu alanda birçok güçlü özelliğe sahip olması ve eklemesi nedeniyle bu konuyu devam olarak yayınlayacağım.


  8. Oracle Veritabanı Makine Öğrenimi. Çeşitli yapay zeka hizmetlerine ek olarak Oracle veritabanının kendisi de uzun yıllardan beri bir makine öğrenimi motoruna sahiptir. OML, 30'dan fazla veritabanı içi algoritmayla ölçeklenebilir SQL, R, Python, REST, AutoML ve kodsuz araçlar sunarak ML yaşam döngüsünü kolaylaştırır, verileri doğrudan veritabanında işleyerek veri senkronizasyonunu ve güvenliğini artırır.


  9. Oracle Kendi Kendini Yöneten Veritabanı. Verilerin doğal dil kullanılarak sorgulanmasına ve veritabanınıza özel SQL oluşturulmasına olanak tanıyan yapay zekayı seçin.


  10. Oracle Kendi Kendini Yöneten Veritabanı. Yeni bir vektör veri türü, vektör indeksleri ve vektör arama SQL operatörleri içeren AI Vektör Arama, Oracle Veritabanının belgelerin, görüntülerin ve diğer yapılandırılmamış verilerin anlamsal içeriğini vektörler olarak depolamasına ve bunları hızlı benzerlik sorguları çalıştırmak için kullanmasına olanak tanır .


    Bu yeni yetenekler aynı zamanda daha yüksek doğruluk sağlayan ve özel verileri LLM eğitim verilerine dahil ederek ifşa etme zorunluluğunu ortadan kaldıran RAG'yi (Geri Alma Artırılmış Üretim) de destekler.


Yine birçok farklı yapay zeka uygulama akışı ve gereksinimi vardır ancak iki yaklaşımın temel karşılaştırması şu şekilde görselleştirilebilir:

Kod

Veritabanında birden fazla farklı dilin çalıştırılması mümkün olup, burada çeşitli uygulama mantıklarının yürütülmesi mümkün olmaktadır. Bunlara Java, JavaScript ve PL/SQL dahildir. PL/SQL örnekleri burada verilmiştir ve bunlar OCI konsolundaki Veritabanı Eylemleri -> SQL sayfasından, SQLcl komut satırı aracından (OCI Cloud Shell'e önceden yüklenmiş veya indirilebilir) şu adresten yürütülebilir: SQLDeveloper, VS Code (Oracle'ın uygun bir eklentiye sahip olduğu yer) vb.


Yapay zekaya ve diğer hizmetlere çağrı yapmanın da birkaç yolu vardır. Veritabanının UTL_HTTP paketini veya JavaScript'ten getirmeyi vb. kullanarak standart Rest çağrıları bir yaklaşımdır. Yapay zeka hizmetleri OCI (Oracle Bulutu) içerisinde çalışıyorsa tüm önemli diller için yazılan OCI SDK'ları da kullanılabilir.


Tüm OCI hizmetleri çağrıları için DBMS_CLOUD.send_request paketinin kullanımının (örneğin, DBMS_CLOUD_OCI_AIV_AI_SERVICE_VISION gibi daha spesifik OCI SDK çağrıları yerine) en basit ve en dinamik yaklaşım olduğunu düşünüyorum.


Tüm bulut hizmeti çağrılarımız için referans alınabilecek ve yeniden kullanılabilecek ve yalnızca OCI hesabınızdaki/yapılandırmanızdaki bilgileri içeren bir kimlik bilgisi oluşturarak başlıyoruz.


 BEGIN dbms_cloud.create_credential ( credential_name => 'OCI_KEY_CRED', user_ocid => 'ocid1.user.oc1..[youruserocid]', tenancy_ocid => 'ocid1.tenancy.oc1..[yourtenancyocid]', private_key => '[yourprivatekey - you can read this from file or put the contents of your pem without header, footer, and line wraps]' fingerprint => '[7f:yourfingerprint]' ); END;


Daha sonra, ana programa/işleve bakmadan önce, AI sonuçlarını kaydedeceğimiz tabloya hızlıca bakalım. Bu durumda, tablonun hem AI çağrı dönüşünden gelen JSON hem de bir metin için sütunlara sahip olduğuna dikkat edin. Hızlı başvuru, aramalar vb. için JSON'daki önemli alanlardan oluşturulan alan.


Yine tablo yapıları, SQL/ilişkisel ve JSON kullanımı vb. hepsi farklılık gösterebilir ve yine bu, çeşitli veri modellerini ve veri türlerini kullanabileceğiniz Oracle çok amaçlı veritabanına harika bir örnektir.


Örneğin, Oracle veritabanındaki JSON Duality özelliği, aynı verilere SQL/ilişkisel, JSON ve hatta MongoDB API'leri kullanılarak erişilebilmesine olanak tanıdığı için göz atmaya değer.

 CREATE TABLE aivision_results (id RAW (16) NOT NULL, date_loaded TIMESTAMP WITH TIME ZONE, label varchar2(20), textfromai varchar2(32767), jsondata CLOB CONSTRAINT ensure_aivision_results_json CHECK (jsondata IS JSON)); /


Ve şimdi, mimarinin kalbini simgeleyen basit fonksiyon… Burada, oluşturduğumuz kimlik bilgileri ve (AI) hizmet operasyonu uç noktasının (Oracle Vision AI hizmetinin analyzeImage operasyonu) URL'sini içeren DBMS_CLOUD.send_request çağrısı görüyoruz. bu durumda).


Gövdenin JSON verisi, kullanmak istediğimiz hizmetin özellik(ler)inden ve diğer yapılandırmalardan ve ayrıca bu durumda bir görüntünün nesne depolama konumunu (başka bir) içeren işleme ilişkin argümanlardan oluşur. seçenek, görüntü bayt dizisini doğrudan/satır içi olarak yükün bir parçası olarak sağlamak olacaktır).


Daha sonra yanıttan JSON sonucu alınır, bunun belirli öğeleri kolaylık sağlamak amacıyla bir metin alanına ayrıştırılır ve JSON, metin vb. daha önce belirtildiği gibi kalıcı hale getirilir.

 CREATE OR REPLACE FUNCTION VISIONAI_TEXTDETECTION ( p_endpoint VARCHAR2, p_compartment_ocid VARCHAR2, p_namespaceName VARCHAR2, p_bucketName VARCHAR2, p_objectName VARCHAR2, p_featureType VARCHAR2, p_label VARCHAR2 ) RETURN VARCHAR2 IS resp DBMS_CLOUD_TYPES.resp; json_response CLOB; v_textfromai VARCHAR2(32767); BEGIN resp := DBMS_CLOUD.send_request( credential_name => 'OCI_KEY_CRED', uri => p_endpoint || '/20220125/actions/analyzeImage', method => 'POST', body => UTL_RAW.cast_to_raw( JSON_OBJECT( 'features' VALUE JSON_ARRAY( JSON_OBJECT('featureType' VALUE p_featureType) ), 'image' VALUE JSON_OBJECT( 'source' VALUE 'OBJECT_STORAGE', 'namespaceName' VALUE p_namespaceName, 'bucketName' VALUE p_bucketName, 'objectName' VALUE p_objectName ), 'compartmentId' VALUE p_compartment_ocid ) ) ); json_response := DBMS_CLOUD.get_response_text(resp); SELECT LISTAGG(text, ', ') WITHIN GROUP (ORDER BY ROWNUM) INTO v_textfromai FROM JSON_TABLE(json_response, '$.imageText.words[*]' COLUMNS ( text VARCHAR2(100) PATH '$.text' ) ); INSERT INTO aivision_results (id, date_loaded, label, textfromai, jsondata) VALUES (SYS_GUID(), SYSTIMESTAMP, p_label, v_textfromai, json_response); RETURN v_textfromai; EXCEPTION WHEN OTHERS THEN RAISE; END VISIONAI_TEXTDETECTION; /


Aşağıdakileri kullanarak işlevi programlı olarak bir Dinlenme uç noktası olarak da kullanıma sunabiliriz:

 BEGIN ORDS.ENABLE_OBJECT( P_ENABLED => TRUE, P_SCHEMA => 'AIUSER', P_OBJECT => 'VISIONAI_OBJECTDETECTION', P_OBJECT_TYPE => 'FUNCTION', P_OBJECT_ALIAS => 'VISIONAI_OBJECTDETECTION', P_AUTO_REST_AUTH => FALSE ); COMMIT; END; /

Yapay Zeka Sonuçlarının Analizi ve Metin Araması

Bu mimari aynı zamanda tüm AI sonuçlarının analizini ve metin aramasını kolay ve verimli hale getirir. Buradan daha fazla işlem ve analiz gerçekleştirilebilir. Yapay zeka sonuçlarımızın kullanımı kolay metin aramasını bize sağlayacak üç ifadeye bir göz atalım.


  • Öncelikle aivision_results tablomuzda metin aramaları için bir indeks oluşturuyoruz.


  • Daha sonra, güçlü içerme işlevini kullanarak belirli bir dizeyi arayan bir işlev yaratırız veya birden fazla tabloyu aramak ve sonuçların işaretçisini döndürmek için ek olarak/isteğe bağlı olarak DBMS_SEARCH paketini kullanabiliriz.


  • Son olarak, fonksiyonu bir Rest uç noktası olarak ortaya koyuyoruz.


Bu kadar basit.

 create index aivisionresultsindex on aivision_results(textfromai) indextype is ctxsys.context; /
 CREATE OR REPLACE FUNCTION VISIONAI_RESULTS_TEXT_SEARCH(p_sql IN VARCHAR2) RETURN SYS_REFCURSOR AS refcursor SYS_REFCURSOR; BEGIN OPEN refcursor FOR select textfromai from AIVISION_RESULTS where contains ( textfromai, p_sql ) > 0; RETURN refcursor; END VISIONAI_RESULTS_TEXT_SEARCH; /
 BEGIN ORDS.ENABLE_OBJECT( P_ENABLED => TRUE, P_SCHEMA => 'AIUSER', P_OBJECT => 'VISIONAI_RESULTS_TEXT_SEARCH', P_OBJECT_TYPE => 'FUNCTION', P_OBJECT_ALIAS => 'VISIONAI_RESULTS_TEXT_SEARCH', P_AUTO_REST_AUTH => FALSE ); COMMIT; END; /

Sonuç olarak…

Bu, yapay zeka hizmetlerine doğrudan veritabanından çağrılar yaparak veriye dayalı Yapay Zeka Uygulamaları geliştirmeye yönelik mimari modeli gösteren kısa bir blogdu.


Okuduğunuz için çok teşekkür ederim. Sorularınız veya geri bildirimleriniz varsa lütfen bana bildirin.


Burada da yayınlandı