OpenHuman Web Scraper(web_fetch)深度指南:把“抓网页“变成“读文章“的专用取读工具

发布时间:2026/9/10 15:39:37
OpenHuman Web Scraper(web_fetch)深度指南:把“抓网页“变成“读文章“的专用取读工具 OpenHuman Web Scraperweb_fetch深度指南把抓网页变成读文章的专用取读工具【免费下载链接】openhumanOpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research.项目地址: https://gitcode.com/GitHub_Trending/op/openhumanOpenHuman 为 Agent 内置了一个专用网络工具web_fetch文档中称为 Web Scraper它与通用的http_request/curl不同核心使命是抓取 URL 并返回干净文本——Agent 不需要原始 HTML它需要的是文章正文。本文结合仓库源码完整讲解该工具的能力边界、安全护栏、配置项与适用场景读完即可掌握如何在 OpenHuman 中高效使用它做阅读类取数并理解其底层实现与安全模型。一、它是什么面向阅读的单一职责抓取工具OpenHuman 的官方文档将 Web Scraper 定位为purpose-built fetch tool专用取读工具它的存在理由非常明确Agent 在检索资料时真正想要的是一篇文章、一段文档、一个 README 的可推理文本而不是夹杂着导航、广告、页脚和脚本的原始 HTML 响应。在源码中这个工具以web_fetch的名字实现位于 src/openhuman/tools/impl/network/web_fetch.rs。文件头注释点明了它与兄弟工具的分工http_request提供完整的 HTTP 方法 / 请求头控制面curl面向写盘场景把响应写入磁盘文件web_fetch单一用途的 GET and read 原语是 Agent 做研究时首先拿起的工具直接以文本形式返回响应体并附带极简的前缀信息HTTP 状态码 最终 URL。工具自身的description()方法也向 Agent 明确宣示了使用边界GET a URL and return its body as text (truncated). Use this for reading docs / READMEs / spec pages. For richer HTTP semantics (POST, custom headers, …) usehttp_request.这段描述意味着只要目标是读一个页面Agent 应当优先选web_fetch只有需要 POST、自定义请求头等更丰富的 HTTP 语义时才退回到http_request。二、它做什么抓取 → 去除样板 → 返回纯文本按官方文档的归纳Web Scraper 的工作流程是三步Fetch请求指定 URLStrip剥离样板内容导航、广告、页脚、脚本Return返回可供 Agent 直接推理的干净文本。从源码看web_fetch的execute()流程可细化为以下步骤对应 web_fetch.rs解析入参url必填与max_bytes可选触发安全策略的速率限制检查is_rate_limited()/record_action()执行LocalOnly 本地模式拦截privacy epic S7issue #4441在 LocalOnly 模式下任何网络抓取在 URL 校验之前就被拒绝调用validate_url_with_dns_check()做 URL 与域名校验见下文安全章节发送egress 出站披露事件privacy epic S2issue #4436在真正连网前把抓取目标主机上报给用户可见的事件流以GET发起请求禁用自动重定向见下文读取响应体文本若响应体超过max_bytes使用floor_char_boundary在 UTF-8 字符边界上安全截断并追加[truncated at N bytes]后缀返回statuscode urlfinal-url\nbody格式的结果。参数一览web_fetch的 JSON Schema 只有两个字段见 web_fetch.rs参数类型必填说明urlstring是绝对 http(s) URLmax_bytesinteger否响应体截断字节数默认 1_000_000最小 1三、安全护栏网络工具共享的防御体系官方文档明确指出 Web Scraper 受与其他网络工具相同的代理与 URL 守卫规则约束。在源码中这体现为web_fetch与http_request、curl共享同一套url_guard模块src/openhuman/tools/impl/network/url_guard.rs包含两层模式开放模式白名单为空允许任意公开、非私有的主机但 SSRF 防护依然全量生效——loopback、RFC1918 私网、link-local、组播、文档地址段、共享地址段、IPv4-mapped IPv6、localhost/*.localhost/*.local一律拦截严格模式配置了allowed_domains仅允许列表内域名及其子域名其余主机直接拒绝。两种模式统一强制仅支持http:///https://、URL 不允许含空白、不允许 userinfo、不允许 IPv6 主机。此外validate_url_with_dns_check还会在请求发出前对主机名做真实 DNS 解析并重新校验解析结果以封堵DNS rebinding攻击攻击者用一张域名在公网 IP 与私网 IP 之间来回切换绕过基于主机名校验的白名单。除此之外web_fetch还内置了文档中没有展开、但源码明确实现的额外护栏速率限制受SecurityPolicy的每小时动作上限 预算耗尽双重控制web_fetch.rs不自动跟随重定向reqwest默认最多跟随 10 次跳转但重定向目标可能落在白名单之外。因此web_fetch禁用自动跟随redirect::Policy::none()把 3xx 响应连同Location头一起返回给调用方由上层决定是否对被允许域名重新发起抓取web_fetch.rsLocalOnly 阻断 出站披露本地模式下一律拒绝抓取正常模式下每次外联前都会发出 egress 事件S2 隐私披露点。文档与实现的护栏对照表官方文档护栏源码实现响应上限 1 MB超限截断而非静默丢弃max_bytes默认 1_000_000超出时按字符边界截断并加[truncated at N bytes]标注20 秒超时慢服务器不拖垮对话超时取自HttpRequestConfig的timeout_secs当前默认值为 30 秒见迁移说明可通过[http_request]配置调整与其他网络工具共享代理与 URL 守卫规则共享url_guard模块 SecurityPolicy速率限制注文档撰写时描述的超时为 20 秒当前源码中的默认值取自HttpRequestConfig::default()按 src/openhuman/config/migrations/README.md 记录为 30 秒 / 1 MB。以实际运行版本中的配置为准。四、配置项[http_request]节与 0 值修复web_fetch的上限与超时并非硬编码而是从HttpRequestConfig配置节[http_request]读取。构造器中遵循None与Some(0)都视为使用默认值的策略web_fetch.rs因为调用方是从[http_request]配置接线过来的一个 0 字节上限会把所有响应体截成空0 秒超时会让每次请求立刻失败。为此配置迁移层专门实现了5→6 迁移repair_http_request_limitssrc/openhuman/config/migrations/repair_http_request_limits.rs旧版本可能持久化timeout_secs 0/max_response_size 0而 serde 默认值无法修复已落盘的 0所以迁移会在加载时把 0 强制修复为 schema 默认值30 秒 / 1 MB并输出timeout_secs_repaired/max_response_size_repaired统计。对应测试见 repair_http_request_limits_tests.rs 与 mod_tests.rs。即使配置加载后又被误写为 0web_fetch构造器仍会在使用点再次钳制回默认值并记录告警日志形成双重保险。结果大小护栏50k 字符除了字节级截断web_fetch还在工具层面对进入模型的结果设定了上限max_result_size_chars()返回 50_000web_fetch.rs。源码注释解释了原因1 MB 的 HTML 页面即使被字节截断换算成 token 仍高达数万Agent 绝大多数情况下用不到这么多上下文而真需要全文时应该先把页面保存下来再用read_file读取。并发安全is_concurrency_safe()恒返回trueweb_fetch.rsGET 是幂等的因此可以放心地对多个 URL 并行发起web_fetch调用OpenHuman 的编排层可安全地 fan-out。注释同时提醒目标站点的限流属于用户侧问题工具层不做二次猜测。五、适用场景与相关工具链按官方文档Web Scraper 擅长三类任务无干扰阅读读文章、博客、文档页、GitHub README——不要噪声承接搜索结果对 Web Search 返回的 URL 做跟进抓取按需单页摘要就单个页面做即时总结。在工具生态中它处于这样一条链路Web Search 负责找 URLweb_fetch负责读内容而 Smart Token Compression 负责在内容进入模型前进一步裁剪长页面。三者的配合正是 OpenHuman 搜索 → 抓取 → 压缩 → 推理 研究链路的骨架。Web Search 侧的配置集中在 src/openhuman/config/schema/tools/search.rs包含web_search_max_results默认最大结果数、web_search_timeout_secs默认搜索超时以及统一的搜索引擎选择器disabled/managed/parallel/brave/querit/exa等模式同一时刻仅一个引擎生效。六、源码地图与测试佐证工具实现src/openhuman/tools/impl/network/web_fetch.rs单元测试src/openhuman/tools/impl/network/web_fetch_tests.rsURL 守卫与 SSRF 防护src/openhuman/tools/impl/network/url_guard.rs 及其测试 url_guard_tests.rs兄弟工具http_request见 http_request.rscurl见 curl.rs网络工具模块入口见 mod.rs配置迁移5→6 迁移说明见 migrations/README.md实现见 repair_http_request_limits.rs从源码结构看web_fetch是 OpenHuman 网络工具族中刻意保持最小表面的一环两个入参、只读权限、幂等 GET、内置字节截断与字符级结果上限。这种设计让 Agent 可以放心地大规模并行取读而把复杂的 HTTP 语义、写盘需求和精细安全策略分别留给http_request、curl与共享的url_guard/SecurityPolicy体系去承担。【免费下载链接】openhumanOpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research.项目地址: https://gitcode.com/GitHub_Trending/op/openhuman创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考