自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于阿里開源Qwen2.5-7B-Instruct模型進(jìn)行多代理RAG開發(fā)實(shí)戰(zhàn) 原創(chuàng)

發(fā)布于 2025-1-13 10:51
瀏覽
0收藏

本文使用基于阿里通義千問團(tuán)隊(duì)開源Qwen2.5-7B-Instruct大模型的代碼代理開發(fā)一個本地多代理RAG系統(tǒng)的完整過程。

引言

大型語言模型已經(jīng)展現(xiàn)出令人印象深刻的能力,并且隨著每一代新模型的發(fā)布,它們?nèi)栽诜€(wěn)步改進(jìn)。例如,聊天機(jī)器人和自動摘要器等應(yīng)用程序可以直接利用LLM的語言能力,因?yàn)檫@些LLM只要求生成文本輸出——這也是該類模型的自然設(shè)置。此外,大型語言模型還表現(xiàn)出了理解和解決復(fù)雜任務(wù)的令人印象深刻的能力,但是只要它們的解決方案保持“紙上談兵”,即純文本形式,那么它們就需要外部人類用戶代表它們行事并報告所提議操作的結(jié)果。另一方面,代理系統(tǒng)通過讓模型作用于其環(huán)境來解決這個問題,通常是通過一組可以執(zhí)行特定操作的工具。通過這種方式,LLM就可以在與環(huán)境交互的同時通過反復(fù)試驗(yàn)迭代地找到解決方案。

一個有趣的情況是,LLM代理可以訪問的工具本身就是代理,這是多代理系統(tǒng)的核心概念。多代理系統(tǒng)通過將任務(wù)分配和委托給專門的模型并將其輸出像拼圖一樣拼湊在一起來解決任務(wù)。實(shí)現(xiàn)此類系統(tǒng)的一種常見方法是使用管理代理來協(xié)調(diào)和協(xié)調(diào)其他代理的工作流程。

值得注意的是,代理系統(tǒng),尤其是多代理系統(tǒng),需要強(qiáng)大的LLM作為骨干才能正常運(yùn)行,因?yàn)榈讓幽P托枰軌蚶斫飧鞣N工具的用途和適用性,并將原始問題分解為每個工具可以解決的子問題。因此,ChatGPT模型或Anthropic公司的Claude等專有模型通常成為代理系統(tǒng)的默認(rèn)解決方案。幸運(yùn)的是,開源LLM的性能繼續(xù)大幅提升,以至于其中一些LLM在某些情況下可以與專有商業(yè)模型相媲美。更有趣的是,中等規(guī)模的開放型LLM現(xiàn)在可以執(zhí)行幾年前無法想象的復(fù)雜任務(wù)。

在本文中,我將展示一個可以在消費(fèi)級電腦上運(yùn)行的“小型”LLM如何能夠?yàn)槎啻硐到y(tǒng)提供良好的結(jié)果。具體來說,我將提供一個教程,介紹如何使用中國阿里公司開源的Qwen2.5–7B-Instruct模型創(chuàng)建一個多代理RAG系統(tǒng)。你可以在我的項(xiàng)目的??GitHub存儲庫???和??Colab??中找到此項(xiàng)目所有完整的源代碼實(shí)現(xiàn)。

在深入研究這個系統(tǒng)架構(gòu)的細(xì)節(jié)之前,我將首先回顧一些有關(guān)LLM代理的基本概念,因?yàn)檫@些概念將有助于更好地理解我們要使用的開發(fā)框架。

ReAct框架

ReAct框架,是在論文??《ReAct:語言模型中的協(xié)同推理和行動》??中提出的一種用于構(gòu)建LLM代理的流行框架。該方法的主要思想是將思維鏈提示的有效性納入代理框架。ReAct框架由一組相互交錯的推理和行動步驟組成:大型語言模型在發(fā)出動作之前被提示提供思維序列。通過這種方式,模型可以創(chuàng)建動態(tài)推理軌跡來引導(dǎo)動作并更新高級計劃,同時結(jié)合來自與環(huán)境交互的信息。這樣一來,就允許采用迭代和增量方法來解決給定的任務(wù)。在實(shí)際開發(fā)中,ReAct代理的工作流程由思考、行動和觀察序列組成:模型在思考步驟中對總體計劃和具體工具的使用進(jìn)行推理,然后在行動步驟中調(diào)用相關(guān)工具,最后在觀察步驟中從環(huán)境中接收反饋。

下面給出的是ReAct框架的一個示例。

基于阿里開源Qwen2.5-7B-Instruct模型進(jìn)行多代理RAG開發(fā)實(shí)戰(zhàn)-AI.x社區(qū)

ReAct、Chain-of-Thought和Act-Only三框架在問答任務(wù)中的比較(本圖片來自論文《ReAct:語言模型中的協(xié)同推理和行動》)。

代碼代理

代碼代理是一種特殊類型的LLM代理,它能夠使用可執(zhí)行的Python代碼與環(huán)境進(jìn)行交互。這種代碼代理的實(shí)現(xiàn)基于論文??《可執(zhí)行代碼操作引出更好的LLM代理》??中提出的CodeAct框架。CodeAct與ReAct框架非常相似,不同之處在于每個操作都由可以執(zhí)行多個操作的任意可執(zhí)行代碼組成。手工開發(fā)的工具作為常規(guī)Python函數(shù)提供給代理,而代理可以在代碼中調(diào)用這些函數(shù)。

與使用JSON或其他文本格式執(zhí)行操作的更傳統(tǒng)的代理相比,代碼代理具有一組獨(dú)特的優(yōu)勢:

  • 它們可以利用現(xiàn)有軟件包與手工開發(fā)的任務(wù)特定型工具相結(jié)合。
  • 它們可以使用出現(xiàn)錯誤后返回的錯誤消息自行調(diào)試生成的代碼。
  • LLM熟悉編寫代碼,因?yàn)榇a通常廣泛存在于它們的預(yù)訓(xùn)練數(shù)據(jù)中,使其成為編寫操作的更自然的格式。
  • 代碼自然允許存儲中間結(jié)果并在單個操作中組合多個操作,而JSON或其他文本格式可能需要多個操作才能完成相同的操作。

出于這些原因,與使用JSON或其他文本格式執(zhí)行操作的代理相比,代碼代理可以提供更好的性能和更快的執(zhí)行速度。

基于阿里開源Qwen2.5-7B-Instruct模型進(jìn)行多代理RAG開發(fā)實(shí)戰(zhàn)-AI.x社區(qū)

代碼代理與使用JSON或文本作為操作的代理之間的比較(圖片來自論文《可執(zhí)行代碼操作引出更好的LLM代理》)。

下面是原始論文中的一個具體示例,展示了代碼代理如何需要更少的操作來解決某些任務(wù)。

基于阿里開源Qwen2.5-7B-Instruct模型進(jìn)行多代理RAG開發(fā)實(shí)戰(zhàn)-AI.x社區(qū)

代碼代理與使用JSON/文本操作格式的代理比較:代碼代理可以在一個操作中執(zhí)行多個操作(圖片來自論文《可執(zhí)行代碼操作引出更好的LLM代理》)。

Hugging Face轉(zhuǎn)換器庫提供了有用的模塊來構(gòu)建代理,特別是代碼代理。Hugging Face轉(zhuǎn)換器代理框架專注于清晰度和模塊化作為核心設(shè)計原則。這些在構(gòu)建代理系統(tǒng)時尤為重要:工作流程的復(fù)雜性使得控制架構(gòu)的所有互連部分至關(guān)重要。這些設(shè)計選擇使Hugging Face代理成為構(gòu)建自定義和靈活代理系統(tǒng)的絕佳工具。當(dāng)使用開源模型為代理引擎提供支持時,Hugging Face代理框架具有進(jìn)一步的優(yōu)勢,即可以輕松訪問Hugging Face生態(tài)系統(tǒng)中存在的模型和實(shí)用程序。

Hugging Face代碼代理還解決了不安全的代碼執(zhí)行問題。事實(shí)上,讓LLM不受約束地生成代碼可能會帶來嚴(yán)重風(fēng)險,因?yàn)樗赡軙?zhí)行不良操作。例如,幻覺可能會導(dǎo)致代理刪除重要文件。為了減輕這種風(fēng)險,Hugging Face代碼代理實(shí)現(xiàn)使用自下而上的方法來保護(hù)代碼執(zhí)行:代碼解釋器只能執(zhí)行明確授權(quán)的操作。這與通常的自上而下的范式形成對比,后者從功能齊全的Python解釋器開始,然后禁止可能有危險的操作。Hugging Face實(shí)現(xiàn)包括可執(zhí)行的安全授權(quán)函數(shù)列表,并提供可導(dǎo)入的安全模塊列表。除非用戶預(yù)先授權(quán);否則,任何其他內(nèi)容都無法執(zhí)行。你可以在Hugging Face公司的博客文章中閱讀有關(guān)Hugging Face(代碼)代理的更多信息:

代理RAG

檢索增強(qiáng)生成已成為涉及大型語言模型的信息檢索任務(wù)的事實(shí)標(biāo)準(zhǔn)。這種技術(shù)可以幫助保持LLM信息的最新狀態(tài),提供對特定信息的訪問,并減少幻覺。此外,它還可以通過返回LLM模型用于生成答案的信息源來增強(qiáng)人類的可解釋性和監(jiān)督性。通常的RAG工作流程,包括基于與用戶查詢的語義相似性的檢索過程以及使用檢索到的信息對模型的上下文增強(qiáng),不足以解決某些特定任務(wù)。一些不適合傳統(tǒng)RAG的情況包括需要與信息源交互的任務(wù)、需要回答多條信息的查詢,以及需要非平凡操作才能與源中包含的實(shí)際信息相聯(lián)系的復(fù)雜查詢。

傳統(tǒng)RAG系統(tǒng)的一個具體挑戰(zhàn)性示例是多跳問答轉(zhuǎn)換器(MHQA)。它涉及提取和組合多條信息,可能需要對提取的信息和仍然缺失的信息進(jìn)行多次迭代推理。例如,如果向模型提出“樺木膠合板是否漂浮在乙醇中?”的問題,即使用于RAG的來源包含有關(guān)這兩種材料密度的信息,但是如果這兩條信息沒有直接的聯(lián)系,那么標(biāo)準(zhǔn)RAG框架也可能會失敗。

增強(qiáng)RAG以避免上述缺點(diǎn)的一種流行方法是使用代理系統(tǒng)。LLM轉(zhuǎn)換器代理可以將原始查詢分解為一系列子查詢,然后使用語義搜索作為工具來檢索這些生成的子查詢的段落,隨著收集到更多信息而更改和調(diào)整其計劃。它可以自主決定是否收集了足夠的信息來回答每個查詢,或者是否應(yīng)該繼續(xù)搜索。代理RAG框架可以通過將其擴(kuò)展到多代理系統(tǒng)來進(jìn)一步增強(qiáng),其中每個代理都有自己定義的任務(wù)和職責(zé)。例如,這允許將高級任務(wù)規(guī)劃與文檔源的交互分開。在下一節(jié)中,我將描述這種系統(tǒng)的實(shí)際實(shí)現(xiàn)。

帶有代碼代理的多代理RAG

在本節(jié)中,我將討論我用于實(shí)現(xiàn)基于遵循ReAct框架的代碼代理的多代理RAG系統(tǒng)的一般架構(gòu)選擇。你可以在以下??GitHub存儲庫??中的完整代碼實(shí)現(xiàn)中找到其余詳細(xì)信息。

多代理系統(tǒng)的目標(biāo)是通過在維基百科上搜索必要的信息來回答問題。它由3個代理組成:

  • 管理代理,其工作是將任務(wù)分解為子任務(wù)并使用其輸出提供最終答案。
  • 維基百科搜索代理,用于在維基百科上查找相關(guān)頁面并組合從中提取的信息。
  • 頁面搜索代理,用于從提供的維基百科頁面中檢索和匯總與給定查詢相關(guān)的信息。

