paint-brush
GPT'ler, LangChain ve Node.js ile JSON Verileri Nasıl Çıkarılır ve Oluşturulurile@horosin
3,262 okumalar
3,262 okumalar

GPT'ler, LangChain ve Node.js ile JSON Verileri Nasıl Çıkarılır ve Oluşturulur

ile Karol Horosin7m2023/08/21
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

Bu makalede, yapılandırılmış JSON verilerini çıkarmak ve oluşturmak için yapay zeka odaklı bir uygulama çerçevesi olan LangChain'in GPT'ler ve Node.js ile birlikte nasıl kullanılacağını açıklayacağım. Eğitim, LangChain'in kurulumunu ve kurulumunu, bilgi istemi şablonları oluşturmayı, OpenAI modelini kullanarak veri oluşturmayı, hata işlemeyi ve PDF dosyalarından veri çıkarmayı kapsar. Süreci göstermek için adım adım talimatlar, kod parçacıkları ve örnekler sunuyorum. Eğitimde, bu yaklaşımın çeşitli kaynaklardan gelen yapılandırılmış verilerle çalışmaya yönelik güçlü uygulamalar oluşturmak için nasıl kullanılabileceğini gösteriyor.

People Mentioned

Mention Thumbnail
featured image - GPT'ler, LangChain ve Node.js ile JSON Verileri Nasıl Çıkarılır ve Oluşturulur
Karol Horosin HackerNoon profile picture

Bu blog yazısında, yapay zeka destekli uygulamalar oluşturmaya yönelik esnek bir çerçeve olan LangChain'in, GPT'ler ve Node.js ile yapılandırılmış JSON verilerini ayıklamak ve oluşturmak için nasıl kullanılacağını paylaşacağım. Projeyi kurup çalıştırmanıza yardımcı olacak kod parçacıkları ve kısa talimatlar sunacağım.

LangChain Hakkında

LangChain, yapay zeka odaklı uygulamaların geliştirilmesini kolaylaştırmak için tasarlanmış yenilikçi ve çok yönlü bir çerçevedir.


Modüler mimarisiyle, bilgi istemi şablonları oluşturmak, çeşitli veri kaynaklarına bağlanmak ve çeşitli araçlarla sorunsuz bir şekilde etkileşime geçmek için kapsamlı bir bileşen paketi sağlar.


LangChain, hızlı mühendisliği, veri kaynağı entegrasyonunu ve araç etkileşimini basitleştirerek geliştiricilerin temel uygulama mantığına odaklanmasını sağlayarak geliştirme sürecini hızlandırır.


Hem Python hem de JavaScript API'lerinde mevcut olan LangChain, son derece uyarlanabilir olup, geliştiricilerin doğal dil işlemenin ve yapay zekanın gücünden birden fazla platform ve kullanım senaryosunda yararlanmasına olanak tanır.


LangChain, LLM'lerden yapılandırılmış (JSON formatında olduğu gibi) çıktı almayı sağlayan araçlar içerir. Bunları lehimize kullanalım.

Kurulum ve Kurulum

NodeJS'in en son sürümlerinden birine sahip olduğunuzu varsayıyorum. Düğüm 18'i kullandım. Daha fazla ayrıntıya ihtiyacınız varsa LangChain web sitesini ziyaret edin.


Öncelikle yeni bir düğüm projesi oluşturun, yani:

  1. Projeniz için yeni bir dizin oluşturun ve terminalinizde ona gidin.


  2. Yeni bir Node.js projesi başlatmak için npm init komutunu çalıştırın.


  3. Bir index.js dosyası oluşturun.


Daha sonra LangChain kurulumunu yapıp API anahtarlarını yapılandıralım. Diğer bağımlılıklar dahildir.


 npm i langchain # configure credentials (easiest) export OPENAI_API_KEY=XXX export SERPAPI_API_KEY=XXX


Bu sadece gösterme amaçlı kullanım içindir. Değişkenleri dışa aktarmamayı tercih ediyorum; Bunun yerine popüler dotenv npm kütüphanesini kullanıyorum.


Gerekli bağımlılıkları JS dosyamızın üstüne aktaralım.


 import { z } from "zod"; import { OpenAI } from "langchain/llms/openai"; import { PromptTemplate } from "langchain/prompts"; import { StructuredOutputParser, OutputFixingParser, } from "langchain/output_parsers";

Veri Oluşturma

Ayrıştırma olanaklarını görmek için bazı sahte veriler oluşturarak başlayalım.

Çıkış Şeması Tanımı

Öncelikle kütüphaneye ne almak istediğimizi söylemeliyiz. LangChain, Zod adlı popüler bir kütüphaneyi kullanarak beklenen şemanın tanımlanmasını destekler:


 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"), }) );

