एजेंट वर्ज़निंग

ब्रांच, वर्ज़न और ट्रैफ़िक डिप्लॉयमेंट का उपयोग करके एजेंट कॉन्फ़िगरेशन के साथ सुरक्षित रूप से प्रयोग करें

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

A/B टेस्ट चलाना चाहते हैं? लाइव ट्रैफ़िक के साथ एजेंट बदलावों को टेस्ट करने के सुझाए गए वर्कफ़्लो के लिए एक्सपेरिमेंट्स देखें।

अवलोकन

वर्ज़निंग सिस्टम ये उपलब्ध कराता है:

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

किसी एजेंट पर वर्ज़निंग सक्षम होने के बाद इसे अक्षम नहीं किया जा सकता। मौजूदा एजेंट्स पर वर्ज़निंग सक्षम करने से पहले इस पर विचार करें।

मुख्य कॉन्सेप्ट्स

वर्ज़न

वर्ज़न किसी खास समय पर एजेंट के कॉन्फ़िगरेशन का अपरिवर्तनीय स्नैपशॉट होता है। हर वर्ज़न की एक यूनिक ID होती है (फ़ॉर्मैट: agtvrsn_xxxx) और इसमें ये होते हैं:

  • conversation_config - सिस्टम प्रॉम्प्ट, LLM सेटिंग्स, वॉइस कॉन्फ़िगरेशन, टूल्स, नॉलेज बेस
  • platform_settings - मूल्यांकन, विजेट, डेटा कलेक्शन और सुरक्षा सेटिंग्स सहित वर्ज़न किया गया सबसेट
  • workflow - नोड्स और एजेज़ के साथ पूरा वर्कफ़्लो डेफ़िनिशन

वर्ज़न किए गए एजेंट में बदलाव सेव करने पर वर्ज़न अपने-आप बन जाते हैं। बनने के बाद वर्ज़न में बदलाव नहीं किया जा सकता।

ब्रांच

ब्रांच डेवलपमेंट की नाम वाली लाइनें हैं, जो git ब्रांच जैसी होती हैं। वे आपको मुख्य ब्रांच में वापस मर्ज करने से पहले अलग से बदलावों पर काम करने देती हैं।

  • हर वर्ज़न किए गए एजेंट में एक Main ब्रांच होती है जिसे डिलीट या आर्काइव नहीं किया जा सकता
  • सिर्फ़ main से नहीं, किसी भी मौजूदा ब्रांच के किसी भी वर्ज़न से अतिरिक्त ब्रांच बनाई जा सकती हैं
  • ब्रांच को किसी भी दूसरी ब्रांच में मर्ज किया जा सकता है, और non-main ब्रांच को उसके नवीनतम बदलाव लेने के लिए main पर रीबेस किया जा सकता है
  • हर ब्रांच में ये होते हैं: id (agtbrch_xxxx), नाम, विवरण और वर्ज़न की सूची
  • ब्रांच नामों में ये हो सकते हैं: अक्षर, संख्याएँ और () [] {} - / . (अधिकतम 140 वर्ण)

ट्रैफ़िक डिप्लॉयमेंट

प्रतिशत के आधार पर ट्रैफ़िक को कई ब्रांच में बाँटा जा सकता है, जिससे धीरे-धीरे रोलआउट और A/B टेस्टिंग संभव होती है।

  • प्रतिशतों का कुल हमेशा ठीक 100% होना चाहिए
  • बातचीत ID के आधार पर ट्रैफ़िक रूटिंग निर्धारित होती है (एक ही यूज़र लगातार उसी ब्रांच पर रूट होता है)
  • सिर्फ़ 0% ट्रैफ़िक वाली गैर-आर्काइव ब्रांच को आर्काइव किया जा सकता है

ड्राफ़्ट्स

सेव न किए गए बदलाव ड्राफ़्ट्स के रूप में स्टोर होते हैं, जिससे आप तुरंत नया वर्ज़न बनाए बिना बदलावों पर काम कर सकते हैं।

  • ड्राफ़्ट्स हर यूज़र, हर ब्रांच के लिए होते हैं (हर टीम सदस्य का अपना ड्राफ़्ट होता है)
  • नया वर्ज़न कमिट होने पर ड्राफ़्ट्स अपने-आप हटा दिए जाते हैं
  • ब्रांच में मर्ज करने पर भी ड्राफ़्ट्स हटा दिए जाते हैं