這三個代理以分層方式組織:每個代理都可以使用層次結(jié)構(gòu)中緊鄰下方的代理作為工具。具體來說,管理代理可以調(diào)用維基百科搜索代理來查找有關(guān)查詢的信息,而查詢又可以使用頁面搜索代理從維基百科頁面中提取特定信息。

下面是架構(gòu)圖,指定每個代理可以調(diào)用哪些手工制作的工具(包括包裝其他代理的工具)。請注意,由于代碼代理使用代碼執(zhí)行來執(zhí)行操作,因此這些實(shí)際上并不是它們可以使用的唯一工具,因?yàn)槿魏伪緳C(jī)Python操作和函數(shù)(只要獲得授權(quán))也可以使用。

基于阿里開源Qwen2.5-7B-Instruct模型進(jìn)行多代理RAG開發(fā)實(shí)戰(zhàn)-AI.x社區(qū)

架構(gòu)圖顯示代理和手工制作的工具(圖片由作者本人提供)。

接下來,讓我們深入了解架構(gòu)中涉及的代理的工作原理。

管理代理

管理代理是頂級代理,它接收用戶的問題并負(fù)責(zé)返回答案。它可以使用維基百科搜索代理作為工具,通過查詢提示它并接收搜索的最終結(jié)果。其目的是通過將用戶問題分成一系列子查詢并匯總搜索結(jié)果,從維基百科收集必要的信息。

以下是此代理使用的系統(tǒng)提示,它基于默認(rèn)的Hugging Face默認(rèn)提示模板構(gòu)建。請注意,提示中提供的示例遵循為代理提供支持的模型的聊天模板,在本例中我們使用Qwen2.5-7B-Instruct。

【譯者注】因項(xiàng)目分析需要,本文中多次給出如下英文形式的系統(tǒng)提示。但是,因?yàn)檫@些內(nèi)容大多是重復(fù)性的,所以我僅給出一處提示的中文翻譯——后面不再重譯。敬請諒解!

You are an expert assistant who can find answer on the internet using code blobs and tools. To do so, you have been given access to a list of tools: these tools are basically Python functions which you can call with code.(你是一位專家助理,可以使用代碼塊和工具在互聯(lián)網(wǎng)上找到答案。為此,你被授予了訪問一系列工具的權(quán)限:這些工具基本上是可以用代碼調(diào)用的Python函數(shù)。)
You will be given the task of answering a user question and you should answer it by retrieving the necessary information from Wikipedia. Use and trust only the information you retrieved, don't make up false facts.(你將被賦予回答用戶問題的任務(wù),并且你應(yīng)該通過從維基百科檢索必要的信息來回答。僅使用和信任你檢索到的信息,不要編造虛假事實(shí)。)
To help you, you have been given access to a search agent you can use as a tool. You can use the search agent to find information on Wikipedia. Break down the task into smaller sub-tasks and use the search agent to find the necessary information for each sub-task.(為了幫助你,你已獲得一個可用作工具的搜索代理的訪問權(quán)限。你可以使用搜索代理在Wikipedia上查找信息。將任務(wù)分解為較小的子任務(wù),并使用搜索代理查找每個子任務(wù)所需的信息。)
To solve the task, you must plan forward to proceed in a series of steps, in a cycle of 'Thought:', 'Code:', and 'Observation:' sequences.(為了解決這個任務(wù),你必須提前計劃,按照“思考:”、“代碼:”和“觀察:”序列的循環(huán)進(jìn)行一系列步驟。)
At each step, in the 'Thought:' sequence, you should first explain your reasoning towards solving the task and the tools that you want to use.(在“思考:”序列的每個步驟中,你應(yīng)該首先解釋解決任務(wù)的理由和想要使用的工具。)
Then in the 'Code:' sequence, you should write the code in simple Python. The code sequence must end with '<end_action>' sequence.(然后在“代碼:”序列中,你應(yīng)該用簡單的Python編寫代碼。代碼序列必須以“<end_action>”序列結(jié)尾。)
During each intermediate step, you can use 'print()' to save whatever important information you will then need. These print outputs will be provided back to you by the user in the 'Observation:' field, which will be available as input for the next steps. Always print the output of tools, don't process it or try to extract information before inspecting it.(在每個中間步驟中,你可以使用“print()”保存你隨后需要的任何重要信息。這些打印輸出將由用戶在“觀察:”字段中返回給你,這些輸出將作為后續(xù)步驟的輸入。始終打印工具的輸出,不要對其進(jìn)行處理或在檢查之前嘗試提取信息。)
If an error rise while executing the code, it will be shown in the 'Observation:' field. In that case, fix the code and try again.(如果執(zhí)行代碼時出現(xiàn)錯誤,它將顯示在“觀察:”字段中。在這種情況下,請修復(fù)代碼并重試。)
In the end you have to return a final answer using the `final_answer` tool.(最后,你必須使用“final_answer”工具返回最終答案。)
Here are a few notional examples:(以下是一些概念性的例子:)
---
<|im_start|>user
Task: When was the capital of Italy founded?<|im_end|>
<|im_start|>assistant
Thought: Let's break up the task: I first need to find the capital of Italy and then look at its foundation date. I will use the tool `wikipedia_search_agent` to get the capital of Italy. Code:
```py
result = wikipedia_search_agent("Italy capital")
print("Capital of Italy:", result)
```<end_action><|im_end|>
<|im_start|>user
[OUTPUT OF STEP 0] -> Observation:
Capital of Italy:According to the information extracted from the Wikipedia page 'Rome', the capital of Italy is Rome.<|im_end|>
<|im_start|>assistant
Thought: Now that I know that the capital of Italy is Rome, I can use the `wikipedia_search_agent` tool to look for its foundation date.
Code:
```py
result = wikipedia_search_agent("Rome foundation date")
print("Rome foundation:", result)
```<end_action><|im_end|>
<|im_start|>user
[OUTPUT OF STEP 1] -> Observation:
Rome foundation: According to the information from the Wikipedia page 'Natale di Roma', the traditional foundation date of Rome is April 21, 753 BC.<|im_end|>
<|im_start|>assistant
Thought: Now that I have retrieved the relevant information, I can use the `final_answer` tool to return the answer.
Code:
```py
final_answer("According to the legend Rome was founded on 21 April 753 BCE, but archaeological evidence dates back its development during the Bronze Age.")
```<end_action><|im_end|>
---
<|im_start|>user
Task: "What's the difference in population between Shanghai and New York?"<|im_end|>
<|im_start|>assistant
Thought: I need to get the populations for both cities and compare them: I will use the tool `search_agent` to get the population of both cities.
Code:
```py
population_guangzhou_info = wikipedia_search_agent("New York City population")
population_shanghai_info = wikipedia_search_agent("Shanghai population")
print("Population Guangzhou:", population_guangzhou)
print("Population Shanghai:", population_shanghai)
```<end_action><|im_end|>
<|im_start|>user
[OUTPUT OF STEP 0] -> Observation:
Population Guangzhou: The population of New York City is approximately 8,258,035 as of 2023.
Population Shanghai: According to the information extracted from the Wikipedia page 'Shanghai', the population of the city proper is around 24.87 million inhabitants in 2023.<|im_end|>
<|im_start|>assistant
Thought: Now I know both the population of Shanghai (24.87 million) and of New York City (8.25 million), I will calculate the difference and return the result.
Code:
```py
population_difference = 24.87*1e6 - 8.25*1e6
answer=f"The difference in population between Shanghai and New York is {population_difference} inhabitants."
final_answer(answer)
```<end_action><|im_end|>
---
On top of performing computations in the Python code snippets that you create, you have access to those tools (and no other tool):(除了在你創(chuàng)建的Python代碼片段中執(zhí)行計算之外,你還可以訪問這些工具(而不能使用其他工具):)
<<tool_descriptions>>
<<managed_agents_descriptions>>
You can use imports in your code, but exclusively from the following list of modules: <<authorized_imports>>.  Do not try to import other modules or else you will get an error.
Now start and solve the task!(你可以在代碼中使用導(dǎo)入,但只能從以下模塊列表中使用:<<authorized_imports>>。請勿嘗試導(dǎo)入其他模塊,否則會出錯。
現(xiàn)在開始解決任務(wù)?。?/code>

維基百科搜索代理

此代理負(fù)責(zé)向管理代理提交報告,它接收來自管理代理的查詢,并負(fù)責(zé)返回從維基百科檢索到的信息。它可以訪問兩個工具:

  • 維基百科搜索工具,使用??維基百科包??中的內(nèi)置搜索功能。它接收查詢作為輸入,并返回維基百科頁面及其摘要的列表。
  • 頁面搜索代理,從特定維基百科頁面檢索有關(guān)查詢的信息。

此代理收集信息以回答查詢,將其劃分為進(jìn)一步的子查詢,并在需要時組合來自多個頁面的信息。這是通過使用維基百科包的搜索工具來識別可能包含回答查詢所需信息的潛在頁面來實(shí)現(xiàn)的:代理可以使用報告的頁面摘要,也可以調(diào)用頁面搜索代理從特定頁面中提取更多信息。在收集到足夠的數(shù)據(jù)后,它會將答案返回給管理代理。

系統(tǒng)提示再次對Hugging Face默認(rèn)提示進(jìn)行了輕微修改,其中包含一些遵循模型聊天模板的特定示例。

You are an expert assistant that retrieves information from Wikipedia using code blobs and tools. To do so, you have been given access to a list of tools: these tools are basically Python functions which you can call with code.
You will be given a general query, your task will be of retrieving and summarising information that is relevant to the query from multiple passages retrieved from the given Wikipedia page. Use and trust only the information you retrieved, don't make up false facts. Try to summarize the information in a few sentences.
To solve the task, you must plan forward to proceed in a series of steps, in a cycle of 'Thought:', 'Code:', and 'Observation:' sequences.
At each step, in the 'Thought:' sequence, you should first explain your reasoning towards solving the task and the tools that you want to use.
Then in the 'Code:' sequence, you should write the code in simple Python. The code sequence must end with '<end_action>' sequence.
During each intermediate step, you can use 'print()' to save whatever important information you will then need. These print outputs will be provided back to you by the user in the 'Observation:' field, which will be available as input for the next steps. Always print the output of tools, don't process it or try to extract information before inspecting it.
If an error rise while executing the code, it will be shown in the 'Observation:' field. In that case, fix the code and try again.
In the end you have to return a final answer using the `final_answer` tool.
Here are a few notional examples:
---
<|im_start|>user
Task: Retrieve information about the query:"What's the capital of France?" from the Wikipedia page "France".<|im_end|>
<|im_start|>assistant
Thought: I need to find the capital of France. I will use the tool `retrieve_passages` to get the capital of France from the Wikipedia page.
Code:
```py
result = retrieve_passages("France capital")
print("Capital of France:", result)
```<end_action><|im_end|>
<|im_start|>user
[OUTPUT OF STEP 0] -> Observation:
Retrieved passages for query "France capital":
Passage 0: ... population of nearly 68.4 million as of January 2024. France is a semi-presidential republic with its capital in Paris, the ...
Passage 1: ... France, officially the French Republic, is a country located primarily in Western Europe. Its overseas regions and territories ...
Passage 2: ... The vast majority of France's territory and population is situated in Western Europe and is called Metropolitan France. It is ...
Passage 3: ... France is a highly urbanised country, with its largest cities (in terms of metropolitan area population in 2021) being Paris ...
Passage 4: ... === Government ===\nFrance.fr – official French tourism site (in English)...<|im_end|>
<|im_start|>assistant
Thought: Now that I know that the capital of France is Paris, I can use the `final_answer` tool to return the answer.
Code:
```py
final_answer("The capital of France is Paris.")
```<end_action><|im_end|>
---
<|im_start|>user
Task: Retrieve information about the query:"Tallest mountain in the World" from the Wikipedia page "List of highest mountains on Earth"<|im_end|>
<|im_start|>assistant
Thought: I need to find the tallest mountain in the world. I will use the tool `retrieve_passages` to look for data on the Wikipedia page.
Code:
```py
result = retrieve_passages("highest mountain")
print(result)
```<end_action><|im_end|>
<|im_start|>user
[OUTPUT OF STEP 1] -> Observation:
Retrieved passages for query "highest mountain":
Passage 0: ... above sea level) is the world's tallest mountain and volcano, rising about 10,203 m (33,474 ft) from the Pacific Ocean floor. ...
Passage 1: ... As of December 2018, the highest peaks on four of the mountains—Gangkhar Puensum, Labuche Kang III, Karjiang, and Tongshanjiabu, all located in Bhutan or China—have not been ascended. ...
Passage 2: ... The highest mountains above sea level are generally not the highest above the surrounding terrain. ...
Passage 3: ... The highest mountain outside of Asia is Aconcagua (6,961 m or 22,838 ft), the 189th highest in the world. ...
Passage 4: ... the southern summit of Peru's tallest mountain, Huascarán, is another contender. Both have elevations above sea level more than 2 km (1.2 mi) less than that of Everest....
<|im_end|>
<|im_start|>assistant
Thought: The results don't clearly specify a clear result for the world's tallest mountain, I will use the tool `web_results` with a different query.
Code:
```py
result = retrieve_passages("world's tallest mountain")
print(result)
```<end_action><|im_end|>
<|im_start|>user
Passages retrieved from page List of highest mountains on Earth:
Passage 0: ... The highest mountain outside of Asia is Aconcagua (6,961 m or 22,838 ft), the 189th highest in the world....
Passage 1: ... above sea level) is the world's tallest mountain and volcano, rising about 10,203 m (33,474 ft) from the Pacific Ocean floor. ...
Passage 2: ... The bases of mountain islands are below sea level, and given this consideration Mauna Kea (4,207 m (13,802 ft) above sea level) is the world's tallest mountain and volcano, rising about 10,203 m (33,474 ft) from the Pacific Ocean floor. ...
Passage 3: ... the southern summit of Peru's tallest mountain, Huascarán, is another contender. Both have elevations above sea level more than 2 km (1.2 mi) less than that of Everest. ...
Passage 4: ... The highest mountains are also not generally the most voluminous. Mauna Loa (4,169 m or 13,678 ft) is the largest mountain on Earth in terms of base area (about 5,200 km2 or 2,000 sq mi) and volume (about 42,000 km3 or 10,000 cu mi)...<|im_end|>
<|im_start|>assistant
Thought: I have found that Mauna Kea is the world's tallest mountain rising about 10,203 m (33,474 ft) from the Pacific Ocean floor. I can use the `final_answer` tool to return the relevant information.
Code:
```py
final_answer("Mauna Kea is the world's tallest mountain, rising about 10,203 m (33,474 ft) from the Pacific Ocean floor.")
```<end_action><|im_end|>
___
On top of performing computations in the Python code snippets that you create, you have access to those tools (and no other tool):
<<tool_descriptions>>
<<managed_agents_descriptions>>
You can use imports in your code, but only from the following list of modules: <<authorized_imports>>. Do not try to import other modules or else you will get an error.
Now start and solve the task!

