# SAP Cloud ERP KB 建设最佳实践
**适用对象：接手建设新版本或新产品线KB的团队成员**
**版本：v1.0 | 日期：2026-06-07 | 基于2602 KB建设经验总结**

---

## 写在前面：这份文档解决什么问题

本文是 BOS SAP KB 团队在 CE2602 建设过程中的经验蒸馏，目标是让新成员能够：

1. 不重走我们踩过的坑
2. 用相同的架构思路建设 CE2606 或其他产品线的KB
3. 知道哪些步骤顺序不能错、哪些细节影响最终质量

---

## 第一阶段：准备原始材料（开始动工前必须完成）

### 1.1 必须拿到的三类文档

| 材料 | 获取来源 | 用途 |
|------|---------|------|
| **FSD（Feature and Scope Description）** | SAP官方发布，通常为PDF，按版本号命名（如 Cloud_ERP_FSD_CE2606.pdf） | Layer 1的唯一权威来源 |
| **Scope Item目录** | SAP官方Excel/CSV，列出该版本所有激活的Scope Item ID | Layer 2的唯一权威来源 |
| **E2E最佳实践文档** | SAP官方发布的L2C/S2P/I2M/P2F/R2R等PDF | Layer 5的核心素材 |

> ⚠️ **关键原则**：KB的事实性内容必须100%来自官方文档。任何"顾问经验补充"只能进Layer 3的描述性文字，不能出现在Scope Item ID和功能边界（FSD）中。

### 1.2 材料质量检查

拿到材料后，先做以下检查：

- [ ] FSD版本号与目标KB版本号一致（如CE2606）
- [ ] Scope Item目录的"Activation Status"列已筛选为该版本已激活的Item
- [ ] E2E文档中的Scope Item引用格式是2-4位字母数字（如 `J58`），不是`x.x.x`格式

如果Scope Item目录里出现`1.1.1`这类格式——说明你拿到的可能是旧格式文档或非标准来源，停止并重新获取。

---

## 第二阶段：设计KB结构（不要跳过这一步）

### 2.1 固定使用5层架构

2602 KB验证有效的分层模型，照搬：

```
Layer 5  E2E架构层      ← 哪个场景用哪套架构？（架构决策入口）
Layer 3  流程库层        ← 某功能系统里怎么跑？（操作执行层）
Layer 2  Scope Item层   ← 这个场景对应哪个ID？（选型执行层）
Layer 1  FSD功能层       ← 这个功能2606有没有？（功能边界权威）
Layer 4  产品全景层      ← RISE/GROW/BTP许可模式（独立，不在选型路径）
```

**加一个导航文件 `KB_00_Navigation_Map.md`，共计约26个文件。**

### 2.2 决定覆盖哪些业务域

在开始写文件前，列出一张覆盖计划表：

| 业务域 | Layer 1文件 | Layer 3文件 | Layer 5文件 |
|-------|-----------|-----------|-----------|
| 财务/HR | FSD_01 | 01_Finance | R2R_14 |
| 制造/QM | FSD_02 | 02_Manufacturing | P2F_11 |
| 采购 | FSD_06 | 04_Procurement | S2P_09 |
| 销售 | FSD_04 | 05_Sales | L2C_08 |
| 仓储物流 | FSD_07 | 03_Inventory | P2F_12 |
| 公司间/项目 | FSD_01+06 | 06_Intercompany | — |
| 资产管理 | FSD_01 | — | A2D_13 |
| 集团财务 | FSD_01 | — | R2R_14 |

> 不需要一开始就全覆盖。可以先做核心域（财务/采购/制造），再扩展。

---

## 第三阶段：按顺序建文件（顺序很重要）

### Step 1：先建 Layer 2 Scope Item目录（最优先）

**原因**：Layer 2是整个KB的ID权威来源。其他层的文件都会引用这里的ID，顺序不对会导致后期大量修改。

需要建4个文件：

