MCP Skill与RAG技术入门指南:从零构建智能问答系统

3次阅读
没有评论

共计 1587 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

目录

为什么需要 RAG+MCP Skill?

传统问答系统经常遇到两个头疼的问题:

MCP Skill 与 RAG 技术入门指南:从零构建智能问答系统

  • 知识更新不及时:每次更新知识都要重新训练模型,像给房子换地基一样麻烦
  • 对话断片:用户问 ” 上一条说的 XX 是什么意思 ” 时,系统常常一脸懵

单独使用大语言模型 (LLM) 时,你会发现:

  • 经常一本正经地胡说八道(幻觉响应)
  • 对专业领域问题答非所问(比如医疗法律场景)

技术方案对比

我们实测了两种架构的表现:

指标 纯 LLM 方案 RAG+MCP Skill
响应准确率 62% 89%
平均时延(ms) 450 680
多轮对话支持

MCP Skill 就像对话的交通警察:

flowchart LR
    A[用户输入] --> B{意图识别}
    B -->| 查询类 | C[RAG 检索]
    B -->| 操作类 | D[业务 API]
    C --> E[生成回答]
    D --> E
    E --> F[更新对话状态]

手把手实现核心模块

1. 知识库向量化

用 Sentence-Transformer 将文档转为向量:

from sentence_transformers import SentenceTransformer

# 加载预训练模型
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

# 示例文档
docs = ["保修政策:7 天无理由退换", "配送时效:全国 48 小时达"]

# 生成向量
embeddings = model.encode(docs)
print(f"向量维度:{embeddings.shape}")  # 输出 (2, 384)

2. RAG 检索实现

使用 FAISS 进行相似度搜索:

import faiss
import numpy as np

# 创建索引
dimension = embeddings.shape[1]
index = faiss.IndexFlatIP(dimension)

# 归一化向量(余弦相似度要求)faiss.normalize_L2(embeddings)
index.add(embeddings)

# 查询示例
query = "退货要几天"
query_vec = model.encode([query])
faiss.normalize_L2(query_vec)

D, I = index.search(query_vec, k=2)  # 返回前 2 个结果
print(f"最相关文档索引:{I[0]}, 相似度:{D[0]}")

3. MCP 状态机设计

对话状态转换表示例:

当前状态 用户意图 动作 下一状态
初始状态 商品咨询 调用商品知识库 商品对话中
商品对话中 比价请求 触发比价 API 比价服务中
比价服务中 返回主菜单 重置上下文 初始状态

生产环境优化要点

  • 检索加速
  • 将索引分片存储,比如按产品类别划分
  • 对高频查询设置缓存,有效期 5 分钟

  • 安全防护

  • 输入清洗:过滤 SQL 注入等特殊字符
  • 输出过滤:屏蔽敏感词(用关键词词库)

新手避坑指南

  1. 向量维度不匹配
  2. 现象:FAISS 报 Inconsistent dims 错误
  3. 检查:embedding.shape与索引维度是否一致
  4. 解决:统一使用相同模型生成向量

  5. 对话状态丢失

  6. 现象:用户说 ” 刚才说的配置 ” 时系统失忆
  7. 检查:是否忘记保存session_id
  8. 解决:用 Redis 存储对话上下文

代码规范建议

关键函数应该这样写:

def retrieve_answers(query: str, index) -> list:
    """
    根据用户查询检索相关知识

    参数:query: 用户输入文本
        index: 向量索引

    返回:相关文档列表,按相似度降序
    """
    # 实际检索逻辑...
    return results

延伸思考

试着思考这些问题:

  1. 如果检索结果都不相关,如何评估是模型问题还是数据问题?
  2. 新业务上线时,如何快速积累第一批问答数据?

(提示:第一个问题可以看召回文档的相似度分布,第二个可以考虑客服日志脱敏)

正文完
 0
评论(没有评论)