روزمرہ کے کاموں کے لیے مقامی AI معاونین کو کیسے بنایا جائے اور شیڈول کیا جائے۔

زیادہ تر AI ایجنٹ ہمارے ان سے کچھ پوچھنے کا انتظار کرتے ہوئے جواب دیتے ہیں۔ اس ٹیوٹوریل میں، میں آپ کو دکھاؤں گا کہ مقامی AI اسسٹنٹ کیسے بنایا جائے جو ایک شیڈول پر چلتا ہے، دلچسپی کے کاموں کو سنبھالتا ہے، اور ان کے لیے روزانہ ڈائجسٹ تیار کرتا ہے۔ ہر اسسٹنٹ ایک AI ایجنٹ ہوتا ہے اور اس کا مقصد وقت کی بچت کرون پر مبنی سیٹ اپ کے ساتھ دہرائے جانے والے کاموں کو خودکار بنانا ہے۔

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

انڈیکس

پس منظر

ہم میں سے بہت سے لوگوں کے پاس AI ایجنٹس ہیں جو کارآمد کام انجام دے سکتے ہیں، لیکن انہیں پھر بھی عمل درآمد کی ضرورت ہے۔ کیا ہوگا اگر آپ ایک ایسا نظام بنا سکتے ہیں جو ہر روز چلتا ہے، خود بخود ان ایجنٹوں کو کال کرتا ہے، اور بغیر کسی دستی کام کے نتائج فراہم کرتا ہے؟ مثال کے طور پر، کلاڈ استعمال کرتا ہے: /loop یہ ایک بار بار چلنے والے کام کو شیڈول کرنے کا حکم ہے۔

اس ٹیوٹوریل میں، ہم ایک سادہ روزانہ شیڈولر بنائیں گے جو بالکل ایسا ہی کرتا ہے۔ یہ روزانہ کے شیڈول پر تین صرف پڑھنے والے AI ایجنٹوں کو کال کرتا ہے۔ تقریباً کسی بھی دہرائے جانے والے AI پر مبنی ورک فلو کو خودکار کرنے کے لیے اسی طرز کو بڑھایا جا سکتا ہے۔ اے آئی ایجنٹ کاموں کو مکمل کرنے میں معاون کے طور پر کام کرتے ہیں۔

اس ٹیوٹوریل کی پیروی کرنے کے لیے آپ کو اپنے کمپیوٹر پر اولاما انسٹال کرنے کی ضرورت ہوگی۔ یہ مثال macOS، Windows اور Linux پر کام کرتی ہے۔ میں 32GB RAM کے ساتھ MacBook Pro استعمال کر رہا ہوں، لیکن اگر آپ Ollama کے چھوٹے Qwen ماڈل کا انتخاب کرتے ہیں تو آپ اسے کم میموری سسٹم پر چلا سکتے ہیں۔

حوصلہ افزائی اور فن تعمیر

اس منصوبے کے لئے حوصلہ افزائی آسان ہے. ہم چاہتے ہیں کہ AI ایجنٹ کے کارکن بار بار ہونے والے کاموں کو سنبھالیں۔ دستی طور پر کام کرنے کے بجائے، آپ پیشہ ور ایجنٹوں کو آپ کے لیے کام کروا سکتے ہیں۔

اس نقطہ نظر کا ایک اور فائدہ رازداری اور کنٹرول ہے۔ سب کچھ مقامی طور پر چلتا ہے، لہذا ایجنٹ، اشارے، اور آؤٹ پٹ میرے کمپیوٹر پر رہتے ہیں۔ بیرونی آٹومیشن پلیٹ فارمز پر انحصار کرنے یا تھرڈ پارٹی سروسز کو ورک فلو ڈیٹا بھیجنے کی ضرورت نہیں ہے۔

فن تعمیر جان بوجھ کر ہلکا ہے۔ شیڈیولر دن میں ایک بار چلتا ہے اور صرف پڑھنے والے AI ایجنٹوں کے سیٹ کو کال کرتا ہے۔

