آموزش LangGraph: راهنمای گام به گام برای ایجاد یک پایپ‌لاین تحلیل متن

در دنیای امروز که داده‌ها با سرعت سرسام‌آوری در حال تولید هستند، توانایی استخراج بینش‌های معنادار از حجم وسیعی از متن‌ها بیش از هر زمان دیگری اهمیت پیدا کرده است....

فهرست مطالب

در دنیای امروز که داده‌ها با سرعت سرسام‌آوری در حال تولید هستند، توانایی استخراج بینش‌های معنادار از حجم وسیعی از متن‌ها بیش از هر زمان دیگری اهمیت پیدا کرده است. اینجاست که ابزارهای قدرتمند پردازش زبان طبیعی (NLP) به کمک ما می‌آیند تا به ما در تجزیه و تحلیل، خلاصه‌سازی و درک ساختاریافته محتوای متنی کمک کنند. یکی از چالش‌های اصلی در ساخت چنین سیستم‌هایی، مدیریت وضعیت بین مراحل مختلف پردازش و ایجاد یک جریان کاری قابل گسترش است.

LangGraph، چارچوبی قدرتمند از LangChain، راه‌حلی نوآورانه برای این چالش ارائه می‌دهد. این چارچوب به ما امکان می‌دهد تا برنامه‌های چند-عاملی (multi-actor) با مدل‌های زبان بزرگ (LLM) را به صورت گرافی و با حفظ وضعیت (stateful) بسازیم. با LangGraph، به جای دنباله‌ای خطی از عملیات، می‌توانیم یک نقشه راه پیچیده برای عامل هوش مصنوعی خود طراحی کنیم، دقیقاً مانند یک معمار که نقشه‌های ساختمانی را برای هماهنگی اتاق‌ها و جریان حرکت افراد طراحی می‌کند. این رویکرد گرافی، قابلیت‌های مختلف عامل را به هم متصل کرده و جریان اطلاعات را به شکلی منطقی و قابل فهم هدایت می‌کند.

این راهنما به شما نشان می‌دهد که چگونه با استفاده از LangGraph یک پایپ‌لاین (خط لوله) تحلیل متن چند مرحله‌ای ایجاد کنید. این پایپ‌لاین قادر خواهد بود متن را در سه مرحله کلیدی پردازش کند: طبقه‌بندی، استخراج موجودیت و خلاصه‌سازی. هدف ما در این آموزش، نشان دادن چگونگی استفاده از LangGraph برای ساخت یک گردش کار ماژولار و قابل گسترش برای کارهای پردازش زبان طبیعی است.

مقدمه‌ای بر LangGraph

LangGraph یک چارچوب نوآورانه از سوی LangChain است که برای ساخت برنامه‌های LLM چند-عاملی و با قابلیت حفظ وضعیت طراحی شده است. این چارچوب ابزارها و ساختاری را فراهم می‌کند که برای ساخت عامل‌های هوش مصنوعی پیچیده از طریق یک رویکرد مبتنی بر گراف نیاز داریم.

تصور کنید LangGraph یک میز طراحی برای معمار است؛ این ابزارها را به ما می‌دهد تا نحوه تفکر و عملکرد عامل خود را طراحی کنیم. همانطور که یک معمار، طرح‌های اولیه‌ای را می‌کشد که نشان می‌دهد چگونه اتاق‌های مختلف به هم متصل می‌شوند و افراد چگونه در ساختمان حرکت می‌کنند، LangGraph به ما اجازه می‌دهد تا نحوه اتصال قابلیت‌های مختلف و جریان اطلاعات در عامل ما را طراحی کنیم.

