معرفی به عوامل AI و Langgraph


نویسنده (ها): Teja Yerramsetty

در ابتدا منتشر شده در به سمت هوش مصنوعیبشر

معرفی به عوامل AI و Langgraphمعرفی به عوامل AI و Langgraph

اگر می خواهید از قدرت کامل یک استفاده کنید LLM، مؤثرترین راه برای انجام آن ، ترکیب این است LLM در یک جریان نرم افزاری. این به ما اجازه می دهد تا فراتر از حالت پاسخگویی سوال ساده و باعث شود که LLM کارهای پیچیده تری انجام دهد. به طور گسترده ، اگر مسیری که LLM می تواند برای تأثیرگذاری بر تغییر تأثیر بگذارد ، ثابت می شود ، آن را گردش کار می نامند. اگر ما اجازه می دهیم LLM تصمیم بگیرد که کدام مسیر را طی کند و چه موقع انجام شود ، آن را عامل می نامند. Langgraph یک چارچوب پایتون است که به ما امکان می دهد تا به طور موثری گردش کار و عوامل را بسازیم.

این مقاله راهنما برای بلوک های اصلی ساختمان Langgraph است و آنها را در برخی از الگوهای مشترک عامل AI استفاده می کند. من به عناصر API و چارچوب سطح بالا و نمونه های ساده می چسبم. این مقاله به معنای ورود آسان برای بیشتر افراد است که بتوانند در مورد لانگگراف و مأمورین بیاموزند.

عناصر نمودار

ما با عبور از عناصر نمودار عمومی موجود در Langgraph شروع می کنیم.

عناصر نمودار

گره بلوک های اصلی عملکردی در نمودار هستند و از طریق توابع پایتون تعریف می شوند.

لبه گره ها را در نمودار متصل می کند و نیازی به تعریفی ندارد.

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

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

لبه ها این حالت را از گره گرفته تا گره حمل می کنند و گره ها از حالت استفاده می کنند و حالت را به روز می کنند.

چند نوع گره وجود دارد که معمولاً برای تبدیل این نمودار عمومی به یک عامل هوش مصنوعی استفاده می شود.

گره های نمودار عامل AI

گره LLM استنتاج را بر روی پیام های موجود در ایالت اجرا می کند. API Langgraph به ما اجازه می دهد تا به راحتی درخواست ها یا تعاریف ابزار را اضافه کنیم. ابزارها فقط توابعی هستند که توسط LLM می توان نامید. ما می توانیم یک دکوراتور ابزار و یک Docstring اضافه کنیم که تعریف می کند که عملکرد و استدلال ها چه کاری انجام می دهد. این چارچوب از این عملکرد استفاده می کند و آن را از طریق درخواست مناسب در دسترس LLM قرار می دهد. گره ابزار به دنبال این ابزار از LLM است ، عملکرد را اجرا می کند و نتیجه را به حالت اضافه می کند.

ما می توانیم این بلوک های ساختمانی را در یک عامل هوش مصنوعی قرار دهیم. ما عامل را برای دنبال کردن این نمودار خواهیم ساخت.

نمودار عامل مثال

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

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

You: What's the time?

Assistant:
-------------
human: What's the time?
ai:

Tool Calls:
- get_current_time: {}
tool: "10:49 PM, June 16, 2025"
ai: The current time is 10:49 PM, June 16, 2025.

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

You: what are some fruits that are in season in California 

Assistant:
-------------
human: what are some fruits that are in season in California
ai:

Tool Calls:
- get_current_time: {}
tool: "10:50 PM, June 16, 2025"
ai: Based on the current time and location (California), here are some fruits that are in season:

1. **Strawberries**: From March to July, strawberries are at their peak ripeness and availability.
2. **Avocados**: Avocados are a year-round crop in California, but the peak season is from May to October.
3. **Peaches**: Peaches are in season from June to August, with the best varieties coming from the San Joaquin Valley.
4. **Plums**: Plums are available from May to July, with Japanese plums being one of the most popular varieties.
5. **Apricots**: Apricots are in season from April to June, with the peak season being in May.
6. **Nectarines**: Nectarines are similar to peaches and are also in season from June to August.
7. **Grapes**: Grapes are available from September to November, with some varieties coming in as early as July.
8. **Apples**: Apples are in season from October to May, with some varieties being available as early as September.

