ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

holaOS GEO 插件实施指南:AI 答案引擎可见性追踪与内容审计的完整设计方案

holaOS GEO 插件实施指南:AI 答案引擎可见性追踪与内容审计的完整设计方案 人工智能AI AgentAI 应用前端后端即时通讯交互助手工具调用【免费下载链接】holaOSOpen-source agentic workspace enterprises can make their own. Connect the systems you already run — 100 integrations, MCP, chat tools, apps, browser, local files — with shared memory. Any agent (Claude Code, Codex), any model, or BYOK. Set up in clicks, not months. Local-first: your data never leaves your machines.项目地址https://gitcode.com/GitHub_Trending/ho/holaOS点击查看免费下载本指南基于 holaOS 仓库中的 GEO 插件实施计划docs/superpowers/plans/2026-06-16-geo-plugin.md与配套设计文档docs/superpowers/specs/2026-06-16-geo-plugin-design.md系统讲解一个聊天式引导chat-onboarded工作区插件的完整技术方案它如何在 AI 答案引擎ChatGPT、Perplexity、Gemini 等中持续追踪品牌可见性并审计品牌自有页面的 GEOGenerative Engine Optimization生成式引擎优化就绪度。读完本文你将掌握该插件的对象模型设计、派生指标算法、定时工作流编排、React 仪表盘表面构建以及基于defineTemplateSDK 的插件模板注册与分阶段实施策略。需要特别说明的是该文档是一份处于设计——待实施状态的技术方案计划中引用的部分参考文件如plugin-templates.ts在当前仓库快照中尚未出现文中涉及计划创建/修改的内容均以此为前提。GEO 插件要解决什么问题传统 SEO 关注品牌在搜索引擎结果页SERP中的排名而 GEO 关注的是品牌在AI 答案引擎中的可见度——即当用户向 ChatGPT 风格的对话产品、Perplexity 风格的搜索产品、Gemini 等提问时品牌是否被提及、以什么排名出现、被如何评价、与哪些竞争对手同框、答案引用了哪些来源。该 GEO 插件围绕两个阶段构建Phase 1可见性追踪在指定时间范围内、针对一组品牌想要赢下的 Prompt持续记录各 AI 答案引擎对品牌的提及情况排名、情感、竞争对手、引用来源形成可视化的可见性评分、声量份额与漂移告警。Phase 2内容审计审计品牌自有页面在 citability可引用性、structure结构、schema结构化数据、freshness新鲜度、crawler-accessAI 爬虫可访问性五个维度的 GEO 就绪度产出带严重级别与具体建议的修复清单。明确的非目标设计文档划定了刻意排除的范围以保证插件精简不生成 AI 内容/不进行 agentic 发布来改善 GEO不做可见性到线索/收入的归因不提供专有的 Prompt 量/AI 关键词面板数据不针对检索爬虫提供 AI 优化 HTMLedge bot-servingv1 不提供推送通知告警仅用仪表盘内的漂移标记不做查询的 geo/人物/语言细分不做对真实 AI UI 的高保真抓取见下文数据层约束。总体架构基于 defineTemplate 的插件模板该插件的架构与既有Research Feed模板镜像一套固定的对象模型 一个仪表盘表面 一个聊天式引导 agent 定时运行的 agent 编写工作流将记录写入 base 存储。技术栈为 TypeScript、node:testruntime api-server 与桌面端、holaboss/runtime-state-store基础模型以及 React Jotai桌面端表面。生命周期完全复用现有 SDKstartOnboarding聊天收集配置 → instantiate创建 base、对象、仪表盘可选工作流 → resolveOperation按钮形态的 agent 动作如添加 Prompt模板定义集中在独立文件geo-plugin-template.ts中而非追加进plugin-templates.ts保持职责聚焦随后在模板注册表WORKSPACE_PLUGIN_TEMPLATE_DEFINITIONS中登记geo模板。桌面端通过registerPluginSurface(geo_visibility_browser, ...)注册新的 React 表面。SDK 的通用用法在仓库文档 docs/plugin-sdk.md 中有完整说明往plugin-templates.ts中投入一个defineTemplate({...})调用并注册进WORKSPACE_PLUGIN_TEMPLATE_DEFINITIONS如需自定义仪表盘视图则新增一个 React 文件 一行registerPluginSurface()调用 一行表面桶barrel导入无需改动表面注册管道。插件模板的持久化基础设施对应迁移文件 runtime/state-store/src/migrations/004-workspace-plugin-templates.ts。关键设计决策per_engine JSON 而非逐引擎多行设计规格最初将geo_visibility定义为每个 (prompt × engine × run) 一条记录实施计划在此基础上做了精化每个 (prompt × run) 仅一条记录引擎级数据放入per_engineJSON 字段每个引擎的 mention/rank/sentiment/competitors/citations。这一调整的理由非常务实契合 runtime 已被验证的trigger → agent → object_write工作流——每次运行只做一次确定性写入与 Research Feed 完全一致避免记录爆炸记录数从 prompt×engine×run 降为 prompt×run仪表盘从per_engine派生 prompt×engine 矩阵citations/competitors 使用json字段类型直接解决了设计文档中的开放问题 #2。数据模型三个 base 对象字段类型与holaboss/runtime-state-store的BaseFieldType对齐string、text、number、enum、status、date、json均为有效类型计划文档标注其在runtime/state-store/src/store.ts:308确认。geo_promptPhase 1——被追踪的查询字段类型说明textstringtitle被追踪的 Prompt/查询topicenum分组主题选项在引导阶段从 onboarding 配置中播种intentstring可选意图如 informational/commercialis_activestatusactive/paused默认active系统字段Prompt 是混合来源引导 agent 依据品牌名 主题自动建议一个初始集合3–8 条用户编辑确认。设计文档明确提示没有任何工具知道真实用户输入的确切 Prompt所有种子都是合成近似。geo_visibilityPhase 1——可见性运行记录字段类型说明promptstringtitlePrompt 文本为显示而反规范化prompt_topicstring主题分组run_datedate必填运行时间engines_checkedenum引擎选项配置驱动来自引导时收集的引擎per_enginejson每引擎结果数组{engine, brand_mentioned, rank, sentiment, competitors, citations}summarytext本次运行摘要引擎枚举是配置驱动的engine/engines_checked的 enum 选项与表面配置中的engine_order均来自引导阶段收集的config.engines绝不硬编码引擎集合。geo_audit_findingPhase 2——内容审计发现字段类型说明urlstringtitle被审计页面findingtext观察/问题描述categoryenumcitability / structure / schema / freshness / crawler_accessseverityenumhigh / medium / lowrecommendationtext可执行修复建议statusstatusopen/done默认open系统字段核心指标算法纯函数驱动的派生指标可见性评分、声量份额、漂移标记是纯、显示派生、不落库的指标全部实现在桌面端纯模块geo-visibility-metrics.ts中不依赖 React、不依赖/别名因此可被node:test直接运行——tsx 在运行时无法解析/*别名现有桌面端测试也只导入纯模块。引擎得分rank 加权衰减// rank 1 - 1.0, 每降 1 名衰减 0.15下限 0被提及但无 rank - 0.5。 function enginePoints(result: GeoEngineResult): number { if (!result.brandMentioned) { return 0; } if (result.rank null) { return 0.5; } return Math.max(0, 1 - (result.rank - 1) * 0.15); }可见性评分0–100取每个 Prompt 的最新一次运行latestRowPerPrompt按runDate取最新对各引擎得分求均值后再对 Prompt 求均值放大 100 倍并取整export function computeVisibilityScore(rows: GeoVisibilityRow[]): number { const latest latestRowPerPrompt(rows); if (latest.length 0) { return 0; } const mean latest.reduce((sum, row) sum rowScore(row), 0) / latest.length; return Math.round(mean * 100); }声量份额Share of Voice统计最新运行中品牌提及次数 vs 竞争对手提及次数品牌占比百分比若未声明竞争对手列表则所有出现的 competitor 名都计入export function computeShareOfVoice(rows: GeoVisibilityRow[], competitors: string[]): number { const known new Set(competitors.map((c) c.toLowerCase())); let brand 0; let comp 0; for (const row of latestRowPerPrompt(rows)) { for (const result of row.perEngine) { if (result.brandMentioned) brand 1; for (const name of result.competitors) { if (known.size 0 || known.has(name.toLowerCase())) comp 1; } } } const denom brand comp; return denom 0 ? 0 : Math.round((brand / denom) * 100); }漂移标记Drift Flag按 Prompt 分组同一 Prompt 至少有两次运行才比较最新一次行得分低于上一次标记down高于则标记up。仪表盘仅对down的 Prompt 显示▼ dropped提示v1 不做推送通知。配套测试覆盖了四类断言评分使用最新运行且 rank 加权r1 单条 ChatGPT rank1 Perplexity miss 得 50含 r2 全部 miss 得 0、声量份额计算r1 得 25%、含 r2 得 0、漂移标记的 down 方向与单次运行无标记。可见性工作流trigger → agent → object_write每个被追踪的 Prompt 实例化一条工作流instantiateWorkflows中按config.promptsmap 生成工作流 ID 形如${pluginId}__geo_visibility_${index1}由三个节点构成节点类型作用trigger-Ntrigger按配置的 cron 计划触发trigger_kind: manualagent-engines-NagentAnswer-engine research对每个引擎执行 web 搜索 配置的模型判断品牌是否被提及、排名、情感、出现的竞争对手、引用的来源域名输出结构化per_engineJSON 数组tool-write-Ntooltool_kind: object_write将结果写为一条geo_visibility记录两条边trigger → agentedge_kind: agent_handoff、agent → tooledge_kind: tool_input。agent 节点的指令模板来自计划文档要求逐引擎输出形如{engine, brand_mentioned, rank, sentiment, competitors, citations}的 JSON并确保字段齐全后再交给下游写入节点。工作流变量占位符模板通过workflowVariables声明了六个变量供 agent 指令与写入 payload 引用key标签说明必填默认promptPrompt被追踪查询是—prompt_topicTopic主题分组否—enginesEngines要查询的引擎标签逗号分隔是—brandBrand需在答案中检测的品牌名是—competitorsCompetitors竞争对手名逗号分隔否—cadenceCadence复查的 cron 表达式是0 9 * * *写入节点的request_payload使用占位符prompt: {{workflow.prompt}}、prompt_topic: {{workflow.prompt_topic}}、engines_checked: {{workflow.engines}}。数据层的可替换性关键约束设计文档明确主流 GEO 工具通过抓取真实 AI UI 与 SERP如 Google AI Overviews获得高保真数据v1 刻意选择低成本、低保真路径——runtime 的原生 web 搜索runtime/api-server/src/native-web-search.ts 工作区已配置的 LLM provider可近似 ChatGPT 风格/Perplexity 风格/Gemini 风格的答案但不能忠实还原Google AI Overviews需要 SERP 数据。由此确立一条设计规则答案收集步骤被隔离在可见性工作流的 agent 节点内。对象模型、评分与仪表盘完全不依赖答案获取方式未来将数据层替换为租用的抓取服务如 Bright Data / Apify或各引擎官方 API 时只需改动该节点的指令或新增一个 toolschema 与 UI 无需任何变动。表面模型解析器 记录归一化纯逻辑桌面端表面逻辑被拆分为纯模型模块与React 组件两层。纯模型geo-visibility-surface-model.ts不含任何 React 或/导入仅依赖 ambient 类型BaseObjectDataRecordPayload全局类型tsx 会剥离因此能在node:test下运行。parseGeoVisibilityDefinition解析 plugin_surface 配置支持两种输入形态——{ plugin_surface: {...} }包裹形态或扁平形态kind必须为geo_visibility_browser否则返回null。字段键支持默认回退prompt_field_key: asTrimmed(input.prompt_field_key) ?? prompt, topic_field_key: asTrimmed(input.topic_field_key) ?? prompt_topic, run_date_field_key: asTrimmed(input.run_date_field_key) ?? run_date, per_engine_field_key: asTrimmed(input.per_engine_field_key) ?? per_engine, summary_field_key: asTrimmed(input.summary_field_key) ?? summary,geoRowsFromRecords记录 → 行归一化将BaseObjectDataRecordPayload[]归一化为GeoVisibilityRow[]从记录的data[per_engine_field_key]读取原始 JSON 数组逐项经normalizeEngine清洗——engine必填、rank仅接受 number、sentiment仅接受positive/neutral/negative三值、brandMentioned严格要求 true、competitors为字符串列表。prompt缺失时以—兜底runDate缺失时回退到record.created_at。审计发现归一化Phase 2 追加auditFindingsFromRecords从记录中抽取 url/finding/category/severity/recommendation/statusseverity校验失败时默认low并按high(0) → medium(1) → low(2)排序保证最严重的问题置顶。仪表盘组件GeoVisibilityDashboardSurfaceReact 组件 [计划文件GeoVisibilityDashboardSurface.tsx] 导入纯模型与指标模块构成完整界面指标头部Metric组件展示Visibility score与Share of voice两大数字配 tabular-nums 字体保证数字对齐操作按钮Add prompt触发add_prompt操作与 Run check触发run_visibility_check操作经useStartPluginOperation发起数据加载useEffect中通过window.electronAPI.workspace.listBaseRecords(workspaceId, targetObject.object_id, pluginId, { actor: null })拉取记录带 cancelled 标志防竞态Prompt×Engine 矩阵取每个 Prompt 最新一次运行按definition.engine_order顺序渲染引擎列引擎内有品牌提及显示#rank无 rank 显示#—未提及显示—漂移向下的 Prompt 附加橙色▼ dropped标记空态与错误态无数据时显示Run a visibility check to populate this dashboard.引导加载失败时显示错误信息。表面注册发生在plugin-surfaces/builtin.tsx包装组件GeoVisibilityBrowserSurface内用useMemo依次尝试两种解析形态definition为null时返回null否则渲染仪表盘最后执行registerPluginSurface(geo_visibility_browser, GeoVisibilityBrowserSurface)。Audit 标签页Phase 2仪表盘增加tab状态visibility | audit默认 visibility审计对象通过schema.objects.find((o) o.slug.endsWith(geo-audit-finding))按 slug 后缀发现——无需新增表面配置键。审计记录仅在切到 Audit 标签时加载第二个useEffect以tab audit为守卫发现项按严重级别分组展示并配 Run content audit 按钮触发run_audit操作。聊天式引导Onboarding引导 agent 通过聊天收集插件名、品牌名与域名、竞争对手、要追踪的引擎优先推荐该工作区已配置模型 provider 的引擎如 ChatGPT、Perplexity、Gemini、被追踪 Prompt自动建议初始集合再交用户编辑目标 3–8 条、复查计划用自然语言询问并翻译成 cron默认0 9 * * *。模板的onboarding配置包含欢迎语Hi! Lets set up GEO tracking. First — what brand are we tracking...)、五步收集指引品牌名与域名 / 竞争对手 / 要追踪的引擎 / Prompt 与主题 / 复查计划以及两条约束引导期间可以创建或修订工作流但对象模型与仪表盘保持固定每个 Prompt 的工作流必须以一次geo_visibility写入终结且写入须包含prompt、run_date、per_engine。模板的GEO_DOMAIN_PROMPT详细规定了 agent 的角色边界对象geo_prompt、geo_visibility引擎数据在per_engineJSON与仪表盘是固定的、不可改动的agent 只负责收集品牌档案与 Prompt 并逐条接线工作流。指令风格要求一次只问一个问题、确认后再行动、回复简短用户在聊天窗格阅读。操作Operations仪表盘按钮背后的 agent 会话三个操作均通过assistantPrefill生成引导文本复用与 Research Feed添加分类相同的绑定 agent 会话机制操作 ID按钮标签用途add_promptAdd tracked prompt聊天添加一条 Prompt 主题预填文案引导用户给出查询与主题确认后按常规计划开始追踪run_visibility_checkRun visibility check now立即对所有激活 Prompt 执行一次可见性检查结束时汇报品牌整体存在感的一行摘要run_auditRun content audit抓取品牌关键页面评估 citability/structure/schema/freshness 与 AI 爬虫可访问性检查robots.txt中的 GPTBot / ClaudeBot / PerplexityBot逐条写入geo_audit_finding并给出严重级别与具体建议值得注意的是Phase 2 的审计运行由run_audit操作驱动绑定 agent 会话 工作区的 web 与 object-write 工具并非按 Prompt 实例化的工作流因此无需改动instantiateWorkflows——agent 直接写入geo_audit_finding记录。分阶段实施任务清单与验证策略实施计划采用 checkbox 语法的任务驱动方式共 10 个任务每个任务遵循先写失败测试 → 跑测试确认失败 → 最小实现 → 跑测试确认通过 → git commit的 TDD 循环Phase 1可见性追踪任务产出验证方式Task 1引导配置类型 parseGeoOnboardingConfig解析器4 个单元测试完整配置解析、brand_name必填、至少一个引擎/Prompt、cadence默认0 9 * * *Task 2defineTemplate完整定义对象 仪表盘 操作 引导2 个测试payload 形状、仪表盘描述Task 3在WORKSPACE_PLUGIN_TEMPLATE_DEFINITIONS注册geo模板列表断言从 1 增至 2[geo, research_feed] geo 可解析断言Task 4可见性工作流节点/边替换桩实现1 个测试断言[trigger, agent, tool]节点序列与object_write配置Task 5纯指标模块geo-visibility-metrics.ts4 个测试评分/声量/漂移Task 6纯表面模型 React 仪表盘组件模型 3 个测试组件由tsc --noEmit把关.tsx引入 React///electron无法在node:test下运行Task 7注册geo_visibility_browser表面typecheck 手动验证builtin.tsx是 React 副作用模块Phase 2内容审计任务产出验证方式Task 8geo_audit_finding对象 字段构造器对象列表断言扩展至 3 个Task 9run_audit操作操作列表断言 assistantPrefill含 audit 断言Task 10审计归一化 Audit 标签页模型追加 1 个测试按严重级别排序组件 typecheck测试命令Runtime api-servercd runtime/api-server node --import tsx --test --test-force-exit src/file.test.ts桌面端cd apps/desktop node --import tsx --test src/path/file.test.ts桌面端类型检查cd apps/desktop node_modules/.bin/tsc --noEmit -p tsconfig.json计划还给出了可选的端到端冒烟验证运行桌面端通过引导创建 GEO 插件确认 Visibility 仪表盘渲染评分头部、Add prompt/Run check按钮运行后出现 prompt×engine 矩阵Phase 2 触发 Run content audit 后确认 Audit 标签页按严重级别分组展示 open/done 状态的发现项。实施注意事项来自计划文档字段类型string、text、number、enum、status、date、json均为BaseFieldType有效取值citations/competitors采用json字段类型引擎列表配置驱动引擎 enum 选项与表面engine_order均来自引导收集的config.engines严禁硬编码引擎集合数据层隔离对象模型、评分、仪表盘不依赖答案获取方式未来更换 SERP/抓取 provider 只触及 agent 节点指令或新增 tool代码组织GEO 代码保持独立于geo-plugin-template.tsplugin-templates.ts只做注册导入与登记不追加实现测试边界若表面注册测试因builtin.tsx的重型传递 React/electron 导入无法在node:test下运行可放弃该测试文件依靠 typecheck 手动验证纯解析器/指标测试仍是安全网。与仓库现有基础设施的衔接该方案的实现依赖仓库中已存在的三块基础设施插件模板 SDK 与注册管道用法文档见 docs/plugin-sdk.mddefineTemplate、parseInstantiationConfig、instantiateWorkflows、resolveOperation的完整契约持久化迁移见 runtime/state-store/src/migrations/004-workspace-plugin-templates.ts原生 web 搜索数据层runtime/api-server/src/native-web-search.ts 与对应的 native-web-search.test.ts 提供答案引擎查询的低保真近似能力是可见性工作流 agent 节点的数据来源状态存储基础模型holaboss/runtime-state-store提供WorkflowNodeRecord、WorkflowEdgeRecord等工作流记录类型与BaseFieldType字段类型体系。整体而言这份计划展示了一种可复用的工作区插件构建模式以固定对象模型 聊天式引导 定时 agent 工作流 纯函数派生指标 React 仪表盘为骨架用配置驱动而非硬编码的方式保持灵活性同时通过数据层隔离保留未来升级高保真抓取能力的演进空间。对希望自行构建AI 时代品牌监测类工作区插件的开发者这是一份可直接照搬的完整参考蓝图。赞分享人工智能AI AgentAI 应用前端后端即时通讯交互助手工具调用【免费下载链接】holaOSOpen-source agentic workspace enterprises can make their own. Connect the systems you already run — 100 integrations, MCP, chat tools, apps, browser, local files — with shared memory. Any agent (Claude Code, Codex), any model, or BYOK. Set up in clicks, not months. Local-first: your data never leaves your machines.项目地址https://gitcode.com/GitHub_Trending/ho/holaOS点击查看免费下载相关推荐Sonosano音乐库管理完全指南整理你的数字音乐收藏Sonosano音乐库管理完全指南整理你的数字音乐收藏 Sonosano是一款功能强大的P2P音乐播放器它不仅能够帮助你发现和下载高质量的音乐还提供了完整PythonVistaWindows Vista/7系统Python兼容性技术架构深度解析与实现方案PythonVistaWindows Vista/7系统Python兼容性技术架构深度解析与实现方案 PythonVista项目为Windows Vista操作系统如何在5分钟内快速部署Nimbus云存储平台终极简易指南 如何在5分钟内快速部署Nimbus云存储平台终极简易指南 想要拥有自己的私有云存储服务吗Nimbus云存储平台为您提供了一个完美的解决方案本文将为您上一篇FrankMocap终极3D人体姿态估计革命 - Facebook AI的单视角运动捕捉神器下一篇cargo-dist工作空间管理如何高效处理多Crate Rust项目创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表