मैंने यह किया है! इसमें मुझे लगभग 100 घंटे लगे, लेकिन मैं चैटजीपीटी की मदद से एक वास्तविक ऐप लिखने और तैनात करने में सक्षम था।
तब से मैंने 100 से अधिक घंटे इसके रखरखाव और सुविधाओं को जोड़ने में बिताए हैं, इसलिए इसे एक अच्छे फुल-ब्लो पैशन प्रोजेक्ट में बदल दिया गया है।
प्रयोग का आधार था "क्या मैं, एक उत्पाद प्रबंधक के रूप में, जिसने लंबे समय से सक्रिय रूप से कोड नहीं लिखा है, चैटजीपीटी का उपयोग करके एक ऐप डिज़ाइन, निर्माण और तैनात कर सकता हूं?"
मेरे पास एक अच्छी नींव है, मैंने सीएस में बीएस किया है और प्रौद्योगिकी के विभिन्न पहलुओं (सिस्टम डिजाइन, विकास, डेवॉप्स, होस्टिंग) से जुड़ा हुआ हूं, लेकिन मैंने पिछले 10+ वर्षों से विकास पर हाथ नहीं डाला है।
मेरे पास उत्पाद की बहुत अच्छी समझ है, उत्पादों को पुनरावृत्तीय रूप से कैसे बनाया जाए और कार्यक्षमता की जांच कैसे की जाए, इसकी समझ में अनुवाद करने से मुझे लगता है कि इससे मदद मिली।
जैसा कि SW विकास में होता है, 80% से अधिक समय समस्या निवारण और डिबगिंग में चला गया।
चैटजीपीटी एपीआई के आसपास कुछ उपयोगी एक साथ रखने की मेरी खोज में, मैंने सोचा कि जीपीटी यात्रा योजना की समस्या से निपटने के लिए विशिष्ट रूप से योग्य है - जाने के लिए स्थानों, हिट करने के लिए रुचि के बिंदु, यात्रा कार्यक्रम आदि का पता लगाना। अभी बहुत सारे निर्णय लेने हैं यात्रा के दौरान बनाया गया और अद्वितीय प्राथमिकताओं या परिस्थितियों के आधार पर आपके लिए यह सब एक साथ लाने वाला कोई ऐसा काम है जिसके बारे में मैंने सोचा कि यह मूल्यवान होगा।
मैंने इस पर लगभग 6 सप्ताह की रातें और कुछ सप्ताहांत बिताए, शायद कुल मिलाकर 100 घंटे। मेरे पास चैटजीपीटी+ खाता था, जिससे मुझे बॉट तक पहुंचने और जीपीटी4 तक पहुंच में बेहतर स्थिरता मिली।
इस प्रक्रिया के माध्यम से मेरे निष्कर्ष इस प्रकार थे:
चैटजीपीटी ने मुझे काम के लिए सही टूल चुनने में मदद की (सिंगल-पेज ऐप के लिए Vue.js फ्रेमवर्क) और पुनरावृत्तियों में कोड को क्रैंक करने में। मैं निश्चित रूप से इसके बिना यह नहीं कर पाता। ऐसा कहने के साथ, निश्चित रूप से जटिलताएँ थीं:
चैटजीपीटी यूआई जो सीमाएं लगाती है (इनपुट और आउटपुट पर 4k टोकन और संदर्भ के 15k के आसपास) काफी प्रतिबंधात्मक हैं और आप अपने प्रश्नों में बहुत सारे विभाजन करते हैं। यह आदर्श से कम है और इसमें अतिरिक्त प्रयास की आवश्यकता है। मैंने सीएलआई के माध्यम से पहुंचने का प्रयास नहीं किया था - बस कहीं पढ़ा था कि यह समान सीमाएं नहीं लगाता है - जांचने लायक है।
"कोड को समझने" की गुणवत्ता असंगत रही है - कभी-कभी यह बेहतर होती है, और कभी-कभी यह बदतर होती है। मुझे यकीन नहीं है कि इसका इससे क्या लेना-देना है।
इसके साथ, मेरी सलाह है कि कोड को जल्दी से संरचित करना शुरू करें (कोड को छोटे कार्यों में तोड़ना) क्योंकि चैटजीपीटी आपके लिए यह स्वचालित रूप से नहीं करेगा, लेकिन यदि आप इसे पूछेंगे तो यह करेगा। यह भविष्य में समस्या निवारण को आसान बनाता है।
GPT4 3 घंटे में 25 क्वेरीज़ के बाद कट जाता है और आपको "डिफ़ॉल्ट" मॉडल पर स्विच कर देता है, जिसे मैं 3.5 मानता हूं - दिलचस्प बात यह है कि यह बहुत अच्छी तरह से पकड़ लेता है और मैं लगभग यह कहना चाहता हूं कि यह GPT4 से बेहतर है, लेकिन क्योंकि मैंने शुरुआत नहीं की थी 3.5 के साथ, यह सेब से सेब की तुलना नहीं है।
अद्यतन: सीमा हाल ही में 3 घंटे में 50 प्रश्नों तक बढ़ा दी गई है।
मैंने नए जमाने की आईडीई के लिए रिप्लिट का उपयोग किया। यह एक अच्छी अवधारणा है और संभवतः भविष्य है, खासकर यदि वे इसे एक सार्थक कोडेक्स/चैटजीपीटी एकीकरण के साथ जोड़ सकते हैं। वर्तमान में उनके पास जो एआई है वह उतना उपयोगी नहीं है क्योंकि यह प्रोजेक्ट से कोड का उपयोग नहीं करता है और इसके लिए सभी समान जोड़-तोड़ और आगे-पीछे की आवश्यकता होती है जो मैं चैटजीपीटी के साथ कर रहा था। हालाँकि, मुझे वास्तव में पसंद आया कि रेप्लिट स्रोत नियंत्रण के लिए जीथब के साथ कैसे एकीकृत हो रहा है, और यह कैसे स्टेजिंग का ख्याल रखता है।
मैंने क्लाउडफ़ेयर के साथ तैनाती की क्योंकि मैं क्लाउड नेटिव के रूप में तैनात करना चाहता था। मैंने यूआई के लिए सीएफ पेज और बैकएंड (एपीआई गेटवे) के लिए वर्कर्स का उपयोग किया। मुझे यह पसंद आया कि सीआईसीडी के लिए जीथब के साथ पेज कैसे एकीकृत हो रहे थे - यह वास्तव में अच्छा था - मूल रूप से ऐप मुख्य शाखा में किसी भी प्रतिबद्धता पर खुद को फिर से तैनात करेगा।
सामान्य तौर पर, सीएफ कमाल का है क्योंकि यह नेटवर्किंग के ढेर सारे दर्द को सरल बना देता है।
मैंने काफी समय बिताया है और प्रॉम्प्ट पर कई पुनरावृत्तियां की हैं, इसे दूर किया है और विशिष्टताओं को संबोधित करने का प्रयास किया है। प्रारंभिक निर्णय बिंदुओं में से एक यह था कि क्या चैटजीपीटी एपीआई एक टेक्स्ट सूची लौटाएगा जिसे मैं समझने और वर्गीकृत करने का प्रयास करूंगा या इसे JSON लौटाऊंगा जिसमें पहले से ही संरचना निर्मित है। टेक्स्ट डेटा को एक संरचना में व्याख्या करने की आवश्यकता की संभावना ने मुझे डरा दिया क्योंकि संरचनाएं अधिक से अधिक जटिल होती जा रही थीं क्योंकि मैंने चैटजीपीटी से अधिक से अधिक डेटा मांगा था (जैसा कि इस स्निपेट से पता चलता है)
इसके कारण, मैंने JSON के लिए ChatGPT का संकेत देने का निर्णय लिया है। हालाँकि, इसके अपने दुष्प्रभाव थे कि JSON हमेशा अच्छी तरह से संरचित नहीं होता था, या प्रॉम्प्ट में बहुत अधिक अस्पष्टता होती थी, जहाँ ChatGPT एक ऐसा परिणाम देता था जिसकी मुझे उम्मीद नहीं थी। मैं कहूंगा कि मैंने त्वरित फ़ाइन-ट्यूनिंग और JSON त्रुटि प्रबंधन के बीच लगभग 25% समय बिताया। यह काफी सीखने वाला अनुभव था. अंततः, यहाँ वह संकेत है जिसके साथ मैं समाप्त हुआ:
SYSTEM_PROMPT = `You are a helpful travel assistant. You perform the requests with diligence and make the best attempt to answer the questions, never refusing due to complexity etc. Reset the conversation if I mention a new location in my user prompt. Return the results in JSON format as an array of objects. Make sure JSON format is complete and valid and does not include unescaped special characters. Please avoid escaping double quotes and instead use single quotes or another method to prevent JSON parsing issues. Do not use "\n" newline symbols in the middle of element text. Each object in the array should have the following keys: - "title" - "description" - "airportCode" (for the destination airport) - "poi" (array of points of interest) - "lodging" (array of lodging options) - "itinerary" (array of objects, each representing a day) - "considerations" - "history" (history related to the destination) - "key_local_phrases" (array of common local phrases) - "cost" The "itinerary" key should contain an array of objects, each object representing a day with the key "activities", which is itself an array of objects. Each activity object should have the following keys: - "description" - "waypoint" (name of the location, not coordinates) - "cost" - "travelTime" - "travelOptions" If travel is involved within the itinerary, include "Travel To" as part of the daily activity and provide the travel time, travel options, and associated cost. Each step in the itinerary should also suggest representative local "food" to try. Focus on most interesting points of interest, lodging, and activities. Consider activities that are popular, affordable, and recommended by the travelers. Make sure you cover the entire duration of the trip or outing. If it says "week-long", it has to cover the entire week. It's OK to group multiple days or weeks together if it's a longer trip. If it doesn't give a timeframe, take a guess based on the nature of a trip. Considerations should include travel restrictions and visa requirements, typical weather, criminogenic conditions including which areas to avoid, recommendations on visit timing, parking situation, and ways to save on travel costs. Here is an example of the desired output format: [ { "title": "Sample Title", "description": "Sample Description", "airportCode": "XYZ", "poi": ["Sample POI1", "Sample POI2"], "lodging": ["Sample Lodging1", "Sample Lodging2"], "itinerary": [ { "day": "Sample Day 1-2 - City or Place", "location": "Wikipedia identifiable name of the place in city,_country or city,_state format", "activities": [ { "description": "Sample Activity1", "waypoint": "Sample Waypoint1 connected to the activity", "cost": "$100", "travelTime": "30 minutes", "travelOptions": "Taxi or Bus" }, { "description": "Sample Activity2", "waypoint": "Sample Waypoint2 connected to the activity", "cost": "$50", "travelTime": "1 hour", "travelOptions": "Ferry or Bus" } ], "food": ["Sample Food1 with short description", "Sample Food2 with short description"] }, { "day": "Sample Day 3 - City or Place", ... }, { "week": "Sample Week 2 - City or Place", ... } ], "considerations": "Sample considerations text", "history": "Sample history text", "key_local_phrases": ["Sample phrase 1 - translation", "Sample phrase 2 - translation"], "cost": "Sample total cost" } ]`;
ध्यान दें: इस लेखन के समय तक, OpenAI ने फाइन-ट्यूनिंग संवर्द्धन जारी किया था जो मुझे लगता है कि JSON संरचित डेटा रिटर्न को अधिक मजबूत और सुसंगत बनाने के लिए बहुत उपयोगी हो सकता है।
इस समय मेरी इच्छा सूची में सबसे बड़ी वस्तु देव पर्यावरण/एआई कोड जेन एकीकरण है। चीजों को आगे-पीछे चिपकाना, यह ध्यान में रखते हुए कि कोड संरचना में गड़बड़ी न हो (विशेषकर जब कोड आधार बड़ा हो जाता है) निश्चित रूप से बहुत कुछ अधूरा रह जाता है।
मुझे लगता है कि एआई कोड जेनरेशन में अगला बड़ा कदम स्मार्ट कोड संपादकों को एकीकृत करना है जो कोड को आंतरिक रूप से अनुभागों में पार्स करता है और उपयोगकर्ता को मैन्युअल रूप से ऐसा किए बिना मॉडल से प्रासंगिक इनपुट प्रदान और स्वीकार कर सकता है।
उसके बाद अगला कदम डिबगिंग उद्देश्यों के लिए ब्राउज़र के साथ एकीकृत करना होगा, अंततः एक बंद-लूप पुनरावृत्त डिबगिंग चक्र बनाना होगा।
यह काम करने के लिए एक अच्छा प्रोजेक्ट होगा!
नोट: मैं यह देखने के लिए उत्सुक हूं कि Google ने IDX प्रोजेक्ट के साथ क्या किया है - यह बस इतना ही हो सकता है।
कुल मिलाकर, न केवल मैं एक उपयोगी ऐप बनाने में सक्षम था (जो मैं सोचता हूं) बल्कि आधुनिक फ्रेमवर्क पर काम कर सका और सिंटैक्स और फ्रेमवर्क सीखने में डूबे बिना कुछ व्यावहारिक समय भी मिला, जो कि बिल्कुल वही है जो मैं चाहता था। मुझे लगता है कि यह एक बड़ी बात है और इससे कई अधिक लोगों के लिए सॉफ्टवेयर विकास का द्वार खुल गया है।
आप ऐप को VoyageAI.app पर पा सकते हैं। ऐप बिना किसी विज्ञापन और बिना किसी लॉगिन (इस प्रकार व्यक्तिगत डेटा का कोई उपयोग नहीं) के साथ उपयोग करने के लिए मुफ़्त है और रहेगा।