वर्ज़निंग सक्षम करना

वर्ज़निंग ऑप्ट-इन है और इसे स्पष्ट रूप से सक्षम करना होता है। आप नया एजेंट बनाते समय या किसी मौजूदा एजेंट पर इसे सक्षम कर सकते हैं।

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

एजेंट बनाते समय सक्षम करें

डैशबोर्ड में अपना एजेंट खोलें, Settings पर जाएँ और वर्ज़निंग सक्षम करें। सक्षम होने पर ब्रांच, ड्राफ़्ट्स, वर्ज़न और ट्रैफ़िक डिप्लॉयमेंट मैनेज करने के लिए Versioning टैब उपलब्ध हो जाता है।

किसी मौजूदा एजेंट पर सक्षम करें

डैशबोर्ड में अपना एजेंट खोलें, Settings पर जाएँ और वर्ज़निंग चालू करें।

वर्ज़निंग सक्षम करने पर मौजूदा एजेंट कॉन्फ़िगरेशन वाला पहला वर्ज़न शामिल करके शुरुआती “Main” ब्रांच बनती है।

ब्रांच के साथ काम करना

ब्रांच बनाना

सिर्फ़ main से नहीं, किसी भी ब्रांच के किसी भी वर्ज़न से ब्रांच बनाई जा सकती हैं। आप वैकल्पिक रूप से ऐसे कॉन्फ़िगरेशन बदलाव शामिल कर सकते हैं जो नई ब्रांच के शुरुआती वर्ज़न में लागू होंगे।

branch = client.conversational_ai.agents.branches.create(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
parent_version_id="agtvrsn_xxxx",
name="experiment-v2",
description="Testing new prompt and voice settings"
)
print(f"Created branch: {branch.created_branch_id}")
print(f"Initial version: {branch.created_version_id}")

ब्रांच की सूची देखना

branches = client.conversational_ai.agents.branches.list(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6"
)
for branch in branches.branches:
print(f"{branch.name}: {branch.id}")

ब्रांच का विवरण पाना

branch = client.conversational_ai.agents.branches.get(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx"
)
print(f"Branch: {branch.name}")
print(f"Versions: {len(branch.versions)}")

बदलाव कमिट करना

वर्ज़निंग सक्षम होने पर किसी एजेंट को अपडेट करते समय, उस ब्रांच पर नया वर्ज़न बनाने के लिए branch_id बताएं।

अपने एजेंट का वर्ज़निंग टैब खोलें, टारगेट ब्रांच पर स्विच करें, कॉन्फ़िगरेशन में बदलाव करें और नया वर्ज़न बनाने के लिए सेव करें।

बताई गई ब्रांच पर एक नया वर्ज़न अपने-आप बन जाता है और उस ब्रांच पर उस यूज़र का मौजूदा ड्राफ़्ट हटा दिया जाता है।

ट्रैफ़िक डिप्लॉय करना

ब्रांचों में ट्रैफ़िक बांटने के लिए deployments endpoint का इस्तेमाल करें। इससे क्रमिक रोलआउट और A/B टेस्टिंग की जा सकती है।

deployment = client.conversational_ai.agents.deployments.create(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
deployments=[
{"branch_id": "agtbrch_main", "percentage": 90},
{"branch_id": "agtbrch_xxxx", "percentage": 10}
]
)
सभी प्रतिशतों का कुल योग ठीक 100% होना चाहिए। ऐसा न होने पर डिप्लॉयमेंट विफल हो जाएगा।

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

ब्रांच मर्ज करना

जब आप किसी ब्रांच के बदलावों से संतुष्ट हों, तो उन्हें किसी दूसरी ब्रांच में मर्ज करें। किसी भी गैर-आर्काइव की गई ब्रांच को किसी अन्य गैर-आर्काइव की गई ब्रांच में मर्ज किया जा सकता है, सिर्फ़ main में ही नहीं।

मर्ज होने से पहले किसी ब्रांच के बदलावों की समीक्षा करवाने के लिए, या ऐसी ब्रांच तक पहुंचने के लिए जिस पर आपको लिखने की अनुमति नहीं है, सीधे मर्ज करने के बजाय मर्ज प्रपोज़ल खोलें।

