नेविगेशन पर जाएँ

संरचित प्रक्रियाएं

टाइप किए गए चरणों का एक तय क्रम, जिसे आपका एजेंट हर बार एक ही तरह चलाता है

परिचय

संरचित प्रक्रिया एक प्रक्रिया है, जो चरणों का एक तय क्रम चलाती है। फ्री-फ़ॉर्म प्रक्रिया प्राकृतिक भाषा में दिया गया मार्गदर्शन है, जिसे एजेंट समझकर स्थिति के अनुसार ढालता है। संरचित प्रक्रिया, टाइप किए गए चरणों की एक क्रमबद्ध सूची है, जिसे प्रक्रिया लागू होने पर एजेंट हर बार क्रम से चलाता है।

जब हर कॉल पर खास चरण एक ही तरह होने चाहिए, तब संरचित प्रक्रिया इस्तेमाल करें: जैसे कॉलर की पहचान सत्यापित करना, टिकट एस्केलेट करना या भुगतान लेना। आप इसे सामान्य भाषा में लिखे छोटे चरणों की सूची के रूप में बनाते हैं।

हर प्रक्रिया की तरह, संरचित प्रक्रिया का भी एक ट्रिगर होता है, जो बताता है कि यह कब लागू होती है। बातचीत ट्रिगर से मेल खाने पर एजेंट प्रक्रिया के चरण क्रम से चलाता है, फिर बाकी बातचीत पर लौट आता है।

संरचित प्रक्रिया
एडिटर

संरचित प्रक्रिया का उपयोग कब करें

जब खास चरणों को हर बार एक ही तरह चलना हो, लेकिन आप उन्हें सामान्य चरणों में जल्दी लिखना चाहते हों, तब संरचित प्रक्रिया इस्तेमाल करें। संरचित प्रक्रियाएं workflow की तुलना में लिखना आसान हैं, लेकिन कम अभिव्यक्तिपूर्ण हैं। फ्री-फ़ॉर्म प्रक्रियाओं, workflows और सिस्टम प्रॉम्प्ट के साथ इनकी तुलना के लिए प्रक्रियाओं का उपयोग कब करें देखें।

संरचित प्रक्रिया की संरचना

संरचित प्रक्रिया के तीन भाग होते हैं: नाम, ट्रिगर और चरणों की एक क्रमबद्ध सूची।

नाम

डैशबोर्ड में प्रक्रिया की पहचान करने वाला छोटा लेबल। नाम कभी LLM को नहीं भेजा जाता, इसलिए यह एजेंट के व्यवहार को प्रभावित नहीं करता।

ट्रिगर

एजेंट को यह प्रक्रिया कब चलानी चाहिए, इसका सामान्य भाषा में विवरण, जैसे जब यूज़र किसी ऑर्डर का रिफंड मांगे। एजेंट यूज़र के इरादे की तुलना हर प्रक्रिया के ट्रिगर से करता है और मेल खाने वाली प्रक्रिया चलाता है, इसलिए ट्रिगर स्पष्ट और अलग-अलग होने चाहिए। एजेंट केवल ट्रिगर टेक्स्ट देखता है, प्रक्रिया का नाम या ID कभी नहीं। ट्रिगर किसी भी प्रक्रिया की तरह ही काम करता है; ट्रिगर लिखना देखें।

प्रक्रिया को उप-प्रक्रिया बनाने के लिए ट्रिगर खाली छोड़ दें, ताकि यह केवल दूसरी प्रक्रिया द्वारा कॉल किए जाने पर चले।

चरण

प्रक्रिया का मुख्य भाग टाइप किए गए चरणों की क्रमबद्ध सूची होता है। चरणों के कई प्रकार हैं, जिन्हें मिलाकर आप कार्य का विवरण देते हैं।