ویژگی‌های کلیدی:

  • مدیریت وضعیت: حفظ وضعیت پایدار در تعاملات مختلف. این قابلیت به عامل امکان می‌دهد اطلاعات را در طول زمان به خاطر بسپارد و از آن در مراحل بعدی استفاده کند.
  • مسیریابی منعطف: تعریف جریان‌های پیچیده بین اجزای مختلف. این ویژگی اجازه می‌دهد تا تصمیم‌گیری‌ها بر اساس نتایج مراحل قبلی انجام شود و مسیرهای مختلفی را در پایپ‌لاین فعال کند.
  • پایداری: ذخیره و از سرگیری گردش کار. این قابلیت برای عملیات طولانی‌مدت یا در محیط‌های تولیدی که نیاز به مقاومت در برابر خطا دارند، حیاتی است.
  • بصری‌سازی: مشاهده و درک ساختار عامل شما. نمایش بصری گراف، فهم پیچیدگی‌های عامل را آسان‌تر می‌کند و به اشکال‌زدایی کمک می‌کند.

در این آموزش، با ساخت یک پایپ‌لاین تحلیل متن چند مرحله‌ای که متن را از سه طریق پردازش می‌کند، LangGraph را به نمایش خواهیم گذاشت:

  1. طبقه‌بندی متن: دسته‌بندی متن ورودی به دسته‌های از پیش تعریف شده.
  2. استخراج موجودیت: شناسایی موجودیت‌های کلیدی از متن (افراد، سازمان‌ها، مکان‌ها).
  3. خلاصه‌سازی متن: تولید یک خلاصه مختصر از متن ورودی.

این پایپ‌لاین نشان می‌دهد که چگونه می‌توان از LangGraph برای ایجاد یک گردش کار ماژولار و قابل گسترش برای کارهای پردازش زبان طبیعی استفاده کرد.

راه‌اندازی محیط ما

قبل از اینکه به کدنویسی بپردازیم، اجازه دهید محیط توسعه خود را راه‌اندازی کنیم. راه‌اندازی صحیح محیط اطمینان می‌دهد که تمام ابزارهای لازم در دسترس هستند و می‌توانیم بدون مشکل شروع به کار کنیم.

یک محیط کاری مناسب، نه تنها باعث افزایش بهره‌وری می‌شود، بلکه از بروز خطاهای رایج ناشی از وابستگی‌های ناسازگار نیز جلوگیری می‌کند. این بخش، شما را در مراحل نصب بسته‌های لازم و پیکربندی کلیدهای API راهنمایی می‌کند.

نصب:

برای شروع، ابتدا باید بسته‌های مورد نیاز را نصب کنیم. این بسته‌ها شامل خود LangGraph، LangChain برای تعامل با مدل‌های زبان بزرگ، langchain-openai برای استفاده از مدل‌های OpenAI، و python-dotenv برای مدیریت امن کلیدهای API هستند.

# Install required packages
!pip install langgraph langchain langchain-openai python-dotenv

تنظیم کلیدهای API:

برای استفاده از مدل‌های OpenAI، به یک کلید OpenAI API نیاز داریم. اگر هنوز کلیدی ندارید، می‌توانید آن را از https://platform.openai.com/signup دریافت کنید. توصیه می‌شود کلید API خود را در یک فایل `.env` ذخیره کنید تا به صورت امن مدیریت شود و در کد شما مستقیماً نمایش داده نشود.

import os
from dotenv import load_dotenv

# Load environment variables from .env file (create this with your API key)
load_dotenv()

# Set OpenAI API key
os.environ["OPENAI_API_KEY"] = os.getenv('OPENAI_API_KEY')

تست راه‌اندازی ما:

بیایید اطمینان حاصل کنیم که محیط ما به درستی کار می‌کند. برای این کار، یک تست ساده با مدل OpenAI انجام می‌دهیم تا مطمئن شویم که ارتباط با API برقرار شده و مدل پاسخ می‌دهد. این مرحله یک بررسی سریع برای جلوگیری از مشکلات احتمالی در ادامه راه است.

from langchain_openai import ChatOpenAI

# Initialize the ChatOpenAI instance
llm = ChatOpenAI(model="gpt-4o-mini")

# Test the setup
response = llm.invoke("Hello! Are you working?")
print(response.content)

ساخت پایپ‌لاین تحلیل متن ما