| 文件 | 内容 | 建设方法 |
|-----|------|---------|
| `SAP_Scope_Item_Catalog_RAG.md` | 每个Scope Item的详细描述（业务目的、依赖关系、Fiori App） | 从官方目录逐条提取 |
| `SAP_Scope_Item_Catalog_Context.md` | 精简版目录，只有ID+一句话描述 | 从RAG版本压缩 |
| `Scope_Selection_Guide.md` | 场景词→ID的正向索引（"有这个业务场景，选哪个ID"） | 需要人工分类整理 |
| `SAP_Domain_Mapping.md` | 按LOB分类的树状索引 | 从目录按分类整理 |

**质量关卡**：
- RAG文件中每个ID都必须能在官方目录中找到原始记录
- ID格式检查：全文搜索`x.x.x`模式，发现则全部删除
- 用5个随机ID做交叉验证：从RAG里取ID，去官方目录核对名称

### Step 2：建 Layer 1 FSD文件

**原因**：Layer 1是功能存在性的权威。Layer 5和Layer 3引用功能时，需要有FSD作为依据。

每个FSD文件的写法：
1. 按FSD的章节结构提取（通常是 §3.x.x 的功能清单）
2. 重点提取 **Note Box（限制说明）**，这是最有价值的内容
3. 标注该功能对应哪些Scope Item ID（从Step 1建好的Layer 2查）

**质量关卡**：
- 每条功能描述后面注明FSD原文章节号（如 §3.9.1.1）
- 发现"该功能不支持"或"仅限On-Premise"的，必须明确标注，不得省略
- Layer 1禁止出现任何推断性内容，只能来自FSD原文

### Step 3：建 Layer 5 E2E架构文件（最重要）

**原因**：Layer 5是整个KB价值最高的层，也是最容易建错的层。Agent在选型时首先查Layer 5。

每个Layer 5文件的标准结构：

```
§1 业务场景定义（这个域解决什么问题）
§2 架构决策判断树（核心：帮客户选路径的决策逻辑）
§3 Scope Item选型表（各场景的推荐组合，含依赖关系）
§4 E2E集成关系图（与其他域的触发点和数据流）
§5 量化业务价值（来自SAP官方PDF的数据，必须有出处）
§6 跨文件引用（明确引用其他Layer 5文件的完整文件名）
```

**关键坑：跨文件引用必须用完整文件名**

错误写法：`→ 参见 P2F` 或 `→ 参见制造模块`
正确写法：`→ 参见 P2F_11_Plan_Manufacturing.md §3.2`

**原因**：RAG系统按文件名检索，缩写无法定位正确文件，导致跨文件链接在检索时断掉。

### Step 4：建 Layer 3 流程库

**原因**：Layer 3描述"这个功能系统里怎么跑"，是操作层，不是决策层。

每个流程条目的结构：

```
### [Scope Item ID] — [名称]
**触发场景**：xxx
**流程步骤**：
1. 步骤一（Fiori App: Fxxxx）
2. 步骤二
3. ...
**凭证流**：PO → GR → IR → Payment
**特殊库存/状态**：如有
**注意事项**：如有
```

**常见错误**：Layer 3不应该出现选型建议（"建议使用xxx"），这是Layer 5的职责。发现了移到对应Layer 5文件。

### Step 5：建 Layer 4 产品全景层

内容相对固定：RISE/GROW许可模式、BTP架构、LOB全景、版本亮点。

**注意**：路线图（Roadmap）内容必须标注"非已发布功能，仅供参考"。

### Step 6：建 KB_00 导航文件（最后建）

等所有文件都建完之后再建这个文件，因为它需要列出所有文件的定位和调用逻辑。

`KB_00_Navigation_Map.md` 必须包含：
- 所有26个文件的清单和一句话定位
- 问题类型 → 查哪个文件的路由表
- 两步选型法的执行规范
- Scope Item ID格式守卫说明

---

## 第四阶段：写System Prompt

### 4.1 从v1.0开始，不要跳过迭代过程

System Prompt不能一次写到位，必须经过测试→发现问题→修复的循环。2602的Prompt经历了67次迭代。

**v1.0起步框架（必含的核心规则）：**

```
1. 永远先加载 KB_00_Navigation_Map.md
2. 问题分类路由（模式零~模式三）
3. 两步选型法（Step 1流程匹配 → Step 2 ID映射）
4. Scope Item ID格式守卫（发现x.x.x立即停止）
5. 禁止凭训练记忆补充KB未覆盖的ID
6. 版本边界声明（只覆盖CE2606，不覆盖On-Premise）
```

