MBE系统用户使用知识库完整流程

📋 流程概览

知识库处理完成后,到用户使用的完整流程包括:

知识库就绪 → 发布为专家 → [必须:专家模型训练] → 专家路由 → RAG检索 → 答案生成 → 用户终端 → 反馈学习

关键顺序(CRITICAL SEQUENCE):上述步骤必须按顺序执行。与用户对话时可据此给出“当前状态 → 下一步建议”;详见 → MBE_CRITICAL_SEQUENCE_AND_USER_GUIDANCE.md

两种专家模式:

  1. 动态专家(原型/测试): 轻量级(5.1MB),使用向量索引,响应快,仅用于快速原型和测试
  2. 训练专家(生产标准): 完整模型(161MB),推理能力强,必须训练,生产环境标准配置

⚠️ 重要: 训练专家是生产环境的标准配置,动态专家仅用于快速原型和测试。详细策略请参考 MBE_EXPERT_MODEL_TRAINING_STRATEGY.md


🔄 详细流程

阶段11: 知识库发布为专家

前提条件: 知识库状态为 ready

流程:

  1. 开发者调用 POST /admin/knowledge/expert/publish API
  2. 系统自动补充关键词(从知识库AI分析结果)
  3. 创建动态专家配置
  4. 重载专家路由器
  5. 专家可用于查询

注意: 此时专家是动态专家(轻量级,5.1MB),使用向量索引进行检索。⚠️ 生产环境必须进行模型训练,动态专家仅用于快速原型和测试。详细策略请参考 MBE_EXPERT_MODEL_TRAINING_STRATEGY.md


阶段11.5: 专家模型训练(必须)

⚠️ 重要性: 专家模型训练不是可选的,而是必须的。MBE引擎中,上下文管理和回答问题的质量非常关键,因此所有生产环境的知识库都应该经过模型训练。

目的: 将知识库升级为完整训练的专家模型,获得更强的推理能力和更高的答案质量

训练类型:

  1. 专家模型训练 (expert): 基于知识库微调专家模型
  2. TITANS模型训练 (titans): 训练核心TITANS模型
  3. MoE模型训练 (moe): 训练专家混合模型

训练流程:

  1. 准备训练数据: 从知识库chunks生成训练样本
  2. 初始化模型: 基于核心TITANS+MIRAS模型创建专家模型
  3. 训练循环: 多轮训练,优化模型参数
  4. 保存检查点: 定期保存训练检查点
  5. 模型评估: 评估训练质量
  6. 导出模型: 导出训练好的模型

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 - 训练API
  • mbe-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调用

流程:

  1. 用户提交问题
  2. 意图分析 - 分析用户意图和领域
  3. 专家选择 - 智能匹配最合适的专家
  4. 专家路由 - 将问题路由到选定的专家

专家路由算法:

  • 关键词匹配: 问题中的关键词与专家关键词匹配
  • 语义匹配: 使用多语言嵌入模型进行跨语言语义匹配
  • 领域匹配: 根据问题领域匹配专家领域
  • 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检索(检索增强生成)

检索流程:

  1. 加载知识库: 从磁盘加载知识块和向量
  2. 查询向量化: 将用户问题转换为向量
  3. 向量检索: 使用FAISS索引或余弦相似度搜索
  4. 混合检索: 向量相似度 + 关键词匹配
  5. 结果排序: 按综合分数排序

检索优化:

  • 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: 答案生成

生成流程:

  1. 构建上下文: 将检索到的知识块组织成上下文
  2. LLM生成: 使用LLM基于上下文生成答案
  3. 引用标注: 自动标注答案来源
  4. 质量验证: 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)

流程:

  1. 用户在MBE Desktop界面输入问题
  2. 调用 POST /api/h5/expert API
  3. 显示专家回答和来源

API端点: POST /api/h5/expert

代码位置: mbe-monorepo/shared/src/api/h5.py


15.2 小智(Xiaozhi)终端

流程:

  1. 用户通过小智终端提问
  2. 小智通过MCP协议调用 ask_expert 工具
  3. MCP服务器路由到专家系统
  4. 返回答案给小智
  5. 小智语音播报答案

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)

流程:

  1. 用户通过小爱同学提问
  2. 小爱技能调用 POST /api/xiaoai/skill API
  3. 使用快速模式(4.5秒超时限制)
  4. 返回答案给小爱
  5. 小爱语音播报

API端点: POST /api/xiaoai/skill

代码位置: mbe-monorepo/shared/src/api/xiaoai.py

特点:

  • 快速模式:减少检索量,简化prompt
  • 超时控制:4.5秒超时,确保响应速度

阶段16: 反馈学习(HOPE持续学习)

学习流程:

  1. 用户反馈: 用户对答案的满意度反馈
  2. 模式学习: HOPE模块学习用户偏好模式
  3. 策略调整: 根据学习结果调整检索策略
  4. 个性化优化: 为不同用户提供个性化体验

学习维度:

  • 检索策略: 知识密集型 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()

详细步骤:

  1. 意图分析: 分析用户意图、领域、目的
  2. 专家选择: 基于意图和关键词选择最合适的专家
  3. 增强检索: 使用TITANS RAG进行多尺度迭代检索
  4. 生成回答: LLM基于检索结果生成答案
  5. 记忆更新: 更新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)

🎯 专家路由详解

路由算法

匹配维度:

  1. 关键词匹配: 问题关键词与专家关键词匹配
  2. 语义匹配: 跨语言语义匹配(中英文自动匹配)
  3. 领域匹配: 问题领域与专家领域匹配
  4. 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 - 获取专家上下文

✅ 总结

知识库处理完成后,到用户使用的完整流程包括:

  1. 发布为专家 - 将知识库发布为可查询的AI专家(动态专家)
  2. 专家模型训练(必须) - 将知识库升级为完整训练的专家模型,生产环境标准配置
  3. 专家路由 - 智能匹配最合适的专家
  4. RAG检索 - 从知识库中检索相关内容
  5. 答案生成 - LLM基于检索结果生成答案
  6. 终端集成 - 支持Web、小智、小爱等多种终端
  7. 反馈学习 - HOPE持续学习,优化用户体验

两种专家模式对比:

特性 动态专家(原型/测试) 训练专家(生产标准)
模型大小 5.1MB 161MB
推理能力 基础(向量检索) 强(完整模型)
响应速度 快(3-4秒) 中等(5-8秒)
训练时间 无需训练 10-30分钟(GPU)
适用场景 快速原型、测试 生产环境、正式应用
资源需求 中等(需要GPU)
套餐要求 FREE套餐可用 需要BASIC+套餐

⚠️ 重要: 训练专家是生产环境的标准配置,动态专家仅用于快速原型和测试。系统会根据查询复杂度、用户套餐、知识库状态自动选择最合适的模式。详细策略请参考 MBE_EXPERT_MODEL_TRAINING_STRATEGY.md

整个流程高度自动化,用户只需提问,系统会自动完成专家选择、知识检索、答案生成等所有步骤,最终返回高质量的答案。