上一篇我们实现了意图识别,Bot知道用户想做什么了。这一篇来解决更核心的问题:用户问"如何修改密码",Bot怎么从FAQ知识库中找到答案?这就是RAG(检索增强生成)——客服Bot的"大脑"。
1什么是RAG?为什么重要?
RAG(Retrieval-Augmented Generation,检索增强生成)是2026年最主流的AI知识问答方案。它的核心思想:先检索,再生成。
图:RAG检索流程

RAG的工作流程:
三个步骤:
1. 检索:从知识库中找到与用户问题相关的文档
2. 增强:将检索到的文档作为上下文,提供给大模型
3. 生成:大模型基于上下文生成答案
2FAQ知识库的结构
客服场景的FAQ知识库相对简单,我们用JSON格式存储:
json[
{
"id": "faq_001",
"question": "如何修改密码?",
"answer": "您可以通过以下步骤修改密码:\n1. 登录账户\n2. 进入「账户设置」\n3. 点击「修改密码」\n4. 输入原密码和新密码\n5. 点击确认保存",
"category": "账户相关",
"keywords": ["密码", "修改密码", "改密码", "忘记密码"]
},
{
"id": "faq_002",
"question": "如何申请退款?",
"answer": "退款申请流程:\n1. 进入「我的订单」\n2. 找到需要退款的订单\n3. 点击「申请退款」\n4. 填写退款原因\n5. 等待审核(1-3个工作日)",
"category": "订单相关",
"keywords": ["退款", "退货", "申请退款"]
}
]FAQ知识库的关键字段:
| question | |
| answer | |
| keywords | |
| category |
3知识库插件的实现方式
2026年,知识库检索有两种主流方式:
| 关键词检索 | |||
| 向量检索 |
图:知识库检索流程

客服场景我们选择关键词检索 + 向量检索的混合方案:
混合方案的优势:
1. 常见问题(关键词匹配)用关键词检索,速度快
2. 复杂问题(语义理解)用向量检索,准确率高
3. 检索结果融合,取最佳匹配
4实战:实现知识库插件
我们创建知识库插件:
plugins/knowledge_base/plugin.py:
pythonimport json
from pathlib import Path
from typing import List, Dict
classKnowledgeBasePlugin:
"""知识库插件"""
def__init__(self, faq_file: str = "data/faq.json"):
self.faqs = self._load_faqs(faq_file)
self.keyword_index = self._build_keyword_index()
def_load_faqs(self, faq_file: str) -> List[Dict]:
"""加载FAQ知识库"""
path = Path(faq_file)
if path.exists():
with open(path, 'r', encoding='utf-8') as f:
return json.load(f)
return []
def_build_keyword_index(self) -> Dict[str, List[str]]:
"""构建关键词索引"""
index = {}
for faq inself.faqs:
for keyword in faq.get("keywords", []):
if keyword notin index:
index[keyword] = []
index[keyword].append(faq["id"])
return index
defsearch(self, query: str, top_k: int = 3) -> List[Dict]:
"""检索FAQ"""
# 第一步:关键词检索
keyword_results = self._keyword_search(query)
# 第二步:向量检索(如果有向量数据库)
vector_results = self._vector_search(query)
# 第三步:融合结果
all_results = keyword_results + vector_results
# 去重并返回top_k
unique_results = self._deduplicate(all_results)
return unique_results[:top_k]
def_keyword_search(self, query: str) -> List[Dict]:
"""关键词检索"""
results = []
query_words = query.split()
for word in query_words:
if word inself.keyword_index:
faq_ids = self.keyword_index[word]
for faq_id in faq_ids:
faq = self._get_faq_by_id(faq_id)
if faq:
results.append({
"faq": faq,
"score": 1.0,
"source": "keyword"
})
return results
def_vector_search(self, query: str) -> List[Dict]:
"""向量检索(简化版)"""
# 实际项目中会调用向量数据库API
# 这里简化为返回空列表
return []
def_get_faq_by_id(self, faq_id: str) -> Dict:
"""根据ID获取FAQ"""
for faq inself.faqs:
if faq["id"] == faq_id:
return faq
returnNone
def_deduplicate(self, results: List[Dict]) -> List[Dict]:
"""去重"""
seen = set()
unique = []
for result in results:
faq_id = result["faq"]["id"]
if faq_id notin seen:
seen.add(faq_id)
unique.append(result)
return unique5集成到Bot中
将知识库插件集成到客服Bot:
src/bot.py(更新版):
pythonfrom plugins.knowledge_base.plugin import KnowledgeBasePlugin
classCustomerServiceBot:
def__init__(self, config_path: str = "config/customer_service.yaml"):
self.config = self._load_config(config_path)
self.system_prompt = self._load_prompt()
self.intent_plugin = IntentRecognitionPlugin()
self.kb_plugin = KnowledgeBasePlugin()
def_handle_faq(self, user_input: str) -> str:
# 从知识库检索FAQ
results = self.kb_plugin.search(user_input, top_k=1)
if results:
faq = results[0]["faq"]
# 直接返回FAQ答案
return faq["answer"]
# 如果没找到,走大模型
return"抱歉,我暂时无法回答这个问题。建议您转人工客服获取帮助。"6测试知识库效果
python# 测试知识库检索
from plugins.knowledge_base.plugin import KnowledgeBasePlugin
kb = KnowledgeBasePlugin()
# 测试关键词检索
print(kb.search("如何修改密码"))
# 输出:找到faq_001,返回修改密码的答案
print(kb.search("申请退款"))
# 输出:找到faq_002,返回退款流程
print(kb.search("配送多久"))
# 输出:找到faq_003,返回配送时间说明
# 测试完整Bot
from src.bot import CustomerServiceBot
bot = CustomerServiceBot()
print(bot.chat("如何修改密码"))
# 输出:您可以通过以下步骤修改密码...7RAG的优化方向
三个优化方向:
1. 向量检索:使用向量数据库(如Pinecone、Weaviate)进行语义检索
2. 重排序:使用CrossEncoder对检索结果进行重排序,提高准确率
3. 答案生成:不只是返回FAQ原文,让大模型基于FAQ生成更自然的答案
8总结:知识库是Bot的"大脑"
本篇要点:
1. RAG是主流方案:先检索,再生成,知识可更新
2. FAQ知识库结构简单:question、answer、keywords、category
3. 混合检索最优:关键词快速检索 + 向量语义检索
4. 插件化设计:知识库作为独立插件,方便扩展
5. 持续优化:增加FAQ数量、引入向量检索、优化答案生成
下一篇,我们来写对话管理——如何让Bot记住对话历史,处理多轮对话。
客服Agent实战系列
01 · 项目初始化02 · Bot定义:System Prompt设计
03 · 意图识别插件
04 · 知识库插件 ← 你在这里
05 · 对话管理
... 共14篇
前置系列:Agent开发系列 11:RAG检索
夜雨聆风