頁面搜索代理

此代理的任務(wù)是向維基百科搜索代理提交報告,后者為其提供查詢和維基百科頁面的標(biāo)題,并負(fù)責(zé)從該頁面檢索相關(guān)信息以回答查詢。這本質(zhì)上是一個單代理RAG系統(tǒng)。為了執(zhí)行任務(wù),此代理生成自定義查詢并使用語義搜索工具檢索與其更相似的段落。語義搜索工具遵循一個簡單的實(shí)現(xiàn),將頁面內(nèi)容分成塊并使用LangChain提供的FAISS向量數(shù)據(jù)庫嵌入它們。

以下是系統(tǒng)提示,仍然基于Hugging Face默認(rèn)提供的提示構(gòu)建而成:

You are an expert assistant that finds answers to questions by consulting Wikipedia, using code blobs and tools. To do so, you have been given access to a list of tools: these tools are basically Python functions which you can call with code.
You will be given a general query, your task will be of finding an answer to the query using the information you retrieve from Wikipedia. Use and trust only the information you retrieved, don't make up false facts. Cite the page where you found the information.
You can search for pages and their summaries from Wikipedia using the `search_wikipedia` tool and look for specific passages from a page using the `search_info` tool. You should decide how to use these tools to find an appropriate answer:some queries can be answered by looking at one page summary, others can require looking at specific passages from multiple pages.
To solve the task, you must plan forward to proceed in a series of steps, in a cycle of 'Thought:', 'Code:', and 'Observation:' sequences.
At each step, in the 'Thought:' sequence, you should first explain your reasoning towards solving the task and the tools that you want to use.
Then in the 'Code:' sequence, you should write the code in simple Python. The code sequence must end with '<end_action>' sequence.
During each intermediate step, you can use 'print()' to save whatever important information you will then need. These print outputs will be provided back to you by the user in the 'Observation:' field, which will be available as input for the next steps. Always print the output of tools, don't process it or try to extract information before inspecting it.
If an error rise while executing the code, it will be shown in the 'Observation:' field. In that case, fix the code and try again.
In the end you have to return a final answer using the `final_answer` tool.
Here are a few notional examples:
---
<|im_start|>user
Task: When was the ancient philosopher Seneca born?<|im_end|>
<|im_start|>assistant
Thought: I will use the tool `search_wikipedia` to search for Seneca's birth on Wikipedia. I will specify I am looking for the philosopher for disambiguation.
Code:
```py
result = search_wikipedia("Seneca philosopher birth")
print("result)
```<end_action><|im_end|>
<|im_start|>user
[OUTPUT OF STEP 0] -> Observation:
Pages found for query 'Seneca philosopher birth':
Page: Seneca the Younger
Summary: Lucius Annaeus Seneca the Younger ( SEN-ik-?; c.4 BC – AD 65), usually known mononymously as Seneca, was a Stoic philosopher of Ancient Rome, a statesman, dramatist, and in one work, satirist, from the post-Augustan age of Latin literature.
Seneca was born in Colonia Patricia Corduba in Hispania, a
Page: Phaedra (Seneca)
Summary: Phaedra is a Roman tragedy written by philosopher and dramatist Lucius Annaeus Seneca before 54 A.D. Its 1,280 lines of verse tell the story of Phaedra, wife of King Theseus of Athens and her consuming lust for her stepson Hippolytus. Based on Greek mythology and the tragedy Hippolytus by Euripides,
Page: Seneca the Elder
Summary: Lucius Annaeus Seneca the Elder ( SEN-ik-?; c.54 BC – c. AD 39), also known as Seneca the Rhetorician, was a Roman writer, born of a wealthy equestrian family of Corduba, Hispania. He wrote a collection of reminiscences about the Roman schools of rhetoric, six books of which are extant in a more or
Page: AD 1
Summary: AD 1 (I) or 1 CE was a common year starting on Saturday or Sunday, a common year starting on Saturday by the proleptic Julian calendar, and a common year starting on Monday by the proleptic Gregorian calendar. It is the epoch year for the Anno Domini (AD) Christian calendar era, and the 1st year of
Page: Seneca Falls Convention
Summary: The Seneca Falls Convention was the first women's rights convention. It advertised itself as "a convention to discuss the social, civil, and religious condition and rights of woman". Held in the Wesleyan Chapel of the town of Seneca Falls, New York, it spanned two days over July 19–20, 1848.  Attrac
<|im_start|>assistant
Thought: From the summary of the page "", I can see that Seneca was born in . I can use the `final_answer` tool to return the answer.
Code:
```py
final_answer("According to the Wikipedia page 'Seneca the Younger', Seneca was born in 4 BC.")
```<end_action><|im_end|>
---
<|im_start|>user
Task: Who was Charlemagne predecessor?<|im_end|>
<|im_start|>assistant
Thought: I will use the tool `search_wikipedia` to search for Charlemagne reign duration.
Code:
```py
result = search_wikipedia("Charlemagne predecessor")
print(result)
```<end_action><|im_end|>
<|im_start|>user
[OUTPUT OF STEP 0] -> Observation:
Pages found for query 'Charlemagne predecessor':
Page: Charlemagne
Summary: Charlemagne ( SHAR-l?-mayn; 2 April 748 – 28 January 814) was King of the Franks from 768, King of the Lombards from 774, and Emperor of what is now known as the Carolingian Empire from 800, holding these titles until his death in 814. He united most of Western and Central Europe, and was the first
Page: Pope Leo III
Summary: Pope Leo III (Latin: Leo III; died 12 June 816) was bishop of Rome and ruler of the Papal States from 26 December 795 to his death. Protected by Charlemagne from the supporters of his predecessor, Adrian I, Leo subsequently strengthened Charlemagne's position by crowning him emperor. The coronation
Page: Throne of Charlemagne
Summary: The Throne of Charlemagne (German: Karlsthron or Aachener K?nigsthron, "Royal Throne of Aachen") is a throne erected in the 790s by Charlemagne, as one of the fittings of his palatine chapel in Aachen (today's Aachen Cathedral) and placed in the Octagon of the church. Until 1531, it served as the co
Page: Louis the Pious
Summary: Louis the Pious (Latin: Hludowicus Pius; French: Louis le Pieux; German: Ludwig der Fromme; 16 April 778 – 20 June 840), also called the Fair and the Debonaire, was King of the Franks and co-emperor with his father, Charlemagne, from 813. He was also King of Aquitaine from 781. As the only surviving
Page: Holy Roman Emperor
Summary: The Holy Roman Emperor, originally and officially the Emperor of the Romans (Latin: Imperator Romanorum; German: Kaiser der R?mer) during the Middle Ages, and also known as the Romano-German Emperor since the early modern period (Latin: Imperator Germanorum; German: R?misch-deutscher Kaiser, lit. 'R
<|im_end|>
<|im_start|>assistant
Thought: The results don't contain explicit information about Charlemagne predecessor, I will search for more information on the page 'Charlemagne' using the 'search_info' tool.
Code:
```py
result = search_info("Charlemagne predecessor", "Charlemagne")
print(result)
```<end_action><|im_end|>
<|im_start|>user
[OUTPUT OF STEP 1] -> Observation:
Information retrieved from the page 'Charlemagne' for the query 'Charlemagne predecessor':
Charlemagne's predecessor was Pepin the Short.
<|im_end|>
<|im_start|>assistant
Thought: I have found that, according to the Wikipedia page 'Charlemagne', Pepin the Short was Charlemagne predecessor. I will return the results using the `final_answer` tool.
Code:
```py
final_answer("According to the information extracted from the Wikipedia page 'Charlemagne', his predecessor was Pepin the Short.")
```<end_action><|im_end|>
___
On top of performing computations in the Python code snippets that you create, you have access to those tools (and no other tool):
<<tool_descriptions>>
<<managed_agents_descriptions>>
You can use imports in your code, but only from the following list of modules: <<authorized_imports>>. Do not try to import other modules or else you will get an error.
Now start and solve the task!

實(shí)施選擇

在本小節(jié)中,我將概述我的方案與使用Hugging Face代理直接實(shí)施架構(gòu)的主要區(qū)別。這些是經(jīng)過有限的反復(fù)試驗(yàn)后獲得效果良好的解決方案的結(jié)果。我沒有進(jìn)行過廣泛的測試和切除,因此它們可能不是最佳選擇。

  • 提示:如前幾節(jié)所述,每個代理都有自己的專用系統(tǒng)提示,與Hugging Face代碼代理提供的默認(rèn)提示不同。我觀察到,也許是由于所用模型的大小有限,通用標(biāo)準(zhǔn)系統(tǒng)提示并沒有給出良好的結(jié)果。該模型似乎最適合使用能夠密切反映其被要求執(zhí)行的任務(wù)的系統(tǒng)提示,包括重要用例的定制示例。由于我使用聊天模型的目的是改進(jìn)指令遵循行為,因此提供的示例遵循模型的聊天模板,以盡可能接近運(yùn)行期間遇到的格式。
  • 總結(jié)歷史:較長的執(zhí)行歷史對執(zhí)行速度和任務(wù)性能都有不利影響。后者可能是由于模型從長上下文中檢索必要信息的能力有限。此外,極長的執(zhí)行歷史記錄可能會超過引擎模型的最大上下文長度。為了緩解這些問題并加快執(zhí)行速度,我選擇不顯示先前的“思想-行動-觀察”步驟的所有細(xì)節(jié),而是僅收集先前的觀察結(jié)果。更具體地說,在每個步驟中,模型僅接收以下聊天歷史記錄:系統(tǒng)消息、包含任務(wù)的第一條消息、其最后一個操作以及先前觀察的所有歷史記錄。此外,只有當(dāng)執(zhí)行錯誤發(fā)生在最后一步時,它們才會出現(xiàn)在觀察歷史中,先前已經(jīng)解決的錯誤將被丟棄。
  • 工具與托管代理:Hugging Face代理實(shí)現(xiàn)對托管代理具有本機(jī)支持,但將它們包裝為工具可以更好地控制提示并實(shí)現(xiàn)更簡化的實(shí)現(xiàn)。特別是,Hugging Face實(shí)現(xiàn)為托管代理及其管理器添加了特定提示。雖然我沒有看到解決給定任務(wù)的能力存在實(shí)質(zhì)性差異,但我更喜歡第二種方法,因?yàn)樗鼘τ谒尸F(xiàn)的架構(gòu)來說更靈活、更精簡,并且更容易控制代理的行為。這也有助于減少提示長度,這對于加快計算速度很有用。
  • 限制頁面搜索代理的最大試驗(yàn)次數(shù):有時頁面搜索代理會繼續(xù)在給定頁面上尋找不包含它的信息。減少最大試驗(yàn)次數(shù)可以緩解這個問題:達(dá)到該次數(shù)后,代理執(zhí)行將停止,工具將返回代碼執(zhí)行的最后一次觀察結(jié)果。
  • 將工具響應(yīng)更改為用戶消息:這更像是一個技術(shù)性的、特定于實(shí)現(xiàn)的方面。由于Qwen2.5–7B-Instruct的聊天模板僅支持系統(tǒng)、用戶和助手,因此觀察結(jié)果將作為用戶消息返回。

示例展示

在本節(jié)中,我將收集使用前面所述架構(gòu)生成的一些示例。我還將提供參與任務(wù)的所有代理的詳細(xì)執(zhí)行情況,以展示它們在某些真實(shí)案例中的交互方式。你可以使用我提供的??谷歌Colab筆記本??來探索更多有關(guān)示例。案例中所有提取的段落均取自執(zhí)行中指定的維基百科頁面。

簡單舉例

首先,讓我們開始探索一個簡單的例子。此例子中需要結(jié)合來自多個數(shù)據(jù)源的信息,此外還需要一些基本的算術(shù)知識。

任務(wù):How many years passed between the construction of the Eiffel Tower and the construction of the Empire State Building?(埃菲爾鐵塔的建造和帝國大廈的建造之間相隔了多少年?)

以下給出的是管理代理的執(zhí)行日志。它可以正確地將任務(wù)分解為查找兩座建筑的建造時間并計算年份差。

Agent:  Thought: First, I need to find out when the Eiffel Tower and the Empire State Building were constructed. I will use the `wikipedia_search_agent` tool to find this information.
Code:
```py
wikipedia_search_agent(query="Eiffel Tower construction year")
```<end_action>
Observation:  Print outputs:
Last output from code snippet:
According to the information extracted from the Wikipedia page 'Eiffel Tower', the construction of the Eiffel Tower took place from 1887 to 1889.
Agent:  Thought: Now I have the construction period of the Eiffel Tower. Next, I need to find the construction period of the Empire State Building. I will use the `wikipedia_search_agent` tool again.
Code:
```py
wikipedia_search_agent(query="Empire State Building construction year")
```<end_action>
Observation:  Print outputs:
Last output from code snippet:
According to the information extracted from the Wikipedia page 'Empire State Building', the construction of the Empire State Building started in 1930 and ended in 1931.
Agent:  Thought: Now I have the construction periods for both the Eiffel Tower and the Empire State Building. I can now calculate the number of years between their constructions. 
Code:
```py
construction_eiffel_tower_start = 1887
construction_eiffel_tower_end = 1889
construction_empire_state_building_start = 1930
construction_empire_state_building_end = 1931

years_passed = construction_empire_state_building_start - construction_eiffel_tower_end
answer = f"The number of years passed between the construction of the Eiffel Tower and the Empire State Building is {years_passed} years."
final_answer(answer)
```<end_action>
Observation:  Print outputs:
Last output from code snippet:
The number of years passed between the construction of the Eiffel Tower and the Empire State Building is 41 years.

現(xiàn)在,讓我們來直觀地看一下維基百科搜索代理的執(zhí)行情況。它正確地搜索并報告了頁面摘要中發(fā)現(xiàn)的施工期,而無需檢查單個頁面。值得注意的是,盡管被問及“施工年份”,但它報告了整個施工期,因?yàn)椴磺宄攴菔侵甘┕すこ痰拈_始還是結(jié)束。

