为 Grok 模型定制 SurfSense 主 Agent 系统提示词:provider_hints 的设计逻辑与多模型适配实践 为 Grok 模型定制 SurfSense 主 Agent 系统提示词provider_hints 的设计逻辑与多模型适配实践【免费下载链接】SurfSenseOpen-source NotebookLM alternative. Research the open web with live data(Reddit, YT, IG, TikTok, Indeed, Google Search, Maps etc) through one platform, API or MCP server. Join our Discord: https://discord.gg/ejRNvftDp9项目地址: https://gitcode.com/GitHub_Trending/su/SurfSense导读Grok 是 xAI 发布的对话式大模型在工具调用与推理场景中有着与 Anthropic、OpenAI 不同的输出习惯。SurfSense开源 NotebookLM 替代方案通过一个平台、API 与 MCP Server 研究 Reddit、YouTube、Instagram、TikTok、Indeed、Google Search、Maps 等实时网络数据在为其主 Agent 构建系统提示词时采用了通用骨架 按模型定制的分层架构通用行为约束由core_behavior.md、routing.md等公共片段保证而每个具体模型则通过一份provider_hints提示片段注入专属风格与纪律。本文以grok.md为主线讲解该机制的设计原理、Grok 提示词片段的逐条语义以及 SurfSense 如何让同一套多 Agent 编排在不同模型上保持一致的输出质量。一、背景为什么主 Agent 的系统提示词需要按模型拆分1.1 多模型接入带来的一致性问题SurfSense 的主 Agent 是一个多 Agent 编排体系用户提问后主 Agent 需要决定调用哪个研究子 Agentspecialist、使用哪些工具、如何引用来源最终生成回答。这个决策大脑可以运行在多种模型上。仓库中surfsense_backend/app/agents/chat/multi_agent_chat/main_agent/system_prompt/prompts/providers/目录下并列存放了 9 份提示词片段anthropic.md、google.md、grok.md、kimi.md、deepseek.md各家专有模型openai_classic.md、openai_codex.md、openai_reasoning.mdOpenAI 三种形态default.md空文件作为无特定适配时的回退不同模型的性格差异是客观存在的有的模型偏向一次性并行发起多个工具调用有的模型擅长先规划再行动有的模型对引用格式的敏感度不同。如果对所有模型下发同一套提示词输出质量与工具调用效率都会参差不齐。因此 SurfSense 将提示词分成两层公共层core_behavior.md、kb_first.md、routing.md、output_format.md、refusal_and_limits.md、reminder.md等对所有模型一致模型专属层providers/*.md中的provider_hints片段针对具体模型的特性给出补充纪律。1.2 组装流程compose.py 中的固定顺序主 Agent 系统提示词由 builder/compose.py 中的build_main_agent_system_prompt()函数按固定顺序拼装。其文档注释明确给出了默认顺序agent_identity [users custom_system_instructions, if any] core_behavior # default body knowledge_base_first # default body dynamic_context # always routing # default body specialists # always (dynamic roster) tools # always (vertical-slice) memory_protocol # default body citations # always output_format # always refusal_and_limits # always reminder # always函数签名build_main_agent_system_prompt(..., model_name: str | None None)预留了model_name参数——从源码结构可以推断这正是系统提示词按运行模型动态选择 provider 片段的接入点。所有提示片段通过 builder/load_md.py 的read_prompt_md(filename)从app.agents.chat.multi_agent_chat.main_agent.system_prompt.prompts包内读取使用importlib.resources定位资源文件文件不存在时返回空字符串保证片段缺失不会导致组装失败。需要强调两点设计细节custom_system_instructions是加法而非替换用户自定义指令被插入 identity 与默认正文之间平台级的安全网KB-first、routing、citations、输出格式、拒绝规则永远生效use_default_system_instructionsFalse会跳过 4 个default body片段但 always-on 的平台片段dynamic_context、specialists、tools、citations、output_format、refusal_and_limits、reminder依然保留。二、Grok 提示词片段逐条解析grok.md全文如下位于 prompts/providers/grok.mdprovider_hints You are running on an xAI Grok model (SurfSense **main agent**). Maximum terseness: - Fewer than 4 lines unless detail is requested; skip preamble/postamble. Tool discipline: - Typically one investigative tool per turn unless several independent read-only queries are clearly needed; dont repeat identical calls. Attribution: - When citations are **enabled** (see citation block above) and you answer from labelled passages, cite with the bare [n] label exactly as specified there. - When citations are **disabled**, never emit [n] or [citation:…] — plain prose and links per tool guidance. Style: - No emojis unless asked; flat lists for short answers.整份片段由 4 个部分组成每个部分对应一个维度的纪律约束。2.1 身份声明让模型知道自己是谁首行You are running on an xAI Grok model (SurfSense **main agent**).是一个身份锚定。它同时完成两件事告诉模型它的底层实现是 xAI Grok暗示其已知的工具调用与输出习惯强调它是 SurfSense 的main agent即整个多 Agent 体系中的决策中枢而非某个专项子 Agent——这与routing.md路由规则和specialists动态名册的职责划分相呼应。类似的模式可见于kimi.mdYou are running on a Moonshot Kimi model (Kimi-K1.5 / Kimi-K2 / Kimi-K2.5)、google.mdYou are running on a Google Gemini model说明身份声明是 provider 片段的通用约定。2.2 Maximum terseness极限简洁策略Grok 的提示词将简洁推到极致少于 4 行除非用户明确要求详细回答否则默认输出不超过 4 行文本跳过开场白与收尾语不要 Sure!、Heres the answer! 这类客套话。这与公共层core_behavior.md中的要求Be concise and direct. No preamble、Dont narrate intent — just act方向一致但把量化阈值4 行写死属于对 Grok 模型的强约束。对比之下google.md要求少于约 3 行散文、使用 GitHub 风格 Markdownkimi.md强调行为偏向——默认用工具行动而非用文字描述方案Grok 的定位则是最少字数 最少铺垫把篇幅让给工具调用与结果本身。2.3 Tool discipline单轮单工具为主Grok 的工具纪律是每轮通常只调用一个调查类工具除非确实需要多个相互独立的只读查询不重复发起相同调用避免浪费上下文窗口。这是一个与 Kimi 形成鲜明对比的设计决策kimi.md明确鼓励在单次响应中输出多个互不干扰的工具调用——并行是这个模型最大的效率优势而 Grok 走的是稳扎稳打、逐轮推进路线。两种策略没有对错之分本质是模型能力画像不同维度Grokgrok.mdKimikimi.md工具调用节奏每轮通常 1 个调查工具单响应并行发起多个不冲突的调用重复调用明确禁止重复相同调用未显式禁止但要求不啰嗦叙事风格跳过前言后记直入主题不预演、不道歉用状态行合并进度行动偏好简洁优先默认行动优先action bias从源码结构看这种按模型差异化的纪律来自同一套build_tools_section()工具清单由enabled_tool_names/disabled_tool_names控制可见工具但怎么用工具的软约束则由 provider 片段差异化注入。2.4 Attribution引用开关下的双态行为引用纪律是 provider 片段中最精细的部分它要求模型感知当前会话的引用开关状态并做出不同反应引用开启时citations enabled如果回答基于带标签的段落必须使用[n]裸标签原样引用即exactly as specified there引用关闭时citations disabled绝不输出[n]或[citation:…]改用纯散文 工具指引中的链接。这一双态设计正好对应 prompts/citations/on.md 中定义的引用协议。该协议要求[n]标签紧跟其所支撑的论断之后多个来源叠加为[1][2]标签必须原样复制、不得重编号只写裸[n]不写[citation:...]、不加 Markdown 链接、不建 References 章节没有标签支撑的论断一律不引用、绝不虚构。值得注意的是引用是否开启由组装期的build_citations_section(citations_enabled...)决定见 builder/sections/citations.py而 Grok 提示词主动将两种状态各自该怎么写写入模型约束防止模型在引用关闭时仍然习惯性输出 citation 标记——这在实际部署中是一个高频踩坑点因为许多模型一旦在系统提示词中见过[n]格式就会在关闭状态下惯性输出。2.5 Style无 emoji 扁平列表最后一条风格约束不用 emoji除非用户明确要求简短回答用扁平列表flat lists。emoji 禁令与 SurfSense 面向专业研究场景的定位一致研究型 Agent 的输出应当被直接复制进文档、报告或引用系统表情符号会污染纯文本管线。扁平列表则降低了短回答的解析成本方便后续被引用解析器或 UI 渲染。三、横向对比Grok 与其他 provider 片段的差异将grok.md与同目录其他片段对比可以清晰地看出 SurfSense 的一模型一纪律思路片段核心主题代表约束grok.md极限简洁 单工具纪律少于 4 行每轮 1 个调查工具引用双态google.md工作流四步法Understand → Plan → Act → Verify不越权声明工具kimi.md行动偏向 强并行默认行动而非描述单响应并行多调用事实核查anthropic.mdClaude 行为适配仓库中存在具体条款以 文件 为准deepseek.md深度求索模型适配同上见 文件openai_classic.md/openai_codex.md/openai_reasoning.mdOpenAI 三种形态经典 / Codex / 推理模型各自的行为画像default.md空回退无额外约束此外从 model_list_fallback.json 与tests/unit/services/test_auto_model_pin_service.py中都能看到 grok 相关模型名的存在说明 Grok 系列是 SurfSense 模型清单中的正式成员该片段服务于真实的模型接入链路可结合 auto model pinning 等模型选择机制使用。四、实战启示如何为自家 Agent 编写 provider_hints读完grok.md可以提炼出一套可复用的 provider 提示词编写方法论4.1 识别模型的能力画像写 provider 片段前先回答三个问题该模型擅长并行工具调用还是串行深挖Grok 取串行、Kimi 取并行该模型的输出默认冗长还是简洁Grok 需要硬性行数上限该模型对引用格式的惯性有多强引用关闭时是否容易误输出 citation 标记4.2 用量化约束代替形容词要简洁是无效约束少于 4 行才是可执行约束。grok.md的 4 行、google.md的 3 行散文上限、kimi.md的单响应并行都是可被模型直接遵循的量化指令。4.3 覆盖开/关双态行为任何与平台开关引用、工具启用、自定义指令联动的纪律都要显式写出两种状态各自的行为避免模型在状态切换时沿用默认习惯。4.4 与公共层正交provider 片段只补充模型特性相关的差异公共行为知识库优先、路由、拒绝规则、输出格式交给core_behavior.md等公共片段保证切换模型不会破坏平台安全网。五、总结grok.md是 SurfSense 多模型适配体系中的一个小而关键的模块它以provider_hints片段的形式为 xAI Grok 模型注入极限简洁、单工具纪律、引用双态、无 emoji四项专属约束与公共提示词层、组装器compose.py、引用协议citations/on.md协同工作。从源码结构可以推断build_main_agent_system_prompt()的model_name参数即为 provider 片段的选择入口实际部署时只需在系统提示词组装阶段传入当前运行模型的名称即可让同一套多 Agent 编排在不同模型上输出风格一致、纪律统一的结果。对于任何希望将多 Agent 产品接入多模型服务商的研究型应用这套通用骨架 模型专属 hints的模式都值得直接借鉴。【免费下载链接】SurfSenseOpen-source NotebookLM alternative. Research the open web with live data(Reddit, YT, IG, TikTok, Indeed, Google Search, Maps etc) through one platform, API or MCP server. Join our Discord: https://discord.gg/ejRNvftDp9项目地址: https://gitcode.com/GitHub_Trending/su/SurfSense创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考