الگوهای طراحی عاملی: نحوه پیاده سازی (پایتون)

همانطور که مدل های زبانی بزرگ(LLM) به انقلاب در حوزه هوش مصنوعی ادامه می دهند، بررسی الگوهای طراحی جدید (new design patterns) که می توانند پتانسیل کامل انها را باز کنند، ضروری است.در این مقاله به دنیای الگوهای طراحی عامل محور(agentic design patterns) می پردازیم که به LLMها اجازه می دهند تا بطور مستقل دنباله ای از گام ها را برای انجام وظایف پیچیده تعیین کنند.

Reflection:The power of self-cristicism:

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

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

Tool use: Empowering LLMs with functions:

یکی دیگر از الگوهای طراحی عامل محور مهم، استفاده از ابزار(Tool use) است که به LLMها اجازه می دهد تا از توابع برای جمع اوری اطلاعات، انجام اقدامات یا پردازش داده ها استفاده کنند. با ارائه مجموعه ای از ابزارها به یک LLM، میتوانیم قابلیت های ان را گسترش داده و ان را قادر به انجام وظایف پیچیده کنیم.

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

Planning: autonomously deciding on task execution:

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

Multi-Agent collaboration: breaking down complex task:

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

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

پیاده سازی:

در این بخش میخواهیم به کمی کدنویسی در رابطه با این الگوهای طراحی بپردازیم.

فرض کنید ما درحال ساخت یک جریان(workflow) برای تحلیل سهام هستیم.عمدتا از کتابخانه های streamlit و langchain استفاده می شود.ما یک ابزار historicalPrice برای دریافت قیمت های تاریخی یک نماد سهام خواهیم داشت.همچینین یک ابزار line-chart برای نمایش بصری این داده های تاریخی خواهیم داشت.

پیاده سازی بخش planner agent:

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

https://github.com/kturung/streamlit_stock_analysis_customagents/blob/main/agents/planner_agent.py

این عامل برنامه ریز یا planner agent میتواند گزارش هایی مثل گزارش زیر تولید برای سوال زیر تولید کند:

What is TSLA stock price for the last 10 days? Please also plot a line chart for it.

{
    &quotuser_request_summary&quot: &quotGet historical price information for TSLA stock for the last 10 days and visualize the data in a line chart.&quot,
    &quotsteps&quot: [
        {
            &quotaction&quot: &quotGet historical price information for TSLA stock for the last 10 days&quot,
            &quottool&quot: &quothistoricalprice-tool&quot
        },
        {
            &quotaction&quot: &quotPlot a line chart using the historical price information&quot,
            &quottool&quot: &quotline-chart-tool&quot
        }
    ]
}

حال که ما عامل برنامه ریز(planner agent) را طراحی کرده ایم، باید یک task executer agent هم پیاده سازی کنیم.

میتوانیم یک system prompt بصورت زیرتعریف کنیم:

https://github.com/kturung/streamlit_stock_analysis_customagents/blob/main/agents/executer_agent.py

در ادامه، ما میخواهیم تابع اصلی ((execution function را تعریف کنیم.این تابع از گزارش JSON به عنوان ورودی استفاده کرده و مراحل را یکی یکی اجرا می کند

همچنین یک حلقه بازخورد برای مدیریت خطاها(Reflection) تعریف می کنیم.همچنین ابزار ‘none’ را اضافه می کنیم زیرا در مرحله برنامه ریزی(planning) ممکن است مدل گامی را تولید کند که نیازی به ابزار نداشته باشد.

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

درنهایت باید توابع تولید پاسخ برای LLM ایجاد کنیم که در این مثال، از Groq به دلیل استنتاج سریع ان که در multiagent collab مهم است و مدل llama3-70B استفاده می شود.

نتیجه گیری:

الگوهای طراحی عاملانه (Agentic Design Patterns) پتانسیل انقلاب در زمینه هوش مصنوعی را دارند، زیرا به مدل‌های زبانی بزرگ (LLM) اجازه می‌دهند به طور خودمختار ترتیب مراحل لازم برای انجام وظایف پیچیده را تصمیم‌گیری کنند. با بهره‌گیری از قدرت بازتاب (Reflection)، استفاده از ابزارها (Tool Use)، برنامه‌ریزی (Planning) و همکاری چندعاملی (Multi-Agent Collaboration)، می‌توانیم کیفیت خروجی LLM را افزایش داده و پتانسیل کامل این مدل‌ها را آزاد کرده و سیستم‌های هوش مصنوعی قابل‌اعتمادتری ایجاد کنیم. با پیشرفت مداوم این حوزه، می‌توانیم منتظر توسعه‌های هیجان‌انگیزتری در دنیای هوش مصنوعی عاملانه باشیم.

نمونه خروجی:

همینطور که ملاحظه میکنید در خروجی کار که با استفاده از: "streamlit run main.py" میتوانیم ان را ببینیم، یک صفحه کاربری وب را داریم که توسط streamlit نوشته شده است که شامل دو قسمت است، یک قسمت که selectbox هست و میتوان سوالات اماده را انتخاب کرد، در قسمت پایین هم یک user input داریم که کاربر بتواند سوال خود را بپرسد.

در اینجا ما یک سوال اماده را انتخاب کردیم و تا سوالمان را جواب دهد؛ اما همانطور که میبینید در ادامه سوالات با جزییات بیشتری می پرسد تا بتواند پاسخ دقیق تری را ارائه دهد.

در سمت چپ قسمت message history را داریم که اگر کاربر clear message history را بزند لیست پیام ها و سوال هایی که قبلا پرسیده است خالی می شود.

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

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


منابع medium.com | github.com