什么是 Skill
Skill 是实际上一个由使用说明(Skill.md)、参考文档(reference)以及可执行脚本组成的能力包。
以下是一个示例:
Skills
└── RAG
├── references
├── scripts
└── SKILL.md
为什么需要 Skill 做 RAG
背景是我正在处理保险产品客服 Agent 项目,保险产品和普通的商品最大的区别是定价更为复杂,不再是一个产品一个统一的价格。
以健康类产品为例,保费往往会随着客户的年龄、健康状况等进行调整。所以在产品宣传文档之外,往往还有一个费率表可供初步评估价格。
传统的 RAG 在解决此类问题时往往会采用如下手段:
额外提供一个检索 Tool,输入产品ID和客户情况返回保费:
但客户的情况往往是口语化表述,比如“我患有高血压和糖尿病”。简单的关键词检索难以应对这种情况。
将产品文档和费率表打包为一个树状结构,并且所有文档都计算向量:
我在一个 vibe coding 的 demo 项目里采取了类似的思路。就是对费率表文档转化为 csv 文件后按行分块计算向量。但这样又难以应对精确条件,比如“我今年58岁”这类可以借助年龄精确过滤的情况。
RAG SKILL
现在的 LLM 非常智能,LLM 可以使用 shell 工具自行在纯文本的世界里自由探索。
所以,我们的 skill 也非常简单:告诉 LLM 自己使用各种 unix shell 工具来读取文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
---
name: rag-knowledge-explorer
description: 自主使用 Unix CLI 工具探索 knowledge 目录中的保险文档,检索信息并回答用户关于保险产品的问题。
---
# RAG 知识库检索技能
本技能使 LLM 能够自主使用 Unix CLI 工具(grep、cat、ls、head、tail 等)检索 `/knowledge/`目录中的保险文档,并基于检索结果回答用户问题。
## 何时使用
**适用场景**:
- 用户询问保险产品相关信息(保费、保障、理赔等)
- 需要查找特定条款内容
- 需要查询费率表数据
- 用户提出关于保险责任、免责条款的问题
**不适用场景**:
- 需要修改文件内容(本技能只读)
- 问题与知识库文档无关
## 核心工作流程
### 阶段 1:理解用户问题
分析用户问题,提取关键信息:
- **问题类型**:费率查询/保险责任/免责条款/理赔流程/其他
- **关键词**:年龄、性别、交费方式、保险金额、身故、现金价值等
- **目标文档**:费率表 (flbe.md) 或条款 (tk.md)
....
|
这个 demo 甚至没有其他的脚本等内容,就是一个 skill.md 文件。告诉 LLM 产品文档的命名规律和 skill 的使用场景。
效果非常好:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
User: 我现在45岁了,是一名男性。我想买传家宝险,能给我讲讲吗?
LLM:
Thinking: 已获取 45 岁男性的费率数据和投保年龄信息,现在整理成清晰的保费表格和产品要点介绍给用户。
好的!根据您的情况(45 岁男性),我来详细介绍一下传家宝寿险的投保方案:
---
一、投保资格
您可以投保!本产品接受的投保年龄范围为出生满 28 天至 70 周岁,您 45 岁符合投保条件。
---
二、保费参考(每 1 万元基本保额)
作为 45 岁男性,您可选择以下交费方式:
| 交费方式 | 每万元保额保费(元) | 举例:10 万保额总保费 |
|---------|-------------------|---------------------|
| 趸交(一次性) | 11,964 元 | 119,640 元 |
| 3 年交 | 4,245 元/年 | 12,735 元 |
| 5 年交 | 2,689 元/年 | 13,445 元 |
| 10 年交 | 1,432 元/年 | 14,320 元 |
| 15 年交 | 1,015 元/年 | 15,225 元 |
| 20 年交 | 812 元/年 | 16,240 元 |
> 注:30 年交选项在 45 岁时已不可选
---
三、产品核心特点
1. 终身保障
- 保险期间为被保险人终身
1. 保额递增
- 有效保额按3.5% 年复利递增
- 公式:第 n 年有效保额 = 基本保额 × 1.035^(n-1)
- 例如:10 万保额,第 20 年有效保额约 19.9 万
1. 身故保险金赔付(分三阶段)
| 阶段 | 赔付金额 |
|------|---------|
| 18 周岁前 | 已交保费 与 现金价值 取大 |
| 18 周岁后、交费期满前 | 已交保费×比例 与 现金价值 取大 |
| 18 周岁后、交费期满后 | 现金价值、有效保额、已交保费×比例 三者取大 |
1. 灵活权益
- ✅ 转换年金:受益人可选择将保险金转换为年金领取
- ✅ 减保:可申请减少保额
- ✅ 保单质押贷款:最长 6 个月
- ✅ 10 日犹豫期:犹豫期内退保全额退还保费
---
四、投保建议
45 岁男性推荐方案:
1. 预算充足:选择趸交或 3-5 年交,尽早完成交费,享受保额复利增长
2. 平衡现金流:选择10-20 年交,年交保费压力较小
---
五、重要提示
责任免除(以下情况不赔):
- 投保人故意杀害、伤害被保险人
- 被保险人故意自伤、故意犯罪
- 合同成立 2 年内自杀
- 斗殴、吸食毒品
- 酒后驾驶、无证驾驶
- 战争、核辐射等
退保提醒:
- 犹豫期后退保会退还现金价值,可能低于已交保费,会有损失
---
您想了解具体的保额规划或现金价值表吗?或者有其他疑问?
|
我甚至故意简略了保险名称,LLM 依旧给出了非常完善的回答。并且在检索过程中自行察觉到 45 岁是一个非常精确的过滤条件,在首次检索时就使用 grep 进行了针对性查找。
总结
这个 demo 是一次非常简单的探索,整个系统构建最耗时的地方是将产品文档在外部转化为 markdown,这还有我不想为一个 demo 特地开通平台 API 的原因。
不过必须承认,虽然这个 demo 的效果比我之前学习 RAG 时 vibe coding 的项目还要好。但实际部署时需要解决如何防止 LLM 使用 cat、cd 等工具获取不该获得的信息的问题,同时简单的两个问题就花了上万 token。也许构建一个虚拟的 shell 提供被修改过的 unix 命令,并且隔离目录是一个解决方案?
但无论如何,LLM 真的越来越猛了。