LangChain Agent کا بنیادی تصور ہے کہ LLM کو خودبخود سوچنے، فیصلے کرنے اور مختلف کارروائیاں انجام دینے کا دماغ بنایا جائے۔

مشورہ: ڈیولپمنٹ کے نقطہ نظر سے، یہ یہ ہے کہ ہم مختلف APIز تیار کریں اور پھر ایجنٹ کو ایک تسک دیں، جو اننے کو توہیندے سے پھر ترتیب دی ہوؔ کہ ایجنٹ ٹاسک کا تجزیہ کرے کہ کون سا API کال کرنا ہے تاکہ تسک مکمل ہوجای۔

LangChain Agent کا مقصد یہ ہے کہ یہ عمل کو نقل کرے۔ میں ایک سلسلہ کاروں کو پری پیکیج کرسکتا ہوں (مثلاً بایڈو تلاش، یو آر ایل مواد نکالنے والے ٹولز)، اور پھر ایجنٹ کو "کیا ڈاکر پروڈکشن ڈیپلوئمنٹ کا حل بن سکتا ہے؟" کا ٹاسک دے۔ ایجنٹ پھر LLM کو بلانے کے لیے وقت تیار کرے گا۔ تسک مکمل کرنے کے لیے، اگلے قدم میں کون سا عمل (یعنی کون سا ٹول) انجام دینا ہے۔ انفرادی ای ل یہ ٹول بلاو۔ ای آئی اس عمل کو مکمل کرنے کے لیے، بعد میں جو قدم ای ل ی ڈ BitcoinTalk Forums پر بلاو کریں۔ یہ پروسیس ٹاسک کو مکمل کر دیتی ہے۔

مشورہ: GPT ماڈل کے اجراء سے پہلے، یہ انہ کے فوجی ممکنات ہیں، جو ل إل R M کو خود بخود سوچنے اور پھر ہمارے ترتیبات پر ڈائیوٹ کرنے کا امکان فراہم کرتا ہے۔ یہ خصوصیات معین مرحلے میں ہیں اور بار بار LLM بلایا جاتا ہے، لہ خیرات لینے پر وقت فی وقت ہزاروں ٹوکنز کا کھپا ممکن ہے۔ اگر آپ پیسے بچانا چاہتے ہیں، تو سجا دینا سب سے پہلے LLM سادہ منطقی فیصلوں کو کرنے کے لیے منسوخ کر دیں۔

مرکزی تصورات

اب ہم متعلقہ مصنوعات اور تصورات کا انت introdu کریں گے۔

ایجنٹ

ایجنٹ کو ہم ہمارے مددگار کے طور پر سمجھ سکتے ہیں، ہمارے نمائندے کے طور پر فیصلے کرنے کے لیے۔ لینگ چین ایجنٹ کے سستمی تنظیم میں، یہ LLM کے ذریعہ ہے کہ اگلا عمل (یا API کال) تعین ہوتا ہے۔ ری اکشن موڈ AI فیصلہ سازی کا فرایہ پیش کرتا ہے۔ راغبین میں سے جو چاہے وہ مزید استوضاح کر سکتے ہیں۔

لینگ چین مختلف مناظر کے مختلف سینیوز کے لیے کئی اقسام کے ایجنٹ فراہم کرتا ہے۔

ٹولز

میں سمجھتا ہوں کہ ٹولز APIز کے طور پر بہتر دھان سے مقبول ہوتے ہیں، جو LLM کی قابلیتوں کو بڑھانے کے لیے تیار کیے گئے ہیں۔ LLM نے فیصلہ کیا کہ تسک مکمل کرنے کے لیے کون سا مخصوص API کال کرنا ہے۔

ٹول کٹس

ٹول کٹس عام طور پر LLM کو ایک ساتھ نہ کوفچ ایک ست of کے ساتھ ٹولز فراہم کرتے ہیں، تاکہ LLM کو خود بخود سوچنے کی زیادہ سے زیادہ بندوقیں دیں جب تسک مکمل کرنے کے لیے۔