Bilgi İstemi Şablonu

Bu şablonu kullanmak için PromptTemplate adında bir LangChain yapısı oluşturmamız gerekiyor. Ayrıştırıcıdan gelen format talimatlarını içerecektir:


 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 }, });


Denemek

Yapılandırılmış çıktıyı yürütmek için OpenAI modelini girişle çağırın:

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


İşte AI modeline gönderilecekler. Bu büyük olasılıkla gelecekteki LangChain sürümlerinde değişecektir.

 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.


Modelin çıktısı şu şekilde görünecektir:

 { "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"] }


Gördüğünüz gibi tam ihtiyacımız olanı aldık. Kişiliğin diğer kısımlarıyla eşleşen karmaşık açıklamalara sahip bütün kimlikler oluşturabiliriz. Sahte veri kümemizi zenginleştirmemiz gerekirse, başka bir yapay zeka modelinden görünüme dayalı bir fotoğraf oluşturmasını isteyebiliriz.

Hata yönetimi

Yüksek Lisans'ı bir üretim uygulamasında kullanmanın herhangi bir şekilde güvenli olup olmadığını merak edebilirsiniz. Neyse ki LangChain tam da bunun gibi sorunlara odaklanmış durumda. Çıktının düzeltilmesi gerekiyorsa OutputFixingParser'ı kullanın. LLM'nizin gereksinimlerinize uymayan bir çıktı vermesi durumunda hataları düzeltmeye çalışacaktır.


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

Dosyalardan Veri Çıkarma

LangChain kullanarak dosyalardan veri yüklemek ve veri çıkarmak için aşağıdaki adımları takip edebilirsiniz. Bu örnekte PDF dosyasını yükleyeceğiz. Uygun bir şekilde, LangChain'in tam da bu amaca yönelik yardımcı programları vardır. Fazladan bir bağımlılığa ihtiyacımız var.


 npm install pdf-parse


Elon Musk'un kısa bir biyografisini yükleyeceğiz ve daha önce oluşturduğumuz bilgileri çıkaracağız. PDF dosyasını buradan indirin: Google Drive .


Öncelikle yeni bir dosya oluşturalım, örneğin, structured-pdf.js . PDF'yi yüklemeyle başlayalım.

 import { PDFLoader } from "langchain/document_loaders/fs/pdf"; const loader = new PDFLoader("./elon.pdf"); const docs = await loader.load(); console.log(docs);


Bilgi istemi şablonunu, oluşturmayı değil çıkartmayı gösterecek şekilde değiştirmemiz gerekiyor. Sonuçlar zaman zaman tutarsız olduğundan, JSON oluşturma sorununu düzeltmek için bir istemi de değiştirmek zorunda kaldım.

 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 }, });


Son olarak, varsayılan değer 256 jeton olduğundan, izin verdiğimiz çıktı uzunluğunu genişletmemiz gerekiyor (bu, oluşturulan durumda olduğundan biraz daha fazla veridir). Ayrıca önceden belirlenmiş bir kişi tanımını değil, yüklü belgemizi kullanarak modeli çağırmamız gerekiyor.

 const model = new OpenAI({ temperature: 0.5, model: "gpt-3.5-turbo", maxTokens: 2000 }); const input = await prompt.format({ inputText: docs[0].pageContent, });


Bu değişiklikler sayesinde aşağıdaki çıktıyı elde ediyoruz:

 { 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' ] }


Bu adımları izleyerek yapılandırılmış JSON verilerini bir PDF dosyasından çıkardık! Bu yaklaşım çok yönlüdür ve özel kullanım durumunuza uyacak şekilde uyarlanabilir.

Çözüm

Sonuç olarak, LangChain, GPT'ler ve Node.js'den yararlanarak çeşitli kaynaklardan yapılandırılmış JSON verilerinin çıkarılması ve oluşturulması için güçlü uygulamalar oluşturabilirsiniz.


Potansiyel uygulamalar çok geniştir ve biraz yaratıcılıkla bu teknolojiyi yenilikçi uygulamalar ve çözümler oluşturmak için kullanabilirsiniz.


Bu eğitimin kodunu burada bulabilirsiniz: https://gist.github.com/horosin/5351ae4dc3eebbf181f9db212f5d3ebc


Sol taraftaki e-posta adresinizi doldurarak profilime abone olun ve yazılarımdan haberdar olun!


Beni Twitter'da @horosin üzerinden takip etmeyi ve daha fazla ipucu ve bilgi için blogumdaki haber bültenine abone olmayı unutmayın!


Twitter'ınız yoksa beni LinkedIn'den de takip edebilirsiniz.