公开知识库(Public KB)是您知识库中可无需登录即可通过直接链接、小组件或 iframe 访问的部分。只有您明确标记为公开的文章才会出现在这里。

原因:

  • 客户自助服务 — 客户无需联系支持即可自行找到答案
  • SEO — 公开文章会被 Google 及其他搜索引擎索引
  • 演示 — 潜在客户在购买前阅读文档
  • 合作伙伴 — 无需创建账户即可访问技术文档

#文章如何变为公开

公开性由两项设置启用 —— 一项在文章级别,一项在组织级别。在两者都就位之前,匿名访客都不会看到该文章。

文章级别
publish_state = public
只有 public 的文章才会进入匿名访问;internal / draft / inherit 保持隐藏。文章只能在 corporate 空间中被标记为公开 —— 在 private 和 personal 空间中发布被禁用。
组织级别
访问模式 = “公开”
设置 → 组织 → 访问模式 中。如果组织处于“企业”模式,公开地址将关闭,匿名用户将看不到任何内容 —— 即使是 public 状态的文章。

不存在“public”空间类型。 空间只有 Corporate / Private / Personal 三种。文章之所以可见,不是通过将其移入某个特殊空间,而是通过 publish_state=public 标记(在 corporate 空间中)加上组织的公开访问模式已开启。

#publish_state 状态(ADR 0029)

LiKE 使用 publish_state 字段(它取代了旧的 visibility 字段)。共四种状态:

状态 谁能看到 备注
draft 仅作者和空间编辑者 草稿 — 团队不可见,也不纳入搜索
inherit 继承父集合/空间的可见性级别 ADR 0029
internal 空间中所有已授权的成员 团队可见(新文章的默认值)
public 所有人,包括通过 Public KB 访问的匿名用户 编辑器中的“发布”按钮 — 仅在 corporate 空间中可用

在 UI 中,状态的颜色通过一个圆点指示器显示:

草稿 — 仅作者和编辑者可见
内部 — 面向已授权的团队
🌐 公开 — 通过 Public KB 匿名访问
有未发布的更改 — 显示的是先前的版本,新版本在编辑器中

相同的标记也会显示在文章管理的文章列表中。


#虚拟 __public__ 空间

当匿名用户通过直接链接或小组件打开 Public KB 时,从技术上讲,他们并不在您的任何空间中。相反,LiKE 使用一个虚拟“空间” __public__ — 一个哨兵值,它:

  • 在数据库中并不作为真实的 ArticleCollection.type='public' 存在
  • 包含组织的 corporate 空间中所有 publish_state='public'文章
  • 用于匿名用户 RAG 搜索中的筛选
  • 在 SpaceSwitcher 中显示为“🌐 公开文章”(如果该用户同时拥有私有空间)

如果您是已授权成员,在 SpaceSwitcher 中切换到 __public__,即可看到与匿名访客完全相同的一组文章 — 这便于检查“我不小心发布了什么”。


#设置(分步骤)

#第 1 步 — 将文章放入 corporate 空间

您只能从 corporate 空间对外发布文章(在 private 和 personal 空间中发布被禁用)。如果您的文章在其他空间中,请将它们移入 corporate 空间:逐篇通过文章的上下文菜单 → 移动,或批量(复选框 → 移动)。创建空间时,可用的类型为 CorporatePrivate;“Personal”是系统空间。

#第 2 步 — 将文章设为公开

将您需要的文章切换为 publish_state = public(参见文章管理):

  • 批量 — 用复选框选择 → 操作栏上的**地球(🌐)**按钮 → Public
  • 单篇文章 — **“⋮”**菜单 → “可见性:…” → Public;在“树形”模式中 — 上下文菜单 → “设为公开”
  • 在编辑器中 — 头部的 **“发布”**按钮

之后,状态指示器变为绿色,并出现 🌐 公开 标记。如果文章包含个人数据,会弹出确认对话框 —— 参见下文“发布前的个人数据检查”。

#第 3 步 — 开启组织的公开模式

设置 → 组织 → 访问模式 → 选择 “公开”

  • 公开 — 匿名用户可在公开地址看到被标记为公开的文章;私有空间仍仅限受邀者访问。
  • 企业 — 一切仅对已登录成员可用;未登录的外部用户看不到任何内容,即使是被标记为公开的文章

未开启“公开”模式时,公开地址处于关闭状态 —— 此步骤为必需

#第 4 步 — 公开地址与渠道

有三种方式打开已就绪的公开知识库:

  • 公开门户 — 您地址的根 https://<your-slug>.lynkora.pro:无需登录即可搜索、获取 AI 回答和阅读文章。单篇文章位于 /kb/<article-slug>
  • JS 小组件 — 嵌入到您的网站;小组件代码取自 集成 → 渠道(“JS 小组件”卡片)。
  • iframe — 将完整搜索界面嵌入到页面中。

设置中不再有单独的“Public KB”标签页(ADR 0029):公开性现在由文章标记 + 组织模式设置,而不是来源白名单。小组件在 集成 → 渠道 中管理。


#发布前的个人数据检查

当您将文章切换为公开时,LiKE 会自动扫描其中的个人数据(PII)。如果检测到任何个人数据,发布将被暂停,并弹出**"检测到个人数据"**对话框——在文章对所有人开放、无需登录即可访问之前。