चरणयह क्या करता है
पूछेंयूज़र से जानकारी मांगता है और प्रतीक्षा करता है। यूज़र के जवाब देने तक पूछता रहता है। यही एकमात्र चरण है जो यूज़र के लिए रुकता है।
बताएंएजेंट से उसके अपने शब्दों में कुछ कहलवाता है, फिर अगले चरण पर जाता है।
कहेंएजेंट से एक सटीक संदेश शब्दशः कहलवाता है, फिर अगले चरण पर जाता है। Say चरण में एजेंट द्वारा समर्थित हर भाषा के लिए अलग से कॉन्फ़िगर किया गया अनुवाद हो सकता है।
टूलकिसी खास टूल को कॉल करता है। टूल को कैसे कॉल करना है, यह आप LLM को सामान्य भाषा में बता सकते हैं या अधिकतम निर्धारकता के लिए पैरामीटर वैल्यू स्पष्ट रूप से तय कर सकते हैं। टूल कॉल विफल होने पर चलने वाले चरण भी तय कर सकते हैं।
यदिएक या अधिक शर्तों को क्रम से जांचता है और पहले मेल के चरण चलाता है। कुछ भी मेल न खाने पर वैकल्पिक Else चलता है।
उप-प्रक्रियादूसरी संरचित प्रक्रिया चलाता है। उसके चरण पूरे होने पर नियंत्रण इस (कॉलिंग) प्रक्रिया के अगले चरण पर लौट आता है।
सिस्टम टूलबिल्ट-इन सिस्टम कार्रवाई करता है। फ़िलहाल केवल कॉल समाप्त करना समर्थित है।
पुनः प्रयासटूल चरण के विफलता हैंडलर को, टूल कॉल समेत, अधिकतम तीन बार फिर से चलाता है। केवल टूल चरण के विफलता हैंडलर में उपलब्ध है।

संरचित प्रक्रिया चरण प्रकार
मेनू

हर चरण हर जगह नहीं आ सकता। If आर्म के अंदर आप दूसरे If या Retry को छोड़कर कोई भी चरण इस्तेमाल कर सकते हैं। Tool चरण के विफलता हैंडलर में आप If या दूसरे Tool को छोड़कर कोई भी चरण इस्तेमाल कर सकते हैं।

API चरण रेफरेंस

संरचित प्रक्रिया content, steps ऐरे वाला JSON-एन्कोडेड दस्तावेज़ है। हर चरण एक ऑब्जेक्ट है, जिसकी पहचान उसके type से होती है। ट्रिगर प्रक्रिया का अलग टॉप-लेवल फ़ील्ड है, content का हिस्सा नहीं। API और SDK पेलोड में प्रक्रिया के लिए type: "deterministic" इस्तेमाल होता है।

पूछें

Ask चरण एजेंट को जानकारी मांगने और यूज़र द्वारा उचित जवाब देने तक प्रतीक्षा करने का निर्देश देता है।

  • API प्रकार: ask
  • instruction: आवश्यक, गैर-खाली स्ट्रिंग।
{
"type": "ask",
"instruction": "Ask the user for their order ID."
}

बताएं

Tell चरण एजेंट को अपने शब्दों में एक संदेश बनाने का निर्देश देता है। आगे बढ़ने से पहले यह यूज़र के जवाब की प्रतीक्षा नहीं करता।

  • API प्रकार: tell
  • instruction: आवश्यक, गैर-खाली स्ट्रिंग।
{
"type": "tell",
"instruction": "Explain that the refund normally takes five to ten business days."
}

कहें

Say चरण दिए गए टेक्स्ट को लिखे हुए रूप में ही बोलता है, फिर आगे बढ़ता है। एजेंट द्वारा समर्थित हर अतिरिक्त भाषा के लिए, भाषा कोड के आधार पर सटीक संदेश देने के लिए message_translations दें।

  • API प्रकार: say
  • message: आवश्यक, गैर-खाली स्ट्रिंग।
  • message_translations: भाषा कोड को { "value": "..." } से मैप करने वाला वैकल्पिक ऑब्जेक्ट।
{
"type": "say",
"message": "Your refund has been submitted.",
"message_translations": {
"es": { "value": "Su reembolso ha sido enviado." }
}
}

If, else if और else

If चरण में एक या अधिक क्रमबद्ध सशर्त आर्म होते हैं। पहला मेल खाने वाला आर्म चलता है। वैकल्पिक fallback ऐरे Else आर्म है।

  • API प्रकार: branch
  • branches: आवश्यक, सशर्त आर्म की गैर-खाली सूची।
  • fallback: Else चरणों की वैकल्पिक सूची।
  • हर आर्म में condition और गैर-खाली steps सूची आवश्यक है।
{
"type": "branch",
"branches": [
{
"condition": {
"type": "llm",
"condition": "The user is on an annual plan."
},
"steps": [
{
"type": "say",
"message": "Your annual plan is eligible for a prorated refund."
}
]
}
],
"fallback": [
{
"type": "tell",
"instruction": "Explain that the account's plan could not be determined."
}
]
}

