इस ब्लॉग पोस्ट में, मैं GPTs और Node.js के साथ संरचित JSON डेटा निकालने और उत्पन्न करने के लिए AI-संचालित अनुप्रयोगों के निर्माण के लिए एक लचीले ढांचे, लैंगचेन का उपयोग करने का तरीका साझा करूंगा। मैं आपको प्रोजेक्ट सेट अप करने और चलाने में मदद करने के लिए कोड स्निपेट और संक्षिप्त निर्देश प्रदान करूंगा।
लैंगचेन एक अभिनव और बहुमुखी ढांचा है जिसे एआई-संचालित अनुप्रयोगों के विकास को सुव्यवस्थित करने के लिए डिज़ाइन किया गया है।
अपने मॉड्यूलर आर्किटेक्चर के साथ, यह शीघ्र टेम्पलेट तैयार करने, विविध डेटा स्रोतों से जुड़ने और विभिन्न उपकरणों के साथ सहजता से बातचीत करने के लिए घटकों का एक व्यापक सूट प्रदान करता है।
त्वरित इंजीनियरिंग, डेटा स्रोत एकीकरण और टूल इंटरैक्शन को सरल बनाकर, लैंगचेन डेवलपर्स को विकास प्रक्रिया को तेज करते हुए कोर एप्लिकेशन लॉजिक पर ध्यान केंद्रित करने में सक्षम बनाता है।
पायथन और जावास्क्रिप्ट एपीआई दोनों में उपलब्ध, लैंगचेन अत्यधिक अनुकूलनीय है, जो डेवलपर्स को कई प्लेटफार्मों और उपयोग के मामलों में प्राकृतिक भाषा प्रसंस्करण और एआई की शक्ति का उपयोग करने के लिए सशक्त बनाता है।
लैंगचेन में ऐसे उपकरण शामिल हैं जो एलएलएम से संरचित (जेएसओएन प्रारूप में) आउटपुट प्राप्त करते हैं। आइए उनका उपयोग अपने लाभ के लिए करें।
मैं मान रहा हूं कि आपके पास NodeJS का नवीनतम संस्करण है। मैंने नोड 18 का उपयोग किया है। यदि आपको अधिक विवरण चाहिए तो लैंगचेन वेबसाइट पर जाएँ।
सबसे पहले, एक नया नोड प्रोजेक्ट बनाएं, यानी:
अपने प्रोजेक्ट के लिए एक नई निर्देशिका बनाएं और अपने टर्मिनल में उस तक नेविगेट करें।
एक नया Node.js प्रोजेक्ट आरंभ करने के लिए npm init चलाएँ।
एक index.js
फ़ाइल बनाएँ।
फिर, आइए लैंगचेन स्थापित करें और एपीआई कुंजियों को कॉन्फ़िगर करें। अन्य निर्भरताएँ शामिल हैं.
npm i langchain # configure credentials (easiest) export OPENAI_API_KEY=XXX export SERPAPI_API_KEY=XXX
यह केवल प्रदर्शनात्मक उपयोग के लिए है। मैं चर निर्यात नहीं करना पसंद करता हूँ; मैं इसके बजाय लोकप्रिय dotenv
npm लाइब्रेरी का उपयोग कर रहा हूं।
आइए हमारी JS फ़ाइल के शीर्ष पर आवश्यक निर्भरताएँ आयात करें।
import { z } from "zod"; import { OpenAI } from "langchain/llms/openai"; import { PromptTemplate } from "langchain/prompts"; import { StructuredOutputParser, OutputFixingParser, } from "langchain/output_parsers";
आइए पार्सिंग की संभावनाओं को देखने के लिए कुछ नकली डेटा तैयार करके शुरुआत करें।
सबसे पहले, हमें पुस्तकालय को यह बताना होगा कि हम क्या प्राप्त करना चाहते हैं। लैंगचेन ज़ॉड नामक एक लोकप्रिय लाइब्रेरी का उपयोग करके अपेक्षित स्कीमा को परिभाषित करने का समर्थन करता है:
const parser = StructuredOutputParser.fromZodSchema( z.object({ name: z.string().describe("Human name"), surname: z.string().describe("Human surname"), age: z.number().describe("Human age"), appearance: z.string().describe("Human appearance description"), shortBio: z.string().describe("Short bio secription"), university: z.string().optional().describe("University name if attended"), gender: z.string().describe("Gender of the human"), interests: z .array(z.string()) .describe("json array of strings human interests"), }) );
इस टेम्पलेट का उपयोग करने के लिए, हमें PromptTemplate नामक एक लैंगचेन निर्माण बनाने की आवश्यकता है। इसमें पार्सर से प्रारूप निर्देश शामिल होंगे:
const formatInstructions = parser.getFormatInstructions(); const prompt = new PromptTemplate({ template: `Generate details of a hypothetical person.\n{format_instructions} Person description: {description}`, inputVariables: ["description"], partialVariables: { format_instructions: formatInstructions }, });
संरचित आउटपुट निष्पादित करने के लिए, इनपुट के साथ OpenAI मॉडल को कॉल करें:
const model = new OpenAI({ temperature: 0.5, model: "gpt-3.5-turbo" }); const input = await prompt.format({ description: "A man, living in Poland", }); const response = await model.call(input);
यहां बताया गया है कि एआई मॉडल को क्या भेजा जाएगा। यह संभवतः भविष्य के लैंगचेन संस्करणों में बदल जाएगा।
Generate details of a hypothetical person. You must format your output as a JSON value that adheres to a given "JSON Schema" instance. "JSON Schema" is a declarative language that allows you to annotate and validate JSON documents. For example, the example "JSON Schema" instance {{"properties": {{"foo": {{"description": "a list of test words", "type": "array", "items": {{"type": "string"}}}}}}, "required": ["foo"]}}}} would match an object with one required property, "foo". The "type" property specifies "foo" must be an "array", and the "description" property semantically describes it as "a list of test words". The items within "foo" must be strings. Thus, the object {{"foo": ["bar", "baz"]}} is a well-formatted instance of this example "JSON Schema". The object {{"properties": {{"foo": ["bar", "baz"]}}}} is not well-formatted. Your output will be parsed and type-checked according to the provided schema instance, so make sure all fields in your output match exactly! Here is the JSON Schema instance your output must adhere to: '''json {"type":"object","properties":{"name":{"type":"string","description":"Human name"},"surname":{"type":"string","description":"Human surname"},"age":{"type":"number","description":"Human age"},"appearance":{"type":"string","description":"Human appearance description"},"shortBio":{"type":"string","description":"Short bio secription"},"university":{"type":"string","description":"University name if attended"},"gender":{"type":"string","description":"Gender of the human"},"interests":{"type":"array","items":{"type":"string"},"description":"json array of strings human interests"}},"required":["name","surname","age","appearance","shortBio","gender","interests"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"} ''' Person description: A man, living in Poland.
मॉडल से आउटपुट इस तरह दिखेगा:
{ "name": "Adam", "surname": "Kowalski", "age": 21, "appearance": "Adam is a tall and slim man with short dark hair and blue eyes.", "shortBio": "Adam is a 21 year old man from Poland. He is currently studying computer science at the University of Warsaw.", "university": "University of Warsaw", "gender": "Male", "interests": ["Computer Science", "Cooking", "Photography"] }
जैसा कि आप देख सकते हैं, हमें वही मिला जिसकी हमें आवश्यकता थी। हम व्यक्तित्व के अन्य हिस्सों से मेल खाते जटिल विवरणों के साथ संपूर्ण पहचान उत्पन्न कर सकते हैं। यदि हमें अपने मॉक डेटासेट को समृद्ध करने की आवश्यकता है, तो हम किसी अन्य एआई मॉडल को उपस्थिति के आधार पर एक फोटो तैयार करने के लिए कह सकते हैं।
आपको आश्चर्य हो सकता है कि क्या उत्पादन एप्लिकेशन में एलएलएम का उपयोग किसी भी तरह से सुरक्षित है। सौभाग्य से, लैंगचेन का ध्यान इसी तरह की समस्याओं पर केंद्रित है। यदि आउटपुट को ठीक करने की आवश्यकता है, तो आउटपुटफ़िक्सिंगपार्सर का उपयोग करें। यदि आपका एलएलएम कुछ ऐसा आउटपुट देता है जो आपकी आवश्यकताओं से मेल नहीं खाता है तो यह त्रुटियों को ठीक करने का प्रयास करेगा।
try { console.log(await parser.parse(response)); } catch (e) { console.error("Failed to parse bad output: ", e); const fixParser = OutputFixingParser.fromLLM( new OpenAI({ temperature: 0, model: "gpt-3.5-turbo" }), parser ); const output = await fixParser.parse(response); console.log("Fixed output: ", output); }
लैंगचेन का उपयोग करके फ़ाइलों से डेटा लोड करने और निकालने के लिए, आप इन चरणों का पालन कर सकते हैं। इस उदाहरण में, हम पीडीएफ फाइल लोड करने जा रहे हैं। सुविधाजनक रूप से, लैंगचेन के पास केवल इसी उद्देश्य के लिए उपयोगिताएँ हैं। हमें एक अतिरिक्त निर्भरता की आवश्यकता है।
npm install pdf-parse
हम एलोन मस्क की एक संक्षिप्त जीवनी लोड करने जा रहे हैं और वह जानकारी निकालेंगे जो हमने पहले उत्पन्न की थी। पीडीएफ फाइल यहां डाउनलोड करें: गूगल ड्राइव ।
सबसे पहले, आइए एक नई फ़ाइल बनाएं, उदाहरण के लिए, structured-pdf.js
। आइए पीडीएफ लोड करना शुरू करें।
import { PDFLoader } from "langchain/document_loaders/fs/pdf"; const loader = new PDFLoader("./elon.pdf"); const docs = await loader.load(); console.log(docs);
हमें उत्पादन को नहीं, बल्कि निष्कर्षण को इंगित करने के लिए प्रॉम्प्ट टेम्पलेट को संशोधित करने की आवश्यकता है। मुझे JSON रेंडरिंग समस्या को ठीक करने के लिए एक प्रॉम्प्ट को भी संशोधित करना पड़ा, क्योंकि कई बार परिणाम असंगत होते थे।
const prompt = new PromptTemplate({ template: "Extract information from the person description.\n{format_instructions}\nThe response should be presented in a markdown JSON codeblock.\nPerson description: {inputText}", inputVariables: ["inputText"], partialVariables: { format_instructions: formatInstructions }, });
अंत में, हमें हमारे द्वारा अनुमत आउटपुट लंबाई को बढ़ाने की आवश्यकता है (यह जेनरेट किए गए मामले की तुलना में थोड़ा अधिक डेटा है), क्योंकि डिफ़ॉल्ट 256 टोकन है। हमें अपने लोड किए गए दस्तावेज़ का उपयोग करके मॉडल को कॉल करने की भी आवश्यकता है, न कि किसी पूर्व निर्धारित व्यक्ति विवरण का।
const model = new OpenAI({ temperature: 0.5, model: "gpt-3.5-turbo", maxTokens: 2000 }); const input = await prompt.format({ inputText: docs[0].pageContent, });
इन संशोधनों के लिए धन्यवाद, हमें निम्नलिखित आउटपुट मिलता है:
{ name: 'Elon', surname: 'Musk', age: 51, appearance: 'normal build, short-cropped hair, and a trimmed beard', // truncated by me shortBio: "Elon Musk, a 51-year-old male entrepreneur, inventor, and CEO, is best known for his...', gender: 'male', interests: [ 'space exploration', 'electric vehicles', 'artificial intelligence', 'sustainable energy', 'tunnel construction', 'neural interfaces', 'Mars colonization', 'hyperloop transportation' ] }
इन चरणों का पालन करके, हमने एक पीडीएफ फ़ाइल से संरचित JSON डेटा निकाला है! यह दृष्टिकोण बहुमुखी है और इसे आपके विशिष्ट उपयोग के मामले के अनुरूप अपनाया जा सकता है।
अंत में, लैंगचेन, जीपीटी और नोड.जेएस का लाभ उठाकर, आप विभिन्न स्रोतों से संरचित JSON डेटा निकालने और उत्पन्न करने के लिए शक्तिशाली एप्लिकेशन बना सकते हैं।
संभावित अनुप्रयोग विशाल हैं, और थोड़ी रचनात्मकता के साथ, आप इस तकनीक का उपयोग नवीन ऐप्स और समाधान बनाने के लिए कर सकते हैं।
आप इस ट्यूटोरियल के लिए कोड यहां पा सकते हैं: https://gist.github.com/horosin/5351ae4dc3eebbf181f9db212f5d3ebc
बाईं ओर अपना ईमेल पता भरकर मेरी प्रोफ़ाइल की सदस्यता लें और मेरे लेखों से अपडेट रहें!
मुझे ट्विटर @horosin पर फ़ॉलो करना न भूलें , और अधिक युक्तियों और जानकारियों के लिए मेरे ब्लॉग पर न्यूज़लेटर की सदस्यता लें!
यदि आपके पास ट्विटर नहीं है, तो आप मुझे लिंक्डइन पर भी फ़ॉलो कर सकते हैं।