ہر ایجنٹ ایک کام کے لیے ذمہ دار ہے، جیسے کہ GOOGL اسٹاک کی کارکردگی کو چیک کرنا، تازہ ترین AI خبروں کا خلاصہ کرنا، یا موسم کی بریفنگ بنانا۔ ایجنٹ شیڈیولر اسے آزادانہ طور پر چلاتا ہے، آؤٹ پٹ جمع کرتا ہے، اور نتائج کو آؤٹ پٹ فولڈر میں مارک ڈاؤن فائل کے طور پر محفوظ کرتا ہے۔ جیسے جیسے آپ کی ضروریات بڑھتی ہیں، آپ اضافی تکراری ورک فلو بنانے کے لیے فولڈر میں مزید ایجنٹس شامل کر سکتے ہیں۔ ایجنٹ شیڈولر کوڈ تبدیل نہیں ہوتا ہے۔

project/
├── scheduler.py
├── outputs/
├── agents/
    ├── googl_stock.py
    ├── ai_news.py
    └── weather_brief.py

مرحلہ 1: اولاما انسٹال کریں اور ماڈلز درآمد کریں۔

پہلے اپنے پلیٹ فارم پر اولاما کو انسٹال کریں۔

ہم مقامی ماڈل کے لیے کیوین استعمال کریں گے۔

ollama pull qwen3.5:4b

مرحلہ 2: ازگر پر انحصار انسٹال کریں۔

ورچوئل ماحول بنائیں اور پیکج انسٹال کریں۔

python3 -m venv venv
source venv/bin/activate
pip install langchain langchain-ollama requests

LangChain>= 1.0.0 کی ضرورت ہے۔

ہمارے مثالی ایجنٹوں میں سے ایک تازہ ترین AI خبروں کے لیے Ollama کے میزبان ویب سرچ API کا استعمال کرتا ہے۔ API کو اولاما اکاؤنٹ اور API کلید درکار ہے۔ OLLAMA_API_KEY.

کلید کو اس طرح سیٹ کریں:

export OLLAMA_API_KEY="paste-key-here"

مرحلہ 3: ایجنٹ کی قسم کی وضاحت کریں۔

تمام ایجنٹ Python فائلیں ہیں۔ agents/ دو خصوصیات کے ساتھ ایک فولڈر:

run() کوئی دلیل نہیں لیتا اور ایک تار لوٹاتا ہے۔ جو واپس کیا جاتا ہے اسے ٹائم اسٹیمپڈ مارک ڈاؤن فائل میں لکھا جاتا ہے۔ outputs/.

فولڈر کا ڈھانچہ بنائیں۔

mkdir -p agents outputs
touch agents/__init__.py

مرحلہ 4: ایک ایجنٹ شیڈولر بنائیں

ایجنٹ شیڈولر تین چھوٹے کام انجام دیتا ہے:

  1. تمام ایجنٹ ماڈیول لوڈ کریں۔ agents/

  2. کال run() ہر ایک کو

  3. نتائج کو اس میں محفوظ کریں: outputs/

یہ مکمل ایجنٹ شیڈولر ہے۔ کوئی ریاستی فائلیں یا ایجنٹ کے لیے مخصوص شیڈولنگ منطق نہیں ہے۔ OS شیڈولر تعین کرتا ہے کہ ایجنٹ شیڈولر کب چلتا ہے، اور ایجنٹ شیڈولر ہر بار تمام ایجنٹوں کو چلاتا ہے اور ایجنٹ کے آؤٹ پٹ کو آؤٹ پٹ/فولڈر میں مارک ڈاؤن فائل کے طور پر محفوظ کرتا ہے۔

مزید ایجنٹوں کو شامل کرنے کے لیے، انہیں صرف ایجنٹس/فولڈر میں شامل کریں۔ ایجنٹ شیڈولر میں کسی تبدیلی کی ضرورت نہیں ہے۔

اس کو بطور محفوظ کریں۔ scheduler.py:

import importlib
from datetime import datetime
from pathlib import Path

# Folder that contains all agent files.
AGENTS_DIR = Path("agents")

# Folder where the output files will be written.
OUTPUTS_DIR = Path("outputs")


def load_agents():
    """Import every valid agent module from the agents/ folder."""
    agents = []

    # Look through all Python files in agents/
    for path in sorted(AGENTS_DIR.glob("*.py")):
        # Skip private helper files like __init__.py
        if path.name.startswith("_"):
            continue

        # Import the file as a Python module, e.g. agents.googl_stock
        module = importlib.import_module(f"agents.{path.stem}")

        # Only keep modules that define NAME and run()
        if hasattr(module, "NAME") and hasattr(module, "run"):
            agents.append(module)
        else:
            print(f"[skip] {path.name} (missing NAME or run)")

    return agents


