
openinterpreter 的 web.run 网络搜索工具命令语法、决策边界与源码实现详解【免费下载链接】openinterpreterA coding agent for open models like Kimi K3 and GLM 5.3项目地址: https://gitcode.com/GitHub_Trending/op/openinterpreterweb.run是 openinterpreter 编码代理中用于访问互联网的核心工具其工具描述文件 web_run_description.md 定义了完整的命令语法、调用提示、何时必须联网搜索的决策边界、引用格式与字数版权限制。读完本文你能掌握web.run全部 9 类子命令的参数格式、高效调用策略并能结合 codex-rs/ext/web-search 扩展的源码理解该工具是如何注册、构造请求、回传结果并与模型上下文交互的。工具定位web.run 是扩展注册的命名空间工具从源码结构看该工具由 web-search 扩展提供tool.rs 中通过常量WEB_NAMESPACE web与RUN_TOOL_NAME run组合出命名空间工具名web.run而工具描述正是用include_str!(../web_run_description.md)将本文档描述的 Markdown 内容直接编译进二进制作为发给模型的 tool description。几个关键的注册细节参数 Schema 自动生成schema.rs 使用 schemars 对SearchCommands结构体定义在 search.rs生成 JSON Schema并用parse_tool_input_schema_without_compaction保留字段级描述以对齐托管工具的参数定义直接暴露给模型exposure()返回ToolExposure::Direct即模型可在一回合内直接调用该工具且supports_parallel_tool_calls()返回true支持并行工具调用可用性受配置门控extension.rs 中只有当模型提供商是 OpenAI或支持独立搜索且web_search配置不为disabled时扩展才会贡献出该工具配置为cached/live等模式会映射到请求中的external_web_access字段disabled/cached→ 布尔 falseindexed→ Indexed 模式live→ 布尔 true。相关用户侧配置见 web-search 文档web_search cached | live | disabled也可用interpreter --search ...为单次运行开启实时搜索。命令语法参考9 类子命令一次讲清工具描述文档列出了web.run支持的全部子命令其底层类型全部对应 search.rs 中SearchCommands结构体的可选字段。每次调用可混合多类命令一次返回多路结果。search_query网页搜索{search_query: [{q: What is the capital of France?}, {q: What is the capital of belgium?}]}对给定查询执行互联网搜索。每个查询项除必填的q外还支持两个可选过滤参数来自 SearchQuery 的定义recency限定近期天数数字用于只保留最近 N 天内的结果domains限定域名列表用于把搜索限制在特定站点。image_query图片搜索{image_query: [{q: waterfalls}]}对图片搜索引擎执行查询参数结构与search_query一致同样是SearchQuery列表。open打开页面{open: [{ref_id: turn0search0}, {ref_id: https://www.openai.com, lineno: 120}]}ref_id既可以是上一次搜索结果中的内部引用 ID如turn0search0也可以直接是 URL可选的lineno会把页面定位到指定行号见 OpenOperation。click点击已打开页面中的链接{click: [{ref_id: turn0fetch3, id: 17}]}在由ref_id指代的页面内打开编号为id的链接页面上的链接以编号形式呈现。find在页面内查找文本{find: [{ref_id: turn0fetch3, pattern: Annie Case}]}在已打开的页面或 URL 内按文本模式查找ref_id同样接受引用 ID 或字面 URL。screenshot对 PDF 页面截图{screenshot: [{ref_id: turn1view0, pageno: 0}, {ref_id: turn1view0, pageno: 3}]}pageno是从 0 开始的 PDF 页码。finance金融行情查询{finance: [{ticker: AMD, type: equity, market: USA}]} {finance: [{ticker: BTC, type: crypto, market: }]}按股票符号查询价格。type取值来自 FinanceAssetType 枚举equity股票、fund基金、crypto加密货币、index指数。market为 ISO 3166-1 alpha-3 国家代码、OTC加密货币场景传空字符串。weather天气查询{weather: [{location: San Francisco, CA}]}location采用 Country, Area, City 形式。可选参数见 WeatherOperationstartYYYY-MM-DD默认今天、duration返回天数默认 7。sports赛程与积分榜{sports: [{fn: standings, league: nfl}, {fn: schedule, league: nba, team: GSW, date_from: 2025-02-24}]}fn取schedule或standingsleague支持 nba、wnba、nfl、nhl、mlb、epl、ncaamb、ncaawb、ipl见 SportsLeague。还可选传team广播中常见的 3~4 字母缩写、opponent、date_from/date_to、num_games、locale等收窄查询。time时区时间查询{time: [{utc_offset: 03:00}]}获取指定 UTC 偏移03:00格式下的当前时间。使用提示文档给出的高效调用策略工具描述文档的 Usage hints 部分规定了调用该工具时应遵守的策略这些约束直接服务于减少往返次数与降低 token 消耗一次调用塞入多类命令和多个查询以更快拿到更多结果例如{ search_query: [{q: bitcoin news}], finance: [{ticker: BTC, type: crypto, market: }], find: [{ref_id: turn0search0, pattern: Annie Case}, {ref_id: turn0search1, pattern: John Smith}] }用response_length控制返回结果数量取值为short/medium/longSearchResponseLength 枚举若打算省略应传short只写必填参数能省略的不要写空列表或 nullsearch_query单次最多 4 条查询若长度大于 3response_length必须为medium或long误触兜底如果不小心调用了web.run发送一个空查询{search_query: [{q: }]}即可。从源码可以印证这些行为tool.rs 的parse_commands对空参数直接返回SearchCommands::default()对 JSON 解析失败则返回RespondToModel错误把错误交回模型修正而非直接判失败。决策边界什么时候必须联网这是文档中最强的行为约束。核心规则是用户明确要求搜索或明确要求不搜索时必须服从其请求。否则模型每次做出假设时都要考虑其时间稳定性——只要该事实存在哪怕 10% 以上已被改变的可能就必须联网核实。文档强制要求联网的场景包括信息可能近期已变化新闻、价格、法律、日程、产品规格、体育比分、经济指标、政治/公众/公司人物如某国总统某公司 CEO会随时间变动、规则、法规、标准、可能已更新的软件库、汇率、各类推荐因为推荐往往取决于当前流行/安全状况等——文档特别强调拿不准时必须偏向联网对新闻类查询要优先选择更新的事件并比较发布日期与事件发生日期用户寻求可能耗费大量时间或金钱的推荐如调研产品、餐厅、旅行计划用户想要或会受益于直接引语、链接或精确的来源归属引用了某个具体页面、论文、数据集、PDF 或站点而你尚未获得其内容你对某个事实没把握、主题小众或处于新兴领域或你怀疑至少有 10% 概率会记错高利害精确实务医疗、法律、财务指导这类信息时间上不稳定的概率很高应默认搜索。引用规范内部 ID 不外露用 Markdown 链接引用来源搜索结果包含turn2search5这类内部引用 ID规则是这些 ID 只能用于后续web.run调用中禁止在最终回复中暴露给用户。最终回复中的引用必须使用 Markdown 链接并遵循单来源引用写成[descriptive source title](https://example.com/page)多来源用多个独立链接如[first source](https://example.com/one), [second source](https://example.com/two)链接要直接指向支撑论断的那个页面不要链接搜索结果页也不要用裸 URL每条引用应尽可能贴近它所支撑的论断通常放在句子或段落末尾、标点之后不要把引用放进代码块内不要把引用单独成行也不要把所有引用堆在回复末尾。只要浏览了互联网就要对受网页来源支撑的陈述给出引用且每个引用来源必须直接支撑对应论断。应优先一手和权威来源当多视角对回答有益时使用不同域名的来源。特殊场景与字数版权限制文档以如有冲突优先适用声明了两类特殊约束特殊场景用户询问 OpenAI 产品ChatGPT、OpenAI API 等用法时应先检查本地环境中的代码仅将其作为兜底才去浏览且浏览时用 domains 过滤限制在 OpenAI 官方站点除非用户另有要求用搜索回答技术问题时必须只依赖一手来源研究论文、官方文档等明确标示哪些内容是基于来源的推断。字数限制与版权合规逐字引用限制任何单一非歌词来源的逐字引用不得超过 25 个词reddit 除外歌曲歌词逐字引用不得超过 10 个词reddit 允许长引用但必须用开头的 Markdown 引用块标示为直接引语、逐字复制并链接来源每个网页来源带有形如[wordlim N]的字数标签N 是整篇回复中归因于该来源的词数上限未标注时默认 200 词非连续引用同一来源的词数要累计多个来源的上限可以相加但每篇引用的文章都必须与回复相关出于版权考虑不得提供完整文章、长篇逐字段落或大量直接引语用户索要逐字引用时应给出短的合规摘录其余用改写和摘要回答。源码视角一次 web.run 调用的完整链路结合 tool.rs 的handle_call一次工具调用的执行过程是解析命令把模型给出的 JSON 参数反序列化为SearchCommands空参数回退为默认命令构造请求组装 SearchRequest包含会话 ID、模型名、由recent_input生成的会话上下文、命令、来自配置的SearchSettings以及输出 token 预算附带请求头search_request_headers会把线程 originator 与 turn metadata 作为 HTTP 头转发对应单测 验证了originator与 turn metadata 头的透传前后事件调用前后分别发出WebSearchBegin/WebSearchEnd事件与WebSearchItem扩展项其中command_actiontool.rs会把命令归约为 Search/OpenPage/FindInPage/Other 用于展示测试用例 覆盖了 image_query、open、find含字面 URL 与引用 ID 两种 ref_id的归类逻辑上下文裁剪history.rs 的recent_input只保留最近一段可见对话——上一条用户消息、其后至多 1000 token 的助手文本以及当前用户消息测试如同文件中keeps_current_user_and_previous_visible_turn验证了函数调用与 system 消息会被剔除、图片等非文本内容只保留文本部分结果回传响应中的output文本被包装为 SearchOutput作为FunctionCallOutput返回给模型并标记contains_external_context() true以表明结果包含外部内容结构化results则通过事件带外传给客户端同时上报codex.web_search.results.payload_bytes指标。小结web.run的工具描述文件本质上是写给模型的一份联网操作守则9 类子命令覆盖了网页/图片搜索、页面导航、页内查找、PDF 截图、金融、天气、体育与时区查询调用策略鼓励批量合并请求并显式控制response_length决策边界用 10% 阈值迫使模型对时间不稳定信息主动核实引用与字数规则则约束了最终回复的来源归属与版权合规。而在源码层面该扩展通过配置门控工具可用性、自动生成参数 Schema、裁剪会话上下文、事件化展示搜索过程把这份守则与一次真实的搜索 API 调用完整地串联起来。【免费下载链接】openinterpreterA coding agent for open models like Kimi K3 and GLM 5.3项目地址: https://gitcode.com/GitHub_Trending/op/openinterpreter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考