मुख्य सामग्री पर जाएं
एजेंट्स तब वास्तव में उपयोगी बनते हैं जब वे सिर्फ टेक्स्ट जनरेट करने से आगे बढ़कर काम कर सकते हैं। टूल्स उन्हें फ़ंक्शन कॉल करने, डेटाबेस पर क्वेरी चलाने, API (एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस) अनुरोध भेजने—और वह सब कुछ करने देते हैं जिसे आप कोड में व्यक्त कर सकते हैं।

यह कैसे काम करता है

type hints और docstring के साथ एक फ़ंक्शन परिभाषित करें। उसे runner.run() में पास करें। Dedalus SDK अपने‑आप स्कीमा निकालता है और जब मॉडल इसे उपयोग करने का निर्णय लेता है, तो उसके निष्पादन को संभालता है।
import asyncio
from dedalus_labs import AsyncDedalus, DedalusRunner
from dotenv import load_dotenv

load_dotenv()

def as_bullets(items: list[str]) -> str:
    """आइटम्स को बुलेटेड सूची के रूप में फ़ॉर्मैट करें."""
    return "\n".join(f"• {item}" for item in items)

async def main():
    client = AsyncDedalus()
    runner = DedalusRunner(client)

    result = await runner.run(
        input=(
            "निम्न इवेंट्स लें और as_bullets को आइटम्स की एक सूची के साथ कॉल करें (हर इवेंट के लिए एक आइटम)।\n\n"
            "इवेंट्स:\n"
            "- Warriors vs Lakers — San Francisco — 2026-01-18\n"
            "- Warriors vs Suns — San Francisco — 2026-01-22\n"
            "- Warriors vs Celtics — San Francisco — 2026-01-29\n\n"
            "केवल सूची वापस करें।"
        ),
        model="openai/gpt-5.2",
        tools=[as_bullets],
    )

    print(result.final_output)

if __name__ == "__main__":
    asyncio.run(main())
मॉडल tool स्कीमाज़ को देखता है, यह तय करता है कि किसे कॉल करना है, और Runner उन्हें निष्पादित करता है। मल्टी‑स्टेप रीजनिंग अपने‑आप हो जाती है—Runner तब तक मॉडल को कॉल करता रहता है जब तक टास्क पूरा न हो जाए।

उपकरण सर्वोत्तम प्रथाएँ

अच्छे उपकरणों में आम तौर पर ये गुण होते हैं:
  • सभी पैरामीटर और रिटर्न वैल्यू पर टाइप हिंट्स
  • Docstrings जो बताती हैं कि उपकरण क्या करता है (model इन्हें पढ़ता है)
  • उद्देश्य को स्पष्ट रूप से दर्शाने वाले स्पष्ट नाम
# अच्छा: typed, दस्तावेज़ित, स्पष्ट नाम
def get_weather(city: str, units: str = "celsius") -> dict:
    """किसी शहर के लिए मौजूदा मौसम प्राप्त करें। तापमान और स्थिति लौटाता है."""
    return {"temp": 22, "conditions": "sunny"}

# खराब: कोई types नहीं, कोई docs नहीं, अस्पष्ट नाम
def do_thing(x):
    return some_api_call(x)

Async टूल्स

टूल्स async भी हो सकते हैं। Runner उन्हें अपने‑आप await कर लेता है:
async def fetch_user(user_id: int) -> dict:
    """डेटाबेस से यूज़र प्रोफ़ाइल लाएँ।"""
    async with db.connection() as conn:
        return await conn.fetchone("SELECT * FROM users WHERE id = $1", user_id)

Agent as Tool

किसी विशेषीकृत एजेंट को tool के रूप में रैप करें। कोऑर्डिनेटर बातचीत पर नियंत्रण छोड़े बिना विशिष्ट कार्य विशेषज्ञों को सौंपता है। यह handoffs से अलग है:
  • Handoffs: नया एजेंट पूरे बातचीत इतिहास के साथ बातचीत अपने हाथ में ले लेता है
  • Agent as tool: विशेषज्ञ को केवल विशिष्ट इनपुट मिलता है, आउटपुट लौटाता है, कोऑर्डिनेटर बातचीत जारी रखता है
import asyncio
from dedalus_labs import AsyncDedalus, DedalusRunner

async def main():
    client = AsyncDedalus()
    runner = DedalusRunner(client)

    # विशेषज्ञ: दूसरे runner कॉल को tool के रूप में रैप करें
    async def research_specialist(query: str) -> str:
        """किसी विषय पर गहन रिसर्च। उन सवालों के लिए उपयोग करें जिनमें विस्तृत विश्लेषण ज़रूरी हो।"""
        result = await runner.run(
            input=query,
            model="openai/gpt-5.2",  # रिसर्च के लिए अधिक सक्षम model
            instructions="You are a research analyst. Be thorough and cite sources.",
            mcp_servers=["windsor/brave-search-mcp"]  # Brave Search मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) के ज़रिए वेब सर्च
        )
        return result.final_output

    async def code_specialist(spec: str) -> str:
        """स्पेसिफिकेशन्स से प्रोडक्शन कोड जनरेट करें।"""
        result = await runner.run(
            input=spec,
            model="anthropic/claude-opus-4-5",  # कोड में मज़बूत
            instructions="Write clean, tested, production-ready code."
        )
        return result.final_output

    # कोऑर्डिनेटर: सस्ता model जो विशेषज्ञों को delegate करता है
    result = await runner.run(
        input="Research quantum computing breakthroughs in 2025, then write a Python simulator for a basic quantum gate",
        model="openai/gpt-4o-mini",
        tools=[research_specialist, code_specialist]
    )

    print(result.final_output)

if __name__ == "__main__":
    asyncio.run(main())
इस पैटर्न का उपयोग कब करें:
परिदृश्यAgent-as-Tool क्यों
Vision/OCR कार्यसिर्फ-टेक्स्ट कोऑर्डिनेटर इमेजेज़ को vision model को सौंपता है
कोड जनरेशनतेज़ model पहले triage/फ़िल्टर करता है, मज़बूत model असल कोड लिखता है
डोमेन विशेषज्ञgeneric राउटर → विशेषीकृत instructions/model
लागत अनुकूलनसस्ता कोऑर्डिनेटर, महंगे विशेषज्ञ केवल ज़रूरत पड़ने पर

मॉडल चयन

टूल कॉलिंग की गुणवत्ता मॉडल के अनुसार बदलती है। विश्वसनीय बहु‑चरणीय tool उपयोग के लिए:
openai/gpt-5.2 और openai/gpt-4.1 जटिल tool चेन को अच्छी तरह संभालते हैं। पुराने या छोटे मॉडल बहु‑चरणीय तर्क में दिक्कत कर सकते हैं।

अगले चरण

  • MCP सर्वर के साथ संयोजित करें: MCP Servers — कस्टम लॉजिक के लिए लोकल टूल्स और बाहरी क्षमताओं के लिए होस्टेड टूल्स का उपयोग करें
  • टाइप्ड डेटा रिटर्न करें: Structured Outputs — JSON को स्कीमा के अनुसार वैलिडेट और पार्स करें
  • निष्पादन नियंत्रित करें: Policies — रनटाइम पर व्यवहार को डायनेमिक रूप से संशोधित करें
  • पूरे उदाहरण देखें: Use Cases — एंड‑टू‑एंड एजेंट पैटर्न्स
इन डॉक्यूमेंट्स को प्रोग्रामेटिक रूप से कनेक्ट करें Claude, VSCode, और अन्य के साथ मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) के माध्यम से रियल‑टाइम उत्तरों के लिए।