छोटा जवाब: ब्रूइंग असिस्टेंट के लिए सबसे काम की चीज़ यह है कि उससे अंकगणित छीन लिया जाए। एजेंट को कुछ टूल दीजिए (ग्रैविटी कन्वर्ज़न, एटेन्यूएशन, अल्कोहल, कड़वाहट), हर एक साधारण टेस्ट किया हुआ कोड जो बेस यूनिट में काम करे और नतीजे के साथ अपना मेथड भी लौटाए। एजेंट टूल चुनता है और जवाब समझाता है। नीचे के दो हल किए गए उदाहरण दिखाते हैं कि मेथड को संख्या के साथ क्यों चलना चाहिए: एक बीयर रियल स्केल पर 64.9% और अपेरेंट स्केल पर 78.6% एटेन्यूएटेड दिखती है, और तीन मान्य IBU मॉडल एक ही हॉप एडिशन के लिए 34, 45 और 46 देते हैं।

एक ही बीयर, अलग संख्याएँ: मेथड नतीजे के साथ क्यों चलता है एटेन्यूएशन, एक बीयर (13.0 °P) रियल (RDF) 64.9% अपेरेंट (ADF) 78.6% 13.7 पॉइंट का फ़र्क, वही टैंक IBU, एक हॉप एडिशन 30 g, 10% अल्फ़ा, 20 L, 60 min Tinseth 33.8 Rager 45.7 काइनेटिक मॉडल 45.2 इनमें से कोई संख्या गलत नहीं है · मेथड के बिना हर एक बेमानी है बेस यूनिट में टेस्ट किए कोड से गणना; IBU आँकड़े सेलर लॉस से पहले वर्ट के अनुमान हैं
जो असिस्टेंट बिना मेथड के 'एटेन्यूएशन 78% है' या 'लगभग 40 IBU' कहता है, उसने सवाल का जवाब नहीं दिया।

एक ब्रूअर असिस्टेंट से पूछता है: “बैच 212 का एटेन्यूएशन कितना रहा?” ईमानदार जवाब एक और सवाल है: कौन-सा एटेन्यूएशन? लैब रिपोर्ट आम तौर पर रियल डिग्री ऑफ़ फ़र्मेंटेशन देगी। होमब्रूअर या सेल्स शीट का मतलब आम तौर पर अपेरेंट होता है। चित्र वाली बीयर पर ये 64.9% और 78.6% हैं। वही टैंक, वही दिन, वही सैंपल।

अपने भरोसे छोड़ा गया लैंग्वेज मॉडल चुपचाप एक चुन लेगा, और हो सकता है रास्ते में कन्वर्ज़न भी मन ही मन कर ले। इस सीरीज़ की पहली पोस्ट का तर्क था कि ज्ञान रिट्रीवल से आए और संख्याएँ कोड से। यह पोस्ट वह कोड बनाती है।

टूल क्या होता है

आज के एजेंट फ़्रेमवर्क में (Claude और OpenAI API, Model Context Protocol, ज़्यादातर ऑर्केस्ट्रेशन लाइब्रेरी), टूल एक फ़ंक्शन है जिसे चलाने के लिए मॉडल कह सकता है। आप उसे एक नाम, एक उद्देश्य और उसके इनपुट के स्कीमा से परिभाषित करते हैं। उसे कब और किन आर्ग्युमेंट के साथ बुलाना है, यह मॉडल तय करता है। आपका कोड उसे चलाता है और नतीजा लौटा देता है।

ब्रूइंग टूलसेट बड़ा होना ज़रूरी नहीं। पाँच टूल ज़्यादातर सवाल कवर कर लेते हैं:

  • gravity_convert: स्पेसिफ़िक ग्रैविटी से डिग्री प्लेटो और वापस, बताए गए तापमान आधार पर।
  • attenuation: ओरिजिनल, रियल और अपेरेंट एक्सट्रैक्ट से रियल और अपेरेंट डिग्री ऑफ़ फ़र्मेंटेशन।
  • alcohol: ओरिजिनल एक्सट्रैक्ट और RDF से वज़न और आयतन के हिसाब से अल्कोहल।
  • bitterness: एक हॉप एडिशन का IBU, मॉडल का नाम आर्ग्युमेंट के रूप में।
  • unit_convert: लीटर, हेक्टोलीटर, बैरल, किलोग्राम, पाउंड, बिना किसी अंदाज़े के।

