Upload 3 files
Browse files
docs/source/hi/tutorials/inspect_runs.md
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# OpenTelemetry के साथ runs का निरीक्षण
|
2 |
+
|
3 |
+
[[open-in-colab]]
|
4 |
+
|
5 |
+
> [!TIP]
|
6 |
+
> यदि आप एजेंट्स बनाने में नए हैं, तो पहले [एजेंट्स का परिचय](../conceptual_guides/intro_agents) और [smolagents की गाइडेड टूर](../guided_tour) पढ़ना सुनिश्चित करें।
|
7 |
+
|
8 |
+
### Agents runs को लॉग क्यों करें?
|
9 |
+
|
10 |
+
Agent runs को डीबग करना जटिल होता है।
|
11 |
+
|
12 |
+
यह सत्यापित करना कठिन है कि एक रन ठीक से चला या नहीं, क्योंकि एजेंट वर्कफ़्लो [डिज़ाइन के अनुसार अप्रत्याशित](../conceptual_guides/intro_agents) होते हैं (यदि वे प्रत्याशित होते, तो आप पुराने अच्छे कोड का ही उपयोग कर रहे होते)।
|
13 |
+
|
14 |
+
और रन का निरीक्षण करना भी कठिन है: मल्टी-स्टेप एजेंट्स जल्दी ही कंसोल को लॉग से भर देते हैं, और अधिकांश त्रुटियां केवल "LLM dumb" प्रकार की त्रुटियां होती हैं, जिनसे LLM अगले चरण में बेहतर कोड या टूल कॉल लिखकर स्वयं को सुधार लेता है।
|
15 |
+
|
16 |
+
इसलिए बाद के निरीक्षण और मॉनिटरिंग के लिए प्रोडक्शन में agent runs को रिकॉर्ड करने के लिए इंस्ट्रुमेंटेशन का उपयोग करना आवश्यक है!
|
17 |
+
|
18 |
+
हमने agent runs को इंस्ट्रुमेंट करने के लिए [OpenTelemetry](https://opentelemetry.io/) मानक को अपनाया है।
|
19 |
+
|
20 |
+
इसका मतलब है कि आप बस कुछ इंस्ट्रुमेंटेशन कोड चला सकते हैं, फिर अपने एजेंट्स को सामान्य रूप से चला सकते हैं, और सब कुछ आपके प्लेटफॉर्म में लॉग हो जाता है।
|
21 |
+
|
22 |
+
यह इस प्रकार होता है:
|
23 |
+
पहले आवश्यक पैकेज इंस्टॉल करें। यहां हम [Phoenix by Arize AI](https://github.com/Arize-ai/phoenix) इंस्टॉल करते हैं क्योंकि यह लॉग्स को एकत्र और निरीक्षण करने का एक अच्छा समाधान है, लेकिन इस संग्रह और निरीक्षण भाग के लिए आप अन्य OpenTelemetry-कम्पैटिबल प्लेटफॉर्म्स का उपयोग कर सकते हैं।
|
24 |
+
|
25 |
+
```shell
|
26 |
+
pip install smolagents
|
27 |
+
pip install arize-phoenix opentelemetry-sdk opentelemetry-exporter-otlp openinference-instrumentation-smolagents
|
28 |
+
```
|
29 |
+
|
30 |
+
फिर कलेक्टर को बैकग्राउंड में चलाएं।
|
31 |
+
|
32 |
+
```shell
|
33 |
+
python -m phoenix.server.main serve
|
34 |
+
```
|
35 |
+
|
36 |
+
अंत में, अपने एजेंट्स को ट्रेस करने और ट्रेस को नीचे परिभाषित एंडपॉइंट पर Phoenix को भेजने के लिए `SmolagentsInstrumentor` को सेट करें।
|
37 |
+
|
38 |
+
```python
|
39 |
+
from opentelemetry import trace
|
40 |
+
from opentelemetry.sdk.trace import TracerProvider
|
41 |
+
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
42 |
+
|
43 |
+
from openinference.instrumentation.smolagents import SmolagentsInstrumentor
|
44 |
+
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
|
45 |
+
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor
|
46 |
+
|
47 |
+
endpoint = "http://0.0.0.0:6006/v1/traces"
|
48 |
+
trace_provider = TracerProvider()
|
49 |
+
trace_provider.add_span_processor(SimpleSpanProcessor(OTLPSpanExporter(endpoint)))
|
50 |
+
|
51 |
+
SmolagentsInstrumentor().instrument(tracer_provider=trace_provider)
|
52 |
+
```
|
53 |
+
तब आप अपने एजेंट चला सकते हैं!
|
54 |
+
|
55 |
+
```py
|
56 |
+
from smolagents import (
|
57 |
+
CodeAgent,
|
58 |
+
ToolCallingAgent,
|
59 |
+
WebSearchTool,
|
60 |
+
VisitWebpageTool,
|
61 |
+
InferenceClientModel,
|
62 |
+
)
|
63 |
+
|
64 |
+
model = InferenceClientModel()
|
65 |
+
|
66 |
+
managed_agent = ToolCallingAgent(
|
67 |
+
tools=[WebSearchTool(), VisitWebpageTool()],
|
68 |
+
model=model,
|
69 |
+
name="managed_agent",
|
70 |
+
description="This is an agent that can do web search.",
|
71 |
+
)
|
72 |
+
|
73 |
+
manager_agent = CodeAgent(
|
74 |
+
tools=[],
|
75 |
+
model=model,
|
76 |
+
managed_agents=[managed_agent],
|
77 |
+
)
|
78 |
+
manager_agent.run(
|
79 |
+
"If the US keeps its 2024 growth rate, how many years will it take for the GDP to double?"
|
80 |
+
)
|
81 |
+
```
|
82 |
+
और फिर आप अपने रन का निरीक्षण करने के लिए `http://0.0.0.0:6006/projects/` पर जा सकते हैं!
|
83 |
+
|
84 |
+
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/smolagents/inspect_run_phoenix.png">
|
85 |
+
|
86 |
+
आप देख सकते हैं कि CodeAgent ने अपने मैनेज्ड ToolCallingAgent को (वैसे, मैनेज्ड एजेंट एक CodeAgent भी हो सकता था) U.S. 2024 ग्रोथ रेट के लिए वेब सर्च चलाने के लिए कॉल किया। फिर मैनेज्ड एजेंट ने अपनी रिपोर्ट लौटाई और मैनेजर एजेंट ने अर्थव्यवस्था के दोगुना होने का समय गणना करने के लिए उस पर कार्य किया! अच्छा है, है ना?
|
docs/source/hi/tutorials/secure_code_execution.md
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# सुरक्षित कोड एक्जीक्यूशन
|
2 |
+
|
3 |
+
[[open-in-colab]]
|
4 |
+
|
5 |
+
> [!TIP]
|
6 |
+
> यदि आप एजेंट्स बनाने में नए हैं, तो सबसे पहले [एजेंट्स का परिचय](../conceptual_guides/intro_agents) और [smolagents की गाइडेड टूर](../guided_tour) पढ़ना सुनिश्चित करें।
|
7 |
+
|
8 |
+
### कोड Agents
|
9 |
+
|
10 |
+
[कई](https://huggingface.co/papers/2402.01030) [शोध](https://huggingface.co/papers/2411.01747) [पत्रों](https://huggingface.co/papers/2401.00812) ने दिखाया है कि LLM द्वारा अपनी क्रियाओं (टूल कॉल्स) को कोड में लिखना, टूल कॉलिंग के वर्तमान मानक प्रारूप से बहुत बेहतर है, जो industry में "टूल्स नेम्स और आर्ग्यूमेंट्स को JSON के रूप में लिखने" के विभिन्न रूप हैं।
|
11 |
+
|
12 |
+
कोड बेहतर क्यों है? क्योंकि हमने अपनी कोड भाषाओं को विशेष रूप से कंप्यूटर द्वारा की जाने वाली क्रियाओं को व्यक्त करने के लिए तैयार किया है। यदि JSON स्निपेट्स एक बेहतर तरीका होता, तो यह पैकेज JSON स्निपेट्स में लिखा गया होता और शैतान हम पर हंस रहा होता।
|
13 |
+
|
14 |
+
कोड कंप्यूटर पर क्रियाएँ व्यक्त करने का बेहतर तरीका है। इसमें बेहतर है:
|
15 |
+
- **कंपोज़ेबिलिटी:** क्या आप JSON क्रियाओं को एक-दूसरे के भीतर नेस्ट कर सकते हैं, या बाद में पुन: उपयोग करने के लिए JSON क्रियाओं का एक सेट परिभाषित कर सकते हैं, जैसे आप बस एक पायथन फ़ंक्शन परिभाषित कर सकते हैं?
|
16 |
+
- **ऑब्जेक्ट प्रबंधन:** JSON में `generate_image` जैसी क्रिया का आउटपुट कैसे स्टोर करें?
|
17 |
+
- **सामान्यता:** कोड किसी भी कंप्यूटर कार्य को व्यक्त करने के लिए बनाया गया है।
|
18 |
+
- **LLM प्रशिक्षण कॉर्पस में प्रतिनिधित्व:** क्यों न इस आशीर्वाद का लाभ उठाएं कि उच्च गुणवत्ता वाले कोड उदाहरण पहले से ही LLM प्रशिक्षण डेटा में शामिल हैं?
|
19 |
+
|
20 |
+
यह नीचे दी गई छवि में दर्शाया गया है, जो [Executable Code Actions Elicit Better LLM Agents](https://huggingface.co/papers/2402.01030) से ली गई है।
|
21 |
+
|
22 |
+
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/code_vs_json_actions.png">
|
23 |
+
|
24 |
+
यही कारण है कि हमने कोड एजेंट्स, इस मामले में पायथन एजेंट्स पर जोर दिया, जिसका मतलब सुरक्षित पायथन इंटरप्रेटर बनाने पर अधिक प्रयास करना था।
|
25 |
+
|
26 |
+
### लोकल पायथन इंटरप्रेटर
|
27 |
+
|
28 |
+
डिफ़ॉल्ट रूप से, `CodeAgent` LLM-जनरेटेड कोड को आपके एनवायरनमेंट में चलाता है।
|
29 |
+
यह एक्जीक्यूशन वैनिला पायथन इंटरप्रेटर द्वारा नहीं किया जाता: हमने एक अधिक सुरक्षित `LocalPythonExecutor` को शुरू से फिर से बनाया है।
|
30 |
+
यह इंटरप्रेटर सुरक्षा के लिए डिज़ाइन किया गया है:
|
31 |
+
- इम्पोर्ट्स को उपयोगकर्ता द्वारा स्पष्ट रूप से पास की गई सूची तक सीमित करना
|
32 |
+
- इनफिनिट लूप्स और रिसोर्स ब्लोटिंग को रोकने के लिए ऑपरेशंस की संख्या को ��ैप करना
|
33 |
+
- कोई भी ऐसा ऑपरेशन नहीं करेगा जो पूर्व-परिभाषित नहीं है
|
34 |
+
|
35 |
+
हमने इसे कई उपयोग मामलों में इस्तेमाल किया है, और कभी भी एनवायरनमेंट को कोई नुकसान नहीं देखा।
|
36 |
+
|
37 |
+
हालांकि यह समाधान पूरी तरह से सुरक्षित नहीं है: कोई ऐसे अवसरों की कल्पना कर सकता है जहां दुर्भावनापूर्ण कार्यों के लिए फाइन-ट्यून किए गए LLM अभी भी आपके एनवायरनमेंट को नुकसान पहुंचा सकते हैं। उदाहरण के लिए यदि आपने छवियों को प्रोसेस करने के लिए `Pillow` जैसे मासूम पैकेज की अनुमति दी है, तो LLM आपकी हार्ड ड्राइव को ब्लोट करने के लिए हजारों छवियों को सेव कर सकता है।
|
38 |
+
यदि आपने खुद LLM इंजन चुना है तो यह निश्चित रूप से संभावित नहीं है, लेकिन यह हो सकता है।
|
39 |
+
|
40 |
+
तो यदि आप अतिरिक्त सावधानी बरतना चाहते हैं, तो आप नीचे वर्णित रिमोट कोड एक्जीक्यूशन विकल्प का उपयोग कर सकते हैं।
|
41 |
+
|
42 |
+
### E2B कोड एक्जीक्यूटर
|
43 |
+
|
44 |
+
अधिकतम सुरक्षा के लिए, आप कोड को सैंडबॉक्स्ड एनवायरनमेंट में चलाने के लिए E2B के साथ हमारे एकीकरण का उपयोग कर सकते हैं। यह एक रिमोट एक्जीक्यूशन सेवा है जो आपके कोड को एक आइसोलेटेड कंटेनर में चलाती है, जिससे कोड का आपके स्थानीय एनवायरनमेंट को प्रभावित करना असंभव हो जाता है।
|
45 |
+
|
46 |
+
इसके लिए, आपको अपना E2B अकाउंट सेटअप करने और अपने एनवायरनमेंट वेरिएबल्स में अपना `E2B_API_KEY` सेट करने की आवश्यकता होगी। अधिक जानकारी के लिए [E2B की क्विकस्टार्ट डॉक्यूमेंटेशन](https://e2b.dev/docs/quickstart) पर जाएं।
|
47 |
+
|
48 |
+
फिर आप इसे `pip install e2b-code-interpreter python-dotenv` के साथ इंस्टॉल कर सकते हैं।
|
49 |
+
|
50 |
+
अब आप तैयार हैं!
|
51 |
+
|
52 |
+
कोड एक्जीक्यूटर को E2B पर सेट करने के लिए, बस अपने `CodeAgent` को इनिशियलाइज़ करते समय `executor_type="e2b"` फ्लैग पास करें।
|
53 |
+
ध्यान दें कि आपको `additional_authorized_imports` में सभी टूल की डिपेंडेंसीज़ जोड़नी चाहिए, ताकि एक्जीक्यूटर उन्हें इंस्टॉल करे।
|
54 |
+
|
55 |
+
```py
|
56 |
+
from smolagents import CodeAgent, VisitWebpageTool, InferenceClientModel
|
57 |
+
agent = CodeAgent(
|
58 |
+
tools = [VisitWebpageTool()],
|
59 |
+
model=InferenceClientModel(),
|
60 |
+
additional_authorized_imports=["requests", "markdownify"],
|
61 |
+
executor_type="e2b"
|
62 |
+
)
|
63 |
+
|
64 |
+
agent.run("What was Abraham Lincoln's preferred pet?")
|
65 |
+
```
|
66 |
+
|
67 |
+
E2B कोड एक्जीक्यूशन वर्तमान में मल्टी-एजेंट्स के साथ काम नहीं करता है - क्योंकि कोड ब्लॉब में एक एजेंट कॉल करना जो रिमोटली एक्जीक्यूट किया जाना चाहिए, यह एक गड़बड़ है। लेकिन हम इसे जोड़ने पर काम कर रहे हैं!
|
docs/source/hi/tutorials/tools.md
ADDED
@@ -0,0 +1,232 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Tools
|
2 |
+
|
3 |
+
[[open-in-colab]]
|
4 |
+
|
5 |
+
यहाँ, हम एडवांस्ड tools उपयोग देखेंगे।
|
6 |
+
|
7 |
+
> [!TIP]
|
8 |
+
> यदि आप एजेंट्स बनाने में नए हैं, तो सबसे पहले [एजेंट्स का परिचय](../conceptual_guides/intro_agents) और [smolagents की गाइडेड टूर](../guided_tour) पढ़ना सुनिश्चित करें।
|
9 |
+
|
10 |
+
- [Tools](#tools)
|
11 |
+
- [टूल क्या है, और इसे कैसे बनाएं?](#टूल-क्या-है-और-इसे-कैसे-बनाएं)
|
12 |
+
- [अपना टूल हब पर शेयर करें](#अपना-टूल-हब-पर-शेयर-करें)
|
13 |
+
- [स्पेस को टूल के रूप में इम्पोर्ट करें](#स्पेस-को-टूल-के-रूप-में-इम्पोर्ट-करें)
|
14 |
+
- [LangChain टूल्स का उपयोग करें](#LangChain-टूल्स-का-उपयोग-करें)
|
15 |
+
- [अपने एजेंट के टूलबॉक्स को मैनेज करें](#अपने-एजेंट-के-टूलबॉक्स-को-मैनेज-करें)
|
16 |
+
- [टूल्स का कलेक्शन उपयोग करें](#टूल्स-का-कलेक्शन-उपयोग-करें)
|
17 |
+
|
18 |
+
### टूल क्या है और इसे कैसे बनाएं
|
19 |
+
|
20 |
+
टूल मुख्य रूप से एक फ़ंक्शन है जिसे एक LLM एजेंटिक सिस्टम में उपयोग कर सकता है।
|
21 |
+
|
22 |
+
लेकिन इसका उपयोग करने के लिए, LLM को एक API दी जाएगी: नाम, टूल विवरण, इनपुट प्रकार और विवरण, आउटपुट प्रकार।
|
23 |
+
|
24 |
+
इसलिए यह केवल एक फ़ंक्शन नहीं हो सकता। यह एक क्लास होनी चाहिए।
|
25 |
+
|
26 |
+
तो मूल रूप से, टूल एक क्लास है जो एक फ़ंक्शन को मेटाडेटा के साथ रैप करती है जो LLM को समझने में मदद करती है कि इसका उपयोग कैसे करें।
|
27 |
+
|
28 |
+
यह कैसा दिखता है:
|
29 |
+
|
30 |
+
```python
|
31 |
+
from smolagents import Tool
|
32 |
+
|
33 |
+
class HFModelDownloadsTool(Tool):
|
34 |
+
name = "model_download_counter"
|
35 |
+
description = """
|
36 |
+
This is a tool that returns the most downloaded model of a given task on the Hugging Face Hub.
|
37 |
+
It returns the name of the checkpoint."""
|
38 |
+
inputs = {
|
39 |
+
"task": {
|
40 |
+
"type": "string",
|
41 |
+
"description": "the task category (such as text-classification, depth-estimation, etc)",
|
42 |
+
}
|
43 |
+
}
|
44 |
+
output_type = "string"
|
45 |
+
|
46 |
+
def forward(self, task: str):
|
47 |
+
from huggingface_hub import list_models
|
48 |
+
|
49 |
+
model = next(iter(list_models(filter=task, sort="downloads", direction=-1)))
|
50 |
+
return model.id
|
51 |
+
|
52 |
+
model_downloads_tool = HFModelDownloadsTool()
|
53 |
+
```
|
54 |
+
|
55 |
+
कस्टम टूल `Tool` को सबक्लास करता है उपयोगी मेथड्स को इनहेरिट करने के लिए। चाइल्ड क्लास भी परिभाषित करती है:
|
56 |
+
- एक `name` एट्रिब्यूट, जो टूल के नाम से संबंधित है। नाम आमतौर पर बताता है कि टूल क्या करता है। चूंकि कोड एक टास्क के लिए सबसे अधिक डाउनलोड वाले मॉडल को रिटर्न करता है, इसलिए इसे `model_download_counter` नाम दें।
|
57 |
+
- एक `description` एट्रिब्यूट एजेंट के सिस्टम प्रॉम्प्ट को पॉपुलेट करने के लिए उपयोग किया जाता है।
|
58 |
+
- एक `inputs` एट्रिब्यूट, जो `"type"` और `"description"` keys वाला डिक्शनरी है। इसमें जानकारी होती है जो पायथन इंटरप्रेटर को इनपुट के बारे में शिक्षित विकल्प चुनने में मदद करती है।
|
59 |
+
- एक `output_type` एट्रिब्यूट, जो आउटपुट टाइप को निर्दिष्ट करता है। `inputs` और `output_type` दोनों के लिए टाइप [Pydantic formats](https://docs.pydantic.dev/latest/concepts/json_schema/#generating-json-schema) होने चाहिए, वे इनमें से कोई भी हो सकते हैं: [`~AUTHORIZED_TYPES`]।
|
60 |
+
- एक `forward` मेथड जिसमें एक्जीक्यूट किया जाने वाला इन्फरेंस कोड होता है।
|
61 |
+
|
62 |
+
एजेंट में उपयोग किए जाने के लिए इतना ही चाहिए!
|
63 |
+
|
64 |
+
टूल बनाने का एक और तरीका है। [guided_tour](../guided_tour) में, हमने `@tool` डेकोरेटर का उपयोग करके एक टूल को लागू किया। [`tool`] डेकोरेटर सरल टूल्स को परिभाषित करने का अनुशंसित तरीका है, लेकिन कभी-कभी आपको इससे अधिक की आवश्यकता होती है: अधिक स्पष्टता के लिए एक क्लास में कई मेथड्स का उपयोग करना, या अतिरिक्त क्लास एट्रिब्यूट्स का उपयोग करना।
|
65 |
+
|
66 |
+
इस स्थिति में, आप ऊपर बताए अनुसार [`Tool`] को सबक्लास करके अपना टूल बना सकते हैं।
|
67 |
+
|
68 |
+
### अपना टूल हब पर शेयर करें
|
69 |
+
|
70 |
+
आप टूल पर [`~Tool.push_to_hub`] को कॉल करके अपना कस्टम टूल हब पर शेयर कर सकते हैं। सुनिश्चित करें कि आपने हब पर इसके लिए एक रिपॉजिटरी बनाई है और आप रीड एक्सेस वाला टोकन उपयोग कर रहे हैं।
|
71 |
+
|
72 |
+
```python
|
73 |
+
model_downloads_tool.push_to_hub("{your_username}/hf-model-downloads", token="<YOUR_HUGGINGFACEHUB_API_TOKEN>")
|
74 |
+
```
|
75 |
+
|
76 |
+
हब पर पुश करने के लिए काम करने के लिए, आपके टूल को कुछ नियमों का पालन करना होगा:
|
77 |
+
- सभी मेथड्स सेल्फ-कंटेन्ड हैं, यानी उनके आर्ग्स से आने वाले वेरिएबल्स का उपयोग करें।
|
78 |
+
- उपरोक्त बिंदु के अनुसार, **सभी इम्पोर्ट्स को सीधे टूल के फ़ंक्शंस के भीतर परिभाषित किया जाना चाहिए**, अन्यथा आपको अपने कस्टम टूल के साथ [`~Tool.save`] या [`~Tool.push_to_hub`] को कॉल करने का प्रयास करते समय एरर मिलेगा।
|
79 |
+
- यदि आप `__init__` विधि को सबक्लास करते हैं, तो आप इसे `self` के अलावा कोई अन्य आर्ग्यूमेंट नहीं दे सकते। ऐसा इसलिए है क्योंकि किसी विशिष्ट टूल इंस्टेंस के इनिशियलाइजेशन के दौरान सेट किए गए तर्कों को आर्ग्यूमेंट्स करना कठिन होता है, जो उन्हें हब पर ठीक से साझा करने से रोकता है। और वैसे भी, एक विशिष्ट क्लास बनाने का विचार यह है कि आप हार्ड-कोड के लिए आवश्यक किसी भी चीज़ के लिए क्लास विशेषताएँ पहले से ही सेट कर सकते हैं (बस `your_variable=(...)` को सीधे `class YourTool(Tool):` पंक्ति के अंतर्गत सेट करें ). और निश्चित रूप से आप अभी भी `self.your_variable` को असाइन करके अपने कोड में कहीं भी एक क्लास विशेषता बना सकते हैं।
|
80 |
+
|
81 |
+
|
82 |
+
एक बार जब आपका टूल हब पर पुश हो जाता है, तो आप इसे विज़ुअलाइज़ कर सकते हैं। [यहाँ](https://huggingface.co/spaces/m-ric/hf-model-downloads) `model_downloads_tool` है जिसे मैंने पुश किया है। इसमें एक अच्छा ग्रेडियो इंटरफ़ेस है।
|
83 |
+
|
84 |
+
टूल फ़ाइलों में गहराई से जाने पर, आप पा सकते हैं कि सारी टूल लॉजिक [tool.py](https://huggingface.co/spaces/m-ric/hf-model-downloads/blob/main/tool.py) के अंतर्गत है। यहीं आप किसी और द्वारा शेयर किए गए टूल का निरीक्षण कर सकते हैं।
|
85 |
+
|
86 |
+
फिर आप टूल को [`load_tool`] के साथ लोड कर सकते हैं या [`~Tool.from_hub`] के साथ बना सकते हैं और इसे अपने एजेंट में `tools` पैरामीटर में पास कर सकते हैं।
|
87 |
+
चूंकि टूल्स को चलाने का मतलब कस्टम कोड चलाना है, आपको यह सुनिश्चित करना होगा कि आप रिपॉजिटरी पर भरोसा करते हैं, इसलिए हम हब से टूल लोड करने के लिए `trust_remote_code=True` पास करने की आवश्यकता रखते हैं।
|
88 |
+
|
89 |
+
```python
|
90 |
+
from smolagents import load_tool, CodeAgent
|
91 |
+
|
92 |
+
model_download_tool = load_tool(
|
93 |
+
"{your_username}/hf-model-downloads",
|
94 |
+
trust_remote_code=True
|
95 |
+
)
|
96 |
+
```
|
97 |
+
|
98 |
+
### स्पेस को टूल के रूप में इम्पोर्ट करें
|
99 |
+
|
100 |
+
आप [`Tool.from_space`] मेथड का उपयोग करके हब से एक स्पेस को सीधे टूल के रूप में इम्पोर्ट कर सकते हैं!
|
101 |
+
|
102 |
+
आपको केवल हब पर स्पेस की ID, इसका नाम, और एक विवरण प्रदान करने की आवश्यकता है जो आपके एजेंट को समझने में मदद करेगा कि टूल क्या करता है। अंदर से, यह स्पेस को कॉल करने के लिए [`gradio-client`](https://pypi.org/project/gradio-client/) लाइब्रेरी का उपयोग करेगा।
|
103 |
+
|
104 |
+
उदाहरण के लिए, चलिए हब से [FLUX.1-dev](https://huggingface.co/black-forest-labs/FLUX.1-dev) स्पेस को इम्पोर्ट करें और इसका उपयोग एक इमेज जनरेट करने के लिए करें।
|
105 |
+
|
106 |
+
```python
|
107 |
+
image_generation_tool = Tool.from_space(
|
108 |
+
"black-forest-labs/FLUX.1-schnell",
|
109 |
+
name="image_generator",
|
110 |
+
description="Generate an image from a prompt"
|
111 |
+
)
|
112 |
+
|
113 |
+
image_generation_tool("A sunny beach")
|
114 |
+
```
|
115 |
+
और देखो, यह तुम्हारी छवि है! 🏖️
|
116 |
+
|
117 |
+
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/sunny_beach.webp">
|
118 |
+
|
119 |
+
फिर आप इस टूल का उपयोग किसी अन्य टूल की तरह कर सकते हैं। उदाहरण के लिए, चलिए प्रॉम्प्ट `a rabbit wearing a space suit` को सुधारें और इसकी एक इमेज जनरेट करें। यह उदाहरण यह भी दिखाता है कि आप एजेंट को अतिरिक्त आर्ग्यूमेंट्स कैसे पास कर सकते हैं।
|
120 |
+
|
121 |
+
```python
|
122 |
+
from smolagents import CodeAgent, InferenceClientModel
|
123 |
+
|
124 |
+
model = InferenceClientModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct")
|
125 |
+
agent = CodeAgent(tools=[image_generation_tool], model=model)
|
126 |
+
|
127 |
+
agent.run(
|
128 |
+
"Improve this prompt, then generate an image of it.", additional_args={'user_prompt': 'A rabbit wearing a space suit'}
|
129 |
+
)
|
130 |
+
```
|
131 |
+
|
132 |
+
```text
|
133 |
+
=== Agent thoughts:
|
134 |
+
improved_prompt could be "A bright blue space suit wearing rabbit, on the surface of the moon, under a bright orange sunset, with the Earth visible in the background"
|
135 |
+
|
136 |
+
Now that I have improved the prompt, I can use the image generator tool to generate an image based on this prompt.
|
137 |
+
>>> Agent is executing the code below:
|
138 |
+
image = image_generator(prompt="A bright blue space suit wearing rabbit, on the surface of the moon, under a bright orange sunset, with the Earth visible in the background")
|
139 |
+
final_answer(image)
|
140 |
+
```
|
141 |
+
|
142 |
+
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/rabbit_spacesuit_flux.webp">
|
143 |
+
|
144 |
+
यह कितना कूल है? 🤩
|
145 |
+
|
146 |
+
### LangChain टूल्स का उपयोग करें
|
147 |
+
|
148 |
+
हम LangChain को पसंद करते हैं और मानते हैं कि इसके पास टूल्स का एक बहुत आकर्षक संग्रह है।
|
149 |
+
LangChain से एक टूल इम्पोर्ट करने के लिए, `from_langchain()` मेथड का उपयोग करें।
|
150 |
+
|
151 |
+
यहाँ बताया गया है कि आप LangChain वेब सर्च टू��� का उपयोग करके परिचय के सर्च रिजल्ट को कैसे फिर से बना सकते हैं।
|
152 |
+
इस टूल को काम करने के लिए `pip install langchain google-search-results -q` की आवश्यकता होगी।
|
153 |
+
```python
|
154 |
+
from langchain.agents import load_tools
|
155 |
+
|
156 |
+
search_tool = Tool.from_langchain(load_tools(["serpapi"])[0])
|
157 |
+
|
158 |
+
agent = CodeAgent(tools=[search_tool], model=model)
|
159 |
+
|
160 |
+
agent.run("How many more blocks (also denoted as layers) are in BERT base encoder compared to the encoder from the architecture proposed in Attention is All You Need?")
|
161 |
+
```
|
162 |
+
|
163 |
+
### अपने एजेंट के टूलबॉक्स को मैनेज करें
|
164 |
+
|
165 |
+
आप एजेंट के टूलबॉक्स को `agent.tools` एट्रिब्यूट में एक टूल जोड़कर या बदलकर मैनेज कर सकते हैं, क्योंकि यह एक स्टैंडर्ड डिक्शनरी है।
|
166 |
+
|
167 |
+
चलिए केवल डिफ़ॉल्ट टूलबॉक्स के साथ इनिशियलाइज़ किए गए मौजूदा एजेंट में `model_download_tool` जोड़ें।
|
168 |
+
|
169 |
+
```python
|
170 |
+
from smolagents import InferenceClientModel
|
171 |
+
|
172 |
+
model = InferenceClientModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct")
|
173 |
+
|
174 |
+
agent = CodeAgent(tools=[], model=model, add_base_tools=True)
|
175 |
+
agent.tools[model_download_tool.name] = model_download_tool
|
176 |
+
```
|
177 |
+
अब हम नए टूल का लाभ उठा सकते हैं।
|
178 |
+
|
179 |
+
```python
|
180 |
+
agent.run(
|
181 |
+
"Can you give me the name of the model that has the most downloads in the 'text-to-video' task on the Hugging Face Hub but reverse the letters?"
|
182 |
+
)
|
183 |
+
```
|
184 |
+
|
185 |
+
|
186 |
+
> [!TIP]
|
187 |
+
> एजेंट में बहुत अधिक टूल्स न जोड़ने से सावधान रहें: यह कमजोर LLM इंजन को ओवरव्हेल्म कर सकता है।
|
188 |
+
|
189 |
+
|
190 |
+
### टूल्स का कलेक्शन उपयोग करें
|
191 |
+
|
192 |
+
आप `ToolCollection` ऑब्जेक्ट का उपयोग करके टूल कलेक्शंस का लाभ उठा सकते हैं। यह या तो हब से एक कलेक्शन या MCP सर्वर टूल्स को लोड करने का समर्थन करता है।
|
193 |
+
|
194 |
+
#### हब में कलेक्शन से टूल कलेक्शन
|
195 |
+
|
196 |
+
आप उस कलेक्शन के स्लग के साथ इसका लाभ उठा सकते हैं जिसका आप उपयोग करना चाहते हैं।
|
197 |
+
फिर उन्हें अपने एजेंट को इनिशियलाइज़ करने के लिए एक लिस्ट के रूप में पास करें, और उनका उपयोग शुरू करें!
|
198 |
+
|
199 |
+
```py
|
200 |
+
from smolagents import ToolCollection, CodeAgent
|
201 |
+
|
202 |
+
image_tool_collection = ToolCollection.from_hub(
|
203 |
+
collection_slug="huggingface-tools/diffusion-tools-6630bb19a942c2306a2cdb6f",
|
204 |
+
token="<YOUR_HUGGINGFACEHUB_API_TOKEN>"
|
205 |
+
)
|
206 |
+
agent = CodeAgent(tools=[*image_tool_collection.tools], model=model, add_base_tools=True)
|
207 |
+
|
208 |
+
agent.run("Please draw me a picture of rivers and lakes.")
|
209 |
+
```
|
210 |
+
|
211 |
+
स्टार्ट को तेज करने के लिए, टूल्स केवल तभी लोड होते हैं जब एजेंट द्वारा कॉल किए जाते हैं।
|
212 |
+
|
213 |
+
#### किसी भी MCP सर्वर से टूल कलेक्शन
|
214 |
+
|
215 |
+
[glama.ai](https://glama.ai/mcp/servers) या [smithery.ai](https://smithery.ai/) पर उपलब्ध सैकड़ों MCP सर्वर्स से टूल्स का लाभ उठाएं।
|
216 |
+
|
217 |
+
MCP सर्वर्स टूल्स को निम्नानुसार `ToolCollection` ऑब्जेक्ट में लोड किया जा सकता है:
|
218 |
+
|
219 |
+
```py
|
220 |
+
from smolagents import ToolCollection, CodeAgent
|
221 |
+
from mcp import StdioServerParameters
|
222 |
+
|
223 |
+
server_parameters = StdioServerParameters(
|
224 |
+
command="uv",
|
225 |
+
args=["--quiet", "[email protected]"],
|
226 |
+
env={"UV_PYTHON": "3.12", **os.environ},
|
227 |
+
)
|
228 |
+
|
229 |
+
with ToolCollection.from_mcp(server_parameters, trust_remote_code=True) as tool_collection:
|
230 |
+
agent = CodeAgent(tools=[*tool_collection.tools], add_base_tools=True)
|
231 |
+
agent.run("Please find a remedy for hangover.")
|
232 |
+
```
|