MBE系统用户使用知识库完整流程
📋 流程概览
知识库处理完成后,到用户使用的完整流程包括:
知识库就绪 → 发布为专家 → [必须:专家模型训练] → 专家路由 → RAG检索 → 答案生成 → 用户终端 → 反馈学习
关键顺序(CRITICAL SEQUENCE):上述步骤必须按顺序执行。与用户对话时可据此给出“当前状态 → 下一步建议”;详见 → MBE_CRITICAL_SEQUENCE_AND_USER_GUIDANCE.md。
两种专家模式:
- 动态专家(原型/测试): 轻量级(5.1MB),使用向量索引,响应快,仅用于快速原型和测试
- 训练专家(生产标准): 完整模型(161MB),推理能力强,必须训练,生产环境标准配置
⚠️ 重要: 训练专家是生产环境的标准配置,动态专家仅用于快速原型和测试。详细策略请参考 MBE_EXPERT_MODEL_TRAINING_STRATEGY.md。
🔄 详细流程
阶段11: 知识库发布为专家
前提条件: 知识库状态为 ready
流程:
- 开发者调用
POST /admin/knowledge/expert/publishAPI - 系统自动补充关键词(从知识库AI分析结果)
- 创建动态专家配置
- 重载专家路由器
- 专家可用于查询
注意: 此时专家是动态专家(轻量级,5.1MB),使用向量索引进行检索。⚠️ 生产环境必须进行模型训练,动态专家仅用于快速原型和测试。详细策略请参考 MBE_EXPERT_MODEL_TRAINING_STRATEGY.md。
阶段11.5: 专家模型训练(必须)
⚠️ 重要性: 专家模型训练不是可选的,而是必须的。MBE引擎中,上下文管理和回答问题的质量非常关键,因此所有生产环境的知识库都应该经过模型训练。
目的: 将知识库升级为完整训练的专家模型,获得更强的推理能力和更高的答案质量
训练类型:
- 专家模型训练 (
expert): 基于知识库微调专家模型 - TITANS模型训练 (
titans): 训练核心TITANS模型 - MoE模型训练 (
moe): 训练专家混合模型
训练流程:
- 准备训练数据: 从知识库chunks生成训练样本
- 初始化模型: 基于核心TITANS+MIRAS模型创建专家模型
- 训练循环: 多轮训练,优化模型参数
- 保存检查点: 定期保存训练检查点
- 模型评估: 评估训练质量
- 导出模型: 导出训练好的模型
API端点:
# 启动训练
POST /admin/training/start
{
"kb_id": "知识库ID",
"user_id": "用户ID",
"model_type": "expert", # expert/titans/moe
"preset": "fast", # 预设配置(可选)
"config": {
"num_epochs": 100,
"batch_size": 16,
"learning_rate": 1e-4,
"use_gpu": true
}
}
# 查询训练状态
GET /admin/training/status/{job_id}
# 暂停训练
POST /admin/training/{job_id}/pause
# 恢复训练
POST /admin/training/{job_id}/resume
# 取消训练
POST /admin/training/{job_id}/cancel
训练配置预设:
fast: 快速训练(10 epochs,适合测试)standard: 标准训练(50 epochs,平衡质量和时间)thorough: 完整训练(100 epochs,最佳质量)
训练数据准备:
# 从知识库chunks生成训练数据
train_data = _prepare_expert_training_data(kb.chunks)
# 返回格式: [{"text": "知识块内容", "label": 1}, ...]
模型架构:
- 基础: TITANS+MIRAS混合模型
- 输入: 知识块嵌入向量(384维)
- 输出: 增强的语义表示
- 训练目标: 重构损失(MSE Loss)
训练过程:
# 1. 加载知识库数据
kb = knowledge_manager.get_knowledge_base(kb_id)
chunks = kb.chunks
# 2. 准备训练数据
train_data = prepare_training_data(chunks)
# 3. 创建专家模型(基于核心模型)
model = create_expert_model(kb_id, titans_memory)
model.load_state_dict(core_model_weights) # 继承核心模型权重
# 4. 训练循环
for epoch in range(num_epochs):
for batch in dataloader:
loss = compute_loss(model, batch)
loss.backward()
optimizer.step()
# 保存检查点
save_checkpoint(model, epoch, loss)
# 5. 保存最终模型
save_model(model, f"expert_{kb_id}.pt")
训练监控:
- 损失曲线: 实时监控训练损失
- 资源使用: GPU/CPU使用率
- 训练进度: Epoch、Step、ETA
- 检查点管理: 自动保存最佳检查点
代码位置:
mbe-monorepo/shared/src/api/training_v2.py- 训练APImbe-monorepo/shared/src/tasks/training_tasks.py- 训练任务mises-behavior-engine/training/titans_expert_trainer.py- 专家训练器
训练时间参考:
| 硬件 | 专家模型(100 epochs) | TITANS模型 |
|---|---|---|
| GPU (RTX 3060 8GB) | ~10-30分钟 | ~2小时 |
| CPU (多核) | ~2-6小时 | ~12小时 |
训练后的优势:
- ✅ 更强的推理能力
- ✅ 更好的领域适配
- ✅ 更准确的答案生成
- ✅ 支持复杂问题理解
注意:
- 动态专家(未训练)使用向量检索,响应快但推理能力有限
- 训练后的专家模型推理能力更强,但需要更多资源
API端点:
POST /admin/knowledge/expert/publish
{
"kb_id": "知识库ID",
"name": "专家名称",
"description": "专家描述",
"keywords": ["关键词1", "关键词2"], # 可选,系统会自动补充
"domains": ["领域1"], # 可选
"priority": 5, # 优先级(1-10)
"greeting": "专家问候语",
"system_prompt": "系统提示词" # 可选
}
关键步骤:
- ✅ 自动补充关键词(从
kb.suggested_keywords) - ✅ 自动补充领域(从
kb.suggested_domains) - ✅ 创建专家配置并保存
- ✅ 重载专家路由器(使专家立即可用)
代码位置: mbe-monorepo/shared/src/api/knowledge.py:publish_as_expert()
阶段12: 用户查询 - 专家路由
用户入口:
- Web界面(MBE Desktop)
- 小智(Xiaozhi)终端
- 小爱同学(XiaoAi)
- API调用
流程:
- 用户提交问题
- 意图分析 - 分析用户意图和领域
- 专家选择 - 智能匹配最合适的专家
- 专家路由 - 将问题路由到选定的专家
专家路由算法:
- 关键词匹配: 问题中的关键词与专家关键词匹配
- 语义匹配: 使用多语言嵌入模型进行跨语言语义匹配
- 领域匹配: 根据问题领域匹配专家领域
- HOPE学习: 基于用户历史偏好调整匹配
代码位置: mbe-monorepo/private/core/src/knowledge/expert_router.py
路由流程:
# 1. 意图分析
intent = await analyze_intent(query, user_id)
# 返回: primary_intent, domain, user_goal
# 2. 专家选择
expert_id, expert_name, confidence = await select_expert(intent, query, user_id)
# 返回: 专家ID、名称、置信度
# 3. 路由到专家
result = await expert_router.route_and_answer(query, user_id, context)
阶段13: RAG检索(检索增强生成)
检索流程:
- 加载知识库: 从磁盘加载知识块和向量
- 查询向量化: 将用户问题转换为向量
- 向量检索: 使用FAISS索引或余弦相似度搜索
- 混合检索: 向量相似度 + 关键词匹配
- 结果排序: 按综合分数排序
检索优化:
- FAISS索引: GPU加速,比线性扫描快10-100倍
- 批量处理: 批量计算向量相似度
- 混合评分: 向量相似度 × 0.7 + 关键词匹配 × 0.3
- TITANS RAG: 多尺度迭代检索,提升精度
代码位置: mbe-monorepo/private/core/src/knowledge/knowledge_manager.py:search()
检索示例:
# 向量检索
results = knowledge_manager.search(
query="如何设计一个分布式系统?",
kb_ids=["kb_id_1", "kb_id_2"],
top_k=5,
use_faiss=True # 使用FAISS加速
)
# 返回结果格式
[
{
"kb_id": "kb_id_1",
"kb_name": "系统设计知识库",
"chunk_id": "chunk_123",
"text": "分布式系统的核心设计原则...",
"score": 0.85, # 综合分数
"vector_score": 0.82, # 向量相似度
"keyword_score": 0.9, # 关键词匹配度
"page": 15
},
...
]
阶段14: 答案生成
生成流程:
- 构建上下文: 将检索到的知识块组织成上下文
- LLM生成: 使用LLM基于上下文生成答案
- 引用标注: 自动标注答案来源
- 质量验证: Self-Critique验证答案质量
生成模式:
- 标准模式: 完整的上下文和LLM生成
- 快速模式 (
fast_mode): 减少检索量,简化prompt - 超快模式 (
ultra_fast): 跳过LLM,直接返回知识库内容 - 陪伴模式 (
companion): 情感陪伴场景,使用LLM直接生成
代码位置: mbe-monorepo/private/core/src/knowledge/dynamic_expert.py:general_qa()
答案生成示例:
# 标准模式
result = await expert.general_qa(
query="如何设计分布式系统?",
user_id="user_123",
fast_mode=False
)
# 返回结果
{
"answer": "分布式系统的设计原则包括:\n1. 高可用性...\n2. 可扩展性...\n\n[1] 参考来源:系统设计知识库,第15页",
"sources": ["系统设计知识库"],
"confidence": 0.85,
"hope_enabled": True, # 是否启用HOPE学习
"retrieval_strategy": "balanced"
}
LLM Prompt构建:
system_prompt = f"""你是{expert_name}。请基于参考资料回答用户问题。
⚠️ 严格规则:
1. 只能使用参考资料中的内容
2. 所有具体数据后必须标注引用 [1][2][3]
3. 不能编造任何数据
4. 如果资料不足,明确说"根据现有资料,暂无相关数据"
"""
user_prompt = f"""参考资料:
[1] (第15页, 相关度85%)\n分布式系统的核心设计原则...
[2] (第20页, 相关度78%)\n高可用性设计...
用户问题:如何设计分布式系统?
请基于参考资料回答(必须标注引用):"""
阶段15: 用户终端集成
15.1 Web界面(MBE Desktop)
流程:
- 用户在MBE Desktop界面输入问题
- 调用
POST /api/h5/expertAPI - 显示专家回答和来源
API端点: POST /api/h5/expert
代码位置: mbe-monorepo/shared/src/api/h5.py
15.2 小智(Xiaozhi)终端
流程:
- 用户通过小智终端提问
- 小智通过MCP协议调用
ask_expert工具 - MCP服务器路由到专家系统
- 返回答案给小智
- 小智语音播报答案
MCP工具: ask_expert
代码位置: mbe-monorepo/public/mcp-integration/src/server.py:_call_ask_expert()
调用示例:
# 小智调用
result = await mcp_client.call_tool("ask_expert", {
"question": "如何设计分布式系统?",
"device_id": "xiaozhi_device_123",
"user_id": "user_123",
"preferred_expert": None # 可选,指定专家
})
15.3 小爱同学(XiaoAi)
流程:
- 用户通过小爱同学提问
- 小爱技能调用
POST /api/xiaoai/skillAPI - 使用快速模式(4.5秒超时限制)
- 返回答案给小爱
- 小爱语音播报
API端点: POST /api/xiaoai/skill
代码位置: mbe-monorepo/shared/src/api/xiaoai.py
特点:
- 快速模式:减少检索量,简化prompt
- 超时控制:4.5秒超时,确保响应速度
阶段16: 反馈学习(HOPE持续学习)
学习流程:
- 用户反馈: 用户对答案的满意度反馈
- 模式学习: HOPE模块学习用户偏好模式
- 策略调整: 根据学习结果调整检索策略
- 个性化优化: 为不同用户提供个性化体验
学习维度:
- 检索策略: 知识密集型 vs 对话密集型
- 专家偏好: 用户偏好的专家类型
- 问题模式: 用户常见的问题模式
- 答案风格: 用户偏好的答案风格
代码位置: mbe-monorepo/private/core/src/core/hope_memory.py
学习示例:
# HOPE处理交互
hope_result = hope_memory.process_interaction(
user_id="user_123",
user_input="如何设计分布式系统?",
response="分布式系统的设计原则...",
context={
"expert": "系统设计专家",
"confidence": 0.85,
"sources": ["系统设计知识库"]
}
)
# 返回学习信号
{
"learning_signal": "positive", # positive/negative/neutral
"surprise": 0.2, # 意外程度
"retrieval_strategy": "knowledge_heavy" # 下次检索策略
}
🔍 完整用户查询流程
流程1: 智能问答引擎(IntelligentQAEngine)
完整流程:
用户问题
↓
Step 1: 意图分析
↓
Step 2: 专家选择
↓
Step 3: 增强检索(RAG)
↓
Step 4: 生成回答
↓
Step 5: 更新TITANS记忆
↓
返回答案
代码位置: mbe-monorepo/private/core/src/knowledge/intelligent_qa.py:answer()
详细步骤:
- 意图分析: 分析用户意图、领域、目的
- 专家选择: 基于意图和关键词选择最合适的专家
- 增强检索: 使用TITANS RAG进行多尺度迭代检索
- 生成回答: LLM基于检索结果生成答案
- 记忆更新: 更新TITANS记忆,记录交互历史
流程2: 动态专家问答(DynamicExpert)
完整流程:
用户问题
↓
加载知识库(懒加载)
↓
语义搜索(TITANS RAG)
↓
构建上下文
↓
LLM生成答案
↓
Self-Critique验证(可选)
↓
返回答案
代码位置: mbe-monorepo/private/core/src/knowledge/dynamic_expert.py:general_qa()
特点:
- 并行优化: Hope上下文获取和知识库检索并行执行
- 缓存机制: 快速模式下启用缓存
- 多模式支持: 标准/快速/超快/陪伴模式
- 上下文增强: 包含对话历史和TITANS记忆
📊 检索技术详解
1. 向量检索
技术栈:
- 嵌入模型: TITANS+MIRAS核心模型(统一语义空间)
- 索引: FAISS(GPU加速)
- 相似度: 余弦相似度(向量归一化后)
检索流程:
# 1. 查询向量化
query_embedding = embedding_model.encode_single(query)
query_embedding = normalize(query_embedding) # 归一化
# 2. FAISS检索(如果可用)
if faiss_available:
results = faiss_index.search(query_embedding, top_k=5)
else:
# 回退到线性扫描
similarities = cosine_similarity(query_embedding, chunk_embeddings)
results = top_k(similarities, k=5)
2. TITANS RAG(增强检索)
特点:
- 多尺度检索: 不同粒度的检索(文档级、段落级、句子级)
- 迭代精化: 多轮迭代,逐步精化检索结果
- 答案学习: 从历史答案中学习,提升检索精度
- 用户增强: 基于用户历史的检索加成
代码位置: mbe-monorepo/private/core/src/knowledge/titans_rag.py
检索流程:
# 多尺度迭代检索
results = titans_rag.multi_scale_search(
query="如何设计分布式系统?",
chunks=knowledge_chunks,
chunk_embeddings=cached_embeddings,
top_k=5,
iterations=2 # 迭代2轮
)
3. 混合检索
评分公式:
最终分数 = 向量相似度 × 0.7 + 关键词匹配 × 0.3
关键词匹配:
def _keyword_score(query: str, text: str) -> float:
query_words = query.lower().split()
text_lower = text.lower()
matches = sum(1 for w in query_words if w in text_lower)
return matches / len(query_words)
🎯 专家路由详解
路由算法
匹配维度:
- 关键词匹配: 问题关键词与专家关键词匹配
- 语义匹配: 跨语言语义匹配(中英文自动匹配)
- 领域匹配: 问题领域与专家领域匹配
- HOPE学习: 基于用户历史的个性化匹配
评分公式:
专家匹配分数 = 关键词分数 + 语义分数 + 领域分数 + HOPE加成
代码位置: mbe-monorepo/private/core/src/knowledge/expert_router.py:select_expert()
跨语言匹配
技术: 多语言嵌入模型(paraphrase-multilingual-MiniLM-L12-v2)
支持语言: 50+语言
原理: 将问题和专家关键词映射到同一语义空间,自动理解跨语言同义词
示例:
- 中文问题 "如何深蹲?" 可以匹配英文专家关键词 "squat"
- 英文问题 "How to squat?" 可以匹配中文知识库内容
🔄 完整用户使用流程图
┌─────────────────┐
│ 知识库就绪 │
│ (ready状态) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 发布为专家 │
│ (动态专家) │
└────────┬────────┘
│
├─────────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 使用动态专家 │ │ [可选]训练专家 │
│ (向量检索) │ │ (完整模型) │
└────────┬────────┘ └────────┬────────┘
│ │
└────────┬───────────┘
│
▼
┌─────────────────┐
│ 用户提交问题 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 意图分析 │
│ - 主要意图 │
│ - 领域识别 │
│ - 用户目的 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 专家路由 │
│ - 关键词匹配 │
│ - 语义匹配 │
│ - 领域匹配 │
│ - HOPE学习 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ RAG检索 │
│ - 向量检索 │
│ - FAISS加速 │
│ - 混合评分 │
│ - TITANS增强 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 构建上下文 │
│ - 检索结果 │
│ - 对话历史 │
│ - TITANS记忆 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ LLM生成答案 │
│ - 基于上下文 │
│ - 引用标注 │
│ - 质量验证 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 返回给用户 │
│ - 答案文本 │
│ - 来源信息 │
│ - 置信度 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 反馈学习 │
│ - HOPE学习 │
│ - 策略调整 │
│ - 个性化优化 │
└─────────────────┘
🚀 性能优化
1. 快速模式(Fast Mode)
适用场景: 低延迟场景(如天猫精灵、小爱同学)
优化措施:
- 减少检索量(top_k=3)
- 简化prompt
- 跳过HOPE学习
- 启用缓存
响应时间: 3-4秒(vs 标准模式5-8秒)
2. 超快模式(Ultra Fast Mode)
适用场景: 严格超时场景(如小爱同学5秒限制)
优化措施:
- 跳过LLM生成
- 直接返回知识库内容摘要
- 最小化处理时间
响应时间: <2秒
3. 缓存机制
缓存策略:
- 快速模式: 启用缓存
- 缓存键:
{expert_id}:{query_hash} - 缓存时间: 5分钟
代码位置: mbe-monorepo/private/core/src/knowledge/dynamic_expert.py:_get_cached_response()
4. 并行处理
并行优化:
- Hope上下文获取和知识库检索并行执行
- 减少总响应时间
代码示例:
# 并行执行
await asyncio.gather(
get_hope_context(), # Hope上下文
search_knowledge(), # 知识库检索
return_exceptions=True
)
📝 相关API端点
专家管理
POST /admin/knowledge/expert/publish- 发布知识库为专家GET /admin/knowledge/expert/list- 列出所有专家DELETE /admin/knowledge/expert/{expert_id}- 删除专家
用户查询
POST /api/h5/expert- Web界面查询专家POST /api/xiaoai/skill- 小爱同学查询- MCP
ask_expert- 小智终端查询
检索
POST /admin/knowledge/search- 搜索知识库GET /admin/knowledge/search/context- 获取专家上下文
✅ 总结
知识库处理完成后,到用户使用的完整流程包括:
- ✅ 发布为专家 - 将知识库发布为可查询的AI专家(动态专家)
- ✅ 专家模型训练(必须) - 将知识库升级为完整训练的专家模型,生产环境标准配置
- ✅ 专家路由 - 智能匹配最合适的专家
- ✅ RAG检索 - 从知识库中检索相关内容
- ✅ 答案生成 - LLM基于检索结果生成答案
- ✅ 终端集成 - 支持Web、小智、小爱等多种终端
- ✅ 反馈学习 - HOPE持续学习,优化用户体验
两种专家模式对比:
| 特性 | 动态专家(原型/测试) | 训练专家(生产标准) |
|---|---|---|
| 模型大小 | 5.1MB | 161MB |
| 推理能力 | 基础(向量检索) | 强(完整模型) |
| 响应速度 | 快(3-4秒) | 中等(5-8秒) |
| 训练时间 | 无需训练 | 10-30分钟(GPU) |
| 适用场景 | 快速原型、测试 | 生产环境、正式应用 |
| 资源需求 | 低 | 中等(需要GPU) |
| 套餐要求 | FREE套餐可用 | 需要BASIC+套餐 |
⚠️ 重要: 训练专家是生产环境的标准配置,动态专家仅用于快速原型和测试。系统会根据查询复杂度、用户套餐、知识库状态自动选择最合适的模式。详细策略请参考 MBE_EXPERT_MODEL_TRAINING_STRATEGY.md。
整个流程高度自动化,用户只需提问,系统会自动完成专家选择、知识检索、答案生成等所有步骤,最终返回高质量的答案。