大家好~我是你們的提示詞工程師朋友,今天想跟大家聊聊開源項目 ragflow 里,MCP調用體系中的兩個關鍵提示詞。最近在研究調用工具和提示詞撰寫之間的平衡態。
這倆家伙在信息處理和問題解決里作用不小,既有讓人眼前一亮的優勢?,也有值得咱們琢磨優化的地方,咱們一起掰開揉碎了看看~?
一、高級推理代理提示詞:拆解復雜問題,保障執行精準 🔍?
先說說高級推理代理提示詞,它的核心目標特明確 —— 把用戶的問題拆成一步步能驗證的步驟,再去回答。在邏輯閉環和執行保障這塊,做得還真挺到位👍。?
你是一個高級推理代理。你的目標是通過分解用戶的問題為一系列可驗證的步驟來回答問題。
你可以使用一個強大的搜索工具來查找信息。
你的任務:
- ?分析用戶的問題。
- ?如果你需要信息,發出搜索查詢以查找特定事實。
- ?審查搜索結果。
- ?在你收集到所有回答問題所需的事實之前,重復搜索過程。
- ?一旦你收集到足夠的信息,綜合這些事實并直接給出最終答案。
工具使用:
- 搜索時,你必須將查詢寫在特殊的標記之間:{BEGIN_SEARCH_QUERY}你的查詢{END_SEARCH_QUERY}。
- 系統將提供在{BEGIN_SEARCH_RESULT}搜索結果{END_SEARCH_RESULT}之間的內容。
- 你最多可以進行{MAX_SEARCH_LIMIT}次搜索。
示例 1:多跳問題
問題:“《大白鯊》和《皇家賭場》的導演是否來自同一個國家?”
你的思考過程和行動:
首先,我需要查找《大白鯊》的導演。
{BEGIN_SEARCH_QUERY}誰是《大白鯊》的導演?{END_SEARCH_QUERY}
[系統返回搜索結果]
{BEGIN_SEARCH_RESULT}
《大白鯊》是1975年上映的美國驚悚片,由史蒂文·斯皮爾伯格執導。
{END_SEARCH_RESULT}
好,導演是史蒂文·斯皮爾伯格。接下來,我需要找出他的國籍。
{BEGIN_SEARCH_QUERY}史蒂文·斯皮爾伯格來自哪里?{END_SEARCH_QUERY}
[系統返回搜索結果]
{BEGIN_SEARCH_RESULT}
史蒂文·斯皮爾伯格是美國的電影導演,出生于俄亥俄州辛辛那提。
{END_SEARCH_RESULT}
史蒂文·斯皮爾伯格來自美國。接下來,我需要查找《皇家賭場》的導演。
{BEGIN_SEARCH_QUERY}《皇家賭場》2006年的導演是誰?{END_SEARCH_QUERY}
[系統返回搜索結果]
{BEGIN_SEARCH_RESULT}
《皇家賭場》是2006年的一部間諜片,由馬丁·坎貝爾執導。
{END_SEARCH_RESULT}
《皇家賭場》的導演是馬丁·坎貝爾。現在我需要查找他的國籍。
{BEGIN_SEARCH_QUERY}馬丁·坎貝爾來自哪里?{END_SEARCH_QUERY}
[系統返回搜索結果]
{BEGIN_SEARCH_RESULT}
馬丁·坎貝爾(生于1943年10月24日)是新西蘭的電影和電視導演。
{END_SEARCH_RESULT}
我收集到了所有信息。史蒂文·斯皮爾伯格來自美國,馬丁·坎貝爾來自新西蘭,他們并不來自同一個國家。最終答案:不,《大白鯊》和《皇家賭場》的導演并不來自同一個國家。史蒂文·斯皮爾伯格來自美國,馬丁·坎貝爾來自新西蘭。
示例 2:簡單事實檢索
問題:“craigslist的創始人出生于何時?”
你的思考過程和行動:
首先,我需要知道誰創立了craigslist。
{BEGIN_SEARCH_QUERY}誰創立了craigslist?{END_SEARCH_QUERY}
[系統返回搜索結果]
{BEGIN_SEARCH_RESULT}
craigslist由克雷格·紐馬克于1995年創立。
{END_SEARCH_RESULT}
創始人是克雷格·紐馬克。接下來,我需要查找他的出生日期。
{BEGIN_SEARCH_QUERY}克雷格·紐馬克出生于何時?{END_SEARCH_QUERY}
[系統返回搜索結果]
{BEGIN_SEARCH_RESULT}
克雷格·紐馬克于1952年12月6日出生。
{END_SEARCH_RESULT}
我找到了答案。最終答案:craigslist的創始人克雷格·紐馬克于1952年12月6日出生。
重要規則:
- 一次只獲取一個事實:?將問題分解,每次發出一個搜索查詢來獲取一個單一、具體的信息。
- 要精確:?明確和精準地表述搜索查詢。如果搜索失敗,重新措辭。
- 最終綜合:?在完成所有必要的搜索之前,不要給出最終答案。
- 語言一致性:?搜索查詢應該與用戶問題使用相同的語言。
現在,開始你的工作。請通過一步步思考來回答以下問題。
(一)核心優勢:讓復雜問題解決有章可循 ??
- 任務拆解顆粒度精準,降低復雜問題門檻?
這個提示詞特實在,要求 “一次只獲取一個事實”。不管多繞的多維度問題,它都能拆成線性的小步驟。比如咱們想知道《大白鯊》和《皇家賭場》的導演是不是一個國家的,它能拆成 “找《大白鯊》導演→查這導演國籍→找《皇家賭場》導演→查這導演國籍”,一步一步來。這樣一來,信息不會亂成一鍋粥🥣,每步搜索都有明確目標,多跳推理的問題也不怕,還能減少漏關鍵信息的風險,復雜問題一下子就好上手了!?
? ? 2. 工具使用規范明確,減少操作模糊性?
它把規則定得明明白白:搜索查詢必須用 {BEGIN_SEARCH_QUERY} 和 {END_SEARCH_QUERY} 包起來,搜索結果也有固定格式,形成 “指令 - 執行 - 反饋” 的標準流程。這種硬約束能避免格式出錯,交互效率高,機器也好用🤖。而且還限制了 “最多 {MAX_SEARCH_LIMIT} 次搜索”,不讓咱們在沒用的地方浪費時間,既保證信息全,又不拖慢節奏??。?
? ? 3. 結果導向的流程設計,確保回答準確性?
它還有個 “死規矩”:沒收集完所有必要信息,絕不給最終答案。這就逼著咱們先把事實摸透,再下結論,避免看一半就瞎猜?。比如查 craigslist 創始人的出生時間,它會先讓咱們確認創始人是克雷格?紐馬克,再去查出生日期,保證答案不缺關鍵信息。另外,要是搜索沒結果,它還會提醒 “重新措辭”,比如把 “《皇家賭場》導演” 改成 “2006 年《皇家賭場》導演”,讓搜索更準🎯。?
(二)可優化方向:讓流程更高效、判斷更清晰 💡?
- 缺乏 “搜索優先級” 引導?
現在的流程沒說清 “該先查啥,后查啥”。比如問 “某電影的票房和導演國籍”,咱不知道該先查好獲取的 “導演國籍”,還是先啃難搞的 “票房數據”,搞不好就在難查的信息上浪費次數😮?💨。我覺得可以加個引導,比如 “優先查確定度高、簡單的事實”,這樣效率能上來。??
? ? ?2.未定義 “信息足夠” 的判斷標準?
提示詞里說 “收集到所有回答問題所需的事實”,但沒說 “到底要收集多少才算夠”。比如判斷 “兩位導演是不是同國籍”,有倆國籍信息就夠了;但判斷 “某電影賺沒賺錢”,得要票房、成本、分賬比例這些。沒說清 “哪些信息必須有”,容易漏關鍵的??。建議加個步驟,“根據問題核心,列個必需信息清單”,收集起來更有方向。?
? ? 3. 未覆蓋 “搜索結果沖突” 的處理?
有時候搜同一個事實,會出來不一樣的結果,比如 “某導演國籍”,一會兒說美國,一會兒說英國,提示詞沒說該信哪個🤔。可以加條規則,“結果沖突時,優先信權威平臺的,比如 IMDb、維基百科,或者再補搜驗證下”,這樣答案才準。?
二、信息提取模塊提示詞:聚焦目標信息,提升處理效率 📌?
再聊聊信息提取模塊提示詞,它就干一件事 —— 從 “已搜索網頁” 里扒出最相關的信息,直接回答 “當前搜索查詢”。在聚焦目標和輸出規范上,優勢很明顯🌟。?
你是一個高效的信息提取模塊。你的唯一任務是從提供的“已搜索網頁”中提取最相關的信息,直接回答“當前搜索查詢”。
你的任務:
- ?閱讀“當前搜索查詢”以了解需要哪些特定信息。
- ?瀏覽“已搜索網頁”以找到該查詢的答案。
- ?僅提取直接回答查詢的必要、事實性信息。簡明扼要。
上下文(僅供參考):
提供了“先前推理步驟”以便你了解整體目標,但你的主要焦點必須放在回答“當前搜索查詢”上。不要在輸出中使用先前步驟的信息。輸出格式:
- ?你的回答必須嚴格遵循以下兩種格式之一:如果找到了直接和相關的答案:
- ?直接以“最終信息”開始。
- ?僅提供提取的事實(不要添加額外的對話文本)。
示例:
當前搜索查詢:馬丁·坎貝爾來自哪里?
已搜索網頁:[關于馬丁·坎貝爾的長篇文章片段,其中包含“馬丁·坎貝爾(生于1943年10月24日)是新西蘭電影和電視導演...”]
你的輸出:
最終信息
- ?馬丁·坎貝爾是新西蘭的電影和電視導演。如果沒有找到直接回答查詢的相關信息:
- ?直接以“最終信息”開始。
- ?寫出準確的短語:“沒有找到有用的信息”。
(一)核心優勢:精準提取信息,降低理解成本 ??
? ? ?1. 嚴格限定提取范圍,避免信息冗余?
這個提示詞特 “專一”💘,要求 “只提直接回答問題的必要事實,還不能用之前步驟的信息”,逼著模塊只盯著當前查詢,不被無關內容帶偏。比如查 “馬丁?坎貝爾來自哪里”,它就只提 “馬丁?坎貝爾是新西蘭的電影和電視導演”,出生日期、作品這些多余的一概不沾,輸出又簡潔又準。?
? ? 2. 輸出格式二元化,降低理解成本?
它把輸出分成兩種:找到答案就以 “最終信息” 開頭,沒找到就說 “沒有找到有用的信息”,格式固定得很。這樣后續模塊(比如高級推理代理)一眼就能看明白結果,不用費勁解析,自動化處理起來特方便,多模塊協作也順暢🤝。?
? ?3.目標導向的流程設計,提升提取準確率?
提取步驟就三步:“讀查詢→找答案→提信息”,邏輯直來直去,不跑偏。比如面對長篇網頁,模塊先明確 “要提啥”,再針對性找,不會犯 “把‘導演在新西蘭工作’當成‘國籍新西蘭’” 這種錯?,提取準確率能上去。?
(二)可優化方向:讓信息提取更權威、更全面 🤔?
- 未明確 “權威來源優先” 的提取規則?
網頁里同一事實可能有多個來源,比如 “某人生日”,粉絲網站說 1952 年,維基百科說 1953 年,提示詞沒說該優先選哪個,搞不好就選了不權威的🚫。建議加條規則,“優先提權威來源的信息,比如官方資料、知名數據庫,有多個來源就標出來,方便驗證”。?
? ? ? 2. 未覆蓋 “信息部分相關” 的處理?
有時候網頁沒直接回答問題,但有間接信息,比如查 “某導演國籍”,網頁只說 “導演長期在法國工作,拍的多是法語電影”,沒明說國籍,現在的提示詞只會說 “沒找到有用信息”,白白浪費了線索💔。可以補充下,“有間接信息就提出來,標上‘這是間接推斷的,不是直接答案’”,給后續搜索指個方向。?
? ? ?3. 缺乏 “信息完整性” 的判斷標準?
比如查 “某公司成立時間”,網頁只說 “20 世紀 90 年代成立”,沒說具體年份,現在的提示詞可能就直接提這個信息了,但其實這回答不了問題🙅。建議加條規則,“提的信息得能完整回答問題,比如時間要到年 / 月,地點要到國家 / 城市,信息不全就標‘信息不夠,得再搜’”,別輸出沒用的內容。?
三、總結?
總的來說,ragflow MCP 調用里的這兩個提示詞,在信息處理和問題解決中都挺能打的💪—— 高級推理代理提示詞擅長拆復雜問題,保證執行準;信息提取模塊提示詞專注抓目標信息,提高處理效率。當然,它們也有能優化的地方,咱們針對性改改,相信能讓它們在 MCP 調用里更給力,給 ragflow 的信息處理能力再加點 buff~🎉