एआई एजेंट्स के साथ शुरुआत करना
- परिचय
- एजेंट और एलएलएम (LLMs) से संबंधित अवधारणाएं
- एजेंट फ्रेमवर्क
- आइए एक एजेंट बनाएं
- तो 'ए' (A) कहाँ है?
- एजेंट डिज़ाइन का एक प्रयास
- निष्कर्ष
- संदर्भ
परिचय
आखिर एजेंट (Agent) क्या होता है?
एजेंट और एलएलएम (LLMs) से संबंधित अवधारणाएं
ReAct (तर्क + कार्य): भाषा मॉडल में तर्क और कार्य का तालमेल (Github)
प्रॉम्प्ट के बारे में सोचें और उस पर कुछ करें (या न करें?)।
Self-Refine (स्व-सुधार): स्व-फीडबैक के साथ पुनरावृत्त सुधार (Github)
प्रॉम्प्ट प्राप्त करने पर, पुनरावृत्त रूप से कोई कार्रवाई करें, उसके परिणामों का निरीक्षण करें और परिणामों को बेहतर बनाने के लिए आवश्यकतानुसार आगे की कार्रवाई करें, जब तक कि आगे किसी सुधार की आवश्यकता न हो या रुकने के लिए कोई अन्य बाधा पूरी न हो जाए, फिर अंतिम परिणाम लौटाएं।
फ्लो इंजीनियरिंग: AlphaCodium के साथ कोड जनरेशन: प्रॉम्प्ट इंजीनियरिंग से फ्लो इंजीनियरिंग तक (Github)
एक परीक्षण-आधारित, बहु-चरणीय, कोड-उन्मुख पुनरावृत्त प्रवाह, जो कोड समस्याओं पर एलएलएम (LLMs) के प्रदर्शन में सुधार करता है।
एजेंट फ्रेमवर्क
CrewAI: वास्तविक उपयोग के मामलों के लिए एआई एजेंट्स
अधिकांश एआई एजेंट फ्रेमवर्क का उपयोग करना कठिन है। हम सरलता के साथ शक्ति प्रदान करते हैं। अपने सबसे महत्वपूर्ण वर्कफ़्लो को जल्दी से स्वचालित करें।
LangChain: एजेंट्स
अपने एप्लिकेशन के लिए सही संज्ञानात्मक आर्किटेक्चर बनाएं। सर्वोत्तम प्रॉम्प्टिंग रणनीतियों और आर्किटेक्चर की पहचान करें और उन्हें लागू करें ताकि आपके एलएलएम (LLMs) इच्छानुसार प्रदर्शन करें।
आइए एक एजेंट बनाएं
एलएलएम (LLM) संचालित एजेंट बनाने के लिए क्या आवश्यक है?
- संदर्भ (Context): एजेंट के लिए जानकारी (भूमिका, लक्ष्य, प्रारंभिक डेटा आदि)
- प्रॉम्प्ट (Prompt): एजेंट को संबोधित करने के लिए प्राकृतिक भाषा में संदेश (टेक्स्ट, ऑडियो आदि)
- पायथन (Python): Instructor का उपयोग करके जादू को कोड करें
- पढ़ें (Read): एजेंटों के बारे में अधिक जानने और कोड करने के लिए और अधिक पढ़ें
पायथन इंस्ट्रक्टर लाइब्रेरी के साथ सूचना पुनर्प्राप्ति बनाम डेटा जनरेशन बनाम फ़ंक्शन कॉलिंग
अब तक, हम सूचना पुनर्प्राप्ति और संरचित डेटा के रूप में डेटा जनरेशन दोनों के लिए इंस्ट्रक्टर का उपयोग कर रहे हैं। अब हम पायथन इंस्ट्रक्टर लाइब्रेरी की अधिक उन्नत फ़ंक्शन कॉलिंग क्षमताओं में गहराई से उतरेंगे। स्क्रैचपैड के लिए, हम Marimo Notebooks का उपयोग करेंगे।
तो 'ए' (A) कहाँ है?
एक एजेंट वह है जिसे सेंसर के माध्यम से अपने पर्यावरण को समझने और एक्चुएटर्स के माध्यम से उस पर्यावरण पर कार्य करने के रूप में देखा जा सकता है – स्टुअर्ट रसेल और पीटर नॉरविग।
आर्टिफिशियल इंटेलिजेंस: ए मॉडर्न अप्रोच फोर्थ एडिशन से लिया गया
धारणाएं (Percepts)
class SystemMessage(BaseModel):
role: Literal["system"] = "system"
content: str
class UserMessage(BaseModel):
role: Literal["user"] = "user"
content: str
class AssistantMessage(BaseModel):
role: Literal["assistant"] = "assistant"
content: str
percept_seq: List[Union[SystemMessage, UserMessage, AssistantMessage]] = []कार्यों की तालिका
class DefaultFunc(OpenAISchema):
response: str
def run(self):
msg = f"DefaultFunc->run: {self.response}"
return msg
class UserFunc(OpenAISchema):
name: str
age: int
def run(self):
msg = f"UserFunc->run: User's name is {self.name} and age is {self.age}"
return msg
toolbox = [DefaultFunc, UserFunc]क्रियाएं और एक्चुएटर
def actuate(self, tool_call: ChatCompletionMessageToolCall):
Func = next(iter([func for func in toolbox if func.__name__ == tool_call.function.name]))
if not Func:
available_function_names = [func.__name__ for func in toolbox]
err_msg = f"Error: Function {tool_call.function.name} not found. Available functions: {available_function_names}"
console.error(err_msg)
return err_msg
try:
console.log(f"Tool Call -> {tool_call.function.name} ->with {tool_call.function.arguments} of type {type(tool_call.function.arguments)}", style="bold blue")
args = from_json(tool_call.function.arguments)
console.log(f"Args -> {args} of type {type(args)}", style="bold blue")
func = Func.model_validate(args)
console.log(f"Func -> {repr(func)}", style="bold blue")
output = func.run()
return output
except Exception as e:
return f"Error: {e}"एजेंट डिज़ाइन का एक प्रयास
यह आरेख एजेंटों के माध्यम से कार्यों और विचारों के प्रवाह की कल्पना करने में मदद करता है, जिससे अंतिम परिणाम तक पहुँचने के लिए एक संरचित और पुनरावृत्त दृष्टिकोण सुनिश्चित होता है।
graph TD
A[शुरुआत: प्रॉम्प्ट के बारे में सोचें] --> B[इनपुट प्राप्त करें]
B --> T1{टूलबॉक्स}
T1 -->|टूल 1| T2[टूल 1 के परिणामों के बारे में सोचें]
T1 -->|टूल 2| T3[टूल 2 के परिणामों के बारे में सोचें]
T1 -->|टूल 3| T4[टूल 3 के परिणामों के बारे में सोचें]
T1 -->|टूल 4| T5[टूल 4 के परिणामों के बारे में सोचें]
T1 -->|टूल 5| T6[टूल 5 के परिणामों के बारे में सोचें]
T2 --> T7{टूलबॉक्स}
T3 --> T7
T4 --> T7
T5 --> T7
T6 --> T7
T7 -->|टूल 1| T8[टूल 1 के परिणामों के बारे में सोचें]
T7 -->|टूल 2| T9[टूल 2 के परिणामों के बारे में सोचें]
T7 -->|टूल 3| T10[टूल 3 के परिणामों के बारे में सोचें]
T7 -->|टूल 4| T11[टूल 4 के परिणामों के बारे में सोचें]
T7 -->|टूल 5| T12[टूल 5 के परिणामों के बारे में सोचें]
T8 --> T13{टूलबॉक्स}
T9 --> T13
T10 --> T13
T11 --> T13
T12 --> T13
T13 -->|टूल 1| T14[टूल 1 से अंतिम परिणाम]
T13 -->|टूल 2| T15[टूल 2 से अंतिम परिणाम]
T13 -->|टूल 3| T16[टूल 3 से अंतिम परिणाम]
T13 -->|टूल 4| T17[टूल 4 से अंतिम परिणाम]
T13 -->|टूल 5| T18[टूल 5 से अंतिम परिणाम]
T14 --> F[अंतिम परिणाम]
T15 --> F
T16 --> F
T17 --> F
T18 --> F
style A fill:#f9f,stroke:#333,stroke-width:2px;
style B fill:#bbf,stroke:#333,stroke-width:2px;
style T1 fill:#bfb,stroke:#333,stroke-width:2px;
style T2 fill:#ff9,stroke:#333,stroke-width:2px;
style T3 fill:#ff9,stroke:#333,stroke-width:2px;
style T4 fill:#ff9,stroke:#333,stroke-width:2px;
style T5 fill:#ff9,stroke:#333,stroke-width:2px;
style T6 fill:#ff9,stroke:#333,stroke-width:2px;
style T7 fill:#bfb,stroke:#333,stroke-width:2px;
style T8 fill:#ff9,stroke:#333,stroke-width:2px;
style T9 fill:#ff9,stroke:#333,stroke-width:2px;
style T10 fill:#ff9,stroke:#333,stroke-width:2px;
style T11 fill:#ff9,stroke:#333,stroke-width:2px;
style T12 fill:#ff9,stroke:#333,stroke-width:2px;
style T13 fill:#bfb,stroke:#333,stroke-width:2px;
style T14 fill:#f99,stroke:#333,stroke-width:2px;
style T15 fill:#f99,stroke:#333,stroke-width:2px;
style T16 fill:#f99,stroke:#333,stroke-width:2px;
style T17 fill:#f99,stroke:#333,stroke-width:2px;
style T18 fill:#f99,stroke:#333,stroke-width:2px;
style F fill:#9f9,stroke:#333,stroke-width:2px;स्पष्टीकरण
- शुरुआत: प्रॉम्प्ट के बारे में सोचें: प्रक्रिया एजेंट द्वारा दिए गए प्रॉम्प्ट पर विचार करने के साथ शुरू होती है।
- इनपुट प्राप्त करें: एजेंट टूलबॉक्स से किस टूल का उपयोग करना है, यह तय करने के लिए आवश्यक इनपुट प्राप्त करता है।
- टूलबॉक्स: एजेंट के पास 5 अलग-अलग टूल वाले टूलबॉक्स तक पहुंच है। प्राप्त इनपुट के आधार पर, एजेंट एक टूल का चयन करता है।
- टूल के परिणामों के बारे में सोचें: पहले टूल का उपयोग करने के बाद, एजेंट प्राप्त परिणामों के बारे में सोचता है।
- अनुक्रमिक टूल आह्वान: एजेंट मध्यवर्ती परिणामों के आधार पर दूसरे और तीसरे टूल को भी लागू करने का निर्णय ले सकता है।
-
अंतिम परिणाम: अंततः, आवश्यक टूल और मध्यवर्ती सोच चरणों के माध्यम से संसाधित होने के बाद एजेंट अंतिम परिणाम देता है।
from instructor import OpenAISchema from getting_started_with_ai_agents.agents.club_bouncer import ( ClubBouncer, Person, Guest, ) from getting_started_with_ai_agents.llm import gen_client, SystemMessage, UserMessage client = gen_client() class ClubSecurity(OpenAISchema): """ Club UbuntuTechHive के लिए सुरक्षा एजेंट। बाउंसर को लाइन प्रबंधित करने और क्लब के नियमों का पालन करते हुए अतिथि सूची की जांच करने में मदद करता है। यदि व्यक्ति कम से कम 21 वर्ष का है और उसके पास कम से कम $20 नकद हैं, तो वे क्लब में प्रवेश कर सकते हैं। यदि व्यक्ति अतिथि सूची में है, तो वे क्लब में प्रवेश कर सकते हैं। यदि व्यक्ति वीआईपी (VIP) है, तो टेबल सेवा प्राप्त करने के लिए उनके पास कम से कम $1000 नकद होने चाहिए। """ name: str # व्यक्ति का नाम age: int # व्यक्ति की आयु cash: float # व्यक्ति के पास नकद राशि is_on_guest_list: bool # क्या व्यक्ति अतिथि सूची में है def run(self): person = Person( name=self.name, age=self.age, cash=self.cash, is_on_guest_list=self.is_on_guest_list, ) return person class ClubHost(OpenAISchema): """ Club UbuntuTechHive के लिए होस्टेस। कवर शुल्क एकत्र करती है और मेहमानों को टिकट आवंटित करती है। अतिथि सूची की जांच करती है और मेहमानों को वीआईपी लाइन में नियुक्त करती है। वीआईपी और टेबल सेवा का प्रबंधन करती है। कम से कम $1000 नकद वाले वीआईपी और टेबल सेवा अनुरोधों को स्वीकार करती है। टेबल सेवा के लिए भुगतान स्वीकार करती है और वीआईपी को टेबल आवंटित करती है। यदि व्यक्ति के पास टिकट के लिए पैसे हैं, तो उन्हें टिकट खरीदने दें और रिस्टबैंड का उपयोग करके उन्हें टिकट होने के रूप में चिह्नित करें। यदि अतिथि अतिथि सूची में है, तो उन्हें क्लब की अतिथि सूची की प्रति पर उपस्थित के रूप में चिह्नित करें और उन्हें अंदर आने दें। यदि अतिथि के पास $1000 नकद हैं, तो वे वीआईपी हैं, उन्हें वीआईपी के रूप में चिह्नित करें, फिर उन्हें एक खाली टेबल तक ले जाएं। """ name: str # व्यक्ति का नाम age: int # व्यक्ति की आयु cash: float # व्यक्ति के पास नकद राशि has_ticket: bool = False # क्या व्यक्ति के पास टिकट है is_on_guest_list: bool = False # क्या व्यक्ति अतिथि सूची में है is_vip: bool = False # क्या व्यक्ति वीआईपी है def run(self): guest = Guest( name=self.name, age=self.age, cash=self.cash, has_ticket=self.has_ticket, is_on_guest_list=self.is_on_guest_list, is_vip=self.is_vip, ) return guest bouncer = ClubBouncer( context=[ SystemMessage( content=""" Club UbuntuTechHive में आपका स्वागत है! मैं क्लब बाउंसर हूँ। मैं आज रात क्लब के लिए लाइन का प्रबंधन करूँगा। मैं तय करूँगा कि क्लब में कौन प्रवेश कर सकता है। मेरे निर्णय निम्नलिखित मानदंडों पर आधारित हैं: - व्यक्ति की आयु कम से कम 21 वर्ष होनी चाहिए। - व्यक्ति के पास कम से कम $20 नकद होने चाहिए। - व्यक्ति के पास टिकट होना चाहिए या अतिथि सूची में होना चाहिए। - जिनके पास टिकट नहीं है या जो अतिथि सूची में नहीं हैं, उनके लिए $20 का कवर शुल्क होगा। - टेबल सेवा प्राप्त करने के लिए वीआईपी के पास कम से कम $1000 नकद होने चाहिए। - टेबल सेवा वीआईपी के लिए केवल तभी उपलब्ध है जब सीमित संख्या में टेबल उपलब्ध हों। - जब कोई टेबल उपलब्ध नहीं होती है, तो वीआईपी को टेबल उपलब्ध होने तक वीआईपी लाइन में इंतजार करना होगा। """ ) ], capacity=100, table_count=10, client=client, toolbox=[ClubSecurity, ClubHost], ) if __name__ == "__main__": bouncer.manage_line( UserMessage( content=""" व्यक्ति जॉन डो है और 25 वर्ष का है, जिसके पास $50 नकद हैं। वे अतिथि सूची में हैं। """ ) ) bouncer.manage_line( UserMessage( content=""" लैम्बर्ट 21 वर्ष का है और उसके पास $20 नकद हैं। वह टिकट खरीदना चाहता है। """ ) )
निष्कर्ष
यह क्षेत्र तेजी से आगे बढ़ रहा है और बहुत कम विशेषज्ञ हैं। समझ हासिल करने के लिए पढ़ने, सीखने और कोड करने से न डरें। फिर खुद तय करें कि अपनी जरूरतों के अनुरूप लाइब्रेरी अपनानी है या अपनी खुद की बनानी है!
संदर्भ
- आर्टिफिशियल इंटेलिजेंस: ए मॉडर्न अप्रोच फोर्थ एडिशन
- ReAct (तर्क + कार्य): भाषा मॉडल में तर्क और कार्य का तालमेल (Github)
- Self-Refine (स्व-सुधार): स्व-फीडबैक के साथ पुनरावृत्त सुधार (Github)
- फ्लो इंजीनियरिंग: AlphaCodium के साथ कोड जनरेशन: प्रॉम्प्ट इंजीनियरिंग से फ्लो इंजीनियरिंग तक (Github)

