TypeChat: चैट-आधारित AI प्लेटफ़ॉर्म
(microsoft.github.io)- मौजूदा ऐप्स में natural language input जोड़ते समय सबसे बड़ी कठिनाई उपयोगकर्ता के इरादे को ऐसे स्ट्रक्चर में बदलना है जिस पर software भरोसा कर सके, और TypeChat इस समस्या को TypeScript types के ज़रिए हल करने की कोशिश करने वाली एक लाइब्रेरी है
- LLM के मुक्त-रूप text responses को parse करना अस्थिर होता है, इसलिए TypeChat responses को JSON में लाने और schema validation जोड़ने का काम करता है, ताकि ऐप उसे प्रोसेस कर सकने वाले डेटा में बदल सके
- TypeScript types JSON संरचना को बहुत सटीक रूप से व्यक्त कर सकते हैं, और LLM ने training के दौरान इस फ़ॉर्मैट को बहुत देखा है, इसलिए यह response schema के रूप में उपयोग के लिए उपयुक्त है
- अगर response type से मेल नहीं खाता, तो TypeScript compiler errors को फिर से feedback के रूप में देकर उसे सुधारा जा सकता है, जिससे post-processing या user confirmation से पहले type safety बढ़ाई जा सकती है
- TypeChat को
npm install typechatसे install किया जा सकता है, यह MIT लाइसेंस वाला open source प्रोजेक्ट है, और OpenAI API व Azure OpenAI service integration भी देता है
natural language अनुरोधों को ऐप द्वारा प्रोसेस किए जा सकने वाले डेटा में बदलना
- नवीनतम large language models को chat assistants में जोड़ना आसान है, लेकिन मौजूदा app interfaces में natural language को भरोसेमंद तरीके से integrate करना एक अलग चुनौती है
- TypeChat का फ़ोकस उपयोगकर्ता अनुरोधों को ऐसे रूप में बदलने पर है जिन्हें ऐप प्रोसेस कर सके, और ऐसे कार्य संभव बनाना है जिन पर developers और users भरोसा कर सकें
- जारी की गई लाइब्रेरी codebase की type definitions का उपयोग करके structured AI responses प्राप्त करती है और type safety को लक्ष्य बनाती है
- install निम्न कमांड से किया जा सकता है
npm install typechat
natural language parsing के बजाय JSON और types का उपयोग
- LLM मूल रूप से अंग्रेज़ी जैसी natural language बातचीत के लिए tuned होते हैं, इसलिए prompt में “bullet list में जवाब दो” जैसे नियम डालने पर भी सामान्य software के लिए उसे स्थिर रूप से parse करना कठिन होता है
- अगर उससे JSON में जवाब माँगा जाए, तो आम तौर पर ऐसा response मिल सकता है जिसे ऐप अधिक आसानी से संभाल सके
- उदाहरण में “blueberry muffin” 1 और “grande latte” 1 का अनुरोध
itemsarray वाले JSON में बदला जाता है
- उदाहरण में “blueberry muffin” 1 और “grande latte” 1 का अनुरोध
- साधारण उदाहरण संरचना का संकेत देने में मदद करते हैं, लेकिन वे AI को क्या लौटाना है, इसे पर्याप्त रूप से परिभाषित नहीं करते और validation का मानदंड भी नहीं देते
response schema के रूप में TypeScript types का उपयोग
- TypeChat prompt में TypeScript types शामिल करता है, ताकि LLM को यह बताया जा सके कि उसे किस JSON संरचना में response लौटाना है
- उदाहरण schema का
Responsetype,items: Item[]शामिल करता है, औरItemमेंname,quantity, वैकल्पिकsize,notesfields होते हैं - TypeScript JSON का सटीक वर्णन करने के लिए उपयुक्त है, और LLM ने type definitions बहुत देखी हैं, इसलिए response format को guide करने में यह उपयोगी है
- अगर response type से मेल नहीं खाता, तो वैध TypeScript code के रूप में मौजूद type definition के आधार पर TypeScript compiler validation करता है
- compiler error feedback का उपयोग response को सुधारने के लिए किया जाता है, जिससे type-matching response पाने की प्रक्रिया अधिक मजबूत बनती है
TypeChat का उपयोग और उदाहरण
- TypeChat का उपयोग data schema तरीके से किया जा सकता है, जो user intent को structured response में बदलता है
- उदाहरण code उपयोगकर्ता इनपुट वाक्य के sentiment को
negative,neutral,positiveमें से एक के रूप में पहचानने वालाSentimentResponseinterface परिभाषित करता है createLanguageModel(process.env)से environment variables आधारित language model बनाया जाता है, फिर schema file पढ़करcreateJsonTranslator<SentimentResponse>से translator बनाया जाता है- अगर
translator.translate(request)सफल होता है, तोresponse.data.sentimentआउटपुट किया जाता है; असफल होने पर error message दिखाया जाता है - data schema के अलावा API schema का उपयोग करके बुनियादी प्रोग्राम भी बनाए जा सकते हैं
- उपयोग के तरीके docs और examples में देखे जा सकते हैं
open source और model neutrality
- TypeChat MIT लाइसेंस वाला open source प्रोजेक्ट है और GitHub पर उपलब्ध है
- सुविधा के लिए यह OpenAI API और Azure OpenAI service के लिए basic integration देता है
- इसका डिज़ाइन लक्ष्य model neutrality है, और यह ऐसे दृष्टिकोण को अपनाता है जिसे chat completion style API के साथ इस्तेमाल किया जा सके
- फिलहाल TypeChat उन models पर सबसे अच्छा काम करता है जिन्हें prose और code दोनों पर train किया गया है
- पैकेज npm पर उपलब्ध है, इसलिए इसे तुरंत आज़माया जा सकता है
2 टिप्पणियां
हाहा, खबर देखकर पोस्ट करने वाला था, लेकिन AI की रफ्तार का मुकाबला नहीं कर पा रहा हूँ
Hacker News की राय
मुझे ठीक से समझ नहीं आ रहा कि इसमें कौन-सा अतिरिक्त मूल्य है
LLM को भेजा जाने वाला मुख्य संदेश यहाँ है: https://github.com/microsoft/TypeChat/blob/main/src/typechat...
आखिरकार यह fixed prompt से structured data लौटाने जैसा दिखता है, जिसमें थोड़ी automation और vendor lock-in जोड़ दी गई है। ऐसी LLM libraries में से ज़्यादातर नीचे की API पर चढ़ाई गई कमजोर API जैसी लगती हैं; वही काम करने वाली script आसानी से बनाई जा सकती है, और model व user requirements बदलने पर वह ज़्यादा flexible रहती है
मसलन prompt बदलना हो या Python classes इस्तेमाल करनी हों, तो ऐसी library और API calls/text templates को user के ऊपर उठा देने वाले तरीके (https://github.com/hofstadter-io/hof/blob/_dev/flow/chat/llm...) के बीच काम की मात्रा में बड़ा फर्क है
https://github.com/microsoft/TypeChat/blob/main/src/typechat...
इसी idea पर प्रयोग करने के मेरे अनुभव में, दूसरी heuristic अपेक्षाकृत simple types—यानी गहराई से nested न होने वाले records और arrays, तथा type variables के सीमित उपयोग—में हैरान कर देने वाली तरह से अच्छी तरह काम करती है। LLM को अपेक्षाकृत simple type की value लौटाने के लिए prompt देना भर भी उपयोगी applications बनाने के लिए काफी हो सकता है, और इस library का मूल्य इस बात में है कि यह उस request pattern को खुद implement करने की जरूरत कम करती है और TypeScript codebase के साथ standard integration देती है
फिर भी लगता है कि libraries इस्तेमाल करने की दिशा सही है, इसलिए देख रहा हूँ कि कौन-सा approach पर्याप्त mature होगा
उदाहरण के लिए अगर किसी product पर 1000 free-text survey responses हैं, तो आप schema बना सकते हैं और हर एक पर
TypeChatचला कर उस free text का dataset पा सकते हैं। बेहद उपयोगी हैएक बात समझ नहीं आती
valid response आने की उम्मीद करना, आखिरी step में validator लगाकर गलत response detect करना, और फिर model से मनचाहे grammar में जवाब देने की विनती करने जैसी जटिल प्रक्रिया से क्यों गुजरना पड़ता है, यह समझ नहीं आता
अगर केवल requested format से match करने वाले tokens sample किए जाएँ, तो valid JSON grammar guarantee की जा सकती है। हर बार सबसे high score token को greedily चुनने के बजाय, requested format के अनुरूप tokens में से सबसे high score वाला चुनना चाहिए
Microsoft की Guidance पहले से ऐसा करती है: https://github.com/microsoft/guidance
लेकिन लगता है OpenAI सभी tokens के full scores expose नहीं करता, केवल top score tokens ही दिखाता है। अगर model local पर चलाएँ, तो Guidance इस्तेमाल करना आसान है, JSON हर बार सही रहेगा यह guarantee की जा सकती है, और generation भी तेज़ होती है—यह अजीब है
साथ ही, उस तरीके से TypeScript types की पूरी complexity capture करना मुश्किल लगती है
[0] https://www.snopes.com/fact-check/brown-out/
अगर model वास्तव में कोई दूसरा token डालना चाहता है और आप जबरदस्ती
{डलवाते हैं, तो उसके बाद generate होने वाले text की quality गिर भी सकती है। पक्का नहीं, बस विचार कर रहा हूँमैंने open source LLM को JSON parsing के लिए fine-tune किया था, और guided token sampling के बिना भी use case के हिसाब से 70B parameters overkill हो सकते हैं। काफी छोटे models पर भी अच्छे results देखे, और small model fine-tuning को guided token sampling के साथ जोड़ना दिलचस्प होगा
हालांकि बहुत general-purpose applications के लिए fine-tuning perfect नहीं हो सकती। training dataset में न सोचे गए inputs आएँ तो मुश्किल हो जाती है
बेशक web पर यह समझ में नहीं आता। mouse से कुछ products click करना कहीं आसान है
https://github.com/ggerganov/llama.cpp/pull/1773
मुझे लगता है कि मैं कुछ सोचता हूँ और Anders Hejlsberg उसे बना देते हैं
संरचित requests और responses 100% LLM का अगला evolution हैं। लोग पहले ही chatbots से ऊबने लगे हैं, और अगर text parsing और prompt की चिंता किए बिना किसी भी backend को plug in किया जा सके, तो यह कमाल होगा
TypeChat सही दिशा में लगता है। “इस JSON input को, अगर संभव हो, उपलब्ध actions में से किसी एक से match करो” जैसी एक अतिरिक्त layer की कल्पना की जा सकती है
मुझे bots, यानी LLMs आदि का actual code layers को जोड़ने वाला एक साफ-सुथरा hybrid future दिखता है। कभी वे collection/tagging का हिस्सा होंगे, और कभी input का जवाब देने का हिस्सा
कुल मिलाकर यह बहुत दिलचस्प क्षेत्र है, लेकिन सब कुछ इतनी तेजी से बदल रहा है कि मैंने अभी इसमें गहराई से dive नहीं किया है। बहुत से smart लोग इस पर काम कर रहे हैं, इसलिए लगता है कि धूल थोड़ी बैठने का इंतजार करना चाहिए। फिर भी, जिस home interface का मैं सपना देखता था, वह अब बनाने लायक stage पर आ चुका लगता है
उदाहरण के लिए, Java consumer के आसपास बार-बार बदलने वाले API payloads को follow करके देखिए। banking sector, विशाल JSON payloads और Java backend environment में sanity बनाए रखने के लिए हमने अलग से NodeJS layer बनाई थी
mapping वह क्षेत्र है जहाँ LLM चमक सकते हैं
अगर एक hot take दूँ, तो हम धीरे-धीरे AI के toolification phase में प्रवेश कर रहे हैं। लोग समझ रहे हैं कि इसमें actual value creation ज्यादा नहीं है, लेकिन AI में इतना पैसा invest हो चुका है कि funding जारी है। academic papers निकालने के लिए भी यह अच्छा topic है, और LangChain तो लगभग joke जैसा है फिर भी seed में 10 मिलियन डॉलर मिल गए
DeFi/crypto दो साल पहले इस phase से गुजरा था। कुछ साल तक एक अजीब limbo state चलती रहेगी, फिर लोग धीरे-धीरे समझेंगे कि AI product नहीं, feature है; इसकी applicability सीमित है और यह दुनिया नहीं बचाएगा। सारे edge cases की वजह से self-driving cars नहीं हो पाएंगी, और लोगों को मार सकने के जोखिम के कारण surgery भी नहीं हो पाएगी
मैं लगातार कहता आया हूँ कि Copilot जैसे सबसे useful AI tools भी ज्यादा से ज्यादा marginally useful हैं। best case में वे Google पर कुछ clicks बचा देते हैं, और agents बिल्कुल भी “intelligent” नहीं हैं। कुछ साल पहले chatbots[1] जैसा ही bubble आया था, और आजकल किसी को परवाह नहीं। “metaverse” बहुत जल्दी खत्म हो गया, लेकिन वही herd mentality काम कर रही थी। कभी “next big thing” होता है, फिर नहीं रहता
[1] https://venturebeat.com/business/facebook-opens-its-messenger...
आपने AI के सबसे कठिन use cases ही चुने हैं, जैसे self-driving cars और surgery। ज्यादातर लोगों के कामों में life-and-death stakes नहीं होते, इसलिए वे automation के लिए बहुत suitable हैं। जहाँ life-and-death jobs में human element बचा रहेगा, वहाँ भी AI agents से augmentation होने की संभावना बहुत है। उदाहरण के लिए surgery इंसान ही करे, फिर भी doctor या nurse के लिए AI के साथ diagnosis करना mandatory हो सकता है
क्या आप सच में कुछ साल पहले के chatbot bubble की तुलना आज से कर रहे हैं? ChatGPT कुछ ही महीनों में 100 million users तक पहुँच गया, और बहुत सारे लोगों ने सचमुच इसे इस्तेमाल किया। कुछ साल पहले chatbot bubble की कोई खास presence भी नहीं थी
Copilot वगैरह सिर्फ marginally useful लगते हैं क्योंकि आप अभी उनकी सबसे खराब versions देख रहे हैं। ChatGPT ने मेरी जिंदगी बदल दी है, और अभी यह code execution भी नहीं करता। Code Interpreter करता है, लेकिन मैंने अभी test नहीं किया
2030 तक शायद इंसान code type नहीं करेंगे, बल्कि machine को prompt देंगे और AI agents को direct करेंगे। तब तक ज्यादातर jobs भी शायद automate हो चुकी होंगी
AI सिर्फ trend नहीं है; यह हर industry को बदल देगा, और लोगों के सोचने से कहीं ज्यादा तेजी से। metaverse से तुलना करके AI के implications को कम करके आंकने वाला cynicism बेतुका और imagination की कमी दिखाता है। खासकर AI agents की तरफ अभी बहुत काम बाकी है, लेकिन हम शायद लोगों के सोचने से बहुत पहले वहाँ पहुँच जाएंगे, और impact बहुत बड़ा होगा
हालांकि AlphaGo को खराब moves “hallucinate” करने वाली स्थिति से दुनिया का सर्वश्रेष्ठ player बनने में ज्यादा समय नहीं लगा। अगर language models में भी ऐसा संभव है, तो GPT-x आज की पूरी debate को उड़ा सकता है
GPT-4 तब बहुत मददगार है जब कोई skilled व्यक्ति ऐसा adjacent काम कर रहा हो जहाँ उसकी skills broadly लागू होती हैं लेकिन domain knowledge कमजोर हो
मैं 10 साल से code लिख रहा हूँ और हाल ही में पहली बार machine learning सीख रहा हूँ; मैं रोज GPT-4 इस्तेमाल करता हूँ और काफी संतुष्ट हूँ
बेशक कुछ rough edges कभी-कभी चुभ सकते हैं। मेरे लिए वे manageable हैं और बहुत परेशान नहीं करते। उन्हें ignore या bypass करने की आदत हो गई है, और ऐसे tools इस्तेमाल करने में definitely skill लगती है
मुझे लगता है कि मिलने वाली value लगातार बढ़ेगी। हमने अभी low-hanging और mid-height fruits भी पूरी तरह नहीं तोड़े हैं
modern AI, असल में आमतौर पर LLM, लगभग हर economic sector में तुरंत और व्यापक रूप से लागू हो सकता है। इसलिए बहुत से लोग पहले से features बना और release कर रहे हैं। इस technology में जबरदस्त value है। क्या यह दुनिया को पूरी तरह बदल देगा? नहीं, लेकिन नए product categories बनाने और existing products की capabilities के बड़े हिस्से को fundamentally improve करने के लिए यह काफी है
Apple, Google, Amazon, Microsoft के voice assistants में से अभी तक किसी ने LLM को अपनी service में integrate क्यों नहीं किया, और OpenAI ने अपना voice assistant क्यों नहीं निकाला, यह समझ नहीं आता
साथ ही, अगर RSS की तरह websites AI interaction के लिए standard URL expose करें और TypeChat से interface public करें, तो लगता है इस दिशा में काफी आगे बढ़ा जा सकता है
हालांकि voice-based LLM से कहीं ज़्यादा value वास्तव में actions perform करने की capability में है। Alexa को उदाहरण मानें, तो smart home control को predictable और debuggable तरीके से handle करने वाला system चाहिए। नहीं तो लोग irritate हो जाते हैं
मुझे साफ़ तौर पर लगता है कि यह संभव है, लेकिन मौजूदा Alexa या Siri, और कम इस्तेमाल होने वाले Cortana जैसे systems कई सालों से कम powerful models पर बनी rules और software की layers हैं, जो कई hooks और APIs इस्तेमाल करते हैं। इन्हें चलाने के लिए current quality बनाए रखते हुए सुधार करना और साथ ही system के major parts को replace करना पड़ेगा, इसलिए समय लगेगा
ऊपर से, ये assistants असल में पैसे नहीं कमाते और ज़्यादातर घाटे में रहते हैं। इनकी value उन्हीं big companies के लिए है जो phones, shopping आदि दूसरे तरीकों से पैसे कमा सकती हैं या अपना business push कर सकती हैं, इसलिए startups के लिए incentive कम है
मैंने पहले Cortana और Alexa दोनों पर काम किया है, और LLM progress के आधार पर शुरू से नया version बनाने के बारे में भी बहुत सोचा था। Technology overall intuitive थी और अब possible हुए new use cases के ideas भी थे, लेकिन कोई workable business model नहीं मिला। इसलिए अब मैं बिल्कुल अलग काम कर रहा हूँ
हालांकि इसके लिए cloud-based API इस्तेमाल करना बहुत असुरक्षित लगता है, इसलिए मैं चाहता हूँ कि यह घर के अंदर server पर चले। साथ ही voice recognition और response time इतने तेज़ हों कि waiting जैसा बिल्कुल महसूस न हो
personal assistant DIY attempts कुछ बार देखे हैं, लेकिन उनमें हमेशा काफी latency रही है, इसलिए अक्सर इस्तेमाल करने पर जल्दी चिढ़ होने लगेगी
एक हिस्सा है कि
{ "name": "grande latte" }जैसा response मिलना आसान हैलेकिन अगर type
Item = { name: string; ... size?: string; }है, तो यहname: "grande latte"से बचने में कैसे मदद करता है, यह मुझे ठीक से समझ नहीं आताexample response में
"size": 16है और उसे “काफी बढ़िया” कहा गया है, लेकिन वह असल में requested type भी return नहीं करता। शायद example में typo है, और अगर ऐसा है तो idea खुद अच्छा लगता हैsizeगलती सेnumberके रूप में specified किसी दूसरे schema का इस्तेमाल कर रहा था। schema बदल दिया था, लेकिन prompt फिर से run नहीं किया, और अब शायद fix हो गया होगाशायद शुरुआत में ही
namestring field चाहिए ही नहीं।{ name: “the brown one”, size: “the espresso cup”, … }जैसी values मिलने से आप रोक नहीं सकते, और यह original string को parse करने जितना ही खराब हैशायद हर field के लिए known values को represent करने वाला बड़ा string union type चाहिए होगा। तब LLM को उन्हीं में match करने के लिए कहा जा सकता है
लेकिन फिर यह भी सवाल है कि इसे type syntax से क्यों बांधना चाहिए। Zod जैसा approach, जो runtime data से ऐसे union types बना सके, ज़्यादा सही लगता है
quantity positive integer होनी चाहिए और fraction नहीं होनी चाहिए, जैसे constraints भी चाहिए। बेशक JSON value को बाद में validate किया जा सकता है, लेकिन तब user को दो तरह की errors दिखेंगी। एक वह error जो LLM fluent human tone में देगा, और दूसरी अजीब तरह से technical error जैसे “quantity value बहुत बड़ी है”
ऐसी चीज़ें explain करने के लिए type syntax गलत जगह लगता है
दिए गए code भर से system के पास “grande” को 16 में map करने का कोई तरीका नहीं है, और 16 कहीं और इस्तेमाल होता भी नहीं दिखता
ऐसा लगता है जैसे type check pass करने वाली कोई चीज़ output होने तक LLM को बार-बार run किया जाता है, और error message के साथ फिर prompt दिया जाता है
cute idea है और लगता है काम करेगा, लेकिन बड़े models और लंबे input prompts के साथ cost ज़्यादा हो सकती है। शायद यह हर scenario का solution नहीं है
[1]: https://github.com/microsoft/guidance
market structured output मांग रहा है, इसलिए models भी उसी दिशा में improve होंगे—यह भी काफी reasonable assumption है
इस हफ़्ते Laravel PHP के लिए इससे बहुत मिलता-जुलता, लेकिन scope में छोटा कुछ बनाकर release किया: https://github.com/adrenallen/ai-agents-laravel
मेरा मानना है कि engineers को किसी दिए गए LLM के साथ नया “bot” आसानी से spin up कर पाने में सक्षम होना चाहिए। functions को ऐसे रूप में बदलने और response को handle करके फिर parse करने वाला बहुत-सा tedious काम होता है, जिसे ChatGPT समझ सके
ऐसे system का इस्तेमाल करने पर आप actual PHP code लिखने और कुछ साफ़ comments जोड़ने पर focus कर सकते हैं, और फिर bot उस code को किसी भी काम में सीधे tool की तरह इस्तेमाल कर सकता है
यह approach code sharing को भी कहीं ज़्यादा आसान बनाता है। कोई function लिखे, तो उसे नए bot में लाकर तुरंत इस्तेमाल किया जा सकता है। “LLM के इस्तेमाल और समझने के लिए transform करने वाली layer” को हटाने वाली बात बढ़िया है, और build speed काफ़ी बढ़ा देती है
अभी यह perfect नहीं है, लेकिन मुझे लगता है कि एक-दूसरे के code का बेहतर इस्तेमाल करने के लिए अंततः सब कुछ इसी दिशा में जाएगा। आज coding में package managers इस्तेमाल करने के तरीके के बारे में सोचें, तो काश AI-specific tools के लिए भी एक package manager होता। जैसे “weather fetch” library install करके अपने bot में जोड़ दूँ, और अब वह weather fetch कर सके
ज़रा रुकिए, क्या यह TypeScript type definitions के against objects की runtime validation करता है? अगर इसे standalone library या feature के रूप में release किया जा सके, तो TypeScript codebase में API response payload validation वगैरह के लिए यह पूरी तरह game changer हो सकता है
https://github.com/microsoft/TypeChat/blob/4d34a5005c67bc494...
यहाँ
guidance[0] का इस्तेमाल न होना बहुत हैरान करने वाला हैयह required fields को पूरा करने के सुझाव दे सकता है, जिससे validation[1] की ज़रूरत कम हो सकती है, और आखिरकार GPU time भी बच सकता है
निश्चित रूप से कोई वजह होगी, लेकिन मैं सच में जानना चाहूँगा
वैसे, मैं ठीक ऐसी ही चीज़ बना रहा था, और लगा जैसे Microsoft अचानक आकर मेरा lunch खा गया
[0] https://github.com/microsoft/guidance
[1] https://github.com/microsoft/TypeChat/blob/main/src/typechat...