merge = client.conversational_ai.agents.branches.merge(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
source_branch_id="agtbrch_xxxx",
target_branch_id="agtbrch_main",
archive_source_branch=True, # Default: true
force=False # Default: false
)

मर्ज करने पर:

  • सोर्स ब्रांच के कॉन्फ़िगरेशन के साथ टारगेट ब्रांच पर नया वर्ज़न बनता है
  • वैकल्पिक रूप से सोर्स ब्रांच आर्काइव होती है (डिफ़ॉल्ट व्यवहार)
  • सोर्स ब्रांच से टारगेट ब्रांच पर ट्रैफ़िक अपने-आप ट्रांसफ़र होता है

अगर सोर्स ब्रांच टारगेट ब्रांच से बनाई गई थी (और उसमें टारगेट ब्रांच से आगे कोई नया कमिट नहीं है), तो मर्ज no_new_changes_to_merge के साथ विफल होता है। अगर उसे उस टारगेट में पहले ही मर्ज किया जा चुका है, तो branch_already_merged के साथ विफल होता है।

मर्ज कॉन्फ़्लिक्ट हल करना

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

मर्ज कमिट करने से पहले उसका नतीजा देखें, जिसमें ओवरराइड होने वाले फ़ील्ड भी शामिल हैं:

preview = client.conversational_ai.agents.branches.preview_merge(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
source_branch_id="agtbrch_xxxx",
target_branch_id="agtbrch_main",
force=False
)
print(preview.overridden_fields)
print(preview.conflicts)

ब्रांचों को main पर रीबेस करना

रीबेसिंग, git rebase की तरह, main ब्रांच के नए बदलावों को दूसरी ब्रांच में लाती है। इससे किसी लंबे समय तक चलने वाली ब्रांच को उसके अपने बदलावों को वापस मर्ज किए बिना main के साथ अप-टू-डेट रखा जा सकता है।

client.conversational_ai.agents.branches.rebase(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx"
)

रीबेसिंग:

  • ब्रांच पर एक नया वर्ज़न बनाती है, जिसमें main के नए बदलाव शामिल होते हैं
  • ब्रांच के अपने बदलाव बनाए रखती है: अगर किसी सेटिंग को ब्रांच और main, दोनों पर बदला गया है, तो हमेशा ब्रांच का मान रखा जाता है
  • अगर ब्रांच में main के सभी बदलाव पहले से शामिल हैं, तो branch_already_up_to_date के साथ विफल होती है

केवल गैर-main ब्रांचों को रीबेस किया जा सकता है, और केवल main पर। main ब्रांच को खुद रीबेस करने पर cannot_rebase_main त्रुटि मिलती है।

रीबेस कमिट करने से पहले उसका नतीजा देखें:

preview = client.conversational_ai.agents.branches.preview_rebase(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx"
)
print(preview.overridden_fields)

ब्रांच आर्काइव करना

जिन ब्रांचों की अब ज़रूरत नहीं है, उन्हें आर्काइव करें। इससे आपकी ब्रांच सूची व्यवस्थित रहती है।

client.conversational_ai.agents.branches.update(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx",
archived=True
)

आप ऐसी ब्रांच आर्काइव नहीं कर सकते जिसे ट्रैफ़िक आवंटित हो। आर्काइव करने से पहले सारा ट्रैफ़िक हटा दें।

archived=False सेट करके आर्काइव की गई ब्रांचों को अनआर्काइव किया जा सकता है।

खास वर्ज़न प्राप्त करना

आप किसी खास वर्ज़न या ब्रांच टिप पर एजेंट प्राप्त कर सकते हैं।

खास वर्ज़न पर एजेंट प्राप्त करें

agent = client.conversational_ai.agents.get(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
version_id="agtvrsn_xxxx"
)

ब्रांच टिप पर एजेंट प्राप्त करें

agent = client.conversational_ai.agents.get(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx"
)

ड्राफ़्ट बदलाव शामिल करें

agent = client.conversational_ai.agents.get(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
branch_id="agtbrch_xxxx",
include_draft=True
)

सेटिंग्स रेफरेंस