**后续迭代优先级（按发现问题的概率排序）：**

| 迭代目标 | 触发原因 | 典型版本 |
|---------|---------|---------|
| 两步法禁止跳步 | Agent直接从场景跳到ID，跳过Step 1 | v1.3 |
| Layer 5 vs Layer 3分工 | Agent在选型时用Layer 3而非Layer 5 | v1.6 |
| 大范围选型强制分批 | 一次性输出几十个ID，可信度无法验证 | v1.63 |
| 跨域ID一致性校验（Step E0） | 同一ID在同一回复中有两个不同名称 | v1.66 |
| 自查禁用训练记忆 | Agent正向答对，自查时用训练记忆推翻 | v1.67 |

### 4.2 必须明确禁止的行为（12条绝对禁令）

在System Prompt中显式列出这些禁令，而不是依赖LLM自己推断：

1. 禁止输出 x.x.x 格式的ID
2. 禁止在Step 1未完成时进入Step 2
3. 禁止单次回复跨多个业务域一次性输出Scope Item
4. 禁止声称搜索但不提供可验证URL
5. 禁止在自查时引入训练记忆对抗KB结论
6. 禁止用Layer 3文件做架构决策
7. 禁止将On-Premise/ECC功能说成公有云支持
8. 禁止给出未在KB中找到来源的Scope Item ID
9. 禁止自我声明"我已严格遵循KB"（需由人工核查）
10. 禁止在模式零（项目KB）中附加Scope Item推荐
11. 禁止引用x.x.x格式ID后"解释"其合理性
12. 禁止在不确定时用"可能"/"应该"/"一般来说"代替"KB未覆盖"

---

## 第五阶段：测试验证（不可省略）

### 5.1 建议的测试集结构

参考 `BOS_SA_Agent_Benchmark_v1.0.md` 的题目设计原则：

| 题型 | 占比 | 示例 |
|-----|------|------|
| **陷阱题（负向）** | 20% | "先上线，6个月后再激活平行账本"——正确答案是不可行 |
| **反向陷阱题** | 20% | "DDMRP需要IBP"——正确答案是不需要，原生支持 |
| **流程序列题** | 20% | 月末关账活动排序——考查依赖关系理解 |
| **选型组合题** | 40% | 给定行业场景，给出Scope Item组合 |

每题至少包含：
- 必答要点（核心结论缺失扣分）
- 常见错误（答错倒扣，体现幻觉识别能力）
- 关键Scope Item ID（ID准确性单独计分）

### 5.2 评测指标

跑完Benchmark后，重点看：

| 指标 | 说明 | 目标 |
|-----|------|------|
| 陷阱题通过率 | 考核防幻觉能力 | 100%（这是底线） |
| 反向陷阱题通过率 | 考核是否理解"不需要某功能"的场景 | 100% |
| ID格式合规率 | x.x.x格式出现即失分 | 100% |
| 来源引用覆盖率 | 每个ID都有KB文件§章节来源 | >90% |
| 顺序/依赖题准确率 | 月末关账顺序等依赖关系题 | >80% |

### 5.3 验收前必须通过的最低标准

- [ ] 所有陷阱题和反向陷阱题全部通过
- [ ] 回答中无任何x.x.x格式ID
- [ ] 测试期间无"表演性搜索"（声称搜索但无URL）
- [ ] 跨域同一ID命名一致（Step E0校验通过）

---

## 六、高频踩坑快速参考

| 坑 | 症状 | 预防 |
|----|------|------|
| **自查触发训练偏见** | Agent正向答对，被追问后否定自己 | Prompt明确：自查只对照KB，不引入训练记忆 |
| **表演性搜索** | "根据最新信息…"但无URL | Prompt禁止声称搜索但不给URL |
| **一ID多名** | J58在同一回复里叫两个不同名字 | Step E0跨域一致性校验 |
| **跳过两步法** | 直接从场景给出ID，无流程匹配依据 | Prompt强制Step 1输出包含文件名§章节 |
| **Layer 3当Layer 5用** | 推荐来自流程描述文件而非架构判断树 | Prompt明确：选型优先Layer 5 |
| **跨文件引用用缩写** | "参见P2F"而非完整文件名 | 建文件时就用完整文件名，审查时全文搜索缩写 |
| **大范围一次性输出** | 50个ID一次给出，无法验证来源 | Prompt禁止跨域一次输出，强制分批 |
| **项目KB混用标准KB** | 项目场景准确，但Item来自记忆 | 模式零不允许附加Scope Item推荐 |

