物流业务知识库设计方案
文档状态:产品 + 架构 + 表结构 + 接口 + 页面(评审已拍板关键决策,可开发)
编写日期:2026-08-04
仓库:前端 E:\oms0414,后端 oms0414-back
关联页面:中后台「知识库」独立菜单(新建)、PC/H5 帮助抽屉、工作台入口、AI 顾问检索增强(二期)
关联能力:AI 顾问(/xhs/ai/chat、AiAdvisorShell)、在线客服(见关联文档)、站内信公告、t_ai_skill(不复用)、门户侧栏抽屉(可复用 PortalSideDrawer 模式)
关联文档:docs/在线客服模块设计方案.md、docs/H5客户中心设计方案.md、docs/前端页面设计规范.md、docs/rbac系统设计-060801.md
目标读者:产品、运营、前端、后端、测试
0 阅读指引
| 角色 |
优先阅读 |
| 产品 / 运营 |
§1~§3、§5、§6、§11 |
| 前端 |
§5、§6、§8、§10 |
| 后端 / DBA |
§4、§7~§9、§10 |
| 测试 |
§3、§7、§11、§12 |
分期对照
| 阶段 |
名称 |
交付物 |
| M1 |
帮助中心(主交付) |
分类/文章表、管理端 CRUD、客户侧帮助浏览与搜索、工作台/H5 入口 |
| M2 |
AI 检索增强 |
问答时检索 Top-K 文章注入 prompt;回答带来源链接 |
| M3 |
运营闭环 |
未命中落库、坐席「沉淀为知识」、按国家/产品可见范围 |
本文默认按 M1 → M2 落地;M3 列边界。
与在线客服文档关系:客服方案 P0/P1 不做「机器人知识库编排、意图平台」;本文 M1 是独立内容资产,M2 再作为 AI/客服的检索源,不推翻客服分期。
1 背景与目标
1.1 现状与问题
| 现状 |
问题 |
| 计费、状态、问题件口径散落在运营口头 / 聊天记录 |
客户重复问,客服重复答,口径易漂 |
| AI 顾问主要靠通用对话 + Skill 提示词 |
Skill ≠ 业务 FAQ;缺可检索、可溯源的业务文案 |
| 工作台有公告,无结构化帮助 |
公告偏通知,不适合「怎么查价 / 什么是计费重」类常驻说明 |
t_ai_skill 已存在 |
场景是价表风险、地址解析等对内提示词,不宜硬扩成客户知识库 |
1.2 建设目标
- 可运营的内容资产:分类 + 文章,支持草稿/发布/下线;M1 只做中文,英文字段预留到后续迭代。
- 对客自助优先:登录客户通过 右侧抽屉 浏览/搜索帮助,减少「纯靠问人」。
- 可挂业务入口:文章可链到查价、我的订单、充值等,形成闭环。
- 为 AI 留接口:M1 只做内容与检索 API;M2 再注入顾问,回答带来源。
- 与 Skill 边界清晰:Skill 管「怎么让模型做事」;知识库管「业务事实怎么写给人/模型看」。
1.3 已拍板决策
| # |
决策 |
口径 |
| 1 |
模型分离 |
新建 KB 表,不扩展 t_ai_skill |
| 2 |
首期检索 |
关键词 + 分类/标签;不上向量库 |
| 3 |
受众 |
文章带 Audience:customer / internal;客户接口只返回 customer |
| 4 |
富文本 |
M1 用 Markdown(或受限 HTML);不做复杂 CMS 组件市场 |
| 5 |
访问控制 |
必须客户登录;门户接口不允许匿名 |
| 6 |
管理菜单 |
独立一级「知识库」(下挂分类、文章),不挂在系统/运营子菜单下 |
| 7 |
语言 |
M1 仅中文;表结构不强制英文字段 |
| 8 |
客户入口 |
右侧抽屉(非独立 /help 整页);工作台/顶栏/H5 打开同一套帮助抽屉或 H5 等价页 |
| 9 |
置顶 / 热门 |
需要:IsPinned + 热门列表接口(可结合 ViewCount) |
1.4 设计原则
- 先文案质量,后检索玄学:50~100 条高质量 FAQ 优于空壳 RAG。
- 结构化优于长文堆砌:标题、摘要、标签、适用场景字段齐全。
- 时效可控:禁限运、清关类必须有「生效/过期」或「最后复核日」。
- 不替代订单状态机:知识库解释规则,不写业务真相(轨迹以订单接口为准)。
- 对齐前端规范:管理列表用 TablePro / FormPro;客户侧帮助页可略营销风,但色彩跟主色。
1.5 非目标(M1 / M2 不做)
- 完整意图识别平台、多轮对话编排器
- 向量库 / Embedding 流水线(M3+ 可议)
- 企微/第三方知识库同步
- 客户可投稿(仅内部运营/坐席写入)
- 把 OMS 设计文档(
docs/*.md)自动全量灌入对客库
2 概念与命名
| 术语 |
含义 |
| 分类 |
KbCategory;树或扁平一级(M1 建议扁平一级 + SortOrder,降低复杂度) |
| 文章 |
KbArticle;一篇可发布的帮助正文 |
| 受众 |
Audience:customer 对客 / internal 仅内部 |
| 标签 |
逗号或关联表;如 计费重、问题件、美国 |
| 发布状态 |
draft 草稿 / published 已发布 / offline 下线 |
| 置顶 |
IsPinned;对客列表中置顶文优先展示 |
| 热门 |
门户「热门」:优先置顶,其次按 ViewCount / 发布时间 |
| Skill |
t_ai_skill;平台提示词,不属于本文实体 |
对客文案用「帮助中心 / 常见问题」;管理端一级菜单名为「知识库」。
3 产品分期
3.1 M1 — 帮助中心(约 1.5~2.5 周)
目标:客户能搜、能看;运营能维护。
| 项 |
说明 |
| 管理端 |
独立一级菜单「知识库」:分类、文章 CRUD、置顶、发布/下线、预览 |
| 客户 PC |
右侧帮助抽屉:分类浏览 + 搜索 + 热门 + 详情(需登录) |
| 客户 H5 |
「我的 → 帮助中心」列表/详情(需登录;小屏用页而非宽抽屉亦可) |
| 工作台 / 顶栏 |
「帮助」入口 → openHelpDrawer() |
| 接口 |
管理 CRUD + 对客 list/get/search/hot(禁止匿名) |
| 语言 |
仅中文 |
| 不做 |
AI 注入、未命中分析、按国家可见性细控、英文正文 |
3.2 M2 — AI 检索增强
目标:顾问回答可溯源。
| 项 |
说明 |
| 检索 |
POST /kb/search(或内部服务)按关键词打分取 Top-K(建议 3) |
| 注入 |
/xhs/ai/chat 或统一 AI 网关在拼 prompt 时附带文章摘要 |
| 展示 |
回答底部「参考:xxx」可点进帮助详情 |
| 兜底 |
无命中 → 现有 AI 行为 + 引导转人工/帮助首页 |
3.3 M3 — 运营闭环(延后)
- 搜索无结果 / AI 未命中写
kb_miss_log
- 坐席工作台「沉淀为知识」草稿
VisibleCountryCodes / SalesProductIds 可见范围
- 可选:简易向量检索替换关键词
4 总体架构
4.1 逻辑架构
┌──────────────┐ ┌──────────────┐ ┌─────────────────┐
│ PC 帮助抽屉 │ │ 一级菜单知识库 │ │ AI 顾问(M2) │
│ H5 帮助页 │ │ 分类/文章运营 │ │ chat + 检索注入 │
└───────┬──────┘ └──────┬───────┘ └────────┬────────┘
│ REST │ REST │ 内部检索
▼ ▼ ▼
┌─────────────────────────────────────────────────────┐
│ Oms Api:KbCategoryService / KbArticleService │
│ (门户接口强制登录 + Audience=customer) │
└──────────────────────────┬──────────────────────────┘
▼
MySQL(t_kb_*)
4.2 与现有模块关系
| 现有能力 |
关系 |
t_ai_skill |
并列;禁止混表 |
/xhs/ai/chat、AI 顾问壳 |
M2 检索注入与「参考来源」展示 |
| 在线客服 |
M2/M3:答不上来转人工;坐席可沉淀知识 |
| 工作台公告 |
通知向;帮助中心常驻说明;可互相链接 |
| RBAC |
管理权限码见 §8.3 |
| 文件上传 |
文章内图片可复用现有上传(folder:kb) |
4.3 内容域(运营初始类目建议)
| 分类 Code(建议) |
名称 |
典型文章 |
pricing |
查价与计费 |
计费重、偏远、附加费、预报 vs 入库差额 |
order |
下单与轨迹 |
状态含义、待上网、如何查轨迹 |
exception |
问题件与售后 |
补资料、退件、索赔口径 |
customs |
禁限运与清关 |
品名、敏感国、电池等(强时效) |
account |
账户与充值 |
余额、充值、发票 |
dropship |
代发与店铺 |
授权、拉单、履约配对 |
M1 种子数据可由运营导入 10~20 条高频 FAQ,不阻塞开发。
5 页面与交互
5.1 管理端(中后台)
菜单:独立一级 「知识库」,子菜单建议:
| 子菜单 |
Path(建议) |
说明 |
| 分类管理 |
/kb/category |
列表:名称、Code、排序、启用;弹窗编辑 |
| 文章管理 |
/kb/article |
筛选:分类、状态、受众、关键词、是否置顶;TablePro |
| 文章编辑 |
同页抽屉 |
标题、摘要、Markdown、标签、受众、置顶、状态、关联链接 |
编辑页字段
- 必填:
Title、CategoryId、Audience、Content、Status
- 选填:
Summary、Tags、RelatedPath、RelatedLabel、IsPinned、PublishTime、ExpireTime
- 操作:保存草稿、发布、下线、设为置顶/取消置顶、预览(按客户视角渲染)
- 语言:界面与正文字段均为中文,不提供英文字段录入
5.2 客户 PC(帮助抽屉)
| 入口 |
交互 |
| 顶栏 / 工作台「帮助」 |
打开右侧 HelpSideDrawer(宽度可对齐门户抽屉约 640px) |
| 抽屉首页 |
搜索框 + 「热门」区(置顶优先)+ 分类芯片 + 文章列表 |
| 详情 |
抽屉内二级页:标题、更新时间、正文、相关推荐、「去办理」;返回列表不关抽屉 |
| 未登录 |
入口点击 → 跳转登录(抽屉接口本身 401) |
不做独立整页路由 /help 作为主路径;若需深链,可用 query 打开抽屉(如 ?helpArticle=12),由布局层解析。
5.3 客户 H5
- 「我的 → 帮助中心」→ 列表(分类 Tab + 热门)→ 详情(小屏用全屏页,体验等同抽屉信息架构)
- 必须登录;遵循 H5 客户中心规范;Markdown 消毒渲染
5.4 空态与权限
- 无文章:友好空态 + 联系客服入口
internal 文章不对客户接口返回
- 匿名请求门户接口 → 401 / 未登录,不返回数据
6 关键用户旅程
flowchart LR
A[客户遇计费疑问] --> B{打开帮助抽屉}
B -->|搜到/热门| C[读文章]
C --> D{能自行解决?}
D -->|是| E[点关联入口去查价/下单]
D -->|否| F[AI 顾问 / 联系客服]
B -->|搜不到| F
B -->|未登录| G[跳转登录]
M2 增强:F 中 AI 先检索 KB;有命中则引用;无命中再纯模型或转人工。
7 表结构
库表前缀 t_kb_;SqlSugar 实体放 Oms.Domain 新聚合或 System/Content 域(实现时定);审计字段对齐现有 OmsAuditedAggregateRoot。
7.1 t_kb_category 分类
| 列 |
类型 |
说明 |
| Id |
INT PK AI |
|
| Code |
VARCHAR(64) UK |
稳定键,如 pricing |
| Name |
VARCHAR(128) |
展示名(中文) |
| SortOrder |
INT |
越小越前 |
| Enabled |
TINYINT |
1 启用 |
| IsDeleted |
TINYINT |
软删 |
| ConcurrencyStamp |
CHAR(36) |
|
| CreateUserId / CreateTime / UpdateUserId / UpdateTime |
|
审计 |
M1 不建 NameEn;后续多语言另开迭代或加列。
索引:uk_kb_category_code;idx_kb_category_enabled_sort (Enabled, SortOrder)。
7.2 t_kb_article 文章
| 列 |
类型 |
说明 |
| Id |
INT PK AI |
|
| CategoryId |
INT |
分类 |
| Title |
VARCHAR(200) |
标题(中文) |
| Summary |
VARCHAR(500) NULL |
列表摘要 |
| Content |
LONGTEXT |
Markdown 正文(中文) |
| Audience |
VARCHAR(16) |
customer / internal |
| Status |
VARCHAR(16) |
draft / published / offline |
| Tags |
VARCHAR(256) NULL |
逗号分隔 |
| RelatedPath |
VARCHAR(256) NULL |
站内 path,如 /order/priceCheck |
| RelatedLabel |
VARCHAR(64) NULL |
按钮文案,如「去查价」 |
| IsPinned |
TINYINT |
置顶:1=是;对客列表优先 |
| SortOrder |
INT |
同类排序(置顶之后的次序) |
| PublishTime |
DATETIME NULL |
发布时间 |
| ExpireTime |
DATETIME NULL |
过期后对客不可见 |
| ViewCount |
INT DEFAULT 0 |
浏览次数(热门排序参考) |
| IsDeleted |
TINYINT |
|
| ConcurrencyStamp |
CHAR(36) |
|
| 审计字段 |
|
|
索引:
idx_kb_article_list (Status, Audience, CategoryId, IsPinned, SortOrder)
idx_kb_article_publish (Status, Audience, PublishTime)
idx_kb_article_hot (Status, Audience, IsPinned, ViewCount)
- 全文:M1 可用
LIKE;数据量大后再上 FULLTEXT(Title, Summary, Tags)(MySQL)
7.3 M3 预留(本稿不建表也可)
| 表 |
用途 |
t_kb_miss_log |
搜索词、来源(help/ai)、用户、时间 |
t_kb_article_scope |
国家/销售产品可见范围 |
7.4 SQL 脚本命名
建议:sql/202608xx_kb_knowledge.sql(按实际落库日命名)。
8 接口设计
8.1 约定
- 前缀建议:
/kb/*
- 统一业务包装:
{ code, msg, data }(与现网一致)
- 写操作校验
ConcurrencyStamp(若实体含)
8.2 管理端(需登录 + 权限)
| 方法 |
路径 |
说明 |
| GET |
/kb/admin/category/list |
全部分类(含停用) |
| POST |
/kb/admin/category/save |
新增/编辑分类 |
| POST |
/kb/admin/category/delete |
软删(有文章时禁止或需迁移) |
| GET |
/kb/admin/article/page |
分页:keyword/categoryId/status/audience/isPinned |
| GET |
/kb/admin/article/{id} |
详情 |
| POST |
/kb/admin/article/save |
保存草稿或更新(含 IsPinned) |
| POST |
/kb/admin/article/publish |
发布(写 PublishTime) |
| POST |
/kb/admin/article/offline |
下线 |
| POST |
/kb/admin/article/pin |
设为置顶 / 取消置顶(可选独立接口,或并入 save) |
| POST |
/kb/admin/article/delete |
软删 |
8.3 权限码(建议)
| 权限码 |
用途 |
Knowledge.Category.Query / Knowledge.Category.Edit |
分类 |
Knowledge.Article.Query / Knowledge.Article.Edit / Knowledge.Article.Publish |
文章 |
菜单挂载:独立一级「知识库」(子:分类管理、文章管理);meta.permission 对齐 RBAC。路由 path 建议 /kb/category、/kb/article(camelCase 子路径按项目惯例可写成 kbCategory)。
8.4 客户端(必须客户登录,禁止匿名)
门户 /kb/portal/* 一律要求登录;未登录返回 401。不提供 AllowAnonymous 只读接口。
| 方法 |
路径 |
说明 |
| GET |
/kb/portal/category/list |
启用中的分类 |
| GET |
/kb/portal/article/page |
已发布 + customer + 未过期;支持 categoryId、keyword |
| GET |
/kb/portal/article/{id} |
详情;校验受众与状态;ViewCount+1 |
| GET |
/kb/portal/article/hot |
热门:IsPinned 优先,其次 ViewCount、PublishTime;默认 Top 10 |
搜索 / 列表排序规则(M1):
Status=published 且 Audience=customer
ExpireTime 为空或 > now
keyword 匹配 Title / Summary / Tags(LIKE)
- 排序:
IsPinned DESC → SortOrder ASC → PublishTime DESC
- 热门接口:
IsPinned DESC → ViewCount DESC → PublishTime DESC
8.5 M2 内部检索
| 方法 |
路径 |
说明 |
| POST |
/kb/internal/search |
Body:{ query, topK, audience? };仅服务端/AI 网关调用 |
返回:[{ id, title, summary, score, relatedPath }],正文可截断后注入 prompt(控制 token)。
9 服务端实现要点
- 门户接口硬过滤
Audience + Status,并校验登录态,防止匿名与 internal 泄漏。
- Markdown 渲染:前端消毒(DOMPurify 或等价);禁止任意脚本。
- 图片:上传走现有文件服务,
folder=kb,正文存相对/绝对 URL。
- 并发:编辑带
ConcurrencyStamp。
- 删除分类:若仍有未删文章 → 返回业务错误。
- 置顶:同一分类可多篇置顶;列表统一
IsPinned DESC。
- 缓存(可选):门户分类/热门短缓存 1~5 分钟;发布/下线/置顶时失效。
10 前端实现要点
10.1 管理端
- 独立一级菜单「知识库」+ 子路由;遵循
docs/前端页面设计规范.md
- 权限:
hasPermission('Knowledge.Article.Edit') 等控制按钮
- Markdown 编辑 + 预览;列表展示置顶标记
10.2 客户帮助抽屉(PC)
- 新建
HelpSideDrawer(可参考 PortalSideDrawer:固定宽、无整页路由)
openHelpDrawer({ articleId? }) 供工作台、顶栏、深链调用
- 与个人中心/营销抽屉并存时注意互斥或叠层 z-index
- i18n:壳文案用
help.*;文章正文仅中文,不做 TitleEn 切换
10.3 工作台入口
- 「帮助」文字链或图标 → 打开帮助抽屉
- 不强制占营销四宫格
10.4 H5
- 「我的 → 帮助中心」全屏列表/详情;登录态与 PC 同一套 portal API
11 验收标准
11.1 M1
| # |
标准 |
| 1 |
独立一级菜单「知识库」可维护分类与文章(含置顶) |
| 2 |
已登录客户可从工作台/顶栏打开帮助抽屉:分类、搜索、热门、详情 |
| 3 |
未登录无法调用门户 KB 接口(401);入口引导登录 |
| 4 |
internal / draft / offline / 过期文章客户不可见 |
| 5 |
有 RelatedPath 时可从抽屉跳转业务页 |
| 6 |
正文与管理界面为中文;无英文字段录入 |
| 7 |
热门区置顶文优先于按浏览量排序的普通文 |
11.2 M2
| # |
标准 |
| 1 |
相关问题提问时,回答中可出现参考文章标题 |
| 2 |
点击参考可进入帮助详情 |
| 3 |
知识库全空时 AI 行为与现网一致(不报错) |
12 测试要点
| 类型 |
用例 |
| 权限 |
无 Knowledge.Article.Edit 不能 save;客户调 admin 403;匿名调 portal 401 |
| 过滤 |
draft/offline/expired/internal 组合对 portal 不可见 |
| 置顶/热门 |
置顶文排在热门与列表前部;取消置顶后顺序恢复 |
| 搜索 |
中文关键词命中标题/标签;无结果空列表 |
| 抽屉 |
列表↔详情切换不丢搜索条件;关闭后再开恢复首页 |
| 并发 |
双人编辑同一文章 stamp 冲突 |
| 安全 |
Content 含 <script> 前端不执行 |
| 回归 |
AI Skill 管理、公告、客服入口、门户营销抽屉不受影响 |
13 工作量粗估(供排期)
| 项 |
人天(约) |
| 表 + 仓储 + Admin/Portal API |
3~4 |
| 管理端分类 + 文章页(含置顶) |
3~4 |
| PC 帮助抽屉 + 入口 |
2~3 |
| H5 帮助 |
1.5~2 |
| 工作台/顶栏入口 + i18n(壳)+ 种子 FAQ |
1 |
| M2 检索注入 + 来源展示 |
2~3 |
| M1 合计 |
约 10~14 |
| M1+M2 |
约 12~17 |
14 已拍板结论(原待评审)
| # |
问题 |
结论 |
| 1 |
未登录是否可访问门户帮助? |
不允许;必须客户登录 |
| 2 |
管理菜单挂载? |
独立一级「知识库」 |
| 3 |
M1 语言? |
先中文;不建英文字段 |
| 4 |
客户入口形态? |
右侧抽屉(非独立 /help 主路径) |
| 5 |
是否需要置顶/热门? |
需要:IsPinned + /kb/portal/article/hot |
15 修订记录
| 日期 |
说明 |
| 2026-08-04 |
初稿:M1 帮助中心 + M2 AI 检索 + M3 边界;与 AiSkill / 在线客服边界对齐 |
| 2026-08-04 |
拍板:禁止匿名、独立知识库菜单、仅中文、抽屉入口、置顶/热门;更新表结构与验收 |
文档结束。 关键决策已拍板,可按 M1 → M2 开工;页面开发须满足 docs/前端页面设计规范.md。