Files
geo/docs/superpowers/specs/2026-04-16-kol-feature-design.md
T
root 33f1121633 docs: add KOL feature design spec
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 22:08:50 +08:00

16 KiB
Raw Blame History

KOL 功能设计文档

概述

为 GEO 工具平台新增 KOLKey Opinion Leader)功能模块。KOL 是平台中的超级用户角色——拥有普通用户的全部功能,同时可以创建、管理精调 prompt 订阅包,供其他用户付费订阅使用。平台记录订阅和使用数据,后续用于给 KOL 结算。

核心概念

  • KOL 用户:拥有 platform_role = "kol" 的用户,具备普通用户全部权限 + 提示词管理 + 数据看板
  • 订阅包(PackageKOL 发布的一组精调 prompt 的集合,面向某个行业/场景(如"家具行业精调包")
  • Prompt:包内的具体提示词,适配不同平台或版本(如"豆包版友好"、"DeepSeek版"、"精调2025.4.16版"
  • 动态表单:每个 prompt 由 KOL 定义用户需要填写的变量(公司名、竞品等),prompt 内容对用户不可见
  • 订阅:用户通过申请订阅获取 KOL 包的使用权,管理员审批或手动绑定开通,第一版不做支付

实现策略

采用渐进式集成方案:KOL 作为现有系统的扩展层,复用已有的 article、generation_tasks 基础设施,新增 KOL 相关数据表和页面。改动最小,风险最低。


1. 数据模型

1.1 新增表

kol_packages — 订阅包

CREATE TABLE kol_packages (
    id          BIGSERIAL PRIMARY KEY,
    kol_user_id BIGINT NOT NULL REFERENCES users(id),
    name        VARCHAR(200) NOT NULL,
    description TEXT,
    cover_url   TEXT,
    industry    VARCHAR(100),
    tags        JSONB NOT NULL DEFAULT '[]',
    price_note  VARCHAR(200),
    status      VARCHAR(20) NOT NULL DEFAULT 'draft',  -- draft / published / archived
    created_at  TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at  TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    deleted_at  TIMESTAMPTZ
);
CREATE INDEX idx_kol_packages_kol_user ON kol_packages(kol_user_id) WHERE deleted_at IS NULL;
CREATE INDEX idx_kol_packages_status ON kol_packages(status) WHERE deleted_at IS NULL;

kol_prompts — KOL 提示词

CREATE TABLE kol_prompts (
    id               BIGSERIAL PRIMARY KEY,
    package_id       BIGINT NOT NULL REFERENCES kol_packages(id),
    name             VARCHAR(200) NOT NULL,
    platform_hint    VARCHAR(100),        -- doubao / deepseek / chatgpt / 通用 等
    prompt_content   TEXT NOT NULL,        -- prompt 模板内容,含 {{变量}} 占位符,用户不可见
    variables_schema JSONB NOT NULL DEFAULT '[]',  -- 动态表单定义
    sort_order       INT NOT NULL DEFAULT 0,
    status           VARCHAR(20) NOT NULL DEFAULT 'draft',  -- draft / active / archived
    created_at       TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at       TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_kol_prompts_package ON kol_prompts(package_id);

variables_schema 格式(变量 key 默认中文,也支持英文):

[
  {
    "key": "公司名称",
    "label": "公司名称",
    "type": "input",
    "required": true,
    "placeholder": "请输入您的公司名"
  },
  {
    "key": "行业",
    "label": "行业",
    "type": "select",
    "options": ["家具", "建材", "家电"],
    "required": true
  },
  {
    "key": "主要竞品",
    "label": "主要竞品",
    "type": "textarea",
    "required": false
  },
  {
    "key": "月预算",
    "label": "月预算(万)",
    "type": "number",
    "required": false
  }
]

支持的 type 值:input(单行文本)、textarea(多行文本)、select(下拉选择)、number(数字)、checkbox(多选标签)。

kol_subscriptions — 订阅关系

CREATE TABLE kol_subscriptions (
    id          BIGSERIAL PRIMARY KEY,
    tenant_id   BIGINT NOT NULL REFERENCES tenants(id),
    package_id  BIGINT NOT NULL REFERENCES kol_packages(id),
    status      VARCHAR(20) NOT NULL DEFAULT 'pending',  -- pending / active / expired / revoked
    approved_by BIGINT REFERENCES users(id),
    start_at    TIMESTAMPTZ,
    end_at      TIMESTAMPTZ,
    created_at  TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at  TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE UNIQUE INDEX uk_kol_subscription_active ON kol_subscriptions(tenant_id, package_id) WHERE status IN ('pending', 'active');

kol_usage_logs — 使用记录

CREATE TABLE kol_usage_logs (
    id                 BIGSERIAL PRIMARY KEY,
    package_id         BIGINT NOT NULL REFERENCES kol_packages(id),
    prompt_id          BIGINT NOT NULL REFERENCES kol_prompts(id),
    tenant_id          BIGINT NOT NULL REFERENCES tenants(id),
    article_id         BIGINT REFERENCES articles(id),
    variables_snapshot JSONB,
    created_at         TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_kol_usage_package ON kol_usage_logs(package_id, created_at DESC);
CREATE INDEX idx_kol_usage_tenant ON kol_usage_logs(tenant_id, created_at DESC);

1.2 现有表变更

articles 表

新增字段:

  • kol_prompt_id BIGINT REFERENCES kol_prompts(id) — 关联使用的 KOL prompt

新增 source_type 值:"kol"

generation_tasks 表

新增 task_type 值:"kol"

input_params_json 存储用户填入的变量值:

{
  "kol_prompt_id": 42,
  "variables": {
    "公司名称": "宜家家居",
    "行业": "家具",
    "主要竞品": "全友、顾家",
    "月预算": 50
  }
}

platform_user_roles 表

新增 platform_role 值:"kol"


2. 页面结构与路由

2.1 侧边栏导航变更

在现有 navSectionsAppShell.vue)中新增两个分组:

现有导航:
  Workspace
  文章创作: 模版生成 | 自定义生成 | 自由创作 | 发布管理
  品牌管理: 品牌库
  品牌追踪: 追踪详情
  内容管理: 知识库 | 图片库

新增:
  KOL 市场: 模版市场                    ← 所有用户可见
  KOL 工作台: 提示词管理 | 数据看板      ← 仅 KOL 角色可见

"KOL 工作台" 分组根据用户 permissions 或 platform_role 动态显示/隐藏。

2.2 新增路由

路由 组件 角色 说明
/kol/marketplace KolMarketplaceView 所有用户 浏览/筛选/订阅 KOL 包
/kol/packages/:id KolPackageDetailView 所有用户 包详情 → prompt 列表 → 选择 prompt
/kol/generate/:promptId KolGenerateView 已订阅用户 动态表单(填变量)→ 提交生成
/kol/manage KolManageView 仅 KOL 管理订阅包 + AI 辅助编写 prompt
/kol/dashboard KolDashboardView 仅 KOL 订阅数据统计看板

2.3 用户入口(3个)

  1. 侧边栏「模版市场」→ 浏览/筛选 → 订阅 → 选 prompt → 表单 → 生成
  2. Workspace 卡片区:已订阅的包显示为卡片 → 点击 → 选 prompt → 表单 → 生成
  3. 模版生成页面:已订阅的 KOL 包也出现在模版选择器 modal 中

3. 普通用户流程

3.1 模版市场(KolMarketplaceView

  • 卡片网格展示所有已发布的 KOL 订阅包
  • 筛选:按行业、标签、KOL 名称
  • 每张卡片展示:封面、包名、KOL 名称、行业标签、prompt 数量、订阅人数
  • 卡片操作:点击进入包详情

3.2 包详情(KolPackageDetailView

  • 头部:包名、描述、KOL 信息、行业标签
  • 订阅状态区:
    • 未订阅 → 显示「申请订阅」按钮(状态变为 pending)
    • 待审批 → 显示「审核中」状态
    • 已订阅 → 显示有效期
  • Prompt 列表:展示包内所有 active prompt,每个显示名称 + 平台标识
  • 点击某个 prompt → 跳转到生成页面(需已订阅)

3.3 动态表单生成(KolGenerateView

  • 根据 kol_prompts.variables_schema 动态渲染表单
  • 支持的字段类型:input、textarea、select、number、checkbox
  • 用户填写变量 → 点击「生成文章」
  • 后端:变量值替换 prompt 模板中的 {{key}} → 调用 LLM → 生成文章
  • 生成的文章 source_type = "kol"kol_prompt_id 关联对应 prompt
  • 同时写入 kol_usage_logs 记录

4. KOL 提示词编辑器(KolManageView

4.1 包管理

  • 列表展示 KOL 自己创建的所有订阅包
  • 创建/编辑包:名称、描述、封面、行业、标签、定价说明
  • 包状态管理:草稿 → 发布 → 下架

4.2 Prompt 编辑器(核心组件)

三栏布局:

  • 左栏 — 变量组件面板(200px

    • 5 种可拖拽组件:输入框、多行文本、选择框、数字框、多选框
    • 拖入编辑区光标位置触发配置
  • 中栏 — Prompt 编辑区

    • 顶部 AI 辅助栏:
      • AI 生成:KOL 描述需求 → AI 生成完整 prompt 模板(含变量)
      • AI 优化:选中现有 prompt → AI 优化措辞/结构
      • 复用现有 template_assist_tasks 异步任务机制
    • 编辑区:支持富文本编辑,变量以彩色标签形式内联展示(如 {{公司名称}}
    • 操作栏:预览表单、保存草稿、发布
  • 右栏 — 变量配置面板(260px

    • 展示所有已添加的变量卡片
    • 点击可编辑:key、显示名(label)、类型、是否必填、提示语、选项列表
    • 变量 key 默认 = 显示名(中文),也支持手动改为英文

4.3 拖拽交互流程

  1. KOL 从左侧面板拖一个组件到编辑区光标位置
  2. 弹出配置弹窗:填写变量 key(默认中文)、显示名、必填、提示语/选项
  3. 确认后:编辑区插入 {{key}} 占位符标签 + 右侧面板出现配置卡片
  4. 后续可在右侧面板修改配置,编辑区标签同步更新

4.4 Prompt 内容保护

  • prompt_content 只存储在服务端
  • 面向普通用户的 API 永远不返回 prompt 原文
  • 用户端只获取 variables_schema(表单定义)用于渲染表单

5. KOL 数据看板(KolDashboardView

5.1 数据指标

  • 总订阅数:所有包的 active 订阅总数
  • 本月新增订阅:当月新增 active 订阅
  • 总使用次数:所有 prompt 被使用生成文章的总次数
  • 本月使用次数:当月使用次数

5.2 按包维度

  • 每个包的订阅用户数、使用次数
  • 包内各 prompt 的使用次数排行

5.3 趋势图

  • 订阅数随时间变化趋势
  • 使用次数随时间变化趋势

5.4 数据来源

  • 订阅数据:查询 kol_subscriptions
  • 使用数据:查询 kol_usage_logs
  • 后续扩展:收益计算、结算报表

6. 订阅管理

6.1 用户申请订阅

  • 用户在包详情页点击「申请订阅」
  • 创建 kol_subscriptions 记录,status = 'pending'
  • 后续管理员审批

6.2 管理员操作

第一版通过现有平台管理机制处理:

  • 审批待处理的订阅申请(pending → active
  • 手动绑定开通:管理员直接创建 status = 'active' 的订阅记录
  • 撤销订阅(active → revoked

6.3 订阅鉴权

  • 用户访问 /kol/generate/:promptId 时,后端检查:
    1. prompt 所属 package 是否存在
    2. 用户 tenant 是否有该 package 的 active 订阅
    3. 订阅是否在有效期内
  • 不满足则返回 403

7. API 设计

7.1 KOL 市场(所有用户)

GET    /api/tenant/kol/packages                  -- 市场列表(筛选:industry, tags, keyword
GET    /api/tenant/kol/packages/:id              -- 包详情(含 prompt 列表,不含 prompt_content
POST   /api/tenant/kol/packages/:id/subscribe    -- 申请订阅
GET    /api/tenant/kol/subscriptions             -- 我的订阅列表

7.2 KOL 生成(已订阅用户)

GET    /api/tenant/kol/prompts/:id/schema        -- 获取 prompt 的 variables_schema(不含 prompt_content
POST   /api/tenant/kol/prompts/:id/generate      -- 提交生成(body: variables 对象)

7.3 KOL 管理(仅 KOL 角色)

GET    /api/tenant/kol/manage/packages           -- 我的包列表
POST   /api/tenant/kol/manage/packages           -- 创建包
PUT    /api/tenant/kol/manage/packages/:id       -- 更新包
DELETE /api/tenant/kol/manage/packages/:id       -- 删除包(软删除)

GET    /api/tenant/kol/manage/packages/:id/prompts       -- 包内 prompt 列表(含 prompt_content
POST   /api/tenant/kol/manage/packages/:id/prompts       -- 创建 prompt
PUT    /api/tenant/kol/manage/prompts/:id                -- 更新 prompt
DELETE /api/tenant/kol/manage/prompts/:id                -- 删除 prompt

POST   /api/tenant/kol/manage/prompts/ai-generate        -- AI 辅助生成 prompt
POST   /api/tenant/kol/manage/prompts/ai-optimize        -- AI 辅助优化 prompt

7.4 KOL 看板(仅 KOL 角色)

GET    /api/tenant/kol/dashboard/overview        -- 总体指标
GET    /api/tenant/kol/dashboard/packages        -- 按包维度统计
GET    /api/tenant/kol/dashboard/trend           -- 趋势数据(query: period=7d/30d/90d

7.5 Workspace 集成

GET    /api/tenant/workspace/template-cards      -- 现有接口,扩展返回已订阅的 KOL 包卡片

8. 前端关键组件

组件 说明
KolMarketplaceView.vue 模版市场页面,卡片网格 + 筛选
KolPackageDetailView.vue 包详情,prompt 列表 + 订阅操作
KolGenerateView.vue 动态表单生成页面
KolManageView.vue KOL 包和 prompt 管理
KolPromptEditor.vue 核心组件:三栏 prompt 编辑器
KolVariablePanel.vue 左侧变量组件拖拽面板
KolVariableConfig.vue 右侧变量配置面板
KolDynamicForm.vue 根据 variables_schema 渲染动态表单(用户端 + 预览)
KolDashboardView.vue KOL 数据看板
KolPackageCard.vue 市场/Workspace 中的订阅包卡片组件

9. 权限与角色

9.1 角色判断

  • platform_user_roles 表中 platform_role = 'kol' 标识 KOL 用户
  • 前端通过 userInfo.permissions 或单独 API 判断当前用户是否为 KOL
  • KOL 工作台导航分组根据角色动态显示/隐藏

9.2 路由守卫

  • /kol/manage/kol/dashboard:前端路由守卫 + 后端 API 鉴权,仅 KOL 可访问
  • /kol/generate/:promptId:后端校验订阅状态

9.3 API 鉴权

  • /api/tenant/kol/manage/*:中间件校验 KOL 角色
  • /api/tenant/kol/prompts/:id/generate:校验订阅有效性
  • /api/tenant/kol/dashboard/*:校验 KOL 角色

10. i18n

zh-CN.tsen-US.ts 中新增 kol 命名空间:

kol.marketplace.title          -- 模版市场 / KOL Marketplace
kol.marketplace.filter.*       -- 筛选相关
kol.package.subscribe          -- 申请订阅
kol.package.subscribed         -- 已订阅
kol.package.pending            -- 审核中
kol.generate.title             -- 生成文章
kol.generate.submit            -- 提交生成
kol.manage.title               -- 提示词管理
kol.manage.createPackage       -- 创建订阅包
kol.manage.editor.*            -- 编辑器相关
kol.dashboard.title            -- 数据看板
kol.dashboard.totalSubs        -- 总订阅数
kol.dashboard.monthSubs        -- 本月新增
kol.dashboard.totalUsage       -- 总使用次数
kol.dashboard.monthUsage       -- 本月使用
nav.kolMarketplace             -- 模版市场
nav.kolManage                  -- 提示词管理
nav.kolDashboard               -- 数据看板
status.sourceType.kol          -- KOL 生成

11. 与现有系统的集成点

现有模块 集成方式
articles 表 新增 source_type = "kol" + kol_prompt_id 字段
generation_tasks 表 新增 task_type = "kol"
文章生成管道 复用 generation_tasks → worker → article_versions 流程
platform_user_roles 新增 platform_role = "kol"
template_assist_tasks AI 辅助编写 prompt 复用此异步任务机制
AppShell.vue navSections 新增 2 个导航分组
WorkspaceView.vue 卡片区扩展显示已订阅 KOL 包
TemplatesView.vue picker 模版选择器 modal 中可展示已订阅 KOL 包
display.ts getSourceTypeLabel 新增 "kol" 分支
shared-types 新增 KOL 相关 TypeScript 接口

12. 第一版范围与不做的事

第一版做

  • KOL 角色标识
  • 订阅包 CRUD + 发布/下架
  • Prompt 编辑器(变量拖拽 + AI 辅助)
  • 模版市场浏览/筛选
  • 申请订阅 + 管理员手动绑定开通
  • 动态表单 → 文章生成
  • KOL 数据看板(基础指标 + 趋势)
  • Workspace 和模版选择器集成
  • i18n 中英文支持

第一版不做

  • 在线支付(用申请 + 管理员审批代替)
  • 收益计算和提现
  • Prompt 版本历史管理
  • KOL 申请入驻流程(由管理员手动分配角色)
  • 订阅包评价/评分系统
  • Prompt A/B 测试