Please note that the availability of these fruits can vary depending on the specific region within California and the weather conditions during the growing season.

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

اجرای نمودار در کد

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

کد در بخش ها خواهد بود ، اما به یک اسکریپت کامل اضافه می شود. ما از Ollama برای اجرای LLM محلی استفاده خواهیم کرد. من مراحل تنظیم و اجرای LLM های محلی را در مقاله قبلی خود طی می کنم. اگر به نمونه محلی Ollama دسترسی ندارید ، می توانید با تغییر یک خط به راحتی از API مانند OpenAi استفاده کنید.

LLMS محلی: یک راهنمای جامع

تصور کنید که AI پیشرفته را بدون تنظیمات ابر پیچیده یا برنامه نویسی گسترده مستقر کنید. جدیدترین موج محلی کوچک …

pub.towardsai.net

وابستگی ها را نصب کنید.

pip install langchain langchain-ollama langgraph langchain-core

تمام ماژول های مورد نیاز را وارد کنید.

from typing import TypedDict, Annotated, Dict, Any
from langgraph.graph import StateGraph, END
from langgraph.graph.message import add_messages
from langchain.tools import tool
from langchain_ollama import ChatOllama
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.schema import AIMessage
from langchain_core.messages import ToolMessage
import json
from datetime import datetime

ابزارها را تعریف کنید. در مثال ما یک ابزار داریم که می تواند تاریخ و زمان فعلی را جستجو کند. ما از دکوراتور ابزار از Langchain استفاده می کنیم. این دکوراتور به ما امکان می دهد تا نام ابزار را تعریف کنیم و Docstring را تجزیه کنیم تا تعریف ابزار را بدست آوریم. این چارچوب باید بداند که عملکرد چه کاری انجام می دهد ، آرگومان ها و انواع آنها ، عملکرد عملکرد و نوع آن چیست. گره LLM نام ابزار را به عنوان رشته ها به دست می آورد ، بنابراین ما همچنین به یک فرهنگ لغت نیاز داریم تا با استفاده از نام ، شیء عملکرد واقعی را جستجو کنیم.

در زیر تعریف ابزار get_current_time آورده شده است.

@tool("get_current_time", parse_docstring=True)
def get_current_time() -> str:
"""Get the current time and date.
Returns:
str: Current time and date in human readable format (e.g., "2:30 PM, June 15, 2024")
"""

now = datetime.now()
return now.strftime("%I:%M %p, %B %d, %Y")

tools = [get_current_time]
tool_map = {tool.name: tool for tool in tools}

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

class State(TypedDict):
messages: Annotated[list, add_messages]

بعد گره LLM را تعریف می کنیم. این گره از سرور Ollama به عنوان موتور استنتاج اساسی استفاده می کند. Langgraph API را برای سایر LLM های ابر دیگر مانند Openai و Gemini فراهم می کند. بلوک کد رابط اولاما را آغاز می کند ، یک سیستم را به پیام ها اضافه می کند ، ابزارها را به LLM متصل می کند و استنتاج را بر روی پیام های موجود در حالت می خواند. روش bind_tools را در نظر بگیرید. این ابزار را با فرمت JSON قالب می کند و آن را به سریع LLM اضافه می کند. این به LLM اجازه می دهد تا ابزار مناسب را انتخاب کرده و آرگومان ها را پر کند. اگر LLM تصمیم بگیرد که یک ابزار را فراخوانی کند ، فرهنگ لغت پاسخ کلید “Tool_Calls” را که به پیامی که وارد کشور می شود اضافه می کند.

def llm_node(state: State) -> Dict[str, Any]:
llm = ChatOllama(model="llama3.2:3b")
prompt_template = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
MessagesPlaceholder(variable_name="messages")
])

llm_with_tools = llm.bind_tools(tools)
prompt = prompt_template.invoke(state)
response = llm_with_tools.invoke(prompt)

if isinstance(response, dict) and "tool_calls" in response:
return {"messages": [AIMessage(content=response.get("content", ""))], "tool_calls": response["tool_calls"]}
elif hasattr(response, "additional_kwargs") and "tool_calls" in response.additional_kwargs:
return {"messages": [response], "tool_calls": response.additional_kwargs["tool_calls"]}
else:
return {"messages": [response]}

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