मॉडल को एक टूल ऐसा दिखता है:

{
  "name": "bitterness",
  "description": "Estimate IBU in wort for one hop addition. Returns the value and the model used.",
  "input_schema": {
    "type": "object",
    "properties": {
      "hop_mass_g": {"type": "number"},
      "alpha_acid_pct": {"type": "number"},
      "volume_l": {"type": "number"},
      "boil_min": {"type": "number"},
      "wort_plato": {"type": "number"},
      "model": {"type": "string", "enum": ["tinseth", "rager", "kinetic"]}
    },
    "required": ["hop_mass_g", "alpha_acid_pct", "volume_l", "boil_min", "wort_plato", "model"]
  }
}

model फ़ील्ड जानबूझकर ज़रूरी रखा गया है, यानी असिस्टेंट ‘the IBU’ नहीं माँग सकता। उसे Tinseth IBU या Rager IBU माँगना होगा। यह एक डिज़ाइन फ़ैसला सटीकता के लिए किसी भी प्रॉम्प्ट से ज़्यादा करता है।

हल किया गया उदाहरण 1: एटेन्यूएशन स्केल का जाल

13.0 डिग्री प्लेटो ओरिजिनल एक्सट्रैक्ट वाला एक लेगर लीजिए, जो 64.9% रियल डिग्री ऑफ़ फ़र्मेंटेशन तक फ़र्मेंट हुआ।

अल्कोहल टूल Balling की परिपाटी इस्तेमाल करता है (हर ग्राम अल्कोहल लगभग 2.0665 ग्राम एक्सट्रैक्ट खाता है) और 4.77% रियल एक्सट्रैक्ट तथा वज़न के हिसाब से 4.27% अल्कोहल निकालता है। वज़न से आयतन पर जाने के लिए उसे तैयार बीयर का घनत्व चाहिए, जो बचे हुए एक्सट्रैक्ट और अल्कोहल दोनों पर एक साथ निर्भर करता है, इसलिए वह कोई शॉर्टकट नहीं बल्कि बीयर घनत्व का एक फ़िट किया हुआ मॉडल इस्तेमाल करता है। इससे लगभग 1.0109 की स्पेसिफ़िक ग्रैविटी और 5.46% ABV अल्कोहल मिलता है।

फिर एटेन्यूएशन टूल निकालता है कि उस बीयर में हाइड्रोमीटर क्या पढ़ेगा। अल्कोहल पानी से हल्का है, इसलिए हाइड्रोमीटर लगभग 2.78 डिग्री प्लेटो का अपेरेंट एक्सट्रैक्ट पढ़ता है, जो असली 4.77 से काफ़ी नीचे है। अपेरेंट डिग्री ऑफ़ फ़र्मेंटेशन ओरिजिनल एक्सट्रैक्ट की तुलना इस रीडिंग से करता है: 78.6%। रियल डिग्री ऑफ़ फ़र्मेंटेशन उसकी तुलना असल में बचे एक्सट्रैक्ट से करता है: 64.9%

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

अच्छा टूल दोनों लौटाता है, नाम के साथ:

attenuation(og_plato=13.0, rdf_pct=64.9)
  -> real_df_pct: 64.9, apparent_df_pct: 78.6,
     real_extract_plato: 4.77, apparent_extract_plato: 2.78,
     method: "Balling 2.0665; beer SG from extract-alcohol density model; 20/20 C"

हल किया गया उदाहरण 2: तीन ईमानदार IBU संख्याएँ