यह if/else-if/else की तरह काम करता है:

  1. शर्तों का मूल्यांकन क्रम से होता है।
  2. पहला मेल खाने वाला आर्म चलता है।
  3. कोई शर्त मेल न खाने पर fallback चलता है।
  4. आर्म पूरा होने के बाद प्रक्रिया मुख्य क्रम में लौट आती है।

ऊपर के उदाहरण में टेक्स्ट शर्त का उपयोग है, जिसका मॉडल प्राकृतिक भाषा में मूल्यांकन करता है। शर्तें डायनामिक वेरिएबल्स पर एक्सप्रेशन भी हो सकती हैं:

{
"type": "expression",
"expression": {
"type": "eq_operator",
"left": {
"type": "dynamic_variable",
"name": "plan_tier"
},
"right": {
"type": "string_literal",
"value": "annual"
}
}
}

एक्सप्रेशन शर्त डायनामिक वेरिएबल्स की जांच करती है, जो टूल के नतीजों से भरे जाते हैं या बातचीत शुरू होने पर सेट होते हैं। यह यूज़र का सबसे हाल का जवाब नहीं पढ़ सकती। यूज़र ने क्या कहा, उसके आधार पर ब्रांच करने के लिए टेक्स्ट शर्त इस्तेमाल करें।

एक If चरण के सभी आर्म में एक ही शर्त प्रकार होना चाहिए: llm या expression।

टूल

Tool चरण किसी खास टूल को कॉल करता है।

  • API प्रकार: tool_call
  • tool_id: आवश्यक, गैर-खाली टूल ID। टूल एजेंट से जुड़ा होना चाहिए।
  • tool_name: आवश्यक टूल नाम, जो टूल से मेल खाता हो।
  • instruction: टूल कॉल करने का तरीका बताने वाला वैकल्पिक निर्देश।
  • schema_overrides: टूल के पैरामीटर के लिए वैकल्पिक तय वैल्यू।
  • on_failure: वैकल्पिक विफलता हैंडलर।
{
"type": "tool_call",
"tool_id": "tool_abc123",
"tool_name": "lookup_order",
"instruction": "Look up the order using the order ID provided by the user."
}

तय पैरामीटर वैल्यू

जब किसी पैरामीटर की एक खास वैल्यू हमेशा रखनी हो, तो schema_overrides इस्तेमाल करें। मॉडल ओवरराइड किए गए पैरामीटर को न देखता है, न चुनता है। कुंजियां टूल की स्कीमा में पैरामीटर पाथ हैं; हर वैल्यू एक स्रोत बताती है:

sourceफ़ील्डव्यवहार
constantconstant_valueहमेशा दी गई वैल्यू भेजता है।
dynamic_variabledynamic_variableनामित डायनामिक वेरिएबल की मौजूदा वैल्यू भेजता है।
llmprompt (वैकल्पिक)वैकल्पिक प्रॉम्प्ट ओवरराइड के साथ मॉडल को वैल्यू चुनने देता है।
omitपैरामीटर को कॉल से बाहर रखता है।
{
"type": "tool_call",
"tool_id": "tool_abc123",
"tool_name": "update_ticket",
"schema_overrides": {
"request_body.status": { "source": "constant", "constant_value": "pending" },
"request_body.ticket_id": { "source": "dynamic_variable", "dynamic_variable": "ticket_id" }
}
}

विफलता हैंडलिंग

on_failure के बिना, विफल टूल कॉल बातचीत समाप्त कर देती है। इसके बजाय रिकवरी चरण चलाने के लिए on_failure जोड़ें।

  • fallback: टूल विफल होने पर चलने वाले चरणों की आवश्यक, गैर-खाली सूची।
  • branches: सशर्त विफलता हैंडलिंग के लिए आरक्षित। इसे खाली छोड़ें।
{
"type": "tool_call",
"tool_id": "tool_abc123",
"tool_name": "lookup_order",
"on_failure": {
"branches": [],
"fallback": [
{
"type": "tell",
"instruction": "Explain that the order could not be retrieved and offer to connect the user with support."
}
]
}
}

