【免费下载链接】MemoryBearMemoryBear Equip AI with human-like memory capability项目地址https://gitcode.com/gh_mirrors/me/MemoryBear点击查看免费下载导读本文以 MemoryBear 开源仓库中的检索提示词模板 related_question.md 为蓝本系统拆解基于用户原始问题生成 5-10 个相关问题以扩展检索范围这一查询扩展Query Expansion技术的提示词设计思路。通过结合仓库内提示词加载机制与同类检索增强提示词的源码实现帮助读者理解如何在向量检索场景中通过问题改写提升召回率与检索相关性并可直接复用其模板范式落地到自己的 RAG 系统中。一、背景向量检索为什么需要相关问题生成在 RAG检索增强生成系统中用户的一句话往往只覆盖其真实意图的一个侧面。向量数据库基于语义相似度召回文档时单一查询只能在一个语义方向上做最近邻搜索容易遗漏那些相关但表述不同的文档——例如用户问电动车的优势而知识库中大量文档讨论的是电动汽车对环境的影响长期使用成本等具体子话题。related_question.md的定位正是解决这个召回瓶颈把原始查询改写为多个角度各异但主题相连的问题再分别执行检索合并结果后获得更全面的候选文档集。这与 MemoryBear 仓库中其他检索增强提示词关键词抽取、多语言改写、完整问题重构共同构成一套检索前查询增强的提示词资产全部存放在 api/app/core/rag/prompts/ 目录下。二、提示词文档逐节解析从 Role 到 Reasonrelated_question.md是一份结构完整的系统提示词System Prompt共七个部分。下面逐节还原原文并给出设计与使用要点。1. Role锚定模型的职责边界You are an AI language model assistant tasked with generating5-10 related questionsbased on a users original query. These questions should helpexpand the search query scopeandimprove search relevance.Role 段同时定义了三个关键信息输出物形态生成 5-10 个相关问题这是一个明确的输出数量约束生成依据以用户的原始查询为唯一输入功能目标扩展检索范围expand the search query scope、提升检索相关性improve search relevance。实践中这段 Role 会作为system角色的消息内容注入 LLM与后续的 Instructions、Guidance 一起约束模型行为。从 MemoryBear 的提示词加载机制看见第三节这类 markdown 文件通过load_prompt按文件名读取因此一份提示词文件天然就是一个完整的 system prompt。2. Instructions输入、输出与上下文约束Instructions 部分由三个小节构成定义了任务的完整协议Input输入是一个用户问题Output输出是 5-10 个与原始问题相关的备选问题目的是从向量数据库中检索到更广范围的相关文档retrieve a broader range of relevant documents from a vector databaseContext重点是换一种方式复述rephrasing原始问题保证备选问题多样化但主题相连禁止生成晦涩、无关、不相关的问题。其中 Context 段的rephrasing一词点明了该提示词的核心策略不是发散式联想而是围绕同一主题的多角度转述。这种策略能有效避免模型生成与原始意图偏离的伪相关问题。3. Fallback无解时的安全出口If you cannot generate any relevant alternatives, donotreturn any questions.Fallback 规则非常关键当模型判断原始问题过于特殊或无法产生有效改写时返回空而不是强行编造。这保证了下游检索流程的鲁棒性——空结果可以走仅使用原始查询检索的回退路径而不会把噪声问题混入检索。4. Guidance四条可执行的行为准则每个备选问题都应独特但相关unique but relevant表述清晰、简洁、易于理解除非直接相关否则避免过于专业的术语每个问题应拓宽检索视角而不是收窄broadens the search angle, not narrows it。第 4 条尤其值得注意它约束了改写方向是由窄到宽的扩展例如电动车的优势可扩展到电动车如何减少碳排放而不会收窄为某品牌某型号的补贴金额。这与向量检索宽召回、精重排的经典范式一致。5. Example完整的 Few-shot 示例原文档给出了一个完整的示例以电动汽车话题为例原始问题What are the benefits of electric vehicles?生成的相关问题10 个How do electric vehicles impact the environment?What are the advantages of owning an electric car?What is the cost-effectiveness of electric vehicles?How do electric vehicles compare to traditional cars in terms of fuel efficiency?What are the environmental benefits of switching to electric cars?How do electric vehicles help reduce carbon emissions?Why are electric vehicles becoming more popular?What are the long-term savings of using electric vehicles?How do electric vehicles contribute to sustainability?What are the key benefits of electric vehicles for consumers?分析该示例可提炼出可复用的改写模板环境影响视角#1、#5、#6、#9将优势转译为环境维度的问题对比视角#4引入对照对象传统燃油车成本/经济视角#3、#8短期与长期经济性市场/趋势视角#7流行度与接受度用户视角#10面向消费者的直接利益。五个视角恰好对应不同文档可能覆盖的内容维度这正是拓宽检索角度的具体体现。6. Reason设计动机的自解释Rephrasing the original query into multiple alternative questions helps the user exploredifferent aspectsof their search topic, improving thequality of search results. These questions guide the search engine to provide amore comprehensive setof relevant documents.Reason 段相当于该提示词的文档注释说明了多问题改写如何帮助用户探索主题的不同侧面从而引导检索系统返回更全面的文档集合。在团队协作场景中这种自解释设计降低了提示词的维护成本。三、在 MemoryBear 中的加载机制与调用范式related_question.md位于 api/app/core/rag/prompts/ 目录与该目录下 keyword_prompt.md、full_question_prompt.md、cross_languages_sys_prompt.md、question_prompt.md 等提示词并列。所有该目录下的提示词都通过 template.py 中的load_prompt(name)加载PROMPT_DIR os.path.dirname(__file__) _loaded_prompts {} def load_prompt(name: str) - str: if name in _loaded_prompts: return _loaded_prompts[name] path os.path.join(PROMPT_DIR, f{name}.md) if not os.path.isfile(path): raise FileNotFoundError(fPrompt file {name}.md not found in prompts/ directory.) with open(path, r, encodingutf-8) as f: content f.read().strip() _loaded_prompts[name] content return content从源码可以看到该机制的三个特点按文件名定位related_question这类模板变量即对应related_question.md文件提示词与代码解耦便于非开发人员直接编辑进程内缓存_loaded_prompts字典保证同一模板只读盘一次适合高频检索调用场景缺失即报错文件不存在时抛出FileNotFoundError避免静默失败。而 generator.py 则展示了这些提示词如何被组装进实际调用链。虽然该文件中目前直接引用的模板变量包括KEYWORD_PROMPT_TEMPLATE、FULL_QUESTION_PROMPT_TEMPLATE、CROSS_LANGUAGES_SYS_PROMPT_TEMPLATE等但可以推断当需要在检索前调用相关问题生成时只需在 generator.py 顶部仿照这些模板变量以load_prompt(related_question)方式加载后封装一个同名函数即可与既有函数风格保持一致。四、同一检索增强体系下的姊妹提示词对比与协同related_question.md并非孤立存在它与 generator.py 中的三个查询增强函数形成互补关系。理解它们的差异有助于确定各自的最佳使用时机。1. keyword_extraction关键词维度generator.py 中的keyword_extraction(chat_mdl, content, topn3)基于keyword_prompt.md生成 topn 个关键词用于补充向量查询之外的词汇/术语维度检索。与相关问题生成相比它输出的是离散词项而非完整问句更适合命中文档中的专有名词与概念。2. full_question对话补全维度full_question(messages, language, chat_mdl)基于full_question_prompt.md把多轮对话历史整理为USER: ... / ASSISTANT: ...格式并结合今天/昨天/明天日期上下文补全出完整问题。它解决的是多轮对话中指代消解问题如用户接着说那它的成本呢与相关问题生成的单轮扩展是不同环节的增强。3. cross_languages跨语言维度cross_languages(query, languages, chat_mdl)基于cross_languages_sys_prompt.md与cross_languages_user_prompt.md将查询翻译为多种语言后以分隔返回用于多语言语料库的召回扩展。它的思路与相关问题生成完全一致——用多个查询覆盖不同表述空间——只是扩展维度从角度变成了语言。4. question_proposal / qa_proposal生成侧问题qa_proposal(chat_mdl, content, topn, custom_prompt)基于question_prompt.md从文档内容生成 Q/A 对属于文档侧问题化为检索命中后的问答环节服务与 related_question 的查询侧问题化方向恰好相反。将上述对照整理如下提示词输入输出扩展维度related_question用户原始问题5-10 个相关问题语义角度keyword_prompt文本内容topn 关键词词汇术语full_question_prompt多轮对话历史补全后的完整问题对话上下文cross_languages查询、语言列表多语言查询语言question_prompt文档内容Q/A 对文档侧问题化五、落地实践如何把该提示词接入检索流程参考 generator.py 中同类函数的调用范式如 keyword_extraction 与 cross_languages可归纳出接入相关问题生成时的五个工程要点1. 系统消息与用户消息分离生成时遵循[{role: system, content: 提示词}, {role: user, content: 原始问题}]的消息结构与 generator.py 中keyword_extraction、qa_proposal的构造方式一致。系统消息承载行为约束用户消息只携带原始查询。2. 低温度采样generator.py 中所有检索增强类函数keyword_extraction、cross_languages、qa_proposal均使用temperature: 0.2。相关问题生成同样应使用低温度在多样化改写与主题一致性之间取得平衡——温度过低会退化成原文复述过高则会发散出无关问题。3. 输入长度控制调用前可复用 generator.py 中的message_fit_in(msg, max_length)工具generator.py它会按chat_mdl.max_length默认 8096对消息做裁剪防止超长输入破坏提示词结构。相关问题生成属于短输入任务一般无需裁剪但作为通用防御仍建议接入。4. 输出清洗与容错generator.py 中的既有函数普遍采用两条容错惯例相关问题生成同样适用用re.sub(r^.*/think, , ans, flagsre.DOTALL)剥离思维链前缀检查输出中是否包含**ERROR**标记命中则回退为空对应文档中 Fallback 规则的工程化实现。5. 多查询合并检索生成 5-10 个相关问题后对每个问题分别执行向量检索合并候选 chunk 集合再做去重与相关性重排。这正是该提示词improve search relevance目标的落地点候选集变宽重排器才有机会选出真正高相关的文档。若相关问题生成结果为空则回退为仅用原始查询检索与文档 Fallback 规则保持一致。六、自定义提示词的参考建议related_question.md作为一份可直接复用的模板其在生产环境中的定制方向包括数量与格式调整把 5-10 调整为 3-5或将纯文本列表改为 JSON 数组便于程序化解析领域约束注入在 Guidance 中追加领域限定如仅生成与金融合规相关的问题避免跨域发散示例替换将电动车示例替换为业务域的真实查询-改写对Few-shot 示例与业务越贴近改写质量越高与 Rerank 联动多查询召回后必须配合精排Rerank环节否则宽召回会引入噪声——相关性问题扩展的价值要在召回宽、重排精的完整链路中才能充分体现。结语related_question.md用不到 60 行文字完整定义了一个多角度查询改写任务的输入协议、输出约束、质量准则与失败回退策略是 RAG 检索增强提示词设计的高质量范本。在 MemoryBear 仓库中它与关键词抽取、对话补全、跨语言改写等提示词共同组成 api/app/core/rag/prompts/ 查询增强资产并通过 template.py 的load_prompt机制被统一加载。读者可直接复制该模板到自己的 RAG 管线中配合低温度采样、多查询合并召回与精排重排即可显著提升复杂检索场景下的召回覆盖率与相关性表现。赞分享【免费下载链接】MemoryBearMemoryBear Equip AI with human-like memory capability项目地址https://gitcode.com/gh_mirrors/me/MemoryBear点击查看免费下载相关推荐Scira相关搜索基于当前查询的扩展搜索建议Scira相关搜索基于当前查询的扩展搜索建议 痛点搜索结果的深度与广度难以兼得 你是否经常遇到这样的困境输入一个搜索查询后虽然得到了相关结果但却发现信人工智能大模型AI Agent深度研究RAGAI 应用Deep-Research提示工程系统提示词设计与查询生成算法解析Deep Research提示工程系统提示词设计与查询生成算法解析 Deep Research是一款AI驱动的深度研究助手通过结合搜索引擎、网络抓取和大语言AI 应用深度研究AI Agent大模型MemoryBear 中的 QA 对自动生成question_prompt 提示词模板深度解析与 RAG 文档解析实践MemoryBear 中的 QA 对自动生成question_prompt 提示词模板深度解析与 RAG 文档解析实践 导读 本文围绕 question_pr上一篇OpenCore Legacy Patcher 教程3 步给老 Mac 装上新版 macOS下一篇Flink CDC 与 SAP HANA 实战指南从零构建实时数据同步链路创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考