**触发时机:**仅在发布时(切换为 public,匿名访问)。它不会对 internaldraftinherit 运行。它适用于所有发布路径:编辑器中的"发布"按钮、列表/树形中的"设为公开"、批量可见性更改,以及发布合集/空间。

检测内容(确定性的、基于模式):

  • 电子邮件
  • 电话
  • 支付卡(Luhn 校验和)
  • IBAN(校验和验证)
  • IP 地址
  • 出生日期

特殊类别(健康、生物识别等,GDPR Art. 9)目前尚不会被自动检测——对话框仅就发布此类数据所涉及的更高责任发出提示。

对话框显示内容:

  • 标题"检测到个人数据"以及检测到的类型及其计数列表(在所有正在发布的文章中汇总)。
  • 一个必选的确认复选框:该工具有助于检测 PII,但不保证完整性;您作为数据控制者,仍须对发布的合法性以及是否具备法律依据或同意负责。
  • 取消发布按钮(仅在勾选复选框后才启用"发布")。

**确认之后:**文章将被发布,确认记录会连同检测到的数据类型一起写入活动日志pii_public_ack)——而不存储 PII 文本本身(隐私设计原则,privacy-by-design)。该确认与文章的当前版本绑定:如果之后您编辑了文本,则需要重新确认。

**谁可以确认:**与可发布者相同的角色——文章所在空间中的 Editor 及以上(Owner 和 Admin 始终可以)。批量发布某个来源的所有文章仅限 Owner/Admin。


#用于 Public KB 的小组件(dual-auth,ADR 0032)

LiKE 为小组件支持两种身份验证模式 — 在 集成 → 小组件 中创建小组件时选择:

#模式 1 — 允许的路径(用于公开站点)

嵌入在公司公开站点(落地页、营销页面、帮助中心)上的小组件。无需身份验证 — 该小组件对任何访客可用。

滥用防护:

  • 允许的 URL 列表(allowed paths)— 此 api-key 在这些地方有效。例如,https://yoursite.com/*https://docs.yoursite.com/*。来自其他域的请求会被拒绝(CORS + 检查)。
  • Public 伞形范围 — 小组件仅可访问 __public__ 空间 + 该空间中在创建时定义的特定集合。
  • api-key 上的速率限制 — 防止机器人。

#模式 2 — 会话 JWT(用于带身份验证的企业站点)

嵌入在公司内部门户上的小组件,用户已经通过了身份验证。该小组件接受会话 JWT,并且看到的内容与该用户看到的完全一致。

使用场景:

  • 企业内网上的小组件 → 每位员工看到自己的空间
  • 嵌入 SaaS 应用(例如 CRM)中 — 用户看到与其角色相符的文档

#每租户多小组件(ADR 0029 Stage 4)

在一个组织内,您可以创建多个具有不同范围的小组件

  • 一个 — 公开的,用于营销站点(allowed paths)
  • 另一个 — 企业的,用于内网(会话 JWT)
  • 第三个 — 用于特定集合(例如,仅面向支持中心的 FAQ)

每个小组件都有自己的 api-key、范围和身份验证模式。详情参见集成 → 小组件API 与小组件


#匿名访客看到的内容

元素 是否可见?
公开空间中 publish_state=public 的文章 ✅ 是
针对这些文章的 AI 搜索 ✅ 是
公开空间的集合目录 ✅ 是
简短的分享/嵌入链接(如果为该文章启用) ✅ 是
“登录以获取完整访问权限”横幅(如果小组件是匿名的) ✅ 是
internaldraftinherit 文章 ❌ 否
来自私有空间的文章 ❌ 否
查询历史 / 推荐(个人的) ❌ 否
管理面板、回收站、日志、分析 ❌ 否

匿名搜索默认使用客户端指纹 cookie 进行基本的速率限制,但不会将请求关联到用户账户。


#隐藏单个集合

在公开空间中,并非所有集合都必须对匿名用户可见。您可以隐藏特定集合:

  1. 集合的上下文菜单 → 属性
  2. 集合的 publish_state 字段:
    • inherit — 继承自空间(默认)
    • internal — 对匿名用户隐藏,对团队可见
    • public — 明确公开(仅在 corporate 空间中,否则被禁用)

这提供了灵活性:例如,在公开的“文档”空间中,您可以将草稿保留在一个 publish_state=internalInternal Drafts 集合中 — 它们对外不可见,但对您的编辑者可用。


#嵌入到网站

Public KB 可通过三种方式集成到网站中:

方式 说明
直接链接 https://<slug>.lynkora.pro — 一个完整的门户站点,带有文章列表、AI 搜索和导航
JS 小组件 任意页面角落的浮动按钮;它展开为 AI 对话与搜索;行为可配置,在带 white-label 的套餐上,品牌也可配置
iframe 一个嵌入块(例如,您应用内的“帮助”页面)— 框架中的完整 LiKE 界面
REST API 通过 api-key 从您的后端发起直接请求 — 用于集成到您自己的界面中

关于每种方式的详情 — API 与小组件集成


#White-label 与自定义域名

公开知识库在默认地址 slug.lynkora.pro 上可用。高级门户能力 — white-label(无 LiKE 品牌)和连接自定义域名设置 → 域名)— 包含在启用了 white-label 的套餐中。此项没有单独的付费附加项。

哪些能力在哪些套餐中可用以及价格如何 — 参见价格页面和您的管理面板。