在這本筆記簿中,我們將製作 多重代理網路瀏覽器:由多個代理協同使用網路解決問題的代理系統!
這將是一個簡單的層級結構,使用 ManagedAgent
物件來包覆受管理的網路搜尋代理:
複製
+----------------+ | 經理代理 | +----------------+ | _______________|______________ | | 代碼解釋器 +--------------------------------+ 工具 | 管理代理 | | +------------------+ | | | 網路搜尋代理 | | | +------------------+ | | | | | | 網頁搜尋工具 | | | 訪問網頁工具 | +--------------------------------+
讓我們建立這個系統。
執行下面的行來安裝所需的相依性:
複製
!pip install markdownify duckduckgo-search smolagents --upgrade -q
讓我們登入以呼叫 HF Inference API:
複製
from huggingface_hub import login 登入()
⚡️ 我們的代理將由 Qwen/Qwen2.5-Coder-32B-Instruct 使用 HfApiModel
使用 HF 的 Inference API 的類別:Inference API 允許快速輕鬆地執行任何 OS 模型。
請注意: Inference API 會根據各種標準託管模型,已部署的模型可能會更新或替換,恕不另行通知。進一步瞭解 這裡.
複製
model_id = "Qwen/Qwen2.5-Coder-32B-Instruct"
🔍 建立網路搜尋工具 #
對於網頁瀏覽,我們已經可以使用預先存在的 鴨子搜尋工具
工具來提供等同於 Google 搜尋的功能。
但接下來我們也需要能夠進入由 鴨子搜尋工具
.為此,我們可以匯入函式庫內建的 訪問網頁工具
, 但我們會再建造一次,看看它是如何完成的。
因此,讓我們建立我們的 訪問網頁工具
工具從頭開始使用 markdownify
.
複製
匯入 re 匯入請求 從 markdownify 匯入 markdownify from requests.exceptions import RequestException 從 smolagents 匯入工具 @tool def visit_webpage(url: str) -> str: """Visits a webpage at the given URL and returns its content as a markdown string. Args: url:要訪問的網頁的 URL。 回傳值: 轉換為 Markdown 的網頁內容,若請求失敗則會顯示錯誤訊息。 """ try: # 向 URL 傳送 GET 請求 response = requests.get(url) response.raise_for_status() # 對不良狀態代碼產生異常 # 將 HTML 內容轉換為 Markdown markdown_content = markdownify(response.text).strip() # 移除多個換行符 markdown_content = re.sub(r"\n{3,}", "\n\n", markdown_content) return markdown_content except RequestException as e: return f "Error fetching the webpage:{str(e)}" except Exception as e: return f "An unexpected error occurred:{str(e)}"
好了,現在讓我們初始化並測試我們的工具!
複製
print(visit_webpage("https://en.wikipedia.org/wiki/Hugging_Face")[:500])
建立我們的多重代理系統🤖🤝🤖 #
現在我們有了所有工具 搜尋
和 瀏覽網頁
, 我們可以使用它們來建立網頁代理。
該為此代理選擇何種組態?
- 網頁瀏覽是單一時線任 務,不需要並行的工具呼叫,因此 JSON 工具呼叫在這方面運作良好。因此,我們選擇一個
JsonAgent
. - 此外,由於有時網路搜尋需要探索許多頁面才能找到正確答案,因此我們傾向於增加
最大步數
至 10。
複製
從 smolagents 匯入 ( CodeAgent、 ToolCallingAgent、 HfApiModel、 ManagedAgent、 DuckDuckGoSearchTool、 LiteLLMModel、 ) model = HfApiModel(model_id) web_agent = ToolCallingAgent( tools=[DuckDuckGoSearchTool(), visit_webpage]、 model=model、 max_steps=10、 )
然後,我們將此代理包裝成一個 ManagedAgent
這將使其管理員代理可以呼叫它。
複製
managed_web_agent = ManagedAgent( agent=web_agent、 name="search"、 description="為您執行網路搜尋。將您的查詢作為參數給它。"、 )
最後,我們建立一個管理代理,在初始化時,我們將我們的管理代理傳給它,在它的 管理的代理
爭論。
由於這個代理是負責規劃和思考的人,因此先進的推理能力將是有益的,所以一個 CodeAgent
將是最佳選擇。
此外,我們想提出一個涉及當年的問題,並進行其他資料計算:因此,讓我們加入 additional_authorized_imports=["time", "numpy", "pandas"]
, 以防代理需要這些套件。
複製
manager_agent = CodeAgent( tools=[]、 model=model、 managed_agents=[managed_web_agent]、 additional_authorized_imports=["time", "numpy", "pandas"]、 )
就是這樣!現在讓我們執行我們的系統!我們選擇一個需要計算和研究的問題:
複製
answer = manager_agent.run("If LLM training continues to scale up at the current rhythm until 2030, what would be the electric power required in GW to power the biggest training runs by 2030?與某些國家相比,這將相對應多少?請提供所使用的任何數字的來源。)
我們得到這份報告作為答案:
複製
根據目前的增長預測和能源消耗估算,如果 LLM 培訓繼續以目前的節奏擴展,直到 2030 年 直到 2030 年: 1.到 2030 年,最大規模的訓練所需的電力約為 303.74 GW,即每年約 2,660,762 GWh。 換算為每年約 2,660,762 GWh。 2.與各國的用電量相比: - 約相當於中國總用电量的 34%。 - 這將超過印度(184%)、俄羅斯(267%)和日本(291%)的總用電量。 - 這幾乎是意大利或墨西哥等國家用電的 9 倍。 3.數字來源: - 對於未來 LLM 培訓的 5 GW 初步估計來自 AWS 執行長 Matt Garman。 - 成長預測使用了 Springs 市場研究的 CAGR 79.80%。 - 國家電力消耗資料來自美國能源資訊管理局,主要是針對 2021 年。 2021.
看來我們需要一些大型的動力裝置,如果 刻度假設 仍然適用。
我們的代理能夠有效率地合作解決任務!✅
💡 您可以輕鬆地將此協調擴展至更多代理:一個執行程式碼、一個搜尋網頁、一個處理檔案載入...