এই ব্লগ পোস্টে, আমি GPTs এবং Node.js এর সাথে স্ট্রাকচার্ড JSON ডেটা বের করতে এবং তৈরি করতে AI-চালিত অ্যাপ্লিকেশন তৈরির জন্য একটি নমনীয় ফ্রেমওয়ার্ক LangChain কীভাবে ব্যবহার করব তা শেয়ার করব। আমি কোড স্নিপেট এবং সংক্ষিপ্ত নির্দেশাবলী প্রদান করব যাতে আপনি প্রকল্পটি সেট আপ করতে এবং চালাতে সহায়তা করেন৷
LangChain হল একটি উদ্ভাবনী এবং বহুমুখী ফ্রেমওয়ার্ক যা এআই-চালিত অ্যাপ্লিকেশনগুলির বিকাশকে প্রবাহিত করার জন্য ডিজাইন করা হয়েছে।
এর মডুলার আর্কিটেকচারের সাথে, এটি প্রম্পট টেমপ্লেট তৈরি করার জন্য, বিভিন্ন ডেটা উত্সের সাথে সংযোগ স্থাপন এবং বিভিন্ন সরঞ্জামের সাথে নির্বিঘ্নে ইন্টারঅ্যাক্ট করার জন্য উপাদানগুলির একটি বিস্তৃত স্যুট প্রদান করে।
প্রম্পট ইঞ্জিনিয়ারিং, ডেটা সোর্স ইন্টিগ্রেশন এবং টুল ইন্টারঅ্যাকশনকে সরলীকরণ করে, ল্যাংচেইন ডেভেলপারদের মূল অ্যাপ্লিকেশন লজিকের উপর ফোকাস করতে সক্ষম করে, উন্নয়ন প্রক্রিয়াকে ত্বরান্বিত করে।
পাইথন এবং জাভাস্ক্রিপ্ট এপিআই উভয় ক্ষেত্রেই উপলব্ধ, ল্যাংচেইন অত্যন্ত অভিযোজনযোগ্য, একাধিক প্ল্যাটফর্মে প্রাকৃতিক ভাষা প্রক্রিয়াকরণ এবং এআই-এর ক্ষমতা ব্যবহার করতে এবং কেস ব্যবহারের ক্ষেত্রে বিকাশকারীদের ক্ষমতায়ন করে।
LangChain-এ এমন সরঞ্জাম রয়েছে যা LLM-এর থেকে কাঠামোগত (JSON ফর্ম্যাটের মতো) আউটপুট তৈরি করে। আমাদের সুবিধার জন্য তাদের ব্যবহার করা যাক.
আমি অনুমান করছি যে আপনার কাছে NodeJS এর সর্বশেষ সংস্করণগুলির মধ্যে একটি রয়েছে। আমি নোড 18 ব্যবহার করেছি। আপনার আরো বিস্তারিত জানার প্রয়োজন হলে LangChain ওয়েবসাইটে যান।
প্রথমে, একটি নতুন নোড প্রকল্প তৈরি করুন, যেমন:
আপনার প্রকল্পের জন্য একটি নতুন ডিরেক্টরি তৈরি করুন এবং আপনার টার্মিনালে এটিতে নেভিগেট করুন।
একটি নতুন Node.js প্রকল্প শুরু করতে npm init চালান।
একটি index.js
ফাইল তৈরি করুন।
তারপর, আসুন ল্যাংচেইন ইনস্টল করি এবং API কীগুলি কনফিগার করি। অন্যান্য নির্ভরতা অন্তর্ভুক্ত করা হয়।
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";
পার্সিংয়ের সম্ভাবনাগুলি দেখতে কিছু জাল ডেটা তৈরি করে শুরু করা যাক।
প্রথমত, আমরা কি পেতে চাই তা লাইব্রেরীকে জানাতে হবে। LangChain Zod নামক একটি জনপ্রিয় লাইব্রেরি ব্যবহার করে প্রত্যাশিত স্কিমা সংজ্ঞায়িত করতে সমর্থন করে:
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"), }) );
এই টেমপ্লেটটি ব্যবহার করার জন্য, আমাদের প্রম্পট টেমপ্লেট নামে একটি ল্যাংচেইন নির্মাণ তৈরি করতে হবে। এটি পার্সার থেকে বিন্যাস নির্দেশাবলী থাকবে:
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);
এআই মডেলে কী পাঠানো হবে তা এখানে। এটি সম্ভবত ভবিষ্যতের LangChain সংস্করণগুলিতে পরিবর্তিত হবে।
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"] }
আপনি দেখতে পাচ্ছেন, আমরা যা প্রয়োজন তা পেয়েছি। আমরা ব্যক্তিত্বের অন্যান্য অংশের সাথে মিলে যাওয়া জটিল বর্ণনা দিয়ে পুরো পরিচয় তৈরি করতে পারি। যদি আমাদের মক ডেটাসেটকে সমৃদ্ধ করার প্রয়োজন হয়, তাহলে আমরা অন্য এআই মডেলকে চেহারার উপর ভিত্তি করে একটি ফটো তৈরি করতে বলতে পারি।
আপনি ভাবতে পারেন যে কোনও প্রোডাকশন অ্যাপ্লিকেশনে এলএলএম ব্যবহার করা কোনও উপায়ে নিরাপদ কিনা। সৌভাগ্যবশত, ল্যাংচেইন ঠিক এইরকম সমস্যার উপর দৃষ্টি নিবদ্ধ করে। আউটপুট ফিক্সিং প্রয়োজন হলে, OutputFixingParser ব্যবহার করুন। আপনার এলএলএম আপনার প্রয়োজনীয়তার সাথে মেলে না এমন কিছু আউটপুট করলে এটি ত্রুটিগুলি সমাধান করার চেষ্টা করবে।
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); }
LangChain ব্যবহার করে ফাইলগুলি থেকে ডেটা লোড এবং নিষ্কাশন করতে, আপনি এই পদক্ষেপগুলি অনুসরণ করতে পারেন। এই উদাহরণে, আমরা PDF ফাইল লোড করতে যাচ্ছি। সুবিধাজনকভাবে, ল্যাংচেইনের কেবল এই উদ্দেশ্যে ইউটিলিটি রয়েছে। আমাদের একটি অতিরিক্ত নির্ভরতা প্রয়োজন।
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' ] }
এই পদক্ষেপগুলি অনুসরণ করে, আমরা একটি PDF ফাইল থেকে কাঠামোগত JSON ডেটা বের করেছি! এই পদ্ধতিটি বহুমুখী এবং আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে মানিয়ে নেওয়া যেতে পারে।
উপসংহারে, LangChain, GPTs, এবং Node.js ব্যবহার করে, আপনি বিভিন্ন উত্স থেকে স্ট্রাকচার্ড JSON ডেটা আহরণ এবং তৈরি করার জন্য শক্তিশালী অ্যাপ্লিকেশন তৈরি করতে পারেন।
সম্ভাব্য অ্যাপ্লিকেশনগুলি বিশাল, এবং কিছুটা সৃজনশীলতার সাথে, আপনি উদ্ভাবনী অ্যাপ্লিকেশন এবং সমাধানগুলি তৈরি করতে এই প্রযুক্তিটি ব্যবহার করতে পারেন৷
আপনি এখানে এই টিউটোরিয়ালের জন্য কোড খুঁজে পেতে পারেন: https://gist.github.com/horosin/5351ae4dc3eebbf181f9db212f5d3ebc
বাম দিকে আপনার ইমেল ঠিকানা পূরণ করে আমার প্রোফাইলে সদস্যতা নিন এবং আমার নিবন্ধগুলির সাথে আপ টু ডেট থাকুন!
Twitter@ horosin- এ আমাকে অনুসরণ করতে ভুলবেন না এবং আরও টিপস এবং অন্তর্দৃষ্টির জন্য আমার ব্লগে নিউজলেটারে সাবস্ক্রাইব করুন!
আপনার যদি টুইটার না থাকে, আপনি আমাকে LinkedIn- এও অনুসরণ করতে পারেন।