विफलता हैंडलर में Ask, Tell, Say, Sub-procedure, System tool और Retry चरण हो सकते हैं। इसमें Tool या If चरण नहीं हो सकते। हैंडलर चलने के बाद, प्रक्रिया Tool चरण के बाद वाले चरण के साथ जारी रहती है।

पुनः प्रयास

Retry चरण, जिसमें वह मौजूद है, उस विफलता हैंडलर को टूल कॉल समेत फिर से चलाता है। हर प्रयास टूल को दोबारा कॉल करता है और, उसके फिर विफल होने पर, हैंडलर के हर चरण को फिर चलाता है। प्रयास खत्म होने पर बातचीत समाप्त हो जाती है।

  • API प्रकार: retry
  • max_retries: 1 से 3 तक का वैकल्पिक पूर्णांक। डिफ़ॉल्ट 1 है।
  • वैल्यू मूल टूल कॉल के बाद के प्रयासों की गिनती करती है।
  • Retry केवल on_failure के अंदर मान्य है।
  • Retry अपने विफलता हैंडलर का अंतिम चरण होना चाहिए, क्योंकि बाद के चरणों तक पहुंचा नहीं जा सकेगा।
{
"type": "retry",
"max_retries": 2
}

उप-प्रक्रिया

Sub-procedure चरण दूसरी संरचित प्रक्रिया चलाता है। उस प्रक्रिया के चरण पूरे होने पर, निष्पादन Sub-procedure चरण के बाद वाले चरण पर लौटता है।

  • API प्रकार: sub_procedure
  • procedure_id: आवश्यक, गैर-खाली प्रक्रिया ID।
  • लक्ष्य उसी एजेंट पर मौजूद होना चाहिए।
  • लक्ष्य संरचित प्रक्रिया होना चाहिए।
  • कोई प्रक्रिया स्वयं को कॉल नहीं कर सकती।
{
"type": "sub_procedure",
"procedure_id": "agtprc_6qbpwdq8n01bxhk44bgjy6f10ck3"
}

सिस्टम टूल

System tool चरण एक बिल्ट-इन सिस्टम कार्रवाई करता है।

  • API प्रकार: system_tool
  • system_tool_name: आवश्यक सिस्टम-टूल नाम।
  • फ़िलहाल केवल end_call समर्थित है। बाद में और सिस्टम टूल जोड़े जा सकते हैं।
  • end_call टर्मिनल है, इसलिए यह अपनी शामिल सूची, आर्म या विफलता हैंडलर का अंतिम चरण होना चाहिए।
{
"type": "system_tool",
"system_tool_name": "end_call"
}

वैलिडेशन नियम

एजेंट को पब्लिश करने या एजेंट ड्राफ़्ट सहेजने पर, इनमें से कोई भी नियम तोड़ने वाली संरचित प्रक्रिया अस्वीकार हो जाती है। त्रुटि अपने पाथ से समस्या वाला चरण बताती है।

  • दो If चरण एक के बाद एक नहीं रखे जा सकते।
  • If चरण नेस्ट नहीं किए जा सकते।
  • एक्सप्रेशन शर्तों वाला If चरण सीधे Ask चरण के बाद नहीं आ सकता।
  • एक If चरण की सभी शर्तें एक ही प्रकार की होनी चाहिए: llm या expression।
  • Retry केवल on_failure के अंदर हो सकता है और वहीं अंतिम चरण होना चाहिए।
  • end_call जिस भी सूची में हो, उसका अंतिम चरण होना चाहिए।
  • विफलता हैंडलर के fallback में कम से कम एक चरण होना चाहिए।
  • Sub-procedure को उसी एजेंट पर मौजूद संरचित प्रक्रिया की ओर इंगित करना चाहिए, स्वयं की ओर नहीं।
  • tool_id एजेंट का टूल होना चाहिए, tool_name मेल खाना चाहिए और schema_overrides टूल की स्कीमा से मेल खाना चाहिए।
  • steps सूची, हर instruction और हर message गैर-खाली होना चाहिए।

इनमें से कोई नियम लागू होने पर प्रक्रिया को फिर से व्यवस्थित करने के लिए सर्वोत्तम तरीके देखें।

