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

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

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

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

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

ओवरव्यू

वर्ज़निंग सिस्टम प्रदान करता है:

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

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

मुख्य अवधारणाएं

वर्ज़न

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

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

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

ब्रांच

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

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

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

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

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

ड्राफ़्ट

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

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

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

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

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

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

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

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

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

वर्ज़निंग सक्षम करने पर वर्तमान एजेंट कॉन्फ़िगरेशन वाले पहले वर्ज़न के साथ शुरुआती “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 निर्दिष्ट करें।

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

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

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

ब्रांच में ट्रैफ़िक बांटने के लिए deployments एंडपॉइंट इस्तेमाल करें। इससे धीरे-धीरे रोलआउट और 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 के आधार पर निर्धारक होती है, जिससे एक ही यूज़र हर सेशन में लगातार उसी ब्रांच तक पहुंचता है।

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

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

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

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)

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

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

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

रीबेसिंग:

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

केवल गैर-मेन ब्रांच को और केवल मेन पर रीबेस किया जा सकता है। मेन ब्रांच को खुद रीबेस करने पर 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 सेट करके आर्काइव की गई ब्रांच को फिर से सक्रिय किया जा सकता है।

वर्ज़न किए गए एजेंट की कॉपी बनाना

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

duplicate = client.conversational_ai.agents.duplicate(
agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
name="Copy of my agent"
)
print(duplicate.agent_id)

कॉपी किए गए एजेंट में:

  • मेन ब्रांच, सोर्स एजेंट की मेन ब्रांच के नवीनतम वर्ज़न से बनाई जाती है
  • हर दूसरी गैर-आर्काइव ब्रांच उसी नाम और विवरण के साथ, उस ब्रांच के नवीनतम वर्ज़न से शुरू करते हुए फिर से बनाई जाती है
  • हर ब्रांच एक ही वर्ज़न से शुरू होती है, क्योंकि वर्ज़न इतिहास कॉपी नहीं होता
  • आर्काइव की गई ब्रांच और ड्राफ़्ट कॉपी नहीं होते
  • ट्रैफ़िक डिप्लॉयमेंट कॉपी नहीं होते, इसलिए जब तक आप दूसरी ब्रांच पर ट्रैफ़िक डिप्लॉय नहीं करते, सारा ट्रैफ़िक मेन ब्रांच पर जाता है

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

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

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

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

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एजेंट का नाम और टैग
authऑथेंटिकेशन सेटिंग्स और अलाउलिस्ट
call_limitsकॉन्करेंसी और दैनिक सीमाएं
queueing_configकॉन्करेंसी सीमा से अधिक कॉलर्स के लिए वेट क्यू और होल्ड ऑडियो
privacyरिटेंशन सेटिंग्स, ज़ीरो-रिटेंशन मोड और यूज़र मेमोरीज़
analysis_llmकॉल के बाद के विश्लेषण के लिए इस्तेमाल होने वाला LLM
topic_discovery, sentiment_analysisएजेंट-स्तर की विश्लेषण सेटिंग्स
simulation_libraryसिमुलेशन लाइब्रेरी सेटिंग्स
alertingअलर्ट वेबहुक्स और मॉनिटर थ्रेशहोल्ड
banबैन स्टेटस (केवल एडमिन)

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

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

1

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

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

2

वर्णनात्मक ब्रांच नाम इस्तेमाल करें

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

3

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

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

4

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

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

5

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

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

6

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

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

7

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

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

8

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

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

अगले चरण