अब एक हॉप एडिशन: 10% अल्फ़ा एसिड वाला 30 ग्राम हॉप, उसी 13.0 डिग्री प्लेटो वर्ट (स्पेसिफ़िक ग्रैविटी लगभग 1.0525) के 20 लीटर में 60 मिनट उबाला गया।

  • Tinseth लगभग 22.5% यूटिलाइज़ेशन और 33.8 IBU देता है।
  • Rager लगभग 30.4% यूटिलाइज़ेशन और 45.7 IBU देता है।
  • अल्फ़ा एसिड के आइसोमराइज़ेशन और डिग्रेडेशन का एक फ़र्स्ट-ऑर्डर काइनेटिक मॉडल (उबाल बिंदु पर Malowicki और Shellhammer के रेट कॉन्स्टेंट, ग्रैविटी करेक्शन के साथ) वर्ट में लगभग 30.1% अल्फ़ा एसिड आइसोमराइज़ हुआ बताता है और 45.2 IBU देता है।

तीन प्रकाशित, व्यापक रूप से इस्तेमाल होने वाले मेथड। एक ही एडिशन पर लगभग 12 IBU का फैलाव, मोटे तौर पर एक-तिहाई। 15 मिनट के एडिशन पर जाइए तो क्रम पलट जाता है: Tinseth 11.2% यूटिलाइज़ेशन देता है और Rager 8.1%।

इनमें से कोई भी सच नहीं है। ये अलग-अलग डेटा पर फ़िट किए गए एम्पिरिकल मॉडल हैं, और हर एक सेलर और पैकेजिंग लॉस से पहले वर्ट का अनुमान है। सच वह है जो लैब तैयार बीयर में मापती है। असिस्टेंट के लिए ज़रूरी यह है कि वह कभी ‘लगभग 40 IBU’ ऐसे न बताए जैसे इससे कुछ तय हो गया। वह बताता है ‘45.7 IBU, Rager से, वर्ट का अनुमान’, और जो ब्रूअर Tinseth से कैलिब्रेट करता है, वह तुरंत समझ जाता है कि इसे घटाकर देखना है।

अगर आप इन मॉडलों को स्प्रेडशीट में साथ-साथ देखना चाहते हैं, तो Excel में IBU रेसिपी बिल्डर कई एडिशन के लिए Tinseth समझाता है, और मशीन लर्निंग से हॉप की कड़वाहट का अनुमान मापे गए मानों के साथ कैलिब्रेशन को कवर करता है।

वे नियम जो एजेंट को भरोसेमंद बनाते हैं

  1. गद्य में कोई अंकगणित नहीं। सिस्टम प्रॉम्प्ट कहता है कि दूसरी संख्याओं से निकली कोई भी संख्या टूल कॉल से ही आनी चाहिए। इसे ऐसे सवाल पूछकर टेस्ट कीजिए जो मॉडल को शॉर्टकट के लिए ललचाएँ, और जिस जवाब में गणना किया हुआ आँकड़ा हो पर उसके पीछे टूल कॉल न हो, उसे फ़ेल कीजिए।
  2. अंदर बेस यूनिट, बाहर डिस्प्ले यूनिट। टूल किलोग्राम, लीटर और बताए गए तापमान पर डिग्री प्लेटो में काम करते हैं। पाउंड, बैरल या स्पेसिफ़िक ग्रैविटी में कन्वर्ज़न एक बार, किनारे पर होता है।
  3. मेथड आउटपुट का हिस्सा है। हर टूल वह मेथड, कॉन्स्टेंट और तापमान आधार लौटाता है जो उसने इस्तेमाल किया, और एजेंट जवाब में उन्हें दोहराता है।
  4. टूल किसी भी दूसरे कोड की तरह टेस्ट होते हैं। हर टूल के प्रकाशित हल किए गए उदाहरणों के ख़िलाफ़ यूनिट टेस्ट हैं। ऊपर वाला एटेन्यूएशन उदाहरण उनमें से एक है: अगर उस इनपुट पर टूल 4.77 रियल एक्सट्रैक्ट और 4.27 अल्कोहल लौटाना बंद कर दे, तो बिल्ड फ़ेल हो जाता है।
  5. मान लेने से पहले पूछिए। अगर ब्रूअर बिना स्केल के ‘एटेन्यूएशन’ या ‘ग्रैविटी’ कहता है, तो एजेंट पूछता है कि कौन-सा, या दोनों के साथ जवाब देता है।