ایجنٹ ایگزیکٹر

پراکسی ایگزیکٹر، LLM کا انتخاب کردہ ٹول (API) کو انجام دینے کے لیے ذمہ دار ہوتا ہے۔ موقوعہ کی پیسیو کوڈ درج ذیل ہے:

next_action = agent.get_action(...)
while next_action != AgentFinish:
    observation = run(next_action)
    next_action = agent.get_action(..., next_action, observation)
return next_action

گرچہ اجراء پرویس نہیں ہے، لیکن ایگزیکٹر کو بہت سے تفصیلی مسائل کا حل کرنا ہوتا ہے، جن ہیں:

  1. وہ صورتحال کا سامنا جس میں ایجنٹ نے غیر موجود ٹول کی چنائی ہو
  2. ٹول کی غلطی کی صورت میں سامنا کرنا
  3. وہ صورتحال جس میں ایجنٹ نے ایک آپٹ پروڈکشن دی رہی ہو جو کوئی ٹول کال کے طور پر حل نہیں کی جا سکتی
  4. Debugging issues.

فوری رخصت

اس سیکشن میں ہم لینگ چین ایجنٹ کی بنیادی استعمال کرنے کا تعارف پیش کریں گے۔

1. LLM لوڈ کریں

پہلے، ہم LLM کو لوڈ کریں گے، جو ہم ایجنٹ کو کنٹرول کرنے کیلیے وہ LLM استعمال کریں گے۔

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)

2. ٹولز کی تعریف

پیچھے، ہم ایجنٹ کو کال کرنے کیلیے کچھ ٹولز کی تعریف کریں گے۔ ہم ایک بہت سادہ پایتھن فنکشن کو لکھیں گے تاکہ اس کا نتیجہ کا لمبائی تھے کیلے۔

from langchain.agents import tool

@tool
def get_word_length(word: str) -> int:
    """Returns the length of the word."""
    return len(word)

get_word_length.invoke("abc")

نوٹ: فنکشن کی تفصیلات بہت اہم ہیں۔ یہ LLM کو بتاتے ہیں کہ وہ کیا مسئلہ حل کرسکتا ہے۔ get_word_length کی تفصیلات کہتی ہیں کہ LLM کو وہ لفظ کی لمبائی معلوم کرسکتا ہے۔

3

اضغیر کیا گیا سیٹ ٹولز

tools = [get_word_length]

3. متن تیار کریں

اب ہمیں ایک متن تیار کرنا ہے۔ کیونکہ OpenAI کی فنکشن کالنگ ٹول کا استعمال کرنا توزیع کے لئے حد ذرہ سدھارے گیا ہے، لہذا ہمیں کسی بھی منطقی یا اخراج کی شکایت سے نہیں واقف ہونے کی کوئی ضرورت نہیں ہے۔ ہمارے پاس صرف دو ان پٹ متغیرات ہیں: input استعمال کا سوال دہندہ کون ہے، اور agent_scratchpad ایجنٹ کے کال انشاءات کے لئے ایک پلیس ہولڈر ہے، جو جب ٹول کال کمانڈ چلایا جائے گا تو پرامپٹ ٹیمپلیٹ میں درج ہوگا۔

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "آپ بہت طاقتور معاون ہیں مگر موجودہ صورتحال کو سمجھ نہیں پا رہے ہیں۔",
        ),
        ("user", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad"),
    ]
)

4. ٹولز کو LLM سے باند کریں

ایجنٹ کو کس طرح معلوم ہوتا ہے کہ وہ کون کون سے ٹولز استعمال کرسکتا ہے؟

یہ OpenAI ٹول کالنگ فیچر پر منحصر ہے (بہت سے ماڈلز ایسی ہی خصوصیات کو سپورٹ کرتے ہیں)۔ ہمیں بس ماڈل کو تعین کرنا ہے کہ کیا تعین کردہ ٹول کال فارمیٹ ہے۔