TASK:  Eiffel Tower construction year
AGENT:  Thought: I will use the `search_wikipedia` tool to find information about the Eiffel Tower construction year.
Code:
```py
search_wikipedia('Eiffel Tower construction year')
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
Pages found for query 'Eiffel Tower construction year':
Page: Eiffel Tower
Summary: The Eiffel Tower (  EYE-f?l; French: Tour Eiffel [tu? ?f?l] ) is a wrought-iron lattice tower on the Champ de Mars in Paris, France. It is named after the engineer Gustave Eiffel, whose company designed and built the tower from 1887 to 1889.
Locally nicknamed "La dame de fer" (French for "Iron Lady"), it was constructed as the centerpiece of the 1889 World's Fair, and to crown the centennial anniversary of the French Revolution. Although initially criticised by some of France's leading artists and intellectuals for its design, it has since become a global cultural icon of France and one of the most recognisable structures in the world. The tower received 5,889,000 visitors in 2022. The Eiffel Tower is the most visited monument with an entrance fee in the world: 6.91 million people ascended it in 2015. It was designated a monument historique in 1964, and was named part of a UNESCO World Heritage Site ("Paris, Banks of the Seine") in 1991.
The tower is 330 metres (1,083 ft) tall, about t
Page: Eiffel Tower (Paris, Texas)
Summary: Texas's Eiffel Tower is a landmark in the city of Paris, Texas. The tower was constructed in 1993. It is a scale model of the Eiffel Tower in Paris, France; at 65 feet in height, it is roughly one-sixteenth of the height of the original. 
Page: Gustave Eiffel
Summary: Alexandre Gustave Eiffel (  EYE-f?l, French: [al?ksɑ?d? ɡystav ?f?l]; né Bonickhausen dit Eiffel; 15 December 1832 – 27 December 1923) was a French civil engineer. A graduate of école Centrale des Arts et Manufactures, he made his name with various bridges for the French railway network, most famously the Garabit Viaduct. He is best known for the world-famous Eiffel Tower, designed by his company and built for the 1889 Universal Exposition in Paris, and his contribution to building the Statue of Liberty in New York. After his retirement from engineering, Eiffel focused on research into meteorology and aerodynamics, making significant contributions in both fields.
Page: Watkin's Tower
Summary: Watkin's Tower was a partially completed iron lattice tower in Wembley Park, London, England. Its construction was an ambitious project to create a 358-metre (1,175 ft)-high visitor attraction in Wembley Park to the north of the city, led by the railway entrepreneur Sir Edward Watkin. Marketed as the "Great Tower of London", it was designed to surpass the height of the Eiffel Tower in Paris, and it was part of Wembley Park's emergence as a recreational place. The tower was never completed and it was demolished in 1907. The site of the tower is now occupied by the English national football ground, Wembley Stadium.
Page: Eiffel Tower (Paris, Tennessee)
Summary: The Eiffel Tower is a landmark in the city of Paris, Tennessee. It is a 1:20 scale replica of the original located in Paris, France.
AGENT:  Thought: From the summary of the page 'Eiffel Tower', I can see that the construction of the Eiffel Tower took place from 1887 to 1889. I will use the `final_answer` tool to return the answer.
Code:
```py
final_answer("According to the information extracted from the Wikipedia page 'Eiffel Tower', the construction of the Eiffel Tower took place from 1887 to 1889.")
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
According to the information extracted from the Wikipedia page 'Eiffel Tower', the construction of the Eiffel Tower took place from 1887 to 1889.
------------------------------
TASK:  Empire State Building construction year
AGENT:  Thought: I will use the `search_wikipedia` tool to find information about the construction year of the Empire State Building.
Code:
```py
search_wikipedia('Empire State Building construction year')
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
Pages found for query 'Empire State Building construction year':
Page: Empire State Building
Summary: The Empire State Building is a 102-story Art Deco skyscraper in the Midtown South neighborhood of Manhattan in New York City. The building was designed by Shreve, Lamb & Harmon and built from 1930 to 1931. Its name is derived from "Empire State", the nickname of the state of New York. The building has a roof height of 1,250 feet (380 m) and stands a total of 1,454 feet (443.2 m) tall, including its antenna. The Empire State Building was the world's tallest building until the first tower of the World Trade Center was topped out in 1970; following the September 11 attacks in 2001, the Empire State Building was New York City's tallest building until it was surpassed in 2012 by One World Trade Center. As of 2024, the building is the seventh-tallest building in New York City, the ninth-tallest completed skyscraper in the United States, and the 57th-tallest completed skyscraper in the world.
The site of the Empire State Building, on the west side of Fifth Avenue between West 33rd and 34th St
Page: British Empire Building
Summary: The British Empire Building, also known by its address 620 Fifth Avenue, is a commercial building at Rockefeller Center in the Midtown Manhattan neighborhood of New York City. Completed in 1933, the six-story structure was designed in the Art Deco style by Raymond Hood, Rockefeller Center's lead architect. The British Empire Building, along with the nearly identical La Maison Francaise to the south and the high-rise International Building to the north, comprise a group of retail-and-office structures known as the International Complex. La Maison Francaise and the British Empire Building are separated by Channel Gardens, a planted pedestrian esplanade running west to the complex's Lower Plaza.
The facade is made of limestone, with a main entrance along Fifth Avenue and secondary entrances on 50th Street and Channel Gardens. The top of the British Empire Building contains setbacks, a rooftop garden, and a partial seventh-story penthouse. The building's entrances contain ornate decoration
Page: 2012 Empire State Building shooting
Summary: On August 24, 2012, a gunman shot and killed a former co-worker outside the Empire State Building in New York City. Following the initial shooting, the gunman, 58-year-old Jeffrey T. Johnson, was fatally shot by police officers after raising his weapon at them. Nine bystanders were wounded by stray bullets fired by the officers and ricocheting debris, but none suffered life-threatening injuries.
Page: Empire State Building in popular culture
Summary: The Empire State Building is a 102-story skyscraper on Fifth Avenue between West 33rd and 34th Streets in Midtown, Manhattan, New York City. It has a roof height of 1,250 feet (381 m), and with its antenna included, it stands a total of 1,454 feet (443.2 m) tall. The Empire State Building stood as the world's tallest building for nearly 40 years, from its completion in early 1931 until the topping out of the original World Trade Center's North Tower in late 1970. It has been featured in numerous films, TV shows, songs, video games, books, photographs, and artwork.
Page: Empire State Plaza
Summary: The Governor Nelson A. Rockefeller Empire State Plaza (known commonly as the Empire State Plaza, and also as the South Mall) is a complex of several state government buildings in downtown Albany, New York.
The complex was built between 1965 and 1976 at an estimated total cost of $2 billion. It houses several departments of the New York State administration and is integrated with the New York State Capitol, completed in 1899, which houses the state legislature. Among the offices at the plaza are the Department of Health and the Biggs Laboratory of the Wadsworth Center. The Empire State Art Collection, a major public collection of 1960s and 1970s monumental abstract artworks, is on permanent display throughout the site. The New York State Office of General Services maintains the plaza. The Nelson A. Rockefeller Empire State Plaza Performing Arts Center Corporation is a New York state public-benefit corporation that was created in 1979 to manage the performing arts facility in the plaza.
AGENT:  Thought: From the summary of the page "Empire State Building", I can see that the building was designed and built from 1930 to 1931. I will use the `final_answer` tool to return the answer.
Code:
```py
final_answer("According to the information extracted from the Wikipedia page 'Empire State Building', the construction of the Empire State Building started in 1930 and ended in 1931.")
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
According to the information extracted from the Wikipedia page 'Empire State Building', the construction of the Empire State Building started in 1930 and ended in 1931.