यह कहाँ टूटता है

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

खराब इनपुट अब भी खराब आउटपुट देता है। अगर टूल को गलत तापमान पर पढ़ा गया ओरिजिनल एक्सट्रैक्ट दिया जाए, तो वह बिल्कुल सटीक ढंग से गलत जवाब लौटाता है। जब संख्याएँ दायरे से बाहर लगें, तो एजेंट को पूछना चाहिए कि वे कहाँ से आईं।

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

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

निचोड़

जो असिस्टेंट मन ही मन जोड़-घटाव करता है, वह देर-सबेर ब्रूअर को पूरे आत्मविश्वास से एक गलत संख्या दे देगा। जो असिस्टेंट टूल बुलाता है, वह हर बार वही संख्या देता है, मेथड के साथ। यहाँ के उदाहरण कोई अपवाद नहीं हैं: एक साधारण लेगर पर रियल और अपेरेंट एटेन्यूएशन 13.7 पॉइंट दूर हैं, और तीन मानक IBU मॉडल एक ही हॉप एडिशन पर एक-तिहाई तक फैले हैं। मॉडल को टूल चुनने और नतीजा समझाने दीजिए। गणित टेस्ट किए हुए कोड को करने दीजिए।

सीरीज़ में आगे: माल्ट अरोमा व्हील को वेक्टर के रूप में। पूरी सूची The Brewer’s Agent सीरीज़ पेज पर है।

अक्सर पूछे जाने वाले सवाल

ब्रूइंग AI असिस्टेंट को कैलकुलेशन के लिए टूल क्यों इस्तेमाल करने चाहिए? क्योंकि लैंग्वेज मॉडल कई चरणों वाले अंकगणित में भरोसेमंद नहीं होते, और ब्रूइंग फ़ॉर्मूलों में यूनिट और तापमान की ऐसी परिपाटियाँ होती हैं जिन्हें आपस में मिला देना आसान है। टूल साधारण, टेस्ट किया हुआ कोड है: वह बताई गई यूनिट में इनपुट लेता है, एक दस्तावेज़ी मेथड लगाता है और नतीजा उस मेथड के नाम के साथ लौटाता है। कौन-सा टूल बुलाना है, यह मॉडल तय करता है और जवाब समझाता है।

रियल और अपेरेंट डिग्री ऑफ़ फ़र्मेंटेशन में क्या फ़र्क है? अपेरेंट एटेन्यूएशन ओरिजिनल एक्सट्रैक्ट की तुलना तैयार बीयर में हाइड्रोमीटर से पढ़े गए अपेरेंट एक्सट्रैक्ट से करता है, जिसे अल्कोहल नीचे खींच देता है क्योंकि वह पानी से हल्का है। रियल एटेन्यूएशन असल में बचे हुए एक्सट्रैक्ट का इस्तेमाल करता है। एक ही बीयर पर अपेरेंट आँकड़ा हमेशा ज़्यादा होता है, यहाँ 64.9% के मुकाबले 78.6%, इसलिए स्केल के बिना कोई संख्या अस्पष्ट है।

कौन-सा IBU फ़ॉर्मूला सही है, Tinseth या Rager? आम तौर पर कोई भी सही नहीं है। दोनों अलग-अलग डेटा पर बने एम्पिरिकल फ़िट हैं, और 13 डिग्री प्लेटो वाले वर्ट में 60 मिनट के एडिशन के लिए इनमें लगभग एक-तिहाई का अंतर आता है। अपनी ब्रूअरी के लिए एक चुनिए, लैब में मापी गई कड़वाहट से उसे कैलिब्रेट कीजिए, और टूल से यह बताने को कहिए कि उसने कौन-सा मॉडल इस्तेमाल किया।