paint-brush
डेटा-संचालित एआई ऐप्स कैसे विकसित करें: डेटाबेस से सीधे एआई सेवाएं बनाने के लिए एक गाइडद्वारा@paulparkinson
1,802 रीडिंग
1,802 रीडिंग

डेटा-संचालित एआई ऐप्स कैसे विकसित करें: डेटाबेस से सीधे एआई सेवाएं बनाने के लिए एक गाइड

द्वारा Paul Parkinson9m2024/01/07
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

यह ब्लॉग डेटा-संचालित एआई एप्लिकेशन आर्किटेक्चर के लिए एक अनुकूलित दृष्टिकोण का वर्णन करता है जहां एआई कॉल सीधे ओरेकल वेक्टर डेटाबेस से की जाती हैं।
featured image - डेटा-संचालित एआई ऐप्स कैसे विकसित करें: डेटाबेस से सीधे एआई सेवाएं बनाने के लिए एक गाइड
Paul Parkinson HackerNoon profile picture
0-item

जैसे-जैसे एआई सेवाएं और उनके द्वारा उपभोग और निर्मित किया जाने वाला डेटा विभिन्न अनुप्रयोगों और प्रक्रियाओं में अधिक महत्वपूर्ण और प्रचलित होता जाता है, वैसे-वैसे वे प्लेटफ़ॉर्म और आर्किटेक्चर भी, जिन पर वे निर्मित होते हैं। हमेशा की तरह, कोई "एक आकार सभी के लिए उपयुक्त" नहीं है, हालांकि, जो यहां संक्षेप में प्रस्तुत किया गया है वह ऐसे डेटा-संचालित एआई एप्लिकेशन आर्किटेक्चर के लिए एक अनुकूलित दृष्टिकोण है।


उल्लिखित सभी स्रोत कोड और बहुत कुछ यहां पाया जा सकता है, और एक निःशुल्क "ओरेकल एआई और डेटाबेस सेवाओं के साथ विकास: जनरल, विजन, भाषण, भाषा और ओएमएल" कार्यशाला (जहां सभी उपयोग के मामले संयुक्त राष्ट्र के 17 पर आधारित हैं) सतत विकास लक्ष्य) के और भी कई उदाहरण यहां देखे जा सकते हैं।


अक्सर, किसी दिए गए एआई ऐप में कई नेटवर्क कॉल किए जाने चाहिए, जिसमें एआई सेवाओं के लिए कॉल के साथ-साथ सामग्री (चाहे वह पाठ, ऑडियो, चित्र, वीडियो इत्यादि हो) को पुनः प्राप्त करने और जारी रखने के लिए कॉल शामिल हैं, जो कि इनपुट है या आउटपुट. इसके बाद निरंतर जानकारी को अक्सर संसाधित किया जाता है और आगे का विश्लेषण किया जाता है और प्रतिक्रिया में अतिरिक्त कॉल, एआई या अन्यथा की जाती हैं।


Oracle डेटाबेस अन्य सेवाओं, फिर से AI और अन्यथा, कॉल करने की क्षमता प्रदान करता है, चाहे वे Oracle क्लाउड के भीतर हों या बाहरी।


