# Side Effects और Idempotency — AI Agents और Tool Use

Source: https://www.geekswithgeeks.com/hi/ai-agents-mcp/design-side-effects

> Write tools को retry के लिए सुरक्षित और बदलाव के बारे में स्पष्ट बनाएँ।

## मानें कि call दोहराई जा सकती है

Agents retry करते हैं, loops crash के बाद फिर शुरू होते हैं, और models कभी-कभी call दोहराते हैं। "order बनाने" वाला tool दो बनाएगा। Writes को **idempotent** बनाएँ: idempotency key स्वीकारें या मौजूदा record जाँचें, ताकि वही अनुरोध दोहराने का वही असर हो जो एक बार करने का है। Tools को read-only या state-बदलने वाला चिह्नित करें ताकि मंज़ूरी नियम उन्हें निशाना बना सकें।

## Idempotent create

Key से दोहराया गया call दोहरा order बनाने की जगह मौजूदा order लौटाता है। `db` आपकी data परत है।

```python
@tool
def create_order(customer_id: int, item: str, request_key: str) -> str:
    """Create an order. Safe to retry with the same request_key. Changes data."""
    existing = db.find_order_by_key(request_key)
    if existing:
        return f"order {existing.id} (already created)"
    order = db.insert_order(customer_id, item, request_key)
    return f"order {order.id} created"
```

**Quiz:** Idempotency key क्या हासिल करती है?

- [ ] यह अनुरोध को encrypt करती है
- [ ] यह tool को model से छिपाती है
- [ ] यह database तेज़ करती है
- [x] अनुरोध दोहराने से दोहरा प्रभाव नहीं बनता

*Answer:* अनुरोध दोहराने से दोहरा प्रभाव नहीं बनता. वही key उसी तार्किक अनुरोध को पहचानती है, इसलिए retries सुरक्षित हैं।