上面顯然沒有使用段落檢索代理,因?yàn)樗行畔⒍家言陧撁嬲姓业健?/p>

更復(fù)雜的例子

現(xiàn)在,讓我們嘗試一個更復(fù)雜的例子:詢問樺木膠合板是否漂浮在酒精中。這個問題需要基本的物理理解和算術(shù)能力,并結(jié)合不同尋常的檢索任務(wù)。

任務(wù):Does birch plywood float in ethanol?(樺木膠合板是否漂浮在酒精中?)

首先,讓我們以可視化方式分析一下各種代理的日志。

管理代理日志:

AGENT:  Thought: To determine if birch plywood floats in ethanol, we need to know the density of both birch plywood and ethanol. If the density of birch plywood is less than the density of ethanol, it will float. I will use the `wikipedia_search_agent` tool to find the densities of birch plywood and ethanol.
Code:
```py
birch_plywood_density_info = wikipedia_search_agent("density of birch plywood")
ethanol_density_info = wikipedia_search_agent("density of ethanol")
print(birch_plywood_density_info)
print(ethanol_density_info)
```<end_action>
OBSERVATION:  Print outputs:
The density of birch plywood is approximately 680 kg/m3.
The density of ethanol at 20°C is approximately 0.7894 g/cm3.
AGENT:  Thought: Now that I have the densities, I can compare them. Birch plywood has a density of 680 kg/m3 and ethanol has a density of 0.7894 g/cm3. Since 1 g/cm3 is equal to 1000 kg/m3, the density of ethanol is 789.4 kg/m3. Since the density of birch plywood (680 kg/m3) is less than the density of ethanol (789.4 kg/m3), birch plywood will float in ethanol. I will now provide this conclusion using the `final_answer` function.
Code:
```py
final_answer("Birch plywood will float in ethanol because its density (680 kg/m3) is less than the density of ethanol (789.4 kg/m3).")
```<end_action>
OBSERVATION:  Print outputs:
Last output from code snippet:
Birch plywood will float in ethanol because its density (680 kg/m3) is less than the density of ethanol (789.4 kg/m3).

維基百科搜索代理日志:

TASK:  density of birch plywood
AGENT:  Thought: I will use the `search_wikipedia` tool to find information about the density of birch plywood. 
Code:
```py
search_wikipedia('birch plywood')
```<end_action>
OBSERVATION:  Print outputs:
Last output from code snippet:
Pages found for query 'birch plywood':
Page: Plywood
Summary: Plywood is a composite material manufactured from thin layers, or "plies", of wood veneer that have been stacked and glued together. It is an engineered wood from the family of manufactured boards, which include plywood, medium-density fibreboard (MDF), oriented strand board (OSB), and particle board (or chipboard).
All plywoods bind resin and wood fibre sheets (cellulose cells are long, strong and thin) to form a composite material. The sheets of wood are stacked such that each layer has its grain set typically (see below) perpendicular to its adjacent layers. This alternation of the grain is called cross-graining and has several important benefits: it reduces the tendency of wood to split when nailed at the edges; it reduces thickness swelling and shrinkage, providing improved dimensional stability; and it makes the strength of the panel consistent across all directions.  There is usually an odd number of plies, so that the sheet is balanced, that is, the surface layers have their gr
Page: Birch
Summary: A birch is a thin-leaved deciduous hardwood tree of the genus Betula (), in the family Betulaceae, which also includes alders, hazels, and hornbeams. It is closely related to the beech-oak family Fagaceae. The genus Betula contains 30 to 60 known taxa of which 11 are on the IUCN 2011 Red List of Threatened Species. They are typically short-lived pioneer species and are widespread in the Northern Hemisphere, particularly in northern areas of temperate climates and in boreal climates. Birch wood is used for a wide range of purposes.
Page: Birch wood
Summary: Birch wood is a type of wood of the birch. Birch wood is pale yellow-brown wood having a close, straight grain and uniform texture that finishes to a smooth surface. Sometimes it is dyed to imitate mahogany. This type of wood is used for among others firewood, turnery, furniture, cabinetry, tools handles, hoops, plywood, flooring and shoe heels.
Page: Falco F8L
Summary: The Falco F8L is an Italian-designed lightweight 2-seater aerobatic aircraft.
Page: Crusader (speedboat)
Summary: Crusader was a jet-powered speed boat piloted by John Cobb.
The combination of an aerodynamically stable hull form and turbojet propulsion was proposed by Reid Railton, Cobb's adviser. A rocket-powered scale model was tested at Haslar. The full size design was by Peter du Cane and built by Vospers of Portsmouth. Technical assistance came from Saunders-Roe and Vickers-Supermarine. It cost £15,000 in 1949.
It was silver and scarlet in colour and 10 m long.  
The engine was a de Havilland Ghost Mk 48 centrifugal turbojet provided as a loan by the Ministry of Supply at the request of Major Frank Halford, the engine designer. The engine was rated at 5,000 lb thrust fed by two scoop inlets forward of the cockpit.
The hull was of trimaran form, a main hull with a planing step, and two smaller rear-mounted outriggers. Construction was of birch plywood frames and stringers. The hull was skinned in birch ply covered in doped fabric with metal skin reinforcement for planing surfaces. Aircraft-sty
AGENT:  Thought: The pages returned from the search did not directly mention the density of birch plywood. However, the page on Birch Wood mentions that birch wood is used for plywood. I will use the `search_info` tool to find more specific information about the density of birch plywood from the page 'Plywood'.
Code:
```py
search_info('density of birch plywood', 'Plywood')
```<end_action>
OBSERVATION:  Print outputs:
Last output from code snippet:
Information retrieved from the page 'Plywood' for the query 'density of birch plywood':
The density of birch plywood is approximately 680 kg/m3.
AGENT:  Thought: I have found the density of birch plywood from the Wikipedia page 'Plywood'. The density is approximately 680 kg/m3.
Code:
```py
final_answer("The density of birch plywood is approximately 680 kg/m3.")
```<end_action>
OBSERVATION:  Print outputs:
Last output from code snippet:
The density of birch plywood is approximately 680 kg/m3.
------------------------------
TASK:  density of ethanol
AGENT:  Thought: I will use the `search_wikipedia` tool to find the density of ethanol from Wikipedia. 
Code:
```py
search_wikipedia('density of ethanol')
```<end_action>
OBSERVATION:  Print outputs:
Last output from code snippet:
Pages found for query 'density of ethanol':
Page: Ethanol (data page)
Summary: This page provides supplementary chemical data on ethanol.
Page: Ethanol
Summary: Ethanol (also called ethyl alcohol, grain alcohol, drinking alcohol, or simply alcohol) is an organic compound with the chemical formula CH3CH2OH. It is an alcohol, with its formula also written as C2H5OH, C2H6O or EtOH, where Et stands for ethyl. Ethanol is a volatile, flammable, colorless liquid with a characteristic wine-like odor and pungent taste. In nature, grape-sugar breaks up by the action of fermentation into alcohol or carbonic acid, without anything being added. As a psychoactive depressant, it is the active ingredient in alcoholic beverages, and the second most consumed drug globally behind caffeine.
Ethanol is naturally produced by the fermentation process of sugars by yeasts or via petrochemical processes such as ethylene hydration. Historically it was used as a general anesthetic, and has modern medical applications as an antiseptic, disinfectant, solvent for some medications, and antidote for methanol poisoning and ethylene glycol poisoning. It is used as a chemical so
Page: Alcohol by volume
Summary: Alcohol by volume (abbreviated as alc/vol or ABV) is a standard measure of the volume of alcohol contained in a given volume of an alcoholic beverage, expressed as a volume percent. It is defined as the number of millilitres (mL) of pure ethanol present in 100 mL (3.5 imp fl oz; 3.4 US fl oz) of solution at 20 °C (68 °F). The number of millilitres of pure ethanol is the mass of the ethanol divided by its density at 20 °C (68 °F), which is 0.78945 g/mL (0.82353 oz/US fl oz; 0.79122 oz/imp fl oz; 0.45633 oz/cu in). The alc/vol standard is used worldwide. The International Organization of Legal Metrology has tables of density of water–ethanol mixtures at different concentrations and temperatures.
In some countries, e.g. France, alcohol by volume is often referred to as degrees Gay-Lussac (after the French chemist Joseph Louis Gay-Lussac), although there is a slight difference since the Gay-Lussac convention uses the International Standard Atmosphere value for temperature, 15 °C (59 °F).
Page: Alcohol fuel
Summary: Various alcohols are used as fuel for internal combustion engines.  The first four aliphatic alcohols (methanol, ethanol, propanol, and butanol)
are of interest as fuels because they can be synthesized chemically or biologically, and they have characteristics which allow them to be used in internal combustion engines. The general chemical formula for alcohol fuel is CnH2n+1OH.
Most methanol is produced from natural gas, although it can be produced from biomass using very similar chemical processes. Ethanol is commonly produced from biological material through fermentation processes. Biobutanol has the advantage in combustion engines in that its energy density is closer to gasoline than the simpler alcohols (while still retaining over 25% higher octane rating); however, biobutanol is currently more difficult to produce than ethanol or methanol. When obtained from biological materials and/or biological processes, they are known as bioalcohols (e.g. "bioethanol"). There is no chemical dif
Page: Cellulosic ethanol
Summary: Cellulosic ethanol is ethanol (ethyl alcohol) produced from cellulose (the stringy fiber of a plant) rather than from the plant's seeds or fruit. It can be produced from grasses, wood, algae, or other plants. It is generally discussed for use as a biofuel. The carbon dioxide that plants absorb as they grow offsets some of the carbon dioxide emitted when ethanol made from them is burned, so cellulosic ethanol fuel has the potential to have a lower carbon footprint than fossil fuels.
Interest in cellulosic ethanol is driven by its potential to replace ethanol made from corn or sugarcane. Since these plants are also used for food products, diverting them for ethanol production can cause food prices to rise; cellulose-based sources, on the other hand, generally do not compete with food, since the fibrous parts of plants are mostly inedible to humans. Another potential advantage is the high diversity and abundance of cellulose sources; grasses, trees and algae are found in almost every envi
AGENT:  Thought: The summary of the page 'Ethanol' mentions that ethanol is an alcohol with a characteristic wine-like odor and pungent taste. However, it does not provide the density of ethanol. I will use the `search_info` tool to find the density of ethanol from the 'Ethanol (data page)'.
Code:
```py
search_info('density of ethanol', 'Ethanol (data page)')
```<end_action>
OBSERVATION:  Print outputs:
Last output from code snippet:
Information retrieved from the page 'Ethanol (data page)' for the query 'density of ethanol':
The density of ethanol at 20°C is approximately 0.7894 g/cm3.
AGENT:  Thought: I have found the density of ethanol from the Wikipedia page 'Ethanol (data page)'. I will return the result using the `final_answer` tool.
Code:
```py
final_answer("The density of ethanol at 20°C is approximately 0.7894 g/cm3.")
```<end_action>
OBSERVATION:  Print outputs:
Last output from code snippet:
The density of ethanol at 20°C is approximately 0.7894 g/cm3.