llm_with_tools = llm.bind_tools(tools)

5. ایجنٹ تخلیق کرنا

اب جب ہم نے پچھلے مواد کو انضمام کر لیا ہے، ہم پراکسی پروگرام تخلیق کرنے کی طرف بڑھ سکتے ہیں۔ ہم آخری دو عملی اوٹلٹی فنکشنز کو درآمدی اقدامات (پراکسی ایکشنز، ٹول اوٹپٹس) میں تبدیل کرنے کے لئے ایک اور اوٹ پُٹ فنکشنز کو درآمدی اقدامات/پراکسی اینڈز میں تبدیل کرنے کے لئے درآمد کریں گے۔

from langchain.agents.format_scratchpad.openai_tools import format_to_openai_tool_messages
from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser

agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_to_openai_tool_messages(x["intermediate_steps"]),
    }
    | prompt
    | llm_with_tools
    | OpenAIToolsAgentOutputParser()
)

ایجنٹ ایگزیکیوٹر کا تعریف کرنا

from langchain.agents import AgentExecutor

agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

چلیں ایک مثال کے زریعے پراکسی پروگرام کی عملیات کو دکھاتے ہیں:

list(agent_executor.stream({"input": "کلمہ 'اڈکا' میں کتنے حروف ہیں؟"}))

ایجنٹ اوٹپُٹ لاگ مثال

> نئے ایجنٹ ایکشن چین میں داخل ہو رہے ہیں...

دعوت: پیرامیٹر `{'word': 'educa'}` کے ساتھ `get_word_length` کو چلایا جا رہا ہے

"اڈکا" میں 5 حروف ہیں۔

> تکمیل ہوئی ایکشن چین۔

اس مثال کے ذریعے ہم نے پراکسی پروگرام کے کام کرنے کا مکمل عمل دکھایا ہے۔

ایجنٹ میں یاداشت کی صلاحیت شامل کرنا

اگر ہم چاہیں کہ ایجنٹ پچھلی گفتگوئیں یاد رکھے، تو یہ کرنا واقعی بہت آسان ہے: ہمیں کلوں ایجنٹ کی مدد سے ایی واپسی کی مواد کو پرامپٹ میں شامل کرنا ہوگا اور اسے نیکالنے کے لئے ماڈل کے پاس بھیجنا ہوگا۔

پرامپٹ ٹیمپلیٹ ترتیب دینا

نیچے ہم پرامپٹ ٹیمپلیٹ ترتیب دینے کے لئے مواد کو ترتیب میں شامل کرتے ہیں۔

from langchain.prompts import MessagesPlaceholder

MEMORY_KEY = "chat_history"
prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "آپ بڑا معاون ہیں، مگر الفاظ کی لمبائی کا حساب کرنے میں ماہر نہیں ہیں۔",
        ),
        MessagesPlaceholder(variable_name=MEMORY_KEY),
        ("user", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad"),
    ]
)

ایجنٹ کے پروسیس تعریف میں ترتیب دینا

پروسیس تعریف کو ترتیب دینا، پرامپٹ تیمپلیٹ کے لئے گفتگوی تاریخ کے ڈیٹا فراہم کرنے کی وضاحت کرنا، نیچے دی گئی کوڈ میں دکھایا گیا ہے۔۔

agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_to_openai_tool_messages(
            x["intermediate_steps"]
        ),
        "chat_history": lambda x: x["chat_history"],
    }
    | prompt
    | llm_with_tools
    | OpenAIToolsAgentOutputParser()
)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
chat_history = []

input1 = "Word 'educa' me kitne huruf hain?"
result = agent_executor.invoke({"input": input1, "chat_history": chat_history})
chat_history.extend(
    [
        HumanMessage(content=input1),
        AIMessage(content=result["output"]),
    ]
)
agent_executor.invoke({"input": "Kya yeh lafz haqeeqi hai?", "chat_history": chat_history})