def tool_node(state: State) -> Dict[str, Any]:
if messages := state.get("messages", []):
message = messages[-1]
else:
raise ValueError("No message found in input")
outputs = []
for tool_call in message.tool_calls:
tool_result = tool_map[tool_call["name"]].invoke(
tool_call["args"]
)
outputs.append(
ToolMessage(
content=json.dumps(tool_result),
name=tool_call["name"],
tool_call_id=tool_call["id"],
)
)
return {"messages": outputs}

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

def should_use_tool(state: State) -> str:
if isinstance(state, list):
ai_message = state[-1]
elif messages := state.get("messages", []):
ai_message = messages[-1]
else:
raise ValueError(f"No messages found in input state to tool_edge: {state}")
if hasattr(ai_message, "tool_calls") and len(ai_message.tool_calls) > 0:
return "tool"
return END

ما همه گره های نمودار را به صورت کد اجرا کرده ایم. حال بیایید آنها را در یک نمودار قرار دهیم و لبه ها را به هم وصل کنیم.

graph_builder = StateGraph(State)
graph_builder.add_node("llm", llm_node)
graph_builder.add_node("tool", tool_node)

graph_builder.add_edge("__start__", "llm")
graph_builder.add_conditional_edges(
"llm",
should_use_tool,
{
"tool": "tool",
END: END
}
)
graph_builder.add_edge("tool", "llm")
graph = graph_builder.compile()

ما همچنین می توانیم یک حلقه ساده برای دریافت ورودی کاربر اضافه کنیم و نمودار را در آن فراخوانی کنیم. تمام خروجی های گره ها در انتها چاپ می شوند.

print("Chat with the assistant (type 'exit' to quit)")
print("-------------------------------------------")

while True:
user_input = input("\nYou: ").strip()
if user_input.lower() == 'exit':
break

result = graph.invoke({"messages": [{"role": "user", "content": user_input}]})

print("\nAssistant:")
print("-------------")
for message in result["messages"]:
if isinstance(message, dict):
print(f"{message['role']}: {message['content']}")
else:
print(f"{message.type}: {message.content}")
if hasattr(message, "tool_calls") and message.tool_calls:
print("\nTool Calls:")
for tool_call in message.tool_calls:
print(f"- {tool_call['name']}: {tool_call['args']}")

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

الگوهای عامل AI مشترک

نماینده ای که ما در این مقاله ساخته ایم ، معمولاً به عنوان یک عامل React گفته می شود. کوتاه برای استدلال و عامل بازیگری. در حقیقت ، Langgraph دارای یک عامل React از پیش ساخته است که می توانید از آن استفاده کنید و تمام عملکردی را که تعریف کرده ایم دارد.

ما می توانیم بلوک های اصلی ساختمانی نمودار را در تنظیمات مختلف قرار دهیم تا انواع مختلفی از عوامل ایجاد شود. در اینجا چند مثال آورده شده است

روتر چند عامل: این الگوی از LLM اصلی برای هدایت یک کار به بهترین عامل تخصصی برای کاربشر

RAG (نسل بازیابی شده توسط Augmenter): این الگوی به یک نماینده اجازه می دهد تا قبل از پاسخ به یک سؤال ، اطلاعات را از یک پایگاه دانش خصوصی (مانند اسناد شخصی شما) بازیابی کند.

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

منابع اضافی

مستندات Langchain ، Langgraph یک منبع عالی برای شیرجه زدن به عمیق تر در بیشتر عملکرد چارچوب است. من اکیداً توصیه می کنم که مدتی را صرف موارد استفاده مشترک کنید. Langgraph ممکن است یک عامل از پیش ساخته داشته باشد که دقیقاً همان کاری را که شما می خواهید انجام می دهد.

https://langchain-ai.github.io/langgraph/

پست وبلاگ انسان شناسی همچنین یک منبع عالی برای کسب اطلاعات بیشتر در مورد نمایندگان و گردش کار است.

https://www.anthropic.com/engineering/building-effective-agents

پایان

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

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

منتشر شده از طریق به سمت هوش مصنوعی



منبع: https://towardsai.net/p/l/intro-to-ai-agents-and-langgraph