اکنون که محیطمان آماده است، وقت آن رسیده که به بخش اصلی آموزش بپردازیم: ساخت پایپ‌لاین تحلیل متن با LangGraph. این پایپ‌لاین از چندین گره (node) تشکیل شده است که هر یک وظیفه خاصی را بر عهده دارند و به صورت هماهنگ با یکدیگر کار می‌کنند تا به تحلیل جامع متن دست یابند. ابتدا، پکیج‌های لازم را برای تعریف ساختار و منطق پایپ‌لاین وارد می‌کنیم.

import os
from typing import TypedDict, List, Annotated
from langgraph.graph import StateGraph, END
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage
from langchain_core.runnables.graph import MermaidDrawMethod
from IPython.display import display, Image

طراحی حافظه عامل ما:

همانطور که هوش انسانی نیازمند حافظه است، عامل ما نیز به راهی برای پیگیری اطلاعات نیاز دارد. ما این حافظه را با استفاده از یک TypedDict ایجاد می‌کنیم تا ساختار وضعیت خود را تعریف کنیم. این وضعیت، به عنوان یک فضای کاری مشترک بین گره‌های مختلف در گراف عمل می‌کند و به آن‌ها اجازه می‌دهد اطلاعات را به اشتراک بگذارند و بر اساس آن عمل کنند.

class State(TypedDict):
    text: str
    classification: str
    entities: List[str]
    summary: str

# Initialize our language model with temperature=0 for more deterministic outputs
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
چرا هوش مصنوعی باعث می‌شود عقل خود را از دست بدهیم (و نه آنطور که فکر می‌کنید)

ایجاد قابلیت‌های اصلی عامل ما:

حالا به سراغ ایجاد مهارت‌های واقعی عامل خود می‌رویم. هر یک از این قابلیت‌ها به عنوان تابعی پیاده‌سازی شده‌اند که نوع خاصی از تحلیل را انجام می‌دهند. این طراحی ماژولار به ما اجازه می‌دهد تا هر جزء را به صورت مستقل توسعه و تست کنیم، و سپس آن‌ها را به راحتی در پایپ‌لاین بزرگ‌تر ترکیب کنیم. این سه گره، هسته اصلی پایپ‌لاین تحلیل متن ما را تشکیل می‌دهند.

1. گره طبقه‌بندی:

گره طبقه‌بندی، مسئول تعیین دسته بندی اصلی متن ورودی است. این گره از یک PromptTemplate استفاده می‌کند تا متن را به مدل زبان بزرگ (LLM) ارسال کرده و از آن بخواهد متن را به یکی از دسته‌های “اخبار”، “وبلاگ”، “تحقیق” یا “سایر” طبقه‌بندی کند. خروجی این گره، دسته‌بندی متن است که در وضعیت (State) ذخیره می‌شود.

def classification_node(state: State):
    🟡Classify the text into one of the categories: News, Blog, Research, or Other🟡
    prompt = PromptTemplate(
        input_variables=["text"],
        template="Classify the following text into one of the categories: News, Blog, Research, or Other.

Text:{text}

Category:"
    )
    message = HumanMessage(content=prompt.format(text=state["text"]))
    classification = llm.invoke([message]).content.strip()
    return {"classification": classification}
2. گره استخراج موجودیت:

این گره، وظیفه شناسایی و استخراج موجودیت‌های کلیدی (مانند اشخاص، سازمان‌ها و مکان‌ها) از متن را بر عهده دارد. با ارسال متن به LLM و درخواست لیست جدا شده با کاما از موجودیت‌ها، این گره اطلاعات مهمی را برای تحلیل عمیق‌تر فراهم می‌کند. خروجی آن به عنوان یک لیست در وضعیت پایپ‌لاین به‌روز می‌شود.

def entity_extraction_node(state: State):
    🟡Extract all the entities (Person, Organization, Location) from the text🟡
    prompt = PromptTemplate(
        input_variables=["text"],
        template="Extract all the entities (Person, Organization, Location) from the following text. Provide the result as a comma-separated list.

Text:{text}

Entities:"
    )
    message = HumanMessage(content=prompt.format(text=state["text"]))
    entities = llm.invoke([message]).content.strip().split(", ")
    return {"entities": entities}
3. گره خلاصه‌سازی:

آخرین گره در پایپ‌لاین پایه، گره خلاصه‌سازی است. این گره، یک خلاصه کوتاه و مختصر از متن ورودی تولید می‌کند. این خلاصه‌سازی، به سرعت می‌تواند ایده اصلی متن را منتقل کند، که برای مرور سریع اسناد طولانی یا ارائه چکیده‌ای از محتوا بسیار مفید است. خروجی این گره نیز به وضعیت پایپ‌لاین اضافه می‌شود.

def summarization_node(state: State):
    🟡Summarize the text in one short sentence🟡
    prompt = PromptTemplate(
        input_variables=["text"],
        template="Summarize the following text in one short sentence.

Text:{text}

Summary:"
    )
    message = HumanMessage(content=prompt.format(text=state["text"]))
    summary = llm.invoke([message]).content.strip()
    return {"summary": summary}

همه چیز را کنار هم قرار دهیم:

حالا به هیجان‌انگیزترین بخش می‌رسیم؛ اتصال این قابلیت‌ها به یک سیستم هماهنگ با استفاده از LangGraph. در این مرحله، ما گره‌های تعریف شده را به یک گراف وضعیت (StateGraph) اضافه می‌کنیم و سپس مسیر جریان اطلاعات را بین این گره‌ها با تعریف لبه‌ها (edges) مشخص می‌کنیم. این کار به LangGraph اجازه می‌دهد تا ترتیب اجرای عملیات را به درستی مدیریت کند.

ما نقطه ورودی (entry point) گراف را تعیین می‌کنیم که اولین گره‌ای است که در هر اجرای پایپ‌لاین فراخوانی می‌شود. سپس، با استفاده از `add_edge`، مسیرهای انتقال از یک گره به گره دیگر را مشخص می‌کنیم. در نهایت، با `compile()` گراف را آماده اجرا می‌کنیم.

# Create our StateGraph
workflow = StateGraph(State)

# Add nodes to the graph
workflow.add_node("classification_node", classification_node)
workflow.add_node("entity_extraction", entity_extraction_node)
workflow.add_node("summarization", summarization_node)

# Add edges to the graph
workflow.set_entry_point("classification_node")  # Set the entry point of the graph
workflow.add_edge("classification_node", "entity_extraction")
workflow.add_edge("entity_extraction", "summarization")
workflow.add_edge("summarization", END)

# Compile the graph
app = workflow.compile()

ساختار گردش کار: پایپ‌لاین ما این مسیر را دنبال می‌کند:
classification_node → entity_extraction → summarization → END

تست عامل ما

اکنون که عامل خود را ساخته‌ایم، بیایید ببینیم چگونه با یک مثال متنی واقعی عمل می‌کند. این مرحله برای تأیید عملکرد صحیح گره‌ها و جریان اطلاعات در پایپ‌لاین ضروری است. یک متن نمونه را به عامل می‌دهیم و خروجی‌های طبقه‌بندی، موجودیت‌ها و خلاصه‌سازی را بررسی می‌کنیم.