def main():
    """Load all agents, run them, and save their outputs."""
    # Create the outputs/ folder if it doesn't exist yet.
    OUTPUTS_DIR.mkdir(exist_ok=True)

    # Run every agent we found.
    for agent in load_agents():
        print(f"[run]  {agent.NAME}")

        try:
            # Call the agent's run() function.
            output = agent.run()

            # Create a timestamped filename like:
            # outputs/weather-brief-2026-07-03_08-00-39.md
            timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
            out_path = OUTPUTS_DIR / f"{agent.NAME}-{timestamp}.md"

            # Write the returned text to disk.
            out_path.write_text(output)

            print(f"[ok]   {agent.NAME} -> {out_path}")
        except Exception as e:
            # If one agent fails, log it and continue with the others.
            print(f"[fail] {agent.NAME}: {e}")


if __name__ == "__main__":
    main()

مرحلہ 5: 3 اصلی ایجنٹوں کو شامل کریں۔

یہاں تین سادہ صرف پڑھنے والے ایجنٹ ہیں:

ایجنٹ 1: GOOGL اسٹاک چیک کریں۔

اس کو بطور محفوظ کریں۔ agents/googl_stock.py.

ہم GOOGL سے روزانہ اقتباس کا ڈیٹا لیتے ہیں، Python میں ہونے والی تبدیلیوں کا حساب لگاتے ہیں، اور پھر اپنے مقامی ماڈل سے اسے مختصر خلاصے میں تبدیل کرنے کو کہتے ہیں۔

import requests
from langchain.agents import create_agent
from langchain_ollama import ChatOllama

NAME = "googl-stock"


def fetch_googl():
    url = "https://query1.finance.yahoo.com/v8/finance/chart/GOOGL?interval=1d&range=1d"
    r = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=15)
    r.raise_for_status()

    meta = r.json()["chart"]["result"][0]["meta"]
    price = meta["regularMarketPrice"]
    prev = meta["chartPreviousClose"]
    change = price - prev
    pct = (change / prev) * 100 if prev else 0

    return {
        "symbol": "GOOGL",
        "price": round(price, 2),
        "previous_close": round(prev, 2),
        "change": round(change, 2),
        "pct_change": round(pct, 2),
    }


def run():
    data = fetch_googl()

    agent = create_agent(
        model=ChatOllama(model="qwen3.5:4b", temperature=0),
        tools=[],
        system_prompt=(
            "You write short stock summaries. "
            "Given stock data, write 2 concise Markdown bullet points explaining "
            "the price move and whether it was an up or down day."
        ),
    )

    result = agent.invoke({
        "messages": [{"role": "user", "content": str(data)}]
    })

    return (
        "# GOOGL Daily Summary\n\n"
        f"{result['messages'][-1].content}\n\n"
        f"**Raw data:** `{data}`\n"
    )

ایجنٹ 2: اے آئی نیوز ڈائجسٹ

اس کو بطور محفوظ کریں۔ agents/ai_news.py.

یہ ایجنٹ حالیہ AI خبروں کے نتائج کو بازیافت کرنے کے لیے Ollama کے ویب سرچ API کا استعمال کرتا ہے اور پھر ایک مقامی ماڈل سے کہتا ہے کہ وہ انہیں مختصر خلاصے میں تبدیل کرے۔ کہ OLLAMA_API_KEYیہ وہی ہے جو میرے ذاتی ویب ریسرچ AI ایجنٹ ٹیوٹوریل میں استعمال ہوتا ہے۔

import os
import requests
from langchain.agents import create_agent
from langchain_ollama import ChatOllama

NAME = "ai-news"


def search_news():
    r = requests.post(
        "https://ollama.com/api/web_search",
        headers={"Authorization": f"Bearer {os.getenv('OLLAMA_API_KEY')}"},
        json={"query": "latest AI news", "max_results": 5},
        timeout=30,
    )
    r.raise_for_status()
    return r.json()["results"]


def run():
    results = search_news()

    agent = create_agent(
        model=ChatOllama(model="qwen3.5:4b", temperature=0),
        tools=[],
        system_prompt=(
            "You write short AI news digests. "
            "Given search results, produce 3-5 Markdown bullet points. "
            "Each bullet should summarize one important story and end with its source URL."
        ),
    )

    result = agent.invoke({
        "messages": [{"role": "user", "content": str(results)}]
    })

    return f"# Daily AI News Digest\n\n{result['messages'][-1].content}\n"