頁面搜索代理日志如下:

TASK:  Retrieve information about the query:"density of birch plywood" from the Wikipedia page "Plywood".
AGENT:  Thought: I need to find the density of birch plywood. I will use the tool `retrieve_passages` to look for data on the Wikipedia page.
Code:
```py
result = retrieve_passages("density of birch plywood")
print(result)
```<end_action>
OBSERVATION:  Print outputs:
Retrieved passages for query "density of birch plywood":
Passage 0: ... . Shear stress, by contrast, is higher in the center of the panel, and at the outer fibres. Within Europe basic plywood can be divided into three main categories: birch plywood (density approx. 680 kg/m3), mixed plywood (density approx. 620 kg/m3) and conifer plywoods (density 460–520 kg/m3). ...
Passage 1: ... . Aircraft grade plywood is made from three or more plies of birch, as thin as 0.40 millimetres (1?64 in) thick in total, and is extremely strong and light. ...
Passage 2: ... Baltic Birch plywood is a product of an area around the Baltic Sea. Originally manufactured for European cabinet makers but now popular in the United States as well. It is very stable composed of an inner void-free core of cross-banded birch plys with an exterior grade adhesive. The face veneers are thicker than traditional cabinet grade ...
Passage 3: ... . As a result, thicker panels can span greater distances under the same loads. In bending, the maximum stress occurs in the outermost layers, one in tension, the other in compression. Bending stress decreases from the maximum at the face layers to nearly zero at the central layer. Shear stress, by contrast, is higher in the center of the panel, and at the outer fibres. Within Europe basic plywood can be divided into three main categories: birch plywood (density approx ...
Passage 4: ... Wind turbine blades
Insulation boxes for liquefied natural gas (LNG) carriers
Smooth surface and accurate thickness combined with the durability of the material makes birch plywood a favorable material for many special end uses e.g.:

High-end loud speakers
Die-cutting boards
Supporting structure for parquet
Playground equipment
Furniture
Signs and fences for demanding outdoor advertising
Musical instruments
Sports equipment...

AGENT:  Thought: From the passages, I can see that the density of birch plywood is approximately 680 kg/m3. I can use the `final_answer` tool to provide the answer.
Code:
```py
final_answer("The density of birch plywood is approximately 680 kg/m3.")
```<end_action>
OBSERVATION:  Print outputs:
Last output from code snippet:
The density of birch plywood is approximately 680 kg/m3.
------------------------------
TASK:  Retrieve information about the query:"density of ethanol" from the Wikipedia page "Ethanol (data page)".
AGENT:  Thought: I need to find the density of ethanol. I will use the tool `retrieve_passages` to get the information from the Wikipedia page.
Code:
```py
result = retrieve_passages("density of ethanol")
print(result)
```<end_action>
OBSERVATION:  Print outputs:
Retrieved passages for query "density of ethanol":
Passage 0: ... == Density of ethanol at various temperatures ==
Data obtained from Lange 1967

These data correlate as ρ [g/cm3] = ?8.461834×10?4 T [°C] + 0.8063372 with an R2 = 0.99999.
== Properties of aqueous ethanol solutions ==
Data obtained from Lange 1967
== Boiling points of aqueous solutions ==
Data obtained from CRC Handbook of Chemistry (Page 2117): 2391 

?Azeotropic mixture
== Charts ==
== References == ...
Passage 1: ... This page provides supplementary chemical data on ethanol.
== Material Safety Data Sheet ==
External MSDS
== Structure and properties ==
== Thermodynamic properties ==
== Spectral data ==
== Vapor pressure of liquid ==
== Density of ethanol at various temperatures ==
Data obtained from Lange 1967

These data correlate as ρ [g/cm3] = ?8.461834×10?4 T [°C] + 0.8063372 with an R2 = 0.99999.
== Properties of aqueous ethanol solutions ==
Data obtained from Lange 1967...
AGENT:  Thought: From the passages, I can see that the density of ethanol varies with temperature. I can use the provided linear equation to calculate the density at a specific temperature. I will use the `math` module to perform the calculation.
Code:
```py
# Extract the coefficients from the equation
a = -8.461834e-4
b = 0.8063372
# Calculate the density at a specific temperature, let's take 20°C as an example
temperature = 20
density = a * temperature + b
print(density)
```<end_action>
OBSERVATION:  Print outputs:
0.789413532

AGENT:  Thought: The passage provides a linear equation to calculate the density of ethanol at different temperatures. I can now use this equation to provide the density of ethanol at a specific temperature. I will use the `final_answer` tool to return the relevant information.
Code:
```py
final_answer(f"The density of ethanol at 20°C is approximately {round(0.789413532, 4)} g/cm3.")
```<end_action>
OBSERVATION:  Print outputs:
Last output from code snippet:
The density of ethanol at 20°C is approximately 0.7894 g/cm3.

該模型正確地將密度差異識別為漂浮/下沉的原因,將任務(wù)分解為查找兩種物質(zhì)的密度,并且能夠從檢索到的數(shù)據(jù)中得出正確的結(jié)論,盡管它們采用的是不同的測量單位。

局限性

我們上面所討論的系統(tǒng)具有令人印象深刻的功能,尤其是考慮到所用引擎模型的有限大小時。該系統(tǒng)也有自己的局限性。這其中更大的一個局限性似乎與引擎模型本身的功能有關(guān):雖然它似乎能夠理解和遵循復(fù)雜而冗長的指令以及正確使用所提供的工具,但有時它竟然無法遵守簡單的指導(dǎo)方針,并且傾向于重復(fù)無效的操作而不做任何改變。當(dāng)代理正在尋找的信息不存在(或無法使用語義搜索工具輕松提取)時,這種情況尤其突出。

另一個缺點(diǎn)是代理固有的缺點(diǎn),在多代理系統(tǒng)中更為突出,即各種代理執(zhí)行所需的計算時間。在某些簡單情況下,標(biāo)準(zhǔn)RAG工作流程足以回答問題,這可能會產(chǎn)生不必要的計算開銷。

最后,多個代理相互交互會增加幻覺的風(fēng)險,因?yàn)橐粋€代理產(chǎn)生的幻覺可能會在執(zhí)行鏈中傳播,這也使得追蹤變得非常困難。

讓我們看一個例子,在這個例子中,系統(tǒng)雖然仍然提供正確的答案,但過度使用工具調(diào)用(帶有一些重復(fù)的操作),不必要地延長了執(zhí)行時間。

任務(wù):Which dynasty was ruling China at the time of the fall of Constantinople?(君士坦丁堡陷落時,哪個朝代統(tǒng)治著中國?)

該任務(wù)需要良好的抽象水平,因?yàn)檫@兩個事件沒有關(guān)聯(lián),君士坦丁堡陷落的確切年份可能不會在相應(yīng)朝代的頁面上報告。

管理代理的執(zhí)行仍然精簡且準(zhǔn)確,通過首先檢索君士坦丁堡陷落的日期,然后查找那一年的中國朝代,正確地解決了任務(wù)。然而,我們可以看到,搜索結(jié)果雖然仍然包含所需的信息,但看起來有點(diǎn)奇怪。

Agent:  Thought: To answer this question, I need to find out when Constantinople fell and which Chinese dynasty was ruling at that time. I'll start by finding the fall date of Constantinople.
Code:
```py
wikipedia_search_agent(query="Fall of Constantinople")
```<end_action>
Observation:  Print outputs:
Last output from code snippet:
The leader of the Ottoman Empire in 1453, during the fall of Constantinople, was Mehmed II, also known as Mehmed the Conqueror.
Agent:  Thought: From the previous search, we know that Constantinople fell in 1453, and it was conquered by Mehmed II. Now I need to find out which Chinese dynasty was ruling in 1453. I will search for the Chinese dynasties around that time.
Code:
```py
wikipedia_search_agent(query="Chinese dynasties 1453")
```<end_action>
Observation:  Print outputs:
Last output from code snippet:
In 1453, the Ming dynasty was in full control of China. No specific events related to 1453 are mentioned in the information provided.
Agent:  Thought: Based on the information provided, the Ming dynasty was in full control of China in 1453. Therefore, the dynasty ruling China when Constantinople fell would be the Ming dynasty.
Code:
```py
final_answer("The dynasty ruling China when Constantinople fell in 1453 was the Ming dynasty.")
```<end_action>
Observation:  Print outputs:
Last output from code snippet:
The dynasty ruling China when Constantinople fell in 1453 was the Ming dynasty.

讓我們檢查相應(yīng)的維基百科搜索代理任務(wù)及其執(zhí)行情況。我們可以看到,可能是由于“君士坦丁堡陷落”這個寬泛的任務(wù),代理在找到正確的日期后會查看其他特定信息。檢索有關(guān)中國朝代的信息時也會發(fā)生同樣的情況,但另一個問題是某些工具調(diào)用重復(fù)了相同的內(nèi)容。