वर्ज़न वाली सेटिंग्स

ये सेटिंग्स वर्ज़नों और ब्रांचों के बीच अलग हो सकती हैं:

श्रेणीसेटिंग्स
बातचीत कॉन्फ़िगरेशनसिस्टम प्रॉम्प्ट, एजेंट व्यक्तित्व, LLM चयन और पैरामीटर, वॉइस सेटिंग्स (TTS मॉडल, वॉइस ID), टूल्स कॉन्फ़िगरेशन, नॉलेज बेस, पहला मैसेज, भाषा सेटिंग्स, टर्न डिटेक्शन, इंटरप्शन सेटिंग्स
वर्ज़न वाले प्लैटफ़ॉर्म सेटिंग्सevaluation - मूल्यांकन मानदंड, widget - विजेट का रूप और व्यवहार, data_collection - संरचित डेटा एक्सट्रैक्शन, overrides - बातचीत शुरू करने के ओवरराइड, workspace_overrides - वेबहुक्स कॉन्फ़िगरेशन, testing - टेस्ट कॉन्फ़िगरेशन, safety - गार्डरेल्स (IVC/non-IVC सेटिंग्स)
वर्कफ़्लोपूरा वर्कफ़्लो डेफ़िनिशन (नोड्स और एज)

प्रति-एजेंट सेटिंग्स

ये सेटिंग्स सभी वर्ज़नों में साझा होती हैं:

सेटिंगविवरण
name, tagsएजेंट नाम और टैग (केवल main ब्रांच पर कमिट करते समय अपडेट होते हैं)
authऑथेंटिकेशन सेटिंग्स और अलाउलिस्ट
call_limitsकॉन्करेंसी और दैनिक सीमाएं
privacyरिटेंशन सेटिंग्स और ज़ीरो-रिटेंशन मोड
banबैन स्टेटस (केवल एडमिन)

गैर-main ब्रांचों पर नाम और टैग के बदलाव, main में मर्ज होने तक एजेंट पर लागू नहीं रहते।

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

1

ब्रांच बनाने से पहले टेस्ट बनाएं

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

2

स्पष्ट ब्रांच नाम इस्तेमाल करें

ऐसे ब्रांच नाम चुनें जो एक्सपेरिमेंट का उद्देश्य साफ़ तौर पर बताएं। आसानी से पहचानने के लिए फ़ीचर नाम, हाइपोथेसिस या टिकट नंबर शामिल करें (जैसे, feature/new-greeting-flow या experiment/shorter-responses)।

3

ब्रांच के उद्देश्य दस्तावेज़ करें

ब्रांच डिस्क्रिप्शन फ़ील्ड में बताएं कि आप किस हाइपोथेसिस को टेस्ट कर रहे हैं, कौन-से मेट्रिक्स सफलता तय करते हैं और कोई डिपेंडेंसी या विचारणीय बातें हैं या नहीं। इससे टीम के सदस्य सक्रिय एक्सपेरिमेंट समझ पाते हैं।

4

प्रगति पर काम के लिए ड्राफ़्ट इस्तेमाल करें

बदलावों पर काम करते समय ड्राफ़्ट बार-बार सेव करें। इससे गैर-ज़रूरी वर्ज़न बनाए बिना आपका काम सुरक्षित रहता है। केवल टेस्ट या डिप्लॉय करने के लिए तैयार होने पर ही कमिट करें।

5

ट्रैफ़िक के छोटे प्रतिशत से शुरू करें

नई ब्रांच डिप्लॉय करते समय, ट्रैफ़िक के 5-10% से शुरू करें। इससे समस्या आने पर असर सीमित रहता है, फिर भी उपयोगी डेटा मिलता है।

6

ट्रैफ़िक बढ़ाने से पहले मुख्य मेट्रिक्स मॉनिटर करें

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

7

ट्रैफ़िक धीरे-धीरे बढ़ाएं

भरोसा बढ़ने पर चरणों में ट्रैफ़िक बढ़ाएं (10% → 25% → 50% → 100%)। यह तरीका हर चरण में प्रदर्शन को सत्यापित करते हुए जोखिम कम करता है।

8

ब्रांचों को लंबे समय तक खुला न रखें

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

अगले चरण