إتقان إخراج البيانات المنظمة مع LangChain: استراتيجيات وتقنيات لنماذج المحادثة
في المشهد المتطور باستمرار للذكاء الاصطناعي والتعلم الآلي، يعد الحصول على بيانات منظمة من نماذج المحادثة أمراً بالغ الأهمية لدمج هذه النماذج بسلاسة في تطبيقات متنوعة. تقدم LangChain، وهي مكتبة مرموقة في مجال الذكاء الاصطناعي، أدوات وطرقاً قوية لتحقيق إخراج بيانات منظمة بسهولة. سواء كنت مطوراً متمرساً أو بدأت للتو رحلتك، سيرشدك هذا الدليل خلال عملية تحويل مخرجات النص العشوائية إلى بيانات منظمة باستخدام LangChain.
لننطلق في هذه الرحلة لإتقان إخراج البيانات المنظمة من خلال LangChain، كاشفين عن استراتيجيات وتقنيات مصممة لتعزيز قدراتك.
المتطلبات الأساسية: يفترض هذا الدليل فهماً أساسياً لنماذج المحادثة وطريقة .withStructuredOutput().
لماذا إخراج البيانات المنظمة؟
تتيح لك البيانات المنظمة تعيين مخرجات النص إلى مخططات محددة مسبقاً، مما يمكّنها من الاندماج بسلاسة في قواعد البيانات والأنظمة اللاحقة الأخرى. سيوضح هذا الدليل عدة استراتيجيات لتحقيق ذلك مع LangChain.
التثبيت الأولي
أولاً، نحتاج إلى تثبيت التبعيات اللازمة. اعتماداً على مزود النموذج المفضل لديك، ستختلف أوامر التثبيت:
OpenAI
npm i @langchain/openaiimport { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({ model: "gpt-3.5-turbo", temperature: 0 });Anthropic
npm i @langchain/anthropicimport { ChatAnthropic } from "@langchain/anthropic";
const model = new ChatAnthropic({ model: "claude-3-sonnet-20240229", temperature: 0 });التهيئة الأولية
تذكر تعيين متغيرات البيئة مع مفاتيح API الخاصة بك:
OPENAI_API_KEY=your-api-key
ANTHROPIC_API_KEY=your-api-keyتعريف المخطط مع Zod
لتسهيل إخراج البيانات المنظمة، يمكننا الاستفادة من Zod، وهي مكتبة إعلان وتحقق من المخططات أولاً لـ TypeScript. إليك مثالاً بسيطاً لتعريف مخطط لنكتة:
import { z } from "zod";
const joke = z.object({
setup: z.string().describe("The setup of the joke"),
punchline: z.string().describe("The punchline to the joke"),
rating: z.number().optional().describe("How funny the joke is, from 1 to 10"),
});التكامل مع LangChain
باستخدام .withStructuredOutput()، دعنا ندمج هذا المخطط مع نموذجنا:
const structuredLlm = model.withStructuredOutput(joke);
await structuredLlm.invoke("Tell me a joke about cats");
// Expected Output:
// { setup: "Why don't cats play poker in the wild?", punchline: "Too many cheetahs.", rating: 7 }تسمية المخطط لسياق أفضل
إضافة اسم لمخططك يمكن أن يوفر سياقاً إضافياً للنموذج، مما يحسن أداءه:
const structuredLlm = model.withStructuredOutput(joke, { name: "joke" });
await structuredLlm.invoke("Tell me a joke about cats");
// Expected Output:
// { setup: "Why don't cats play poker in the wild?", punchline: "Too many cheetahs!", rating: 7 }استخدام مخطط JSON
لأولئك الذين يفضلون عدم استخدام Zod، يدعم LangChain أيضاً مخطط JSON بأسلوب OpenAI:
const structuredLlm = model.withStructuredOutput({
name: "joke",
description: "Joke to tell user.",
parameters: {
title: "Joke",
type: "object",
properties: {
setup: { type: "string", description: "The setup for the joke" },
punchline: { type: "string", description: "The joke's punchline" },
},
required: ["setup", "punchline"],
},
});
await structuredLlm.invoke("Tell me a joke about cats");
// Expected Output:
// { setup: "Why was the cat sitting on the computer?", punchline: "Because it wanted to keep an eye on the mouse!" }تحديد الإخراج المتقدم
للنماذج التي تدعم منهجيات إخراج متعددة، حدد تفضيلك:
const structuredLlm = model.withStructuredOutput(joke, { method: "json_mode", name: "joke" });
await structuredLlm.invoke("Tell me a joke about cats, respond in JSON with `setup` and `punchline` keys");
// Expected Output:
// { setup: "Why don't cats play poker in the jungle?", punchline: "Too many cheetahs!" }تقنيات التوجيه
للنماذج التي لا تدعم قدرات الإخراج المنظم المدمجة، يمكن للتوجيهات المصاغة بعناية إجبار النماذج على إخراج البيانات بتنسيقات منظمة. باستخدام JsonOutputParser، دعنا نوضح هذا:
import { JsonOutputParser } from "@langchain/core/output_parsers";
import { ChatPromptTemplate } from "@langchain/core/prompts";
type Person = { name: string; height_in_meters: number; };
type People = { people: Person[]; };
const formatInstructions = `
Respond only in valid JSON. The JSON object you return should match the following schema:
{ people: [{ name: "string", height_in_meters: "number" }] }
Where people is an array of objects, each with a name and height_in_meters field.
`;
// Set up a parser
const parser = new JsonOutputParser();
// Create the prompt template
const prompt = await ChatPromptTemplate.fromMessages([
["system", "Answer the user query. Wrap the output in `json` tags\n{format_instructions}"],
["human", "{query}"]
]).partial({ format_instructions: formatInstructions });التحليل المخصص مع LangChain
إذا لم تناسب الحلول المدمجة حالة استخدامك، فقد يكون التحليل المخصص باستخدام لغة تعبير LangChain (LCEL) ما تحتاجه:
import { AIMessage } from "@langchain/core/messages";
import { ChatPromptTemplate } from "@langchain/core/prompts";
type Person = { name: string; height_in_meters: number; };
type People = { people: Person[]; };
const schema = `
{ people: [{ name: "string", height_in_meters: "number" }] }
`;
// Creating the prompt template
const prompt = await ChatPromptTemplate.fromMessages([
["system", `Answer the user query. Output your answer as JSON that matches the given schema: \`\`\`json\n{schema}\n\`\`\`. Make sure to wrap the answer in \`\`\`json and \`\`\` tags`],
["human", "{query}"]
]).partial({ schema });
// Custom extractor to parse JSON from AI output
const extractJson = (output: AIMessage): Array => {
const text = output.content as string;
const pattern = /```json(.*?)```/gs;
const matches = text.match(pattern);
try {
return (matches?.map(match => {
const jsonStr = match.replace(/```json|```/g, "").trim();
return JSON.parse(jsonStr);
}) ?? []);
} catch (error) {
throw new Error(`Failed to parse: ${output}`);
}
};
// Invoke the parsing chain
const query = "Anna is 23 years old and she is 6 feet tall";
const chain = prompt.pipe(model).pipe(new RunnableLambda({ func: extractJson }));
await chain.invoke({ query });
// Expected Output:
// [ { people: [ { name: "Anna", height_in_meters: 1.83 } ] } ]الملخص
في هذا الدليل، استكشفنا طرقاً متعددة لضمان أن نماذج المحادثة الخاصة بك تخرج بيانات منظمة باستخدام LangChain. مسلحاً بهذه المعرفة، يمكنك الآن دمج هذه النماذج بشكل أكثر كفاءة في تطبيقاتك، مقدماً مخرجات محسنة ومنظمة تناسب احتياجاتك.
لقراءة المزيد من الأدلة التفصيلية حول الإخراج المنظم والتقنيات المتقدمة الأخرى، يرجى زيارة وثائق LangChain الرسمية.
المؤلف: فريق وثائق LangChain
اكتشف قوة إخراج البيانات المنظمة مع LangChain. غيّر طريقة تعاملك مع مخرجات الذكاء الاصطناعي اليوم! تعلم المزيد هنا.
ناقش مشروعك معنا
نحن هنا للمساعدة في احتياجات تطوير الويب الخاصة بك. حدد موعدًا لمناقشة مشروعك وكيف يمكننا مساعدتك.
دعنا نجد أفضل الحلول لاحتياجاتك.
مقالات ذات صلة
ثورة في تفاعل العملاء: الوكلاء الافتراضيون المدعومون بالذكاء الاصطناعي من Twilio
اكتشف كيف يغير الوكلاء الافتراضيون المدعومون بالذكاء الاصطناعي من Twilio طريقة تفاعل العملاء مع أدوات اتصال متطورة، وتقليل التكاليف، وتحسين تجارب المستخدمين عبر المنصات العالمية. انغمس في التطور القادم في خدمة العملاء!

بناء مفسر الأكواد الخاص بك مع توليد الأدوات الديناميكية
تعلم كيفية إنشاء مفسر أكواد مخصص باستخدام التوليد الديناميكي للأدوات والتنفيذ مع o3-mini، مما يتيح حل المشاكل بمرونة وقابلية للتكيف.

بناء مفسر أكواد مخصص لوكلاء نماذج اللغة الكبيرة
تعلم كيفية إنشاء مفسر أكواد مخصص لوكلاء نماذج اللغة الكبيرة (LLM)، مما يتيح استدعاء الأدوات الديناميكي وتنفيذ الأكواد المعزول لتعزيز المرونة والأمان.