ایجنٹ 3: موسم کی بریفنگ

اس کو بطور محفوظ کریں۔ agents/weather_brief.py.

import requests
from langchain.agents import create_agent
from langchain_ollama import ChatOllama

NAME = "weather-brief"


def fetch_weather():
    r = requests.get("https://wttr.in/New+York?format=j1", timeout=15)
    r.raise_for_status()

    current = r.json()["current_condition"][0]
    return {
        "temp_f": current["temp_F"],
        "feels_like_f": current["FeelsLikeF"],
        "humidity": current["humidity"],
        "wind_mph": current["windspeedMiles"],
        "description": current["weatherDesc"][0]["value"],
    }


def run():
    weather = fetch_weather()

    agent = create_agent(
        model=ChatOllama(model="qwen3.5:4b", temperature=0),
        tools=[],
        system_prompt=(
            "You write short weather briefs. "
            "Given current weather data, write 2 concise Markdown bullet points "
            "summarizing the conditions in plain English."
        ),
    )

    result = agent.invoke({
        "messages": [{"role": "user", "content": str(weather)}]
    })

    return f"# Daily Weather Brief\n\n{result['messages'][-1].content}\n"

مرحلہ 6: کرون میں ایجنٹ شیڈیولر شامل کریں۔

ایجنٹ شیڈیولر کو OS شیڈولر کے ذریعے متحرک کرنے کے لیے ڈیزائن کیا گیا ہے۔ جب بھی یہ چلتا ہے، ایجنٹ/فولڈر میں موجود تمام ایجنٹ چلیں گے۔

آپ کو اپنے ورچوئل ماحول میں ازگر کا پورا راستہ استعمال کرنا چاہیے۔ شیڈولرز عام طور پر شیل کے وارث نہیں ہوتے ہیں۔ PATHتو ننگے ہاتھوں سے python یہ اکثر توقع کے مطابق کام نہیں کرتا ہے۔

میک OS اور لینکس

macOS پر، آپ یا تو استعمال کر سکتے ہیں: launchd یا cron. launchd اگرچہ یہ ایک macOS پر مبنی شیڈولر ہے، اس ٹیوٹوریل میں cron کیونکہ یہ لینکس پر بھی کام کرتا ہے۔

ایک run_scheduler.sh اسکرپٹ بنائیں اور اسے اپنے کوڈ کے ساتھ رکھیں۔ Ollama API کلید کو پلیس ہولڈر میں چسپاں کریں۔

#!/bin/bash

export OLLAMA_API_KEY=""
cd /full/path/to/project
/full/path/to/project/venv/bin/python3 scheduler.py >> runner.log 2>&1

مندرجہ ذیل کام کرکے اسے قابل عمل بنائیں: chmod +x run_scheduler.sh ٹرمینل میں۔ آپ درج ذیل کام کرکے اس کی جانچ کر سکتے ہیں۔ ./run_scheduler.sh آپ کے ٹرمینل میں۔

ایک کرونٹاب کھولیں:

crontab -e

درج ذیل لائن شامل کریں:

0 8 * * * /full/path/to/project/run_scheduler.sh

Scheduler.py ہر روز صبح 8 بجے چلتا ہے۔ کہ runner.log عام آؤٹ پٹ اور غلطیوں دونوں کو پکڑتا ہے۔

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

ٹاسک شیڈیولر کے ساتھ ونڈوز

پاور شیل میں:

schtasks /Create /SC DAILY /TN "AI Runner" /TR "C:\path\to\venv\Scripts\python.exe C:\path\to\scheduler.py" /ST 08:00

کام کی ترتیبات میں، ورکنگ ڈائرکٹری کو پروجیکٹ فولڈر میں سیٹ کریں۔ agents/ اور outputs/ ٹھیک ہو جاؤ۔

نمونہ پیداوار

پہلے شیڈیولر کو دستی طور پر چلائیں۔

python scheduler.py

ایک رن اس طرح نظر آئے گا:

$ python scheduler.py
[run]  ai-news
[ok]   ai-news -> outputs/ai-news-2026-07-05_17-52-12.md
[run]  googl-stock
[ok]   googl-stock -> outputs/googl-stock-2026-07-05_17-53-18.md
[run]  weather-brief
[ok]   weather-brief -> outputs/weather-brief-2026-07-05_17-53-54.md

آؤٹ پٹ کو درج ذیل جگہ پر محفوظ کیا جاتا ہے: outputs/ فولڈر ہر ایجنٹ کی پیداوار مندرجہ ذیل ہے:

outputs % ls
ai-news-2026-07-05_17-52-12.md
googl-stock-2026-07-05_17-53-18.md	
weather-brief-2026-07-05_17-53-54.md
$cat googl-stock-2026-07-05_17-53-18.md 
# GOOGL Daily Summary

*   GOOGL closed at $359.91, down $1.30 (0.36%) from the previous close of $361.21.
*   This marks a down day for the stock.

**Raw data:** `{'symbol': 'GOOGL', 'price': 359.91, 'previous_close': 361.21, 'change': -1.3, 'pct_change': -0.36}`
$cat weather-brief-2026-07-05_17-53-54.md 
# Daily Weather Brief

*   It's 77°F, feeling like 80°F.
*   Partly cloudy with 9 mph winds.
cat ai-news-2026-07-05_17-52-12.md 
# Daily AI News Digest

*   After spooking the Trump administration into safety testing, Anthropic's Fable 5 and Mythos 5 models have received global release with export curbs lifted.
    https://arstechnica.com/tech-policy/2026/07/after-spooking-trump-into-safety-testing-anthropic-ai-models-get-global-release/
*   OpenAI has previewed three GPT-5.6 models (Sol, Terra, and Luna) with limited availability restricted to U.S. government-approved organizations.
    https://www.deeplearning.ai/the-batch/gpt-5-6-lands-in-limbo
...

ان پر بھروسہ کرنے سے پہلے نتائج کو فوری طور پر چیک کریں۔ چھوٹے مقامی ماڈل اب بھی وہم کی حالت میں ہیں، اور حقیقی وقت میں انہیں پکڑنے والا کوئی نہیں ہے، بغیر پائلٹ کے ایجنٹ چھوٹی غلطیوں کو بڑھا دیتے ہیں۔

اگر آپ اسے جانچ کے لیے زیادہ کثرت سے چلانا چاہتے ہیں، تو آپ اس سے کرون کو اپ ڈیٹ کر سکتے ہیں: * 8 * * * کو */10 * * * * تو یہ ہر 10 منٹ میں چلتا ہے۔ ایک بار جب آپ اپنی ترتیبات اور نتائج سے خوش ہو جائیں تو، آپ اپنے کرون کو اس طرح ترتیب دے کر ہر روز صبح 8:00 بجے پر واپس جا سکتے ہیں: * 8 * * *.

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

نتیجہ

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

یہ ہلکے وزن کے مقامی آٹومیشن کے لیے ایک بہترین ورک فلو فراہم کرتا ہے۔ نیا ایجنٹ شامل کرنے کے لیے، فائل کھولیں۔ agents/شیڈولر کنفیگریشن میں دوبارہ ترمیم نہ کریں۔ ماڈل اولاما کے ذریعے مقامی طور پر چلتے ہیں، آؤٹ پٹ آپ کے کمپیوٹر پر رہتا ہے، اور LLM API کی کوئی قیمت نہیں ہے۔

آپ یہاں اپنے ایجنٹوں کو شامل کر سکتے ہیں۔ ہوسکتا ہے کہ یہ کل کے گٹ کمٹ کا خلاصہ ہو، یا ہوسکتا ہے کہ دلچسپی کے ذخیرے میں نئی ​​ریلیز کو دیکھنے کا ٹول ہو۔ ہر وہ چیز جس کا آپ صبح انتظار کرنا چاہتے ہیں لیکن خود کو جانچنا نہیں چاہتے۔ مبارک ہو ٹنکرنگ!

اگر آپ کو یہ سبق پسند آیا ہے، تو آپ میرے بلاگ پر میری مزید تحریریں (حالیہ پوسٹس میں سسٹمز ڈیزائن پیپرز سیریز شامل ہیں)، میری ذاتی ویب سائٹ پر میرا کام، اور LinkedIn پر اپ ڈیٹس حاصل کر سکتے ہیں۔

اوپر تک سکرول کریں۔