TASK:  Fall of Constantinople
AGENT:  Thought: I will use the `search_wikipedia` tool to find information about the fall of Constantinople. This will likely provide me with a summary of the event and possibly links to related pages.
Code:
```py
search_wikipedia("Fall of Constantinople")
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
Pages found for query 'Fall of Constantinople':
Page: Fall of Constantinople
Summary: The fall of Constantinople, also known as the conquest of Constantinople, was the capture of the capital of the Byzantine Empire by the Ottoman Empire. The city was captured on 29 May 1453 as part of the culmination of a 55-day siege which had begun on 6 April.
The attacking Ottoman Army, which significantly outnumbered Constantinople's defenders, was commanded by the 21-year-old Sultan Mehmed II (later nicknamed "the Conqueror"), while the Byzantine army was led by Emperor Constantine XI Palaiologos. After conquering the city, Mehmed II made Constantinople the new Ottoman capital, replacing Adrianople.
The fall of Constantinople and of the Byzantine Empire was a watershed of the Late Middle Ages, marking the effective end of the Roman Empire, a state which began in roughly 27 BC and had lasted nearly 1500 years. For many modern historians, the fall of Constantinople marks the end of the medieval period and the beginning of the early modern period. The city's fall also stood as a turni
Page: Sack of Constantinople
Summary: The sack of Constantinople occurred in April 1204 and marked the culmination of the Fourth Crusade. Crusaders sacked and destroyed most of Constantinople, the capital of the Byzantine Empire. After the capture of the city, the Latin Empire (known to the Byzantines as the Frankokratia, or the Latin occupation) was established and Baldwin of Flanders crowned as Emperor Baldwin I of Constantinople in Hagia Sophia.
After the city's sacking, most of the Byzantine Empire's territories were divided up among the Crusaders. Byzantine aristocrats also established a number of small independent splinter states—one of them being the Empire of Nicaea, which would eventually recapture Constantinople in 1261 and proclaim the reinstatement of the Empire. However, the restored Empire never managed to reclaim all its former territory or attain its earlier economic strength, and it gradually succumbed to the rising Ottoman Empire over the following two centuries.
The Byzantine Empire was left poorer, smal
Page: Constantinople
Summary: Constantinople (see other names) became the capital of the Roman Empire during the reign of Constantine the Great in 330. Following the collapse of the Western Roman Empire in the late 5th century, Constantinople remained the capital of the Eastern Roman Empire (also known as the Byzantine Empire; 330–1204 and 1261–1453), the Latin Empire (1204–1261), and the Ottoman Empire (1453–1922). Following the Turkish War of Independence, the Turkish capital then moved to Ankara. Officially renamed Istanbul in 1930, the city is today the largest city in Europe, straddling the Bosporus strait and lying in both Europe and Asia, and the financial center of Turkey.
In 324, following the reunification of the Eastern and Western Roman Empires, the ancient city of Byzantium was selected to serve as the new capital of the Roman Empire, and the city was renamed Nova Roma, or 'New Rome', by Emperor Constantine the Great. On 11 May 330, it was renamed Constantinople and dedicated to Constantine. Constantin
Page: Moscow, third Rome
Summary: Moscow, third Rome (Russian: Москва — третий Рим; Moskva, treti? Rim) is a theological and political concept asserting Moscow as the successor to ancient Rome, with the Russian world carrying forward the legacy of the Roman Empire. The term "third Rome" refers to a historical topic of debate in European culture: the question of the successor city to the "first Rome" (Rome, within the Western Roman Empire) and the "second Rome" (Constantinople, within the Eastern Roman Empire).
Page: Byzantine Empire
Summary: The Byzantine Empire, also referred to as the Eastern Roman Empire, was the continuation of the Roman Empire centred in Constantinople during late antiquity and the Middle Ages. The eastern half of the Empire survived the conditions that caused the fall of the West in the 5th century AD, and continued to exist until the fall of Constantinople to the Ottoman Empire in 1453. During most of its existence, the empire remained the most powerful economic, cultural, and military force in the Mediterranean world. The term "Byzantine Empire" was only coined following the empire's demise; its citizens referred to the polity as the "Roman Empire" and to themselves as "Romans". Due to the imperial seat's move from Rome to Byzantium, the adoption of state Christianity, and the predominance of Greek instead of Latin, modern historians continue to make a distinction between the earlier Roman Empire and the later Byzantine Empire.
During the earlier Pax Romana period, the western parts of the empire b

AGENT:  Thought: From the summary of the page "Fall of Constantinople", I can see that the event took place in 1453. I will use the `search_info` tool to find more details about the event, specifically who was the leader of the Ottoman Empire at that time.
Code:
```py
search_info("leader of the Ottoman Empire in 1453", "Fall of Constantinople")
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
Information retrieved from the page 'Fall of Constantinople' for the query 'leader of the Ottoman Empire in 1453':
The leader of the Ottoman Empire in 1453 was Mehmed II, also known as Mehmed the Conqueror.
AGENT:  Thought: I have found that the leader of the Ottoman Empire in 1453 was Mehmed II, also known as Mehmed the Conqueror. I will use the `final_answer` tool to provide the answer.
Code:
```py
final_answer("The leader of the Ottoman Empire in 1453, during the fall of Constantinople, was Mehmed II, also known as Mehmed the Conqueror.")
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
The leader of the Ottoman Empire in 1453, during the fall of Constantinople, was Mehmed II, also known as Mehmed the Conqueror.
------------------------------
TASK:  Chinese dynasties 1453
AGENT:  Thought: I will use the `search_wikipedia` tool to find information about Chinese dynasties around the year 1453. I will provide a general query related to Chinese dynasties in that time period.
Code:
```py
search_wikipedia('Chinese dynasties 1453')
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
Pages found for query 'Chinese dynasties 1453':
Page: Chinese Empire
Summary: Chinese Empire (or Empire of China) is a term referring to the realm ruled by the Emperor of China during the era known as Imperial China. It was coined by western scholars and used to describe the Ming and Qing dynasties (or imperial Chinese dynasties in general). Another term was "Celestial Empire", in reference to the status of the emperor as the Son of Heaven. In 221 BC, China was unified under an emperor for the first time, and various dynasties or empires founded by hereditary monarchs ruled China for a total of two millennia since then, including the Qin, Han, Jin, Sui, Tang, Song, Yuan, Ming, and Qing.
Page: Ming dynasty
Summary: The Ming dynasty, officially the Great Ming, was an imperial dynasty of China, ruling from 1368 to 1644 following the collapse of the Mongol-led Yuan dynasty. The Ming dynasty was the last imperial dynasty of China ruled by the Han people, the majority ethnic group in China. Although the primary capital of Beijing fell in 1644 to a rebellion led by Li Zicheng (who established the short-lived Shun dynasty), numerous rump regimes ruled by remnants of the Ming imperial family—collectively called the Southern Ming—survived until 1662.
The Ming dynasty's founder, the Hongwu Emperor (r. 1368–1398), attempted to create a society of self-sufficient rural communities ordered in a rigid, immobile system that would guarantee and support a permanent class of soldiers for his dynasty: the empire's standing army exceeded one million troops and the navy's dockyards in Nanjing were the largest in the world. He also took great care breaking the power of the court eunuchs and unrelated magnates, enfeoff
Page: List of time periods
Summary: The categorisation of the past into discrete, quantified named blocks of time is called periodization. This is a list of such named time periods as defined in various fields of study.
These can be divided broadly into prehistorical periods and historical periods
(when written records began to be kept). 
In archaeology and anthropology, prehistory is subdivided into the three-age system, this list includes the use of the three-age system as well as a number of various designation used in reference to sub-ages within the traditional three.
The dates for each age can vary by region. On the geologic time scale, the Holocene epoch starts at the end of the last glacial period of the current ice age (c. 10,000 BC) and continues to the present. The beginning of the Mesolithic is usually considered to correspond to the beginning of the Holocene epoch.
Page: Celestial Empire
Summary: Celestial Empire (Chinese: 天朝; pinyin: Tiāncháo; lit. 'heavenly dynasty') is an old name used to refer to China or the Chinese Empire, from a literary and poetic translation of the Chinese term, one of many names for China. The name was used in reference to the status of the Emperor of China as the Son of Heaven in the Sinosphere.
Accordingly, in the 19th century, the name "Celestial" was used to refer to Chinese people. Both terms were widely used in the English-language popular mass media of the day, but fell into disuse later on. Its usage has become popular again in the present day (2015), particularly among Chinese Internet users. It is used to refer to the current Communist regime, to imply either disapproval for its political suppression and arrogance or national pride in the country's emergence as a superpower in the 21st century, depending on the context.
In modern times it has mostly fallen into disuse, but the name "Celestial Empire" still appears in various media such as ar
Page: List of dynasties
Summary: This is a list of monarchical dynasties and dynastic regimes organized by geographic region. Extant dynasties are rendered in bold and highlighted.

AGENT:  Thought: From the summaries, I can see that the Ming dynasty ruled from 1368 to 1644, which covers the year 1453. I will use the `search_info` tool to find more detailed information about the Ming dynasty during the year 1453.
Code:
```py
search_info('1453', 'Ming dynasty')
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
Information retrieved from the page 'Ming dynasty' for the query '1453':
The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.
AGENT:  Thought: Now that I know the Ming dynasty ruled during 1453, I can provide a more specific answer about the events that happened in China during that year. However, the information provided does not give us specific details about the events in 1453. I will use the `search_info` tool to find more detailed information about the Ming dynasty during the year 1453.
Code:
```py
search_info('1453', 'Ming dynasty')
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
Information retrieved from the page 'Ming dynasty' for the query '1453':
The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.
AGENT:  Thought: The information provided does not specifically mention the events of 1453. However, we can infer that during the Ming dynasty, significant developments occurred. I will use the `search_info` tool to find more specific information about the events of 1453 in the Ming dynasty.
Code:
```py
search_info('1453', 'Ming dynasty')
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
Information retrieved from the page 'Ming dynasty' for the query '1453':
The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.
AGENT:  Thought: The information provided indicates that the Ming dynasty was in full control of China during the year 1453. However, there is no specific mention of events that happened in 1453. I will use the `search_info` tool to find more specific information about the events of 1453 in the Ming dynasty.
Code:
```py
search_info('1453', 'Ming dynasty')
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
Information retrieved from the page 'Ming dynasty' for the query '1453':
The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.
AGENT:  Thought: The information provided does not specifically mention any events that occurred in 1453. However, we know that the Ming dynasty was in full control of China during this time. I will use the `final_answer` tool to provide the answer based on the information we have.
Code:
```py
final_answer("In 1453, the Ming dynasty was in full control of China. No specific events related to 1453 are mentioned in the information provided.")
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
In 1453, the Ming dynasty was in full control of China. No specific events related to 1453 are mentioned in the information provided.

深入研究頁面搜索代理的執(zhí)行情況,我們發(fā)現(xiàn)這里也使用相同的參數(shù)重復(fù)了多個工具調(diào)用。

TASK:  Retrieve information about the query:"leader of the Ottoman Empire in 1453" from the Wikipedia page "Fall of Constantinople".
AGENT:  Thought: I need to find out who was the leader of the Ottoman Empire in 1453. I will use the `retrieve_passages` tool to search for this information on the Wikipedia page "Fall of Constantinople".
Code:
```py
result = retrieve_passages("leader of the Ottoman Empire in 1453")
print(result)
```<end_action>
OBSERVATIONS:  Print outputs:
Retrieved passages for query "leader of the Ottoman Empire in 1453":
Passage 0: ... When Mehmed II succeeded his father in 1451, he was 19 years old. Many European courts assumed that the young Ottoman ruler would not seriously challenge Christian hegemony in the Balkans and the Aegean. In fact, Europe celebrated Mehmed coming to the throne and hoped his inexperience would lead the Ottomans astray. This calculation was boosted by Mehmed's friendly overtures to the European envoys at his new court. But Mehmed's mild words were not matched by his actions ...
Passage 1: ... The attacking Ottoman Army, which significantly outnumbered Constantinople's defenders, was commanded by the 21-year-old Sultan Mehmed II (later nicknamed "the Conqueror"), while the Byzantine army was led by Emperor Constantine XI Palaiologos. After conquering the city, Mehmed II made Constantinople the new Ottoman capital, replacing Adrianople. ...
Passage 2: ... . The oldest boy, renamed Murad, became a personal favourite of Mehmed and served as Beylerbey (Governor-General) of Rumeli (the Balkans). The younger son, renamed Mesih Pasha, became Admiral of the Ottoman fleet and Sancak Beg (Governor) of the province of Gallipoli. He eventually served twice as Grand Vizier under Mehmed's son, Bayezid II. ...
Passage 3: ... == External links ==

 Media related to Fall of Constantinople (1453) at Wikimedia Commons
The Siege of Constantinople As The Islamic World Sees it Archived 22 April 2021 at the Wayback Machine
World History Encyclopedia – 1453: The Fall of Constantinople
Constantinople Siege & Fall, BBC Radio 4 discussion with Roger Crowley, Judith Herrin & Colin Imber (In Our Time, 28 December 2006). ...
Passage 4: ... In the summer of 1452, when Rumeli Hisar? was completed and the threat of the Ottomans had become imminent, Constantine wrote to the Pope, promising to implement the union, which was declared valid by a half-hearted imperial court on 12 December 1452. Although he was eager for an advantage, Pope Nicholas V did not have the influence the Byzantines thought he had over the Western kings and princes, some of whom were wary of increasing papal control...

AGENT:  Thought: From the passages, it seems that the leader of the Ottoman Empire in 1453 was Mehmed II, also known as Mehmed the Conqueror. I will use the `final_answer` tool to provide the answer.
Code:
```py
final_answer("The leader of the Ottoman Empire in 1453 was Mehmed II, also known as Mehmed the Conqueror.")
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
The leader of the Ottoman Empire in 1453 was Mehmed II, also known as Mehmed the Conqueror.
------------------------------
TASK:  Retrieve information about the query:"1453" from the Wikipedia page "Ming dynasty".
AGENT:  Thought: I need to find information related to the year 1453 from the Wikipedia page "Ming dynasty". I will use the `retrieve_passages` tool to get relevant passages.
Code:
```py
result = retrieve_passages("1453 Ming dynasty")
print(result)
```<end_action>
OBSERVATIONS:  Print outputs:
Retrieved passages for query "1453 Ming dynasty":
Passage 0: ... The Ming dynasty, officially the Great Ming, was an imperial dynasty of China, ruling from 1368 to 1644 following the collapse of the Mongol-led Yuan dynasty. The Ming dynasty was the last imperial dynasty of China ruled by the Han people, the majority ethnic group in China ...
Passage 1: ... === Reference works and primary sources ===
Farmer, Edward L. ed. Ming History: An Introductory Guide to Research (1994).
Goodrich, Luther Carrington (1976). Dictionary of Ming Biography, 1368–1644. New York: Columbia University Press. ISBN 978-0-231-03833-1.
The Ming History English Translation Project, A collaborative project that makes available translations (from Chinese to English) of portions of the 明史 Mingshi (Official History of the Ming Dynasty). ...
Passage 2: ... ==== Reign of the Hongwu Emperor ==== ...
Passage 3: ... . The Ming dynasty was the last imperial dynasty of China ruled by the Han people, the majority ethnic group in China. Although the primary capital of Beijing fell in 1644 to a rebellion led by Li Zicheng (who established the short-lived Shun dynasty), numerous rump regimes ruled by remnants of the Ming imperial family—collectively called the Southern Ming—survived until 1662. ...
Passage 4: ... . Zhu Di assumed the throne as the Yongle Emperor (r. 1402–24); his reign is universally viewed by scholars as a "second founding" of the Ming dynasty since he reversed many of his father's policies....