---

## 七、新版本KB的差量建设（2602 → 2606）

如果是在现有KB基础上做版本升级（而非全新建设），遵循以下差量流程：

### 7.1 必须全量更新的内容

| 内容 | 原因 |
|------|------|
| Layer 2 Scope Item目录 | 每个版本都有新增/废弃的Item |
| Layer 1 FSD中的Note Box | 功能限制会随版本演进 |
| Layer 4产品全景中的版本亮点 | 直接替换为新版本内容 |

### 7.2 需要差量检查的内容

| 内容 | 检查方法 |
|------|---------|
| Layer 5的Scope Item引用 | 对照新版Catalog，找废弃的旧ID并替换 |
| Layer 3的Fiori App编号 | App编号可能随版本变化 |
| System Prompt中的版本声明 | 更新版本号（如"2602"→"2606"） |

### 7.3 不需要修改的内容

- 5层架构和文件命名约定
- 两步选型法的逻辑
- System Prompt的禁令列表（除非发现新的幻觉模式）
- Benchmark的题目结构（题目内容可能需要微调）

---

## 八、文件命名约定（必须遵守）

所有跨文件引用必须用完整文件名，以下是标准命名规范：

| 类型 | 命名格式 | 示例 |
|-----|---------|------|
| Layer 1 FSD | `FSD_XX_[Domain]_Capabilities.md` | `FSD_01_Finance_HR_Capabilities.md` |
| Layer 2目录 | 固定4个文件名（见架构图） | `SAP_Scope_Item_Catalog_RAG.md` |
| Layer 3流程 | `XX_[Domain]_Processes.md` | `01_Finance_Controlling_Processes.md` |
| Layer 4全景 | `SAP_Product_Overview.md` | — |
| Layer 5 E2E | `[E2E]_XX_[Domain].md` | `P2F_11_Plan_Manufacturing.md` |
| 导航文件 | `KB_00_Navigation_Map.md` | — |

---

## 九、快速启动清单（新成员第一周）

- [ ] 获取FSD、Scope Item目录、E2E最佳实践文档
- [ ] 检查Scope Item目录格式（ID是否为2-4位字母数字）
- [ ] 建立覆盖计划表（哪些业务域、哪些层）
- [ ] 先建Layer 2（Catalog_RAG + Catalog_Context + Selection_Guide + Domain_Mapping）
- [ ] 用5个随机ID做交叉验证（Layer 2 vs 官方目录）
- [ ] 再建Layer 1 FSD文件（按章节提取，含Note Box）
- [ ] 建Layer 5 E2E文件（跨文件引用用完整文件名）
- [ ] 建Layer 3流程库
- [ ] 最后建KB_00导航图
- [ ] 写System Prompt v1.0（含6条核心规则）
- [ ] 跑Benchmark前10题（陷阱题/反向陷阱题优先）
- [ ] 根据Benchmark结果迭代Prompt

---

## 参考文件

| 文件 | 说明 |
|-----|------|
| `KB_团队内部文档_v1.0.md` | 2602 KB的详细架构说明和踩坑记录 |
| `SYSTEM_PROMPT_Agent1_v1.67.md` | 2602 Prompt最终版，可作为新版起点 |
| `BOS_SA_Agent_Benchmark_v1.0.md` | 完整的20题测评集（含答案和评分标准） |
| `KB_Review_Report.md` | Layer 5跨文件引用审查报告（8处修复记录）|
| `KB_00_Navigation_Map.md` | 2602导航文件模板 |

---

*KB建设最佳实践 v1.0 | 2026-06-07 | 基于BOS SAP CE2602建设经验*
