人工智能搜索引擎本地部署后端MCP 服务【免费下载链接】xerjXERJ is the new way for AI to search data. Its autoindex capability activates agents to know your data without the token waste of grep and sed. One command indexes code, docs, logs and PDFs for search, RAG, security audits and agent memory, using 40x fewer tokens than grep. Elasticsearch compatible, so existing clients just work.项目地址https://gitcode.com/GitHub_Trending/xe/xerj点击查看免费下载这篇技术指南面向站点维护者与内容工程同学围绕 xerj 开源仓库中og-blog-does-xerj-beat-jev-RENDER.md这份渲染说明完整讲解如何用 Playwright 把一张 1200x630 的 Open Graph 卡片 HTML 源文件渲染成提交到landing/og/的 PNG以及为什么这张卡片的尺寸、调色板、字体与 lint 门禁有这么多硬约束。读完你将掌握xerj 的 OG 图片渲染命令与原理、品牌 token 与字体回退的处理方式、seo_lintrule 31 的校验逻辑以及如何安全地修改并重新提交这类光栅卡片。一、这份 RENDER 文档解决什么问题/blog/does-xerj-beat-jev是 XERJ 官方博客中一篇被反复引用的基准测试文章记录了 1,271 条已判定 BEIR 查询上 Jev 重排模型与 XERJ 本地混合检索的对比结果。文章发布时需要一个能在社交平台和 AI 爬虫里正确展示的 Open Graph 卡片og:image而这张卡片不是手绘的也不是在线工具生成的——它是一份用 HTML 描述、用无头浏览器渲染、用 lint 强制校验的工程产物。渲染说明位于 scripts/seo/assets/og-blog-does-xerj-beat-jev-RENDER.mdHTML 源文件是同目录下的 scripts/seo/assets/og-blog-does-xerj-beat-jev.html。注意两个关键事实源文件刻意放在scripts/seo/assets/而不是landing/下因为 wrangler.toml 里pages_build_output_dir landingCloudflare Pages 会把landing/目录原样部署。HTML 源文件只是渲染素材不是站点页面放进landing/会被当成一个公开页面发布出去提交到仓库的是渲染好的 PNGlanding/og/does-xerj-beat-jev.png1200x630它才是og:image真正指向的资产。也就是说这套流程是HTML 源文件 Playwright 渲染 提交 PNG lint 校验四步闭环RENDER 文档就是这份闭环的操作手册。二、渲染命令一段可直接运行的 Playwright 脚本RENDER 文档给出了完整的重新渲染命令。它通过 Node 调用 playwright 的 chromium加载本地 HTML 文件等待字体就绪后截图到landing/og/NODE_PATH/root/pw/node_modules node - EOF const { chromium } require(playwright); (async () { const browser await chromium.launch(); const page await browser.newPage({ viewport: { width: 1200, height: 630 }, deviceScaleFactor: 1 }); await page.goto(file:// process.cwd() /scripts/seo/assets/og-blog-does-xerj-beat-jev.html); await page.evaluate(() document.fonts.ready); await page.waitForTimeout(300); await page.screenshot({ path: landing/og/does-xerj-beat-jev.png }); await browser.close(); })(); EOF这段脚本有几个值得拆解的细节viewport: { width: 1200, height: 630 }截图尺寸完全由 viewport 决定浏览器窗口的大小就是输出 PNG 的大小这是所见即所得式的渲染deviceScaleFactor: 1关闭高 DPI 缩放保证像素密度正好 1:1输出就是 1200x630 的物理像素不会产生 2x/3x 的意外大图document.fonts.ready等待页面声明的所有 webfontGoogle Fonts 上的 Big Shoulders Display、IBM Plex Sans、JetBrains Mono加载完成避免截图时文字还停留在 fallback 字体waitForTimeout(300)给字体替换和布局稳定留出缓冲防止截到渲染中间态page.goto(file:// ...)直接走本地文件协议不依赖任何本地 HTTP 服务器离线可跑。脚本里NODE_PATH/root/pw/node_modules指向 playwright 的安装位置如果你的 playwright 装在别的路径按实际环境调整即可。核心是先渲染再提交 PNG渲染源和渲染产物必须成对提交——文档里专门强调了commit the exact playwright output and this source together。三、短清单里的四条工程约束RENDER 文档用Notes (the short list)总结了四条注意事项每条背后都对应一个真实工程问题。3.1 Viewport 必须精确 1200x630且mk_og_card.py --check不 gate 这个文件站点所有 OG 卡片统一采用 1200x630 画幅这是 Open Graph 协议与主流社交爬虫认可的标准分享图比例。文档特别指出mk_og_card.py --check只校验landing/og/xerj-card.png不校验这张博客卡片。也就是说博客卡片的尺寸正确性没有 CI 自动兜底完全依赖渲染者遵守这条约定。校验逻辑可以在 scripts/seo/seo_lint.py 的_png_size中看到它直接从 PNG 文件头部的 IHDR chunk 读取宽高第 16-24 字节的II两个无符号整数然后与 1200x630 比对尺寸不符会在 rule 31 下报错。因为 lint 是字节级读取任何非 1200x630 的产物都会在合并门前被拦下。3.2 调色板固定为 night 主题hex 值来自style.css的:root站点支持 DAY/NIGHT 双主题见 landing/blog/does-xerj-beat-jev.html 导航栏的 theme 切换按钮但光栅图片PNG没有主题概念——它一旦渲染完成就是固定像素。所以卡片强制使用 night 主题的深色底--bg: #0b0b0d并把所有色值硬编码在 HTML 源文件的:root变量里:root { --bg: #0b0b0d; --ink: #f4f2ec; --mute: #8a8680; --line: #3a3836; --xerj: #ffc400; --jev: #7f93aa; }这些 hex 是从 landing/style.css 的:root里读取的品牌 tokenXERJ 品牌色是金色#ffc400Jev 侧使用灰蓝#7f93aa。RENDER 文档的警告是如果品牌 token 在 style.css 中发生移动这个文件的色值必须同步更新否则卡片会与站点视觉体系脱节。这是品牌单一来源原则在光栅资产上的落地——token 只存在于 style.css卡片源文件只是它的一个快照副本。3.3 离线沙盒里 Google Fonts 会静默失败回退字体栈接替渲染HTML 源文件通过link hrefhttps://fonts.googleapis.com/css2?...加载三种 webfont。在离线环境比如无外网的 CI 沙盒中这个请求会静默失败浏览器转而使用 CSS 里声明的 fallback 栈展示字体标题Arial Narrow, Impact, sans-serif等宽字体数字Courier New, monospace。回退字体与品牌字体的字面形状差异明显Impact 与 Big Shoulders Display 是完全不同的气质所以文档要求如果渲染时实际用了 fallback发布前必须在 webfont 能正常加载的环境里重新渲染一次。这也是脚本里document.fonts.ready存在的原因——它让渲染者能明确知道字体加载状态而不是默默截出一张回退字体版本。3.4 seo_lint rule 31og:image 必须是绝对 https 且存在于磁盘上RENDER 文档最后一条约束指向 scripts/seo/seo_lint.py 的 rule 31它规定了og:image的三个硬性条件必须是绝对 https URLog.image_relative检查og:image不以https://开头直接报错URL 对应的文件必须真实存在于landing/磁盘上og.image_missing检查必须是 1200x630 的 PNGog.image_size检查尺寸不符报错。这张卡片的og:image元数据写死在博客页面头部https://xerj.org/og/does-xerj-beat-jev.png并带有og:image:width/og:image:height/og:image:alt完整声明。由于 lint 会按 URL 反查landing/下的文件PNG 必须被提交rule 31 才能通过——这就是先渲染、后提交、再 lint顺序的由来文件不在仓库里门禁立刻失败。四、HTML 源文件设计一张卡片背后的数据可视化约定既然卡片是用 HTML 渲染的它的设计就是一段可维护的代码。scripts/seo/assets/og-blog-does-xerj-beat-jev.html 的文件头注释把设计约定交代得很清楚这些约定决定了这张卡片为什么能看统一全局分母跨行可比。三行数据的条形图宽度使用同一个分母 0.7410所有行中的最大值而不是每行各自归一化。这样条形的相对长度在行与行之间也是可比较的——/blog 索引页的预览卡片和首页横幅沿用同一约定保证同一篇文章在不同入口看到的图表语义一致。颜色即立场。XERJ 永远是金色#ffc400Jev重排模型侧永远是灰蓝#7f93aa强调色accent绝不用于标记 Jev 侧胜出。在对比图中颜色承载了价值判断这不是随意的审美选择而是一条防止误导读者的可视化纪律。数据全部逐字来自文章本体。三个数据集的三组数字SciFact 0.6993/0.7410、NFCorpus 0.3448/0.3312、FiQA 0.2382/0.3638与底部信息条1,271 judged queries、$0.6375 vs $0都是从 landing/blog/does-xerj-beat-jev.html 的正文逐字摘取的 nDCG10 结果与成本数字——卡片不发明任何数据。这与仓库 scripts/seo/factcheck.py 的内容事实门禁是同一套价值观可发布的数字必须有出处。五、纵深mk_og_card.py 的无依赖光栅化设计哲学博客卡片用的是浏览器渲染而站点级卡片landing/og/xerj-card.png走的是另一条路——scripts/seo/mk_og_card.py 用纯 Python 3 标准库手写了一个扫描线多边形光栅化器没有 Pillow、没有 cairo、没有 rsvg-convert、没有无头浏览器自带 4x 垂直超采样和精确的水平 span 覆盖抗锯齿把品牌字标的粗体大写字母描述成多边形用 stdlib 的zlib/struct直接写 PNG 字节流输出字节确定同一份源码每次运行产生完全相同的字节因此--check可以在 CI 里做字节级比对门禁。它的使用方式python3 scripts/seo/mk_og_card.py --write python3 scripts/seo/mk_og_card.py --check与博客卡片的 Playwright 渲染相比mk_og_card.py的优势是零外部依赖、可确定性校验代价是只能渲染代码里预定义的那几个字形。而博客卡片的 HTML 渲染方式换来的是完整 CSS 排版能力。仓库对两类卡片选择了不同的工具链静态品牌卡用确定性光栅化器内容型博客卡用无头浏览器——但两者共享同一套 1200x630 画幅和同一份style.css品牌 token这正是 RENDER 文档要求同步调色板的根本原因。六、元数据管线从 pagedata 到head里的 og:image渲染出 PNG 只是第一步og:image要真正进入页面head还依赖一条生成管线。这张卡片的注册入口在 scripts/seo/pagedata.py 的blog/does-xerj-beat-jev.html条目第 95-108 行blog/does-xerj-beat-jev.html: dict( labelJev measured, wire spoken, kindarticle, titleDoes XERJ beat JEV? On the bill, outright. On FiQA, no., description1,271 judged queries: Jev rerank takes SciFact 0.7410 ..., published2026-09-21, updated2026-09-27, og_imageog/does-xerj-beat-jev.png, og_image_altXERJ vs JEV, measured: SciFact, NFCorpus and FiQA nDCG10 ..., ),关键点og_image是landing 相对路径指向og/目录下的 PNG。published/updated被显式固定避免datePublished/dateModified随 git 历史漂移og_image_alt的注释特别强调alt 文本只能描述已提交卡片上真实渲染的内容——比如 token 数不在图上信息条只有查询数、价格对比和 URLalt 里就不能写 token 数。这是防止元数据与光栅资产脱节的纪律页面head的生成由 scripts/seo/seo_head.py 的_og_image()完成pagedata指名了每页卡片就用每页卡片否则回退到 scripts/seo/urlmap.py 里定义的站点级常量OG_IMAGE_PATH og/xerj-card.png宽高 alt 均为站点级默认值 1200x630。这条链路是内容 → 元数据表 → 生成器 → lint 校验的单向数据流fix_heads.py读取pagedata.pyseo_lint.py反向验证生成结果与文件系统一致。任何一环的手工修改都会被--check捕获。七、实战操作清单改卡片、重渲染、过门禁把以上内容串起来修改这张卡片并安全提交的完整流程是改 HTML 源文件scripts/seo/assets/og-blog-does-xerj-beat-jev.html。改数据前先对照 landing/blog/does-xerj-beat-jev.html 正文核实数字改颜色前先确认 landing/style.css 的:roottoken 是否已同步变更在 webfont 可加载的环境运行渲染命令第二节的 Playwright 脚本确认输出landing/og/does-xerj-beat-jev.png是 1200x630且没有用到 fallback 字体同步检查元数据若og_image路径或 alt 描述变化更新 scripts/seo/pagedata.py 对应条目保证 alt 只描述图上真实内容成对提交HTML 源文件与 PNG 产物必须一起提交——源文件是源码PNG 是可复现的构建产物两者缺一不可跑 lint 验证python3 scripts/seo/seo_lint.py python3 scripts/seo/mk_og_card.py --checkseo_lint.py会验证og:image为绝对 https、文件存在于landing/、尺寸为 1200x630mk_og_card.py --check单独负责站点级卡片。两张卡片各有一个 gate谁也不替代谁。这套流程的意义在于一张 1200x630 的分享图被当作一份需要版本管理、可复现构建、可自动校验的代码来对待。它保证og:image不会指向一个 404 文件不会因为字体没加载而变形不会因为数据被手改而失真——这正是搜索引擎与 AI 爬虫在读取页面元数据时最需要的确定性。八、可继续深入的文件地图渲染说明与 HTML 源文件scripts/seo/assets/og-blog-does-xerj-beat-jev-RENDER.md、scripts/seo/assets/og-blog-does-xerj-beat-jev.html渲染产物与站点级卡片landing/og/does-xerj-beat-jev.png、landing/og/xerj-card.png无依赖光栅化生成器scripts/seo/mk_og_card.pySEO 门禁rule 31 及全套编号规则scripts/seo/seo_lint.py每页元数据注册表与 URL 权威映射scripts/seo/pagedata.py、scripts/seo/urlmap.pyhead 生成器与工具链总览scripts/seo/seo_head.py、scripts/seo/README.md数据出处博客正文与部署配置landing/blog/does-xerj-beat-jev.html、wrangler.toml赞分享人工智能搜索引擎本地部署后端MCP 服务【免费下载链接】xerjXERJ is the new way for AI to search data. Its autoindex capability activates agents to know your data without the token waste of grep and sed. One command indexes code, docs, logs and PDFs for search, RAG, security audits and agent memory, using 40x fewer tokens than grep. Elasticsearch compatible, so existing clients just work.项目地址https://gitcode.com/GitHub_Trending/xe/xerj点击查看免费下载相关推荐Supabase OG 图片生成器og-images实战指南用 Deno Edge Function 动态渲染 Docs 分享卡片Supabase OG 图片生成器og images实战指南用 Deno Edge Function 动态渲染 Docs 分享卡片 og images 是后端前端数据库认证鉴权PPT Master如何把任意 PDF 变成原生可编辑 PowerPoint 的完整指南PPT Master如何把任意 PDF 变成原生可编辑 PowerPoint 的完整指南 周五下午四点你从领导手里接过一份 28 页的行业白皮书 PDF周AI 技能人工智能AI 应用claude-seo 视觉 SEO 审计指南基于 Playwright 的截图捕获、首屏分析与移动端渲染检查claude seo 视觉 SEO 审计指南基于 Playwright 的截图捕获、首屏分析与移动端渲染检查 claude seo 内置的 seo visua上一篇sokol 多语言绑定生成指南基于 clang 与 Python 的 bindgen 工作流深度解析下一篇tool-use-multiturn-reasoning数据集5大核心字段全解析conversations、tools、task、category、source新手指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?