AGENT:  Thought: The passages do not directly mention the year 1453. However, I can infer that the Ming dynasty lasted from 1368 to 1644, and 1453 falls within this period. I will use the `final_answer` tool to provide a summary based on the information available.
Code:
```py
final_answer("The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.")
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.
------------------------------
TASK:  Retrieve information about the query:"1453" from the Wikipedia page "Ming dynasty".
AGENT:  Thought: I need to find information related to the year 1453 from the Wikipedia page "Ming dynasty". I will use the `retrieve_passages` tool to get relevant passages.
Code:
```py
result = retrieve_passages("1453 Ming dynasty")
print(result)
```<end_action>
OBSERVATIONS:  Print outputs:
Retrieved passages for query "1453 Ming dynasty":
Passage 0: ... The Ming dynasty, officially the Great Ming, was an imperial dynasty of China, ruling from 1368 to 1644 following the collapse of the Mongol-led Yuan dynasty. The Ming dynasty was the last imperial dynasty of China ruled by the Han people, the majority ethnic group in China ...
Passage 1: ... === Reference works and primary sources ===
Farmer, Edward L. ed. Ming History: An Introductory Guide to Research (1994).
Goodrich, Luther Carrington (1976). Dictionary of Ming Biography, 1368–1644. New York: Columbia University Press. ISBN 978-0-231-03833-1.
The Ming History English Translation Project, A collaborative project that makes available translations (from Chinese to English) of portions of the 明史 Mingshi (Official History of the Ming Dynasty). ...
Passage 2: ... ==== Reign of the Hongwu Emperor ==== ...
Passage 3: ... . The Ming dynasty was the last imperial dynasty of China ruled by the Han people, the majority ethnic group in China. Although the primary capital of Beijing fell in 1644 to a rebellion led by Li Zicheng (who established the short-lived Shun dynasty), numerous rump regimes ruled by remnants of the Ming imperial family—collectively called the Southern Ming—survived until 1662. ...
Passage 4: ... . Zhu Di assumed the throne as the Yongle Emperor (r. 1402–24); his reign is universally viewed by scholars as a "second founding" of the Ming dynasty since he reversed many of his father's policies....

AGENT:  Thought: The passages do not directly mention the year 1453. However, I can infer that the Ming dynasty lasted from 1368 to 1644, and 1453 falls within this period. I will use the `final_answer` tool to provide a summary based on the information available.
Code:
```py
final_answer("The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.")
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.
------------------------------
TASK:  Retrieve information about the query:"1453" from the Wikipedia page "Ming dynasty".
AGENT:  Thought: I need to find information related to the year 1453 from the Wikipedia page "Ming dynasty". I will use the `retrieve_passages` tool to get relevant passages.
Code:
```py
result = retrieve_passages("1453 Ming dynasty")
print(result)
```<end_action>
OBSERVATIONS:  Print outputs:
Retrieved passages for query "1453 Ming dynasty":
Passage 0: ... The Ming dynasty, officially the Great Ming, was an imperial dynasty of China, ruling from 1368 to 1644 following the collapse of the Mongol-led Yuan dynasty. The Ming dynasty was the last imperial dynasty of China ruled by the Han people, the majority ethnic group in China ...
Passage 1: ... === Reference works and primary sources ===
Farmer, Edward L. ed. Ming History: An Introductory Guide to Research (1994).
Goodrich, Luther Carrington (1976). Dictionary of Ming Biography, 1368–1644. New York: Columbia University Press. ISBN 978-0-231-03833-1.
The Ming History English Translation Project, A collaborative project that makes available translations (from Chinese to English) of portions of the 明史 Mingshi (Official History of the Ming Dynasty). ...
Passage 2: ... ==== Reign of the Hongwu Emperor ==== ...
Passage 3: ... . The Ming dynasty was the last imperial dynasty of China ruled by the Han people, the majority ethnic group in China. Although the primary capital of Beijing fell in 1644 to a rebellion led by Li Zicheng (who established the short-lived Shun dynasty), numerous rump regimes ruled by remnants of the Ming imperial family—collectively called the Southern Ming—survived until 1662. ...
Passage 4: ... . Zhu Di assumed the throne as the Yongle Emperor (r. 1402–24); his reign is universally viewed by scholars as a "second founding" of the Ming dynasty since he reversed many of his father's policies....

AGENT:  Thought: The passages do not directly mention the year 1453. However, I can infer that the Ming dynasty lasted from 1368 to 1644, and 1453 falls within this period. I will use the `final_answer` tool to provide a summary based on the information available.
Code:
```py
final_answer("The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.")
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.
------------------------------
TASK:  Retrieve information about the query:"1453" from the Wikipedia page "Ming dynasty".
AGENT:  Thought: I need to find information related to the year 1453 from the Wikipedia page "Ming dynasty". I will use the `retrieve_passages` tool to get relevant passages.
Code:
```py
result = retrieve_passages("1453 Ming dynasty")
print(result)
```<end_action>
OBSERVATIONS:  Print outputs:
Retrieved passages for query "1453 Ming dynasty":
Passage 0: ... The Ming dynasty, officially the Great Ming, was an imperial dynasty of China, ruling from 1368 to 1644 following the collapse of the Mongol-led Yuan dynasty. The Ming dynasty was the last imperial dynasty of China ruled by the Han people, the majority ethnic group in China ...
Passage 1: ... === Reference works and primary sources ===
Farmer, Edward L. ed. Ming History: An Introductory Guide to Research (1994).
Goodrich, Luther Carrington (1976). Dictionary of Ming Biography, 1368–1644. New York: Columbia University Press. ISBN 978-0-231-03833-1.
The Ming History English Translation Project, A collaborative project that makes available translations (from Chinese to English) of portions of the 明史 Mingshi (Official History of the Ming Dynasty). ...
Passage 2: ... ==== Reign of the Hongwu Emperor ==== ...
Passage 3: ... . The Ming dynasty was the last imperial dynasty of China ruled by the Han people, the majority ethnic group in China. Although the primary capital of Beijing fell in 1644 to a rebellion led by Li Zicheng (who established the short-lived Shun dynasty), numerous rump regimes ruled by remnants of the Ming imperial family—collectively called the Southern Ming—survived until 1662. ...
Passage 4: ... . Zhu Di assumed the throne as the Yongle Emperor (r. 1402–24); his reign is universally viewed by scholars as a "second founding" of the Ming dynasty since he reversed many of his father's policies....

AGENT:  Thought: The passages do not directly mention the year 1453. However, I can infer that the Ming dynasty lasted from 1368 to 1644, and 1453 falls within this period. I will use the `final_answer` tool to provide a summary based on the information available.
Code:
```py
final_answer("The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.")
```<end_action>
OBSERVATIONS:  Print outputs:
Last output from code snippet:
The year 1453 falls within the period of the Ming dynasty, which ruled from 1368 to 1644. During this time, the Ming dynasty was in full control of China and experienced significant developments such as the construction of the Forbidden City and the expansion of the Great Wall of China.

結(jié)論

在本文中,我介紹了如何使用代碼代理與“小型”開源LLM(如Qwen2.5–7B-Instruct)創(chuàng)建一個多代理RAG系統(tǒng)。其中,我討論了該系統(tǒng)的主要架構(gòu)特性以及我為改進(jìn)結(jié)果而做出的與Hugging Face代碼代理實(shí)現(xiàn)相關(guān)的一些特定選擇。該項(xiàng)目完整的代碼詳細(xì)信息可在??GitHub存儲庫??中找到。

值得注意的是,盡管本文中我所描述的多代理系統(tǒng)由運(yùn)行在消費(fèi)級電腦上的小型模型驅(qū)動,但它可以解決與復(fù)雜查詢相關(guān)的多跳問答任務(wù)。特別是:

  • 它可以將查詢分解為可管理的子任務(wù);
  • 它可以識別包含必要信息的維基百科頁面;
  • 它可以組合來自多個頁面的信息;
  • 它可以在維基百科頁面上搜索詳細(xì)信息;
  • 它可以確定是否需要更多信息并嘗試找到它;
  • 它可以成功修復(fù)它生成的代碼中的小錯誤并處理工具錯誤(如維基百科消歧錯誤)。

另一方面,本文中我還概述了所構(gòu)建系統(tǒng)的一些局限性,例如增加計算時間、重復(fù)動作和潛在的幻覺傳播。后者可以通過在系統(tǒng)中包含一個“校對”代理來緩解,該代理負(fù)責(zé)檢查報告的信息是否與檢索到的信息源一致。

還值得注意的是,由于代理系統(tǒng)的核心是標(biāo)準(zhǔn)的RAG方法,因此可以在框架中實(shí)現(xiàn)所有用于提高后者效率和準(zhǔn)確性的常用技術(shù)。

另一個可能的改進(jìn)是使用技術(shù)來增加測試時間計算,使模型有更多“思考時間”,類似于OpenAI o1/o3模型。但需要注意的是,這種修改將進(jìn)一步增加執(zhí)行時間。

最后,由于多代理系統(tǒng)由專門從事單一任務(wù)的代理組成,因此為每個代理使用不同的模型引擎可以提高性能。特別是,可以為系統(tǒng)中的每個任務(wù)微調(diào)不同的模型以進(jìn)一步提高性能。這對小模型尤其有益。值得一提的是,可以通過在一組預(yù)定任務(wù)上運(yùn)行系統(tǒng)并在系統(tǒng)產(chǎn)生正確答案時保存代理的輸出來收集微調(diào)數(shù)據(jù),從而無需昂貴的手動數(shù)據(jù)注釋。

好了,我希望你發(fā)現(xiàn)本文非常有用,你可以在??GitHub存儲庫???中找到文中項(xiàng)目完整的代碼實(shí)現(xiàn),并在??Colab筆記本??中親自嘗試一下。

譯者介紹

朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機(jī)教師,自由編程界老兵一枚。

原文標(biāo)題:??Multi-Agentic RAG withHugging FaceCode Agents??,作者:Gabriele Sgroi

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任
已于2025-1-13 10:52:15修改
收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