大家好~我是你们的提示词工程师朋友,今天想跟大家聊聊开源项目 ragflow 里,MCP调用体系中的两个关键提示词。最近在研究调用工具和提示词撰写之间的平衡态。

这俩家伙在信息处理和问题解决里作用不小,既有让人眼前一亮的优势✨,也有值得咱们琢磨优化的地方,咱们一起掰开揉碎了看看~​

一、高级推理代理提示词:拆解复杂问题,保障执行精准 🔍​

先说说高级推理代理提示词,它的核心目标特明确 —— 把用户的问题拆成一步步能验证的步骤,再去回答。在逻辑闭环和执行保障这块,做得还真挺到位👍。​

你是一个高级推理代理。你的目标是通过分解用户的问题为一系列可验证的步骤来回答问题。

你可以使用一个强大的搜索工具来查找信息。

你的任务:

  1.  分析用户的问题。
  2.  如果你需要信息,发出搜索查询以查找特定事实。
  3.  审查搜索结果。
  4.  在你收集到所有回答问题所需的事实之前,重复搜索过程。
  5.  一旦你收集到足够的信息,综合这些事实并直接给出最终答案。

工具使用:

  1. 搜索时,你必须将查询写在特殊的标记之间:{BEGIN_SEARCH_QUERY}你的查询{END_SEARCH_QUERY}。
  2. 系统将提供在{BEGIN_SEARCH_RESULT}搜索结果{END_SEARCH_RESULT}之间的内容。
  3. 你最多可以进行{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日出生。

重要规则:

  1. 一次只获取一个事实: 将问题分解,每次发出一个搜索查询来获取一个单一、具体的信息。
  2. 要精确: 明确和精准地表述搜索查询。如果搜索失败,重新措辞。
  3. 最终综合: 在完成所有必要的搜索之前,不要给出最终答案。
  4. 语言一致性: 搜索查询应该与用户问题使用相同的语言。

现在,开始你的工作。请通过一步步思考来回答以下问题。

(一)核心优势:让复杂问题解决有章可循 ✅​

  1. 任务拆解颗粒度精准,降低复杂问题门槛​

这个提示词特实在,要求 “一次只获取一个事实”。不管多绕的多维度问题,它都能拆成线性的小步骤。比如咱们想知道《大白鲨》和《皇家赌场》的导演是不是一个国家的,它能拆成 “找《大白鲨》导演→查这导演国籍→找《皇家赌场》导演→查这导演国籍”,一步一步来。这样一来,信息不会乱成一锅粥🥣,每步搜索都有明确目标,多跳推理的问题也不怕,还能减少漏关键信息的风险,复杂问题一下子就好上手了!​

    2. 工具使用规范明确,减少操作模糊性​

它把规则定得明明白白:搜索查询必须用 {BEGIN_SEARCH_QUERY} 和 {END_SEARCH_QUERY} 包起来,搜索结果也有固定格式,形成 “指令 - 执行 - 反馈” 的标准流程。这种硬约束能避免格式出错,交互效率高,机器也好用🤖。而且还限制了 “最多 {MAX_SEARCH_LIMIT} 次搜索”,不让咱们在没用的地方浪费时间,既保证信息全,又不拖慢节奏⏱️。​

    3. 结果导向的流程设计,确保回答准确性​

它还有个 “死规矩”:没收集完所有必要信息,绝不给最终答案。这就逼着咱们先把事实摸透,再下结论,避免看一半就瞎猜❌。比如查 craigslist 创始人的出生时间,它会先让咱们确认创始人是克雷格・纽马克,再去查出生日期,保证答案不缺关键信息。另外,要是搜索没结果,它还会提醒 “重新措辞”,比如把 “《皇家赌场》导演” 改成 “2006 年《皇家赌场》导演”,让搜索更准🎯。​

(二)可优化方向:让流程更高效、判断更清晰 💡​

  1. 缺乏 “搜索优先级” 引导​

现在的流程没说清 “该先查啥,后查啥”。比如问 “某电影的票房和导演国籍”,咱不知道该先查好获取的 “导演国籍”,还是先啃难搞的 “票房数据”,搞不好就在难查的信息上浪费次数😮‍💨。我觉得可以加个引导,比如 “优先查确定度高、简单的事实”,这样效率能上来。​ 

     2.未定义 “信息足够” 的判断标准​

提示词里说 “收集到所有回答问题所需的事实”,但没说 “到底要收集多少才算够”。比如判断 “两位导演是不是同国籍”,有俩国籍信息就够了;但判断 “某电影赚没赚钱”,得要票房、成本、分账比例这些。没说清 “哪些信息必须有”,容易漏关键的⚠️。建议加个步骤,“根据问题核心,列个必需信息清单”,收集起来更有方向。​

    3. 未覆盖 “搜索结果冲突” 的处理​

有时候搜同一个事实,会出来不一样的结果,比如 “某导演国籍”,一会儿说美国,一会儿说英国,提示词没说该信哪个🤔。可以加条规则,“结果冲突时,优先信权威平台的,比如 IMDb、维基百科,或者再补搜验证下”,这样答案才准。​

二、信息提取模块提示词:聚焦目标信息,提升处理效率 📌​

再聊聊信息提取模块提示词,它就干一件事 —— 从 “已搜索网页” 里扒出最相关的信息,直接回答 “当前搜索查询”。在聚焦目标和输出规范上,优势很明显🌟。​

你是一个高效的信息提取模块。你的唯一任务是从提供的“已搜索网页”中提取最相关的信息,直接回答“当前搜索查询”。

你的任务:

  1.  阅读“当前搜索查询”以了解需要哪些特定信息。
  2.  浏览“已搜索网页”以找到该查询的答案。
  3.  仅提取直接回答查询的必要、事实性信息。简明扼要。

上下文(仅供参考):

提供了“先前推理步骤”以便你了解整体目标,但你的主要焦点必须放在回答“当前搜索查询”上。不要在输出中使用先前步骤的信息。输出格式:

  1.  你的回答必须严格遵循以下两种格式之一:如果找到了直接和相关的答案:
    1.  直接以“最终信息”开始。
    2.  仅提供提取的事实(不要添加额外的对话文本)。

示例:

当前搜索查询:马丁·坎贝尔来自哪里?

已搜索网页:[关于马丁·坎贝尔的长篇文章片段,其中包含“马丁·坎贝尔(生于1943年10月24日)是新西兰电影和电视导演...”]

你的输出:

最终信息

  1.  马丁·坎贝尔是新西兰的电影和电视导演。如果没有找到直接回答查询的相关信息:
    1.  直接以“最终信息”开始。
    2.  写出准确的短语:“没有找到有用的信息”。

(一)核心优势:精准提取信息,降低理解成本 ✨​

     1. 严格限定提取范围,避免信息冗余​

这个提示词特 “专一”💘,要求 “只提直接回答问题的必要事实,还不能用之前步骤的信息”,逼着模块只盯着当前查询,不被无关内容带偏。比如查 “马丁・坎贝尔来自哪里”,它就只提 “马丁・坎贝尔是新西兰的电影和电视导演”,出生日期、作品这些多余的一概不沾,输出又简洁又准。​

    2. 输出格式二元化,降低理解成本​

它把输出分成两种:找到答案就以 “最终信息” 开头,没找到就说 “没有找到有用的信息”,格式固定得很。这样后续模块(比如高级推理代理)一眼就能看明白结果,不用费劲解析,自动化处理起来特方便,多模块协作也顺畅🤝。​

   3.目标导向的流程设计,提升提取准确率​

提取步骤就三步:“读查询→找答案→提信息”,逻辑直来直去,不跑偏。比如面对长篇网页,模块先明确 “要提啥”,再针对性找,不会犯 “把‘导演在新西兰工作’当成‘国籍新西兰’” 这种错❌,提取准确率能上去。​

(二)可优化方向:让信息提取更权威、更全面 🤔​

  1. 未明确 “权威来源优先” 的提取规则​

网页里同一事实可能有多个来源,比如 “某人生日”,粉丝网站说 1952 年,维基百科说 1953 年,提示词没说该优先选哪个,搞不好就选了不权威的🚫。建议加条规则,“优先提权威来源的信息,比如官方资料、知名数据库,有多个来源就标出来,方便验证”。​

      2. 未覆盖 “信息部分相关” 的处理​

有时候网页没直接回答问题,但有间接信息,比如查 “某导演国籍”,网页只说 “导演长期在法国工作,拍的多是法语电影”,没明说国籍,现在的提示词只会说 “没找到有用信息”,白白浪费了线索💔。可以补充下,“有间接信息就提出来,标上‘这是间接推断的,不是直接答案’”,给后续搜索指个方向。​

     3. 缺乏 “信息完整性” 的判断标准​

比如查 “某公司成立时间”,网页只说 “20 世纪 90 年代成立”,没说具体年份,现在的提示词可能就直接提这个信息了,但其实这回答不了问题🙅。建议加条规则,“提的信息得能完整回答问题,比如时间要到年 / 月,地点要到国家 / 城市,信息不全就标‘信息不够,得再搜’”,别输出没用的内容。​

三、总结​

总的来说,ragflow MCP 调用里的这两个提示词,在信息处理和问题解决中都挺能打的💪—— 高级推理代理提示词擅长拆复杂问题,保证执行准;信息提取模块提示词专注抓目标信息,提高处理效率。当然,它们也有能优化的地方,咱们针对性改改,相信能让它们在 MCP 调用里更给力,给 ragflow 的信息处理能力再加点 buff~🎉

Logo

更多推荐