पूरा API उदाहरण

यह उदाहरण शिपमेंट की स्थिति के आधार पर ऑर्डर रद्द करना संभालता है। यह टूल पैरामीटर तय करता है, विफल टूल कॉल से उबरता है, दूसरी संरचित प्रक्रिया शुरू करता है और फिर कॉल समाप्त करता है।

{
"steps": [
{
"type": "ask",
"instruction": "Ask the user for their order ID."
},
{
"type": "branch",
"branches": [
{
"condition": {
"type": "llm",
"condition": "The user says the order has already shipped."
},
"steps": [
{
"type": "tell",
"instruction": "Explain that shipped orders must be returned before they can be refunded."
}
]
},
{
"condition": {
"type": "llm",
"condition": "The user says the order has not shipped."
},
"steps": [
{
"type": "tool_call",
"tool_id": "tool_abc123",
"tool_name": "cancel_order",
"instruction": "Cancel the order using the order ID provided by the user.",
"schema_overrides": {
"request_body.notify_customer": { "source": "constant", "constant_value": true }
},
"on_failure": {
"branches": [],
"fallback": [
{
"type": "tell",
"instruction": "Apologize that the cancellation did not go through and say you will try once more."
},
{
"type": "retry",
"max_retries": 1
}
]
}
}
]
}
],
"fallback": [
{
"type": "ask",
"instruction": "Ask whether the order has already shipped."
}
]
},
{
"type": "sub_procedure",
"procedure_id": "agtprc_6qbpwdq8n01bxhk44bgjy6f10ck3"
},
{
"type": "say",
"message": "Thank you for contacting us. Goodbye.",
"message_translations": {
"es": { "value": "Gracias por contactarnos. Adiós." }
}
},
{
"type": "system_tool",
"system_tool_name": "end_call"
}
]
}

संरचित प्रक्रिया कैसे चलती है

संरचित प्रक्रिया के चरणों को एजेंट द्वारा निष्पादित रूप में बदलना कंपाइलिंग कहलाता है। प्लेटफ़ॉर्म, एजेंट ड्राफ़्ट सहेजे जाने या एजेंट पब्लिश होने पर हर संरचित प्रक्रिया को कंपाइल करता है; लेखक को स्वयं कुछ भी कंपाइल नहीं करना होता।

जब यूज़र का अनुरोध किसी प्रक्रिया के ट्रिगर से मेल खाता है, तो प्लेटफ़ॉर्म उस प्रक्रिया में प्रवेश करता है और उसके चरण क्रम से चलाता है। संरचित प्रक्रिया के अंदर एजेंट हर चरण पर अलग-अलग ध्यान देता है। अंत तक पहुंचने पर प्लेटफ़ॉर्म नियंत्रण बाकी बातचीत को लौटा देता है।

Workflow एज किसी संरचित प्रक्रिया से या उस तक कनेक्ट नहीं हो सकते। संरचित प्रक्रियाओं को श्रृंखला में जोड़ने के लिए Sub-procedure चरण इस्तेमाल करें। प्लेटफ़ॉर्म मेल खाते ट्रिगर से प्रवेश और पूरा होना प्रबंधित करता है, जिसमें प्रक्रिया शुरू होने वाले workflow नोड को नियंत्रण लौटाना भी शामिल है।

नीचे दिए नियम बताते हैं कि रनटाइम पर चरण कैसे काम करते हैं।

Ask के अलावा हर चरण तुरंत चलता है और नियंत्रण उसी टर्न में अगले चरण पर चला जाता है। Tell या Say चरण अपना संदेश देता है और आगे बढ़ता है। Ask के अलावा बातचीत रोकने वाला कोई चरण नहीं है और मौजूदा टर्न समाप्त करने वाला भी कोई चरण नहीं है। अगर आपको यूज़र का इनपुट चाहिए, तो Ask चरण इस्तेमाल करें। बातचीत समाप्त करनी हो, तो end_call सिस्टम टूल इस्तेमाल करें।

आखिरी चरण पूरा होने पर प्रक्रिया खत्म होती है और एजेंट खुले टर्न के साथ बाकी बातचीत पर लौटता है, इसलिए वह और बोल सकता है। उप-प्रक्रिया पूरी होने पर नियंत्रण उसे कॉल करने वाली प्रक्रिया के अगले चरण पर लौटता है।