जब कॉल डेटाबेस से ही की जाती है, तो यह विभिन्न लाभों के साथ एक अनुकूलित आर्किटेक्चर प्रदान करता है जिसमें शामिल हैं:


  1. नेटवर्क कॉल कम हो गईं, जिससे विलंबता कम हो गई।


  2. नेटवर्क कॉल कम हो गईं, जिससे विश्वसनीयता बढ़ गई।


  3. एआई और अन्य डेटा पर ट्रांजेक्शनल (एसीआईडी) ऑपरेशन (और यहां तक कि TxEventQ का उपयोग करते समय मैसेजिंग भी) जो कि इडेम्पोटेंट/डुप्लिकेट प्रोसेसिंग लॉजिक आदि की आवश्यकता और संबंधित बर्बाद संसाधनों से बचते हैं।


  4. प्रसंस्करण अनुकूलन डेटा की स्थानीयता के कारण होता है चाहे वह डेटा सीधे डेटाबेस में संग्रहीत हो या किसी ऑब्जेक्ट स्टोर या अन्य स्रोत में। ऐसा इसलिए है क्योंकि Oracle डेटाबेस अन्यथा डंब ऑब्जेक्ट स्टोरेज बकेट के लिए एक मजबूत कार्यात्मक फ्रंटएंड प्रदान करता है, और डेटाबेस ऑब्जेक्ट स्टोर और अन्य डेटा स्रोतों में डेटा को सिंक करने या इष्टतम तरीके से संचालित करने के लिए कई विकल्प प्रदान करता है।


  5. एक सामान्य प्रमाणीकरण तंत्र और एक प्रसिद्ध मजबूत डेटाबेस और क्लाउड सुरक्षा बुनियादी ढांचे के पुन: उपयोग के कारण बढ़ी हुई सुरक्षा।


  6. केंद्रीय स्थान से कॉल किए जाने के कारण समग्र कॉन्फ़िगरेशन कम हो गया। डेटाबेस में प्रवेश बिंदु को एक क्लिक के साथ रेस्ट एंडपॉइंट (ओआरडीएस का उपयोग करके) के रूप में उजागर किया जा सकता है, और निश्चित रूप से, डेटाबेस तक पहुंचने के लिए विभिन्न भाषाओं में ड्राइवरों का भी उपयोग किया जा सकता है।


  7. वेक्टर डेटाबेस के लाभ. यह विषय अपने आप में एक ब्लॉग है, और इसे मैं फॉलो-ऑन के रूप में जारी करूंगा, विशेष रूप से ओरेकल के पास है और वह इस क्षेत्र में कई शक्तिशाली सुविधाएं जोड़ रहा है।


  8. ओरेकल डेटाबेस मशीन लर्निंग। विभिन्न AI सेवाओं के अलावा, Oracle डेटाबेस में कई वर्षों से एक मशीन-लर्निंग इंजन मौजूद है। ओएमएल एमएल जीवनचक्र को सुव्यवस्थित करता है, 30 से अधिक इन-डेटाबेस एल्गोरिदम के साथ स्केलेबल एसक्यूएल, आर, पायथन, आरईएसटी, ऑटोएमएल और नो-कोड टूल की पेशकश करता है, जो डेटाबेस में सीधे डेटा को संसाधित करके डेटा सिंक्रनाइज़ेशन और सुरक्षा को बढ़ाता है।


  9. ओरेकल स्वायत्त डेटाबेस। एआई का चयन करें जो प्राकृतिक भाषा का उपयोग करके डेटा को क्वेरी करने और आपके डेटाबेस के लिए विशिष्ट एसक्यूएल उत्पन्न करने में सक्षम बनाता है।


  10. ओरेकल स्वायत्त डेटाबेस। एआई वेक्टर सर्च, जिसमें एक नया वेक्टर डेटा प्रकार, वेक्टर इंडेक्स और वेक्टर सर्च एसक्यूएल ऑपरेटर शामिल हैं, ओरेकल डेटाबेस को दस्तावेजों, छवियों और अन्य असंरचित डेटा की सिमेंटिक सामग्री को वैक्टर के रूप में संग्रहीत करने में सक्षम बनाता है, और तेजी से समानता क्वेरी चलाने के लिए इनका उपयोग करता है। .


    ये नई क्षमताएं आरएजी (रिट्रीवल ऑगमेंटेड जेनरेशन) का भी समर्थन करती हैं जो उच्च सटीकता प्रदान करती है और एलएलएम प्रशिक्षण डेटा में इसे शामिल करके निजी डेटा को उजागर करने से बचाती है।


फिर, कई अलग-अलग एआई एप्लिकेशन प्रवाह और आवश्यकताएं हैं, लेकिन दो दृष्टिकोणों की बुनियादी तुलना को निम्नलिखित तरीके से देखा जा सकता है:

कोड

डेटाबेस में कई अलग-अलग भाषाओं को चलाना संभव है, जिससे वहां विभिन्न एप्लिकेशन लॉजिक को संचालित करना संभव हो जाता है। इनमें जावा, जावास्क्रिप्ट और पीएल/एसक्यूएल शामिल हैं। पीएल/एसक्यूएल उदाहरण यहां दिए गए हैं, और उन्हें ओसीआई कंसोल में डेटाबेस क्रियाओं -> एसक्यूएल पेज से, एसक्यूएलसीएल कमांड लाइन टूल (जो ओसीआई क्लाउड शैल में पूर्व-स्थापित है या डाउनलोड किया जा सकता है) से निष्पादित किया जा सकता है। SQLडेवलपर, VS कोड (जहां Oracle के पास एक सुविधाजनक प्लगइन है), आदि।


एआई और अन्य सेवाओं के लिए कॉल करने के कुछ तरीके भी हैं। डेटाबेस के UTL_HTTP पैकेज का उपयोग करके या जावास्क्रिप्ट आदि से प्राप्त करके मानक रेस्ट कॉल एक दृष्टिकोण है। यदि एआई सेवाएं ओसीआई (ओरेकल क्लाउड) के भीतर चलती हैं, तो ओसीआई एसडीके, जो सभी प्रमुख भाषाओं के लिए लिखे गए हैं, का भी उपयोग किया जा सकता है।


मुझे सभी OCI सेवाओं कॉल के लिए DBMS_CLOUD.send_request पैकेज का उपयोग सबसे सरल और सबसे गतिशील दृष्टिकोण लगता है (उदाहरण के लिए, अधिक विशिष्ट OCI SDK कॉल जैसे DBMS_CLOUD_OCI_AIV_AI_SERVICE_VISION के बजाय)।