sample_text = 🟢 OpenAI has announced the GPT-4 model, which is a large multimodal model that exhibits human-level performance on various professional benchmarks. It is developed to improve the alignment and safety of AI systems. Additionally, the model is designed to be more efficient and scalable than its predecessor, GPT-3. The GPT-4 model is expected to be released in the coming months and will be available to the public for research and development purposes. 🟢 
state_input = {"text": sample_text} 
result = app.invoke(state_input) 
print("Classification:", result["classification"]) 
print("
Entities:", result["entities"]) 
print("
Summary:", result["summary"])
Classification: News Entities: ['OpenAI', 'GPT-4', 'GPT-3'] Summary: OpenAI's upcoming GPT-4 model is a multimodal AI that aims for human-level performance and improved safety, efficiency, and scalability compared to GPT-3.

درک قدرت پردازش هماهنگ:

آنچه این نتیجه را به ویژه چشمگیر می‌کند، فقط خروجی‌های فردی نیست – بلکه نحوه تکمیل هر مرحله توسط مراحل دیگر برای ایجاد درک کامل از متن است. این بازتابی از درک مطلب انسان است، جایی که ما به طور طبیعی درکی از نوع متن به دست می‌آوریم، نام‌ها و مفاهیم مهم را یادداشت می‌کنیم، و یک خلاصه ذهنی تشکیل می‌دهیم – همه اینها در حالی که روابط بین این جنبه‌های مختلف درک را حفظ می‌کنیم.

  • طبقه‌بندی زمینه را فراهم می‌کند که به درک ما از نوع متن کمک می‌کند.
  • استخراج موجودیت نام‌ها و مفاهیم مهم را شناسایی می‌کند.
  • خلاصه‌سازی جوهر سند را استخراج می‌کند.
اینتل بیانیه داد: ۳۰ درصد از کل نیروهایمان اخراج می‌شوند

این رویکرد، پایپ‌لاین را به یک سیستم هوشمندتر تبدیل می‌کند که قادر است تحلیل‌های عمیق‌تر و مرتبط‌تری را ارائه دهد.

با متن خودتان امتحان کنید

اکنون نوبت شماست! پایپ‌لاین تحلیل متن که با LangGraph ساخته‌ایم، آماده پردازش متون دلخواه شماست. این کار به شما امکان می‌دهد تا قدرت این چارچوب را با داده‌های مورد نظر خودتان تجربه کنید و نتایج را مشاهده کنید.

کافی است متن مورد نظر خود را در متغیر `your_text` قرار دهید و سپس کد را اجرا کنید. این انعطاف‌پذیری، LangGraph را به ابزاری عالی برای کاربردهای متنوع تبدیل می‌کند.

# Replace this with your own text to analyze your_text = 🟢 The recent advancements in quantum computing have opened new possibilities for cryptography and data security. Researchers at MIT and Google have demonstrated quantum algorithms that could potentially break current encryption methods. However, they are also developing new quantum-resistant encryption techniques to protect data in the future. 🟢 

# Process the text through our pipeline your_result = app.invoke({"text": your_text}) print("Classification:", your_result["classification"]) 

print("
Entities:", your_result["entities"]) 
print("
Summary:", your_result["summary"])

Classification: Research Entities: ['MIT', 'Google'] Summary: Recent advancements in quantum computing may threaten current encryption methods while also prompting the development of new quantum-resistant techniques.

افزودن قابلیت‌های بیشتر (پیشرفته)

یکی از جنبه‌های قدرتمند LangGraph این است که به راحتی می‌توان عامل خود را با قابلیت‌های جدید گسترش داد. این ماژولار بودن به توسعه‌دهندگان اجازه می‌دهد تا به سرعت و بدون نیاز به بازنویسی کل سیستم، ویژگی‌های جدیدی را اضافه کنند. بیایید یک گره تحلیل احساسات به پایپ‌لاین خود اضافه کنیم تا بتوانیم جنبه دیگری از متن را درک کنیم.

اول، اجازه دهید وضعیت خود را برای افزودن احساسات به‌روز کنیم:

برای اضافه کردن قابلیت تحلیل احساسات، ابتدا باید ساختار وضعیت (State) خود را به‌روز کنیم تا شامل فیلد جدید `sentiment` باشد. این به ما اجازه می‌دهد تا نتیجه تحلیل احساسات را در کنار سایر اطلاعات مربوط به متن ذخیره کنیم.

# First, let's update our State to include sentiment
class EnhancedState(TypedDict):
    text: str
    classification: str
    entities: List[str]
    summary: str
    sentiment: str

# Create our sentiment analysis node
def sentiment_node(state: EnhancedState):
    🟡Analyze the sentiment of the text: Positive, Negative, or Neutral🟡
    prompt = PromptTemplate(
        input_variables=["text"],
        template="Analyze the sentiment of the following text. Is it Positive, Negative, or Neutral?

Text:{text}

Sentiment:"
    )
    message = HumanMessage(content=prompt.format(text=state["text"]))
    sentiment = llm.invoke([message]).content.strip()
    return {"sentiment": sentiment}

ایجاد یک گردش کار جدید با وضعیت پیشرفته:

پس از به‌روزرسانی وضعیت و تعریف گره تحلیل احساسات، اکنون می‌توانیم یک گردش کار جدید ایجاد کنیم که این گره جدید را شامل شود. این فرآیند مشابه ساختاردهی پایپ‌لاین اولیه است، با این تفاوت که گره تحلیل احساسات به انتهای جریان اضافه می‌شود.

# Create a new workflow with the enhanced state
enhanced_workflow = StateGraph(EnhancedState)

# Add the existing nodes
enhanced_workflow.add_node("classification_node", classification_node)
enhanced_workflow.add_node("entity_extraction", entity_extraction_node)
enhanced_workflow.add_node("summarization", summarization_node)

# Add our new sentiment node
enhanced_workflow.add_node("sentiment_analysis", sentiment_node)

# Create a more complex workflow with branches
enhanced_workflow.set_entry_point("classification_node")
enhanced_workflow.add_edge("classification_node", "entity_extraction")
enhanced_workflow.add_edge("entity_extraction", "summarization")
enhanced_workflow.add_edge("summarization", "sentiment_analysis")
enhanced_workflow.add_edge("sentiment_analysis", END)

# Compile the enhanced graph
enhanced_app = enhanced_workflow.compile()

تست عامل پیشرفته:

برای اطمینان از صحت عملکرد پایپ‌لاین به‌روز شده، آن را با همان متن نمونه قبلی تست می‌کنیم. حالا باید علاوه بر طبقه‌بندی، استخراج موجودیت و خلاصه‌سازی، نتیجه تحلیل احساسات را نیز در خروجی ببینیم. این نشان می‌دهد که گره جدید با موفقیت در جریان کار ادغام شده است.

# Try the enhanced pipeline with the same text
enhanced_result = enhanced_app.invoke({"text": sample_text})

print("Classification:", enhanced_result["classification"])
print("
Entities:", enhanced_result["entities"])
print("
Summary:", enhanced_result["summary"])
print("
Sentiment:", enhanced_result["sentiment"])
Classification: News

Entities: ['OpenAI', 'GPT-4', 'GPT-3']

Summary: OpenAI's upcoming GPT-4 model is a multimodal AI that aims for human-level performance and improved safety, efficiency, and scalability compared to GPT-3.

Sentiment: The sentiment of the text is Positive. It highlights the advancements and improvements of the GPT-4 model, emphasizing its human-level performance, efficiency, scalability, and the positive implications for AI alignment and safety. The anticipation of its release for public use further contributes to the positive tone.

افزودن لبه‌های شرطی (منطق پیشرفته)

تا اینجا، گراف ما یک مسیر خطی ثابت را دنبال کرده است: گره طبقه‌بندی → استخراج موجودیت → خلاصه‌سازی → (تحلیل احساسات). با این حال، در کاربردهای واقعی، اغلب می‌خواهیم برخی از مراحل را فقط در صورت نیاز اجرا کنیم. اینجاست که لبه‌های شرطی (Conditional Edges) LangGraph وارد عمل می‌شوند.

لپ‌تاپ اسمورفی رونمایی شد؛ محصول خاص با تولید بسیار محدود

لبه‌های شرطی به ما امکان می‌دهند تا دروازه‌های منطقی ایجاد کنیم که اجرای پایپ‌لاین را به صورت پویا بر اساس داده‌های موجود در وضعیت فعلی هدایت می‌کنند. این قابلیت، انعطاف‌پذیری بی‌نظیری را برای ساخت عوامل هوشمند و کارآمد فراهم می‌آورد. این بخش به شما نشان می‌دهد که چگونه می‌توان این منطق پیشرفته را در LangGraph پیاده‌سازی کرد.

چرا لبه‌های شرطی؟

لبه‌های شرطی ابزاری قدرتمند برای افزایش هوشمندی و کارایی پایپ‌لاین‌های LangGraph هستند. با استفاده از این قابلیت، عامل ما قادر خواهد بود تصمیمات پیچیده‌تری بگیرد و تنها مراحل مورد نیاز را بر اساس شرایط خاص اجرا کند. این رویکرد مزایای متعددی دارد:

  • تصمیم‌گیری بر اساس زمینه.
  • پریدن از مراحل غیرضروری.
  • اجرای سریع‌تر و ارزان‌تر.
  • رفتار هوشمندانه‌تر.

ایجاد یک تابع مسیریابی:

برای پیاده‌سازی لبه‌های شرطی، ابتدا به یک تابع مسیریابی نیاز داریم. این تابع، وضعیت فعلی عامل را دریافت کرده و بر اساس منطق داخلی خود، نام گره بعدی را که باید اجرا شود، برمی‌گرداند. در مثال ما، این تابع تعیین می‌کند که آیا پس از طبقه‌بندی، باید به گره استخراج موجودیت برویم یا مستقیماً به خلاصه‌سازی.

# Route after classification
def route_after_classification(state: EnhancedState) -> str:
    category = state["classification"].lower() # returns: "news", "blog", "research", "other"
    return category in ["news", "research"]

تعریف گراف شرطی:

اکنون با استفاده از تابع مسیریابی، می‌توانیم گراف خود را با لبه‌های شرطی تعریف کنیم. این کار با استفاده از `add_conditional_edges` انجام می‌شود. در اینجا، پس از گره طبقه‌بندی، تصمیم گرفته می‌شود که آیا بر اساس دسته‌بندی متن، باید به استخراج موجودیت برویم یا مستقیماً به خلاصه‌سازی. این انعطاف‌پذیری، پایپ‌لاین ما را هوشمندتر می‌کند.

from langgraph.graph import StateGraph, END

conditional_workflow = StateGraph(EnhancedState)

# Add nodes
conditional_workflow.add_node("classification_node", classification_node)
conditional_workflow.add_node("entity_extraction", entity_extraction_node)
conditional_workflow.add_node("summarization", summarization_node)
conditional_workflow.add_node("sentiment_analysis", sentiment_node)

# Set entry point
conditional_workflow.set_entry_point("classification_node")

# Add conditional edge
conditional_workflow.add_conditional_edges("classification_node", route_after_classification, path_map={
    True: "entity_extraction",
    False: "summarization"
})

# Add remaining static edges
conditional_workflow.add_edge("entity_extraction", "summarization")
conditional_workflow.add_edge("summarization", "sentiment_analysis")
conditional_workflow.add_edge("sentiment_analysis", END)

# Compile
conditional_app = conditional_workflow.compile()

تست پایپ‌لاین شرطی:

برای بررسی عملکرد صحیح پایپ‌لاین شرطی، آن را با دو نوع متن مختلف تست می‌کنیم: یکی از نوع “اخبار” یا “تحقیق” و دیگری از نوع “وبلاگ” یا “سایر”. این آزمایش‌ها نشان می‌دهند که چگونه لبه‌های شرطی به درستی مسیر اجرای پایپ‌لاین را بر اساس طبقه‌بندی اولیه تغییر می‌دهند و کارایی را افزایش می‌دهند.

test_text = 🟢
OpenAI released the GPT-4 model with enhanced performance on academic and professional tasks. It's seen as a major breakthrough in alignment and reasoning capabilities.
🟢

result = conditional_app.invoke({"text": test_text})

print("Classification:", result["classification"])
print("Entities:", result.get("entities", "Skipped"))
print("Summary:", result["summary"])
print("Sentiment:", result["sentiment"])
Classification: News
Entities: ['OpenAI', 'GPT-4']
Summary: OpenAI's GPT-4 model significantly improves performance in academic and professional tasks, marking a breakthrough in alignment and reasoning.
Sentiment: The sentiment of the text is Positive. It highlights the release of the GPT-4 model as a significant advancement, emphasizing its enhanced performance and breakthrough capabilities.

حالا آن را با یک وبلاگ امتحان کنید:

blog_text = 🟢
Here's what I learned from a week of meditating in silence. No phones, no talking—just me, my breath, and some deep realizations.
🟢

result = conditional_app.invoke({"text": blog_text})

print("Classification:", result["classification"])
print("Entities:", result.get("entities", "Skipped (not applicable)"))
print("Summary:", result["summary"])
print("Sentiment:", result["sentiment"])
Classification: Blog
Entities: Skipped (not applicable)
Summary: A week of silent meditation led to profound personal insights.
Sentiment: The sentiment of the text is Positive. The mention of "deep realizations" and the overall reflective nature of the experience suggests a beneficial and enlightening outcome from the meditation practice.

با لبه‌های شرطی، عامل ما اکنون می‌تواند:

  • بر اساس زمینه تصمیم‌گیری کند.
  • مراحل غیرضروری را رد کند.
  • سریع‌تر و ارزان‌تر اجرا شود.
  • هوشمندانه‌تر رفتار کند.

نتیجه‌گیری

در این آموزش، ما به صورت گام به گام نحوه ساخت یک پایپ‌لاین تحلیل متن قدرتمند را با استفاده از LangGraph بررسی کردیم. این سفر از مفاهیم اولیه تا پیاده‌سازی منطق پیشرفته، نشان داد که LangGraph چگونه می‌تواند فرآیندهای پردازش زبان طبیعی را متحول کند و امکان ساخت عوامل هوش مصنوعی پیچیده و کارآمد را فراهم آورد. ما نه تنها نحوه طبقه‌بندی، استخراج موجودیت و خلاصه‌سازی متن را آموختیم، بلکه چگونگی ادغام قابلیت‌های جدید و کنترل جریان کار با لبه‌های شرطی را نیز بررسی کردیم.

LangGraph یک چارچوب قدرتمند برای ایجاد عوامل هوش مصنوعی با مدل‌سازی آن‌ها به عنوان گراف‌های قابلیت‌ها فراهم می‌کند. این رویکرد، طراحی، اصلاح و گسترش سیستم‌های پیچیده هوش مصنوعی را آسان می‌کند و راه را برای نوآوری‌های بیشتر در حوزه LLMها هموار می‌سازد. از طریق این آموزش، شما اکنون ابزارهای لازم برای ساخت پایپ‌لاین‌های تحلیل متن سفارشی خود را در اختیار دارید و می‌توانید آن‌ها را با توجه به نیازهای خاص خود گسترش دهید.

گام‌های بعدی:

  • گره‌های بیشتری را برای گسترش قابلیت‌های عامل خود اضافه کنید.
  • مدل‌های زبان بزرگ (LLM) و پارامترهای مختلف را آزمایش کنید.
  • ویژگی‌های پایداری وضعیت (state persistence) LangGraph را برای مکالمات مداوم بررسی کنید.

کدهای کامل این آموزش را می‌توانید در اینجا مشاهده کنید. تمام اعتبار این تحقیق به محققان این پروژه تعلق دارد. همچنین، می‌توانید ما را در توییتر دنبال کنید و فراموش نکنید که به ساب‌ردیت 100 هزار+ نفری ما در حوزه یادگیری ماشین بپیوندید و در خبرنامه ما عضو شوید.

دیگر هیچ مقاله‌ای را از دست ندهید

محتوای کاملاً انتخاب شده، مطالعات موردی، به‌روزرسانی‌های بیشتر.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

مدیریت حرفه‌ای شبکه‌های اجتماعی با رسا وب آفرین

  • افزایش تعامل و دنبال‌کننده در اینستاگرام و تلگرام

  • تولید محتوا بر اساس الگوریتم‌های روز شبکه‌های اجتماعی

  • طراحی پست و استوری اختصاصی با برندینگ شما

  • تحلیل و گزارش‌گیری ماهانه از عملکرد پیج

  • اجرای کمپین تبلیغاتی با بازده بالا

محبوب ترین مقالات

آماده‌اید کسب‌وکارتان را دیجیتالی رشد دهید؟

از طراحی سایت حرفه‌ای گرفته تا کمپین‌های هدفمند گوگل ادز و ارسال نوتیفیکیشن هوشمند؛ ما اینجاییم تا در مسیر رشد دیجیتال، همراه شما باشیم. همین حالا با ما تماس بگیرید یا یک مشاوره رایگان رزرو کنید.