Tool चरण स्टेटस कोड या रिस्पॉन्स बॉडी के आधार पर ब्रांच नहीं कर सकता। टूल सफल होने पर प्रक्रिया आगे चलती है। विफल होने पर, चरण में विफलता हैंडलर न होने पर बातचीत समाप्त हो जाती है। हैंडलर होने पर उसके चरण चलते हैं और प्रक्रिया अगले चरण पर जारी रहती है। हैंडलर के अंदर Retry टूल को फिर चलाता है और, उसके फिर विफल होने पर, टूल के सफल होने या प्रयास खत्म होने तक हैंडलर के हर चरण को फिर चलाता है। प्रयास खत्म होने पर बातचीत समाप्त हो जाती है।

शर्तों का मूल्यांकन क्रम से होता है और पहला मेल चलता है। कुछ भी मेल न खाने पर Else आर्म चलता है। Else न होने और कुछ भी मेल न खाने पर प्रक्रिया If के बाद वाले चरण के साथ जारी रहती है। अनहैंडल किया गया मामला त्रुटि नहीं है।

If आर्म के अंदर तय की गई कोई चीज़ बाद के चरणों को याद नहीं रहती। आर्म में मिली कोई जानकारी बाद में चाहिए हो, तो उसे टूल कॉल या डायनामिक वेरिएबल से स्पष्ट रूप से बनाए रखें।

केवल Tool चरण टूल कॉल कर सकते हैं। Ask, Tell या Say चरण को टूल कॉल न करने के लिए बताने की जरूरत नहीं है; वह कर ही नहीं सकता।

संरचित प्रक्रिया प्रबंधित करें

डैशबोर्ड में अपना एजेंट खोलें, फिर Procedures चुनें। संरचित प्रक्रिया बनाने के लिए + इस्तेमाल करें। ट्रिगर जोड़ें, हर चरण के लिए प्रकार चुनें और एजेंट के बदलाव पब्लिश करें।

डैशबोर्ड आपके संपादन के दौरान संरचित प्रक्रियाओं को वैलिडेट करता है। अगर कोई प्रक्रिया वैलिडेशन नियम तोड़ती है, तो Publish बटन त्रुटि स्थिति दिखाता है, Procedures टैब में त्रुटि बैज दिखता है और प्रक्रिया ठीक होने तक प्रीव्यू शुरू नहीं हो सकता। कौन सी प्रक्रिया और चरण प्रभावित है, यह देखने के लिए त्रुटि संकेतक चुनें।

त्रुटि स्थिति में Publish बटन और 1 Error
बैज के साथ संरचित प्रक्रिया एडिटर

विफल प्रक्रिया और संदेश की जरूरत वाले चरण को सूचीबद्ध करता वैलिडेशन विवरण
डायलॉग

सर्वोत्तम तरीके

हर स्टेप टाइप पहले से अपना व्यवहार लागू करता है, इसलिए आपको शायद ही उसे अलग से लिखने की ज़रूरत पड़ती है। हर स्टेप का उद्देश्य लिखें और बाकी काम स्टेप टाइप पर छोड़ दें। नीचे दिया गया मार्गदर्शन उन मामलों के लिए है जिन्हें सही करना ज़रूरी है।

संरचित प्रक्रिया को टेस्ट करने के लिए, किसी प्रक्रिया को बेहतर बनाना देखें।

स्टेप टाइप चुनना

Ask स्टेप एक जवाब का इंतज़ार करता है। अगर आप एक निर्देश में कई सवाल जोड़ देते हैं, तो एजेंट उनमें से कुछ छोड़ देता है या उन्हें मिला देता है। जानकारी के हर हिस्से के लिए एक Ask इस्तेमाल करें।

Tell स्टेप अपना संदेश देता है और बिना इंतज़ार किए आगे बढ़ जाता है। सवाल के रूप में लिखा गया Tell कभी जवाब नहीं पाता। अगर किसी स्टेप को यूज़र से जवाब चाहिए, तो वह Ask है।

Ask स्टेप उचित जवाब मिलते ही आगे बढ़ जाता है। अगर सवाल से यह स्पष्ट नहीं है कि जवाब किसे माना जाएगा, तो निर्देश में बताएं, जैसे ऑर्डर ID मांगें; मान्य ID आठ अंकों की होती है।