हम एक क्रेडेंशियल बनाकर शुरुआत करते हैं जिसे हमारे सभी क्लाउड सेवा कॉलों के लिए संदर्भित और पुन: उपयोग किया जा सकता है और इसमें बस आपके ओसीआई खाते/कॉन्फ़िगरेशन से जानकारी शामिल होती है।


 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;


इसके बाद, मुख्य प्रोग्राम/फ़ंक्शन को देखने से पहले, आइए जल्दी से उस तालिका पर नज़र डालें जिसमें हम एआई परिणामों को सहेजेंगे। ध्यान दें, इस मामले में, तालिका में एआई कॉल रिटर्न और टेक्स्ट दोनों से जेएसओएन के लिए कॉलम हैं। वह फ़ील्ड जो त्वरित संदर्भ, खोज आदि के लिए JSON में मुख्य फ़ील्ड से बनाई गई है।


फिर, तालिका संरचनाएं, SQL/रिलेशनल बनाम JSON का उपयोग, आदि सभी भिन्न हो सकते हैं, और फिर, यह Oracle बहुउद्देश्यीय डेटाबेस का एक बेहतरीन उदाहरण है जहां आप विभिन्न डेटा मॉडल और डेटा प्रकारों का उपयोग कर सकते हैं।


उदाहरण के लिए, Oracle डेटाबेस में JSON Duality फीचर जांचने लायक है क्योंकि यह SQL/रिलेशनल के साथ-साथ JSON और यहां तक कि MongoDB API का उपयोग करके समान डेटा तक पहुंचने की अनुमति देता है।

 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)); /


और अब, सरल फ़ंक्शन जो आर्किटेक्चर के दिल को टाइप करता है... यहां, हम अपने द्वारा बनाए गए क्रेडेंशियल और (एआई) सेवा ऑपरेशन एंडपॉइंट (ओरेकल विजन एआई सेवा का विश्लेषणइमेज ऑपरेशन) के यूआरएल के साथ DBMS_CLOUD.send_request पर एक कॉल देखते हैं इस मामले में)।


बॉडी के JSON पेलोड में उस सेवा की विशेषताएँ शामिल होती हैं जिनका हम उपयोग करना चाहते हैं और किसी भी अन्य कॉन्फिगरेशन के साथ-साथ ऑपरेशन के तर्क भी शामिल होते हैं, जो इस मामले में, एक छवि का ऑब्जेक्ट स्टोरेज स्थान (अन्य) शामिल हैं विकल्प छवि बाइट सरणी को सीधे/पेलोड के हिस्से के रूप में इनलाइन प्रदान करना होगा)।


फिर JSON परिणाम को प्रतिक्रिया से पुनर्प्राप्त किया जाता है, इसके कुछ तत्वों को सुविधा के लिए एक टेक्स्ट फ़ील्ड में पार्स किया जाता है, और JSON, टेक्स्ट इत्यादि को पहले बताए अनुसार कायम रखा जाता है।

 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; /


हम निम्नलिखित का उपयोग करके प्रोग्रामेटिक रूप से फ़ंक्शन को रेस्ट एंडपॉइंट के रूप में भी प्रदर्शित कर सकते हैं:

 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; /

एआई परिणामों का विश्लेषण और पाठ खोज

यह आर्किटेक्चर सभी एआई परिणामों के विश्लेषण और पाठ खोज को सुविधाजनक और कुशल बनाता है। यहां से अधिक प्रोसेसिंग और एनालिटिक्स हो सकता है। आइए तीन कथनों पर एक नज़र डालें जो हमें हमारे एआई परिणामों की उपयोग में आसान टेक्स्ट खोज प्रदान करेंगे।


  • सबसे पहले, हम अपनी aivision_results तालिका पर टेक्स्ट खोजों के लिए एक इंडेक्स बनाते हैं।


  • फिर, हम एक फ़ंक्शन बनाते हैं जो शक्तिशाली सम्‍मिलित कार्यक्षमता का उपयोग करके किसी दिए गए स्ट्रिंग की खोज करता है, या हम एकाधिक तालिकाओं को खोजने और परिणामों के रिकर्सर को वापस करने के लिए DBMS_SEARCH पैकेज का अतिरिक्त/वैकल्पिक रूप से उपयोग कर सकते हैं।


  • अंत में, हम फ़ंक्शन को रेस्ट एंडपॉइंट के रूप में उजागर करते हैं।


यह इतना आसान है।

 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; /

निष्कर्ष के तौर पर…

यह एक त्वरित ब्लॉग था जो डेटाबेस से सीधे एआई सेवाओं पर कॉल करके डेटा-संचालित एआई ऐप्स विकसित करने के लिए एक वास्तुशिल्प पैटर्न दिखा रहा था।


पढ़ने के लिए बहुत बहुत धन्यवाद, और कृपया मुझे अपने किसी भी प्रश्न या प्रतिक्रिया के बारे में बताएं।


यहाँ भी प्रकाशित किया गया