oh-my-pi Web 搜索研究系统提示词全解析:准确性优先的联网研究助手设计

oh-my-pi Web 搜索研究系统提示词全解析:准确性优先的联网研究助手设计 oh-my-pi Web 搜索研究系统提示词全解析准确性优先的联网研究助手设计【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi在 IDE 深度集成的 coding agent 中联网搜索不只是把问题抛给搜索引擎它决定了模型能否提供准确、有据可查、可引用的答案。本文基于 oh-my-pi 仓库中的 web-search.md 系统提示词完整讲解这条提示词如何约束模型的研究行为优先级、综合策略、输出格式并结合 index.ts、query.ts、types.ts 等源码剖析提示词背后的真实调用链路、查询指令解析与多 Provider 自动回退机制。读完你将理解研究助手型搜索提示词的设计骨架并能复用到自己的 Agent 提示词工程中。一、提示词在仓库中的角色Web 搜索工具的执行契约这条系统提示词不是一份孤立的文本而是 oh-my-pi 统一 Web 搜索工具web_search的执行契约它被注入到每个搜索 Provider 的请求中作为模型端行为约束与工具描述提示词、查询解析器、Provider 注册表共同构成完整的搜索链路。1.1 注入链路从 import 到 provider.search在 index.ts 中提示词以文本模块方式被导入import webSearchSystemPrompt from ../../prompts/system/web-search.md with { type: text };随后在executeSearch中作为systemPrompt传给当前 Providerindex.tsconst response await provider.search({ query: params.query, parsedQuery, limit: params.limit, recency: params.recency, systemPrompt: webSearchSystemPrompt, maxOutputTokens: params.max_tokens, numSearchResults: params.num_search_results, temperature: params.temperature, signal, timeoutMs, authStorage, modelRegistry, sessionId, antigravityEndpointMode, geminiModel, });可以看到系统提示词与limit、recency、temperature等工具参数并列传入共同决定模型如何思考并回答。与之配套的还有一份工具描述提示词 tools/web-search.md它约束的是何时使用搜索例如程序可访问的内容或已知 URL 应直接用read而非搜索必须内联引用来源必须优先一手来源。1.2 搜索工具的基本形态该提示词服务于名为web_search的 Agent 工具index.ts其参数 Schema 为export const webSearchSchema type({ query: string, recency: day | week | month | year?, limit: number?, max_tokens: number?, temperature: number?, num_search_results: number?, });即查询词必填时效窗口天/周/月/年、结果数量、输出 token 上限、采样温度、底层检索条数均可选。工具被标记为approval read只读、低风险并通过WebSearchToolAgentTool 形态与webSearchCustomToolCustomTool 形态两种接口暴露便于不同宿主嵌入。二、提示词全文解读三大指令块的设计逻辑原提示词全文极简但信息密度高共三块priorities研究优先级、synthesis综合策略、format输出格式。下面逐条展开并说明其在搜索链路中的落地方式。2.1priorities研究优先级 —— 准确 速度一手 二手priorities 1. Accuracy speed; verify claims across multiple sources when possible. 2. Primary secondary: official docs, papers, announcements blog summaries. 3. Recency matters: note publication dates; prefer recent sources for time-sensitive topics. 4. Uncertainty: distinguish confirmed facts from inferences. /priorities这四条是研究行为的宪法准确优先于速度宁可多查一个来源交叉验证也不给出未经证实的即时回答。在实现层面搜索走的是 Provider 链 自动回退见第四节单次失败不会让工具直接报错而是尝试下一个可用 Provider这正是准确性优先的工程化体现。一手来源 二手来源官方文档、论文、官方公告优先于博客转述。这与工具提示词 tools/web-search.md 中SHOULD prefer primary sources (papers, official docs); corroborate key claims with multiple sources完全一致也与synthesis中技术话题优先官方文档与规范、新闻事件优先一手报道互相呼应。时效性对时间敏感话题注明发布日期、优先新来源。工具 Schema 中的recency参数day/week/month/year即为该策略的参数化落地搜索结果的格式化输出中也会附带formatAge(src.ageSeconds)计算出的结果年龄见 index.ts。区分事实与推断模型必须明确标注哪些是确认事实、哪些是推理产物防止把推断包装成事实——这是研究可信度的底线。2.2synthesis综合策略 —— 先结论后证据冲突要交代synthesis - Direct answer first; then supporting evidence. - Quote or paraphrase specific sources; no vague attributions. - Source conflicts: acknowledge discrepancy; identify the more authoritative source. - Technical topics: prefer official documentation and specifications. - News/events: prefer primary reporting over aggregators. - Concrete data: version numbers, dates, exact figures, code snippets, specific examples. /synthesis这条块规范的是如何组织研究结论先给直接答案再给支撑证据避免让读者在长文中找结论。这与format的深入覆盖但结构清晰配合。引用必须具体要引用或转述具体来源禁止某资料显示这类模糊归因。工具返回的搜索响应中每个 source 都带标题、URL、摘要[1] 标题 (3d ago)\n https://...正是为了让模型有能力做具体引用。来源冲突必须交代承认分歧并指出哪个来源更权威。这要求模型对来源做权威性排序官方 聚合。技术话题看规范原文新闻事件看一手报道与 priorities 第 2 条构成闭环。具体数据版本号、日期、精确数字、代码片段、具体示例。这是提高答案可用性的关键——避免大约、大概式输出。2.3format输出格式 —— 深度与结构并重format - Thorough, in-depth coverage with specific evidence; no surface-level summaries. - Omit filler and unnecessary hedging; do NOT sacrifice detail for brevity. - Include publication dates when recency affects relevance. - Clear sections for multiple aspects. - Cite sources inline using provided search results. /format深度覆盖拒绝表面总结宁可篇幅长不可信息薄。删掉空话与无谓的模糊措辞但不为简短牺牲细节这是对过度 hedged回答的显式禁止。时效相关时带上发表日期呼应 priorities 第 3 条。多方面的内容要分节为长答案提供可扫描结构。内联引用提供的搜索结果答案必须可溯源。值得注意的是提示词顶部的定位语把它定义为 Web research assistant: accurate, well-sourced, comprehensive answers.网络研究助手准确、有据、全面的回答——三词定位与三大指令块一一对应。三、底层原理查询指令解析与宽松过滤提示词与工具描述中承诺每个 Provider 都支持 Google 风格指令这一承诺由 query.ts 在工程上兑现。该模块把原始查询解析成结构化对象StructuredQueryquery.ts支持以下指令全集指令别名含义是否可后置过滤site:domain:、host:限定站点可带路径如site:github.com/anthropics✅-site:—排除站点✅inurl:url:、allinurl:URL 必须包含的字符串✅-inurl:—URL 不得包含的字符串✅intitle:title:、allintitle:标题必须包含的字符串✅-intitle:—标题不得包含的字符串✅intext:inbody:、inanchor:、allintext:正文包含的字符串仅用于构造查询❌filetype:ext:限定文件扩展名✅-filetype:—排除文件扩展名✅after:since:发布日期下界YYYY-MM-DD也接受YYYY/YYYY-MM✅before:until:发布日期上界同上✅lang:language:语言代码—exact phrase—精确短语✅短语保留-term/NOT!排除词✅OR/|/||—或分组✅term—必须出现按精确短语处理✅AND/—与逻辑✅解析器在设计上宽容优先未知的name:value形式URL、C:\paths、TS2345:等原样保留在自由文本中解析失败的指令如before:someday降级为普通词而不是被丢弃query.ts。3.1 三层执行策略针对每个 Provider指令按三层处理映射为原生 API 参数如 Perplexity 的search_domain_filter、Tavily 的include_domains、Exa 的日期边界能原生映射的就直接映射query.ts。按目标引擎语法重建查询串formatQuery依据各引擎的QuerySyntax能力表决定哪些指令重新写入查询串——例如 Google 系全套语法GOOGLE_QUERY_SYNTAXphrases/negation/or/site/inUrl/inTitle/inText/filetype/dateRange 全开而能力为零值的引擎只得到纯关键词query.ts。对返回结果做宽松后过滤applyQueryConstraints逐维度过滤若某个约束维度会把结果清空就丢弃该维度并在输出中注明约束已放宽而不是返回零结果query.ts。这最后一步正是工具提示词中if a constraint matches nothing, relax and report it; do not return zero results的落地。matchesSite还支持带路径的site:匹配如site:github.com/anthropics要求 URL 路径以/anthropics开头见 query.ts。3.2 抓取型引擎的指令降级对于无凭据的 HTML 抓取引擎Google、Startpage、DuckDuckGo、Ecosia、Mojeek、SearXNG 及其并行扇出formatScraperQuery会做一次结构性降级带路径的site:和所有inurl:被降级为普通关键词因为 DuckDuckGo 完全忽略inurl:且所有抓取引擎对带路径的site:都返回零结果而-site:、-inurl:等否定形式原样保留——否定形式一旦降级就会把排除变成搜索词语义反转query.ts。降级或不受支持的约束随后由后过滤applyQueryConstraints兜底。四、Provider 链提示词被注入到哪些搜索后端提示词随每次搜索注入到当前 Provider。oh-my-pi 的搜索后端覆盖面极广注册表定义在 provider.ts显示元数据在 types.ts。按接入方式可分为四类1. 原生搜索工具走 OAuth/API KeyPerplexity配置认证后用官方搜索显式选择时可退回匿名搜索Gemini基于 Google Search grounding复用google-gemini-cli或google-antigravity的 OAuthAnthropicClaude 原生web_search工具Anthropic OAuth 或ANTHROPIC_API_KEYCodexOpenAI原生 web_searchChatGPT OAuth/login openai-codexxAIGrok web searchSuperGrok/X Premium OAuth 或XAI_API_KEY2. 第三方搜索 APIAPI Key 接入Exa、TinyFish、Jina、Kagi、Tavily、Firecrawl、Brave、Kimi CodeKIMI_SEARCH_API_KEY/MOONSHOT_SEARCH_API_KEY注意不是MOONSHOT_API_KEY、Parallel、Synthetic3. 自托管 / 中介SearXNGSEARXNG_ENDPOINT或searxng.endpoint配置Z.AI调用webSearchPrimeMCP4. 免凭据抓取兜底StartpageGoogle 结果可能被反爬挑战、DuckDuckGo尽力而为数据中心/共享出口 IP 可能被反爬、Ecosia、Google、Mojeek独立索引、Public Web并行查询所有免凭据引擎并去重合并4.1 自动回退与失败处理搜索默认采用 Provider 链自动回退resolveProviderCandidates()解析配置的候选链逐个尝试某 Provider 不可用未配置凭据则跳过显式指定的 Provider 不可用则直接报错并提示配置凭据或改用自动链index.ts。若所有 Provider 都失败输出汇总错误All web search providers failed: ...index.ts。超时也有硬性约束默认每 Provider 传输超时 60 秒DEFAULT_WEB_SEARCH_TIMEOUT_SECONDS可通过providers.webSearchTimeoutSeconds配置上限 300 秒MAX_WEB_SEARCH_TIMEOUT_SECONDS见 types.ts。用户主动取消AbortSignal会被立即向上抛出而不是被当成 Provider 失败继续回退index.ts。五、模型端输出为 LLM 定制的搜索结果格式提示词要求cite sources inline using provided search results而搜索结果由formatForLLM定制为 LLM 友好的纯文本格式index.ts直接答案如 Provider 返回 ## Sources 3 sources [1] 标题 (2d ago) https://example.com/... 摘要最多 240 字符 ## Citations 2 citations [1] 标题 https://example.com/... 被引用文本最多 240 字符 ## Related 2 questions - 相关问题 1 Search queries: 2 - 查询词 1最多 120 字符关键设计点结果年龄自动计算通过formatAge(src.ageSeconds)或publishedDate显示2d ago式相对时间直接支撑提示词中include publication dates的要求截断保护摘要、被引文本、查询词都有字符上限240/240/120防止超长内容撑爆上下文结构化分区Sources / Citations / Related / Search queries 分节输出方便模型逐段消化并准确内联引用约束放宽提示当查询约束被宽松处理时输出以Note: ...开头如no results matched \site:arxiv.org; the constraint was relaxed让模型知道结果并未完全满足原始指令——这正是承认分歧、不隐藏信息的研究精神在工具层的延续空结果防护hasRenderableSearchContent检查答案、来源、引文、相关问题、查询词至少一项非空否则该 Provider 视为无可渲染内容HTTP 204 语义触发回退index.ts。六、可复用的提示词工程要点从这份不足 20 行的系统提示词可以提炼出可迁移到任何研究型 Agent 的设计模式用 XML 标签分块priorities、synthesis、format三块职责单一模型易于按块内化也便于按场景动态拼装如不同任务注入不同块。优先级显式化把准确 速度一手 二手时效敏感这些隐性判断标准写成显式条目避免模型在取舍时摇摆。把抽象原则翻译成可执行格式只说要引用来源不够还要规定先答案后证据冲突要交代并指出更权威者版本号/日期/代码片段等具体行为。工具层为提示词兜底提示词承诺的能力Google 风格指令、宽松过滤、来源年龄标注、内联引用全部有 query.ts、types.ts、index.ts 的对应实现提示词不是画饼。不渲染模糊措辞明确禁止空话与无谓 hedging同时要求不因简短牺牲细节直接决定输出信息的密度。七、如何查看与验证系统提示词全文packages/coding-agent/src/prompts/system/web-search.md本文讲解的三大指令块原文工具描述提示词packages/coding-agent/src/prompts/tools/web-search.md何时使用搜索、内联引用、约束放宽规则统一搜索工具入口与提示词注入packages/coding-agent/src/web/search/index.ts查询指令解析与宽松过滤packages/coding-agent/src/web/search/query.tsProvider 注册表与懒加载packages/coding-agent/src/web/search/provider.tsProvider 选项与超时常量packages/coding-agent/src/web/search/types.ts全部 Provider 实现packages/coding-agent/src/web/search/providers/结语oh-my-pi 的 web-search 系统提示词是一个小而完整的研究助手范式三大指令块定义了怎么权衡、怎么综合、怎么表达而工具层查询解析、Provider 链回退、宽松过滤、LLM 友好输出确保提示词中的每一条承诺都可执行、可验证。对于任何希望让 Agent 输出准确、有据、全面答案的工程实践这份提示词及其配套实现都值得作为参考骨架——提示词定调工具层兜底两者缺一不可。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考