जब एजेंट को खुद संदेश बनाना हो तो Tell स्टेप इस्तेमाल करें, और जब शब्द बिल्कुल वैसे ही होने चाहिए या उनका अनुवाद होना चाहिए तो Say स्टेप इस्तेमाल करें। दोनों ठीक एक संदेश देते हैं, इसलिए किसी स्टेप को एक ही संदेश भेजने का निर्देश देने की ज़रूरत नहीं है।

Ask, Tell और Say स्टेप्स टूल कॉल नहीं कर सकते। इनमें कोई टूल कॉल न करें लिखने से व्यवहार बदले बिना निर्देश में अनावश्यक जानकारी जुड़ जाती है।

प्रक्रिया को संरचित करना

दो If स्टेप्स को एक के बाद एक नहीं रखा जा सकता। नियम पूरा करने के लिए उनके बीच असंबंधित Tell या Say जोड़ने पर एजेंट वह बात कहने लगता है जो उसे नहीं कहनी चाहिए। इसके बजाय, दूसरे निर्णय को पहले If में अतिरिक्त Else if शाखाओं के रूप में जोड़ें, या उसे किसी उप-प्रक्रिया में ले जाएं।

If स्टेप्स को नेस्ट नहीं किया जा सकता। जब एक निर्णय दूसरे पर निर्भर हो, तो अंदरूनी निर्णय को उसकी अपनी संरचित प्रक्रिया में रखें और जिस शाखा को इसकी ज़रूरत हो वहां से Sub-procedure स्टेप के साथ कॉल करें।

बिना Else वाला If स्टेप किसी भी शर्त के मैच न होने पर अगले स्टेप पर चला जाता है। अगर बिना मैच वाले मामले का व्यवहार अलग होना चाहिए, तो उसके लिए Else शाखा जोड़ें।

If शाखा के अंदर लिए गए निर्णय बाद में याद नहीं रखे जाते। अगर बाद का कोई स्टेप किसी शाखा में मिली जानकारी पर निर्भर करता है, तो उसे शाखा के अंदर टूल कॉल या डायनामिक वेरिएबल से रिकॉर्ड करें।

एक्सप्रेशन कंडीशन डायनामिक वेरिएबल्स की जांच करती हैं। जिनका इस्तेमाल करने वाला If स्टेप है, उसे उन वेरिएबल्स को सेट करने वाले Tool स्टेप के ठीक बाद रखें। यूज़र ने क्या कहा उसके आधार पर शाखा बनाने के लिए टेक्स्ट कंडीशन इस्तेमाल करें।

जब कई संरचित प्रक्रियाओं में एक ही क्रम हो, जैसे किसी इंसान तक एस्केलेट करना, तो उसे खाली ट्रिगर वाली एक संरचित प्रक्रिया में रखें और हर प्रक्रिया से उसे कॉल करें। कॉपी किए गए क्रम समय के साथ अलग होते जाते हैं।

टूल्स के साथ काम करना

Tool स्टेप हमेशा अपना टूल कॉल करता है। निर्देश में लिखी कोई शर्त, जैसे _अगर टिकट पर पहले से टैग है तो इसे छोड़ दें _, कॉल को रोक नहीं सकती। अगर कॉल हमेशा नहीं होनी चाहिए, तो Tool स्टेप से पहले If स्टेप में शर्त रखें।

जब किसी पैरामीटर की वैल्यू हमेशा एक खास होनी चाहिए, तो उसे schema_overrides में constant ओवरराइड से सेट करें। स्टेटस को हमेशा pending पर सेट करें जैसा निर्देश मॉडल से इसका पालन करने को कहता है; ओवरराइड लागू होता है और उसे छोड़ा नहीं जा सकता।

on_failure के बिना, टूल की कोई भी विफलता बातचीत खत्म कर देती है। ऐसा हैंडलर जोड़ें जो यूज़र को बताए कि क्या हुआ और फिर दोबारा कोशिश करे, एस्केलेट करे या आगे बढ़े।

Tool स्टेप सिर्फ टूल चलाता है; एजेंट इसके दौरान बोल या निर्णय नहीं ले सकता। यूज़र से बात करने के लिए या टूल के लौटाए गए नतीजे के आधार पर शाखा बनाने के लिए, उसे Tool स्टेप से पहले या बाद में अलग स्टेप में रखें।

निर्देश लिखना

प्रक्रिया तय करती है कि आगे क्या चलेगा, और मौजूदा स्टेप चलाते समय एजेंट को बाद के स्टेप्स की जानकारी नहीं होती। क्रम तय करने के लिए स्टेप्स का क्रम ही काम करने दें।

स्टेप निर्देशों में लिखे वाक्य, जैसे यह इस टर्न का आखिरी संदेश है, एजेंट से ऐसी सीमा लागू करने को कहते हैं जो प्लेटफ़ॉर्म नहीं करता। यूज़र का इंतज़ार करने के लिए Ask स्टेप या बातचीत खत्म करने के लिए end_call सिस्टम टूल इस्तेमाल करें।

टोन, फ़ॉर्मैटिंग, साइन-ऑफ़ और इनकार की नीतियां सिस्टम प्रॉम्प्ट में रखें। स्टेप निर्देश में सिर्फ वही बात होनी चाहिए जो उस स्टेप के लिए खास हो।

प्रक्रियाओं को संयोजित करना

प्रक्रियाओं को संयोजित करने का सामान्य मार्गदर्शन संरचित प्रक्रियाओं पर भी लागू होता है; Free-form प्रक्रियाएं पेज पर प्रक्रियाओं को संयोजित करना देखें।

एक पैटर्न खास तौर पर टाइप्स को मिलाने के लिए है: कोई फ्री-फ़ॉर्म प्रक्रिया संरचित प्रक्रिया का संदर्भ दे सकती है। खुले तौर पर संभाले जाने वाले काम को फ्री-फ़ॉर्म प्रक्रिया में रखें और उन हिस्सों को, जिन्हें हर बार एक ही तरह चलना चाहिए, जैसे पहचान सत्यापन या एस्केलेशन, संरचित प्रक्रिया को सौंपें।

सीमाएं

  • If स्टेप्स को नेस्ट नहीं किया जा सकता और दो If स्टेप्स को एक के बाद एक नहीं रखा जा सकता।
  • केवल end_call सिस्टम टूल समर्थित है।
  • संरचित प्रक्रियाएं नॉलेज बेस दस्तावेज़ों का संदर्भ नहीं दे सकतीं।
  • प्रक्रिया पूरी होने पर मौजूदा टर्न खत्म करने का कोई तरीका नहीं है; एजेंट टर्न खुला रखता है और बोलना जारी रख सकता है।
  • वर्कफ़्लो एजेज़ किसी संरचित प्रक्रिया से या उससे कनेक्ट नहीं हो सकतीं। संरचित प्रक्रियाओं को जोड़ने के लिए Sub-procedure स्टेप इस्तेमाल करें; एंट्री और पूरा होना प्लेटफ़ॉर्म मैनेज करता है।
  • प्रक्रिया शुरू करने से लेटेंसी बढ़ती है: एजेंट उसमें जाने के लिए टूल कॉल करता है और फिर जनरेट किए गए वर्कफ़्लो से गुजरता है।

मॉडल प्रोवाइडर सपोर्ट

संरचित प्रक्रियाएं उप-प्रक्रिया में प्रवेश करते समय और प्रक्रिया पूरी करते समय इंटरनल टूल कॉल को बाध्य करती हैं। प्रमुख OpenAI, Anthropic, Gemini और Grok मॉडल फ़ैमिलीज़ फोर्स्ड टूल चॉइस सपोर्ट करती हैं। अन्य मॉडल या कस्टम प्रोवाइडर इसकी गारंटी नहीं दे सकते, जिससे उप-प्रक्रिया ट्रांज़िशन या प्रक्रिया पूरी होना कम भरोसेमंद हो सकता है। किसी अन्य मॉडल प्रोवाइडर का इस्तेमाल करते समय फोर्स्ड टूल-चॉइस सपोर्ट की पुष्टि करें।

कंटेंट साइज़ सीमा और संरचित प्रक्रियाएं फ्री-फ़ॉर्म प्रक्रियाओं से कैसे अलग हैं, समेत सभी प्रक्रियाओं पर लागू सीमाओं के लिए प्रक्रियाएं देखें।