使用 TypeScript 和向量搜索构建生产级评论分析 MCP 服务器

作者
  • avatar
    姓名
    Nino
    职业
    Senior Tech Editor

手动处理成千上万条 App Store 评论是产品团队的噩梦。虽然原始评论中蕴藏着宝贵的反馈金矿,但对于传统的基于关键字的系统来说,信噪比往往过高。这正是 Model Context Protocol (MCP) 大显身手的地方。通过构建专用的 MCP 服务器,我们可以弥合非结构化评论数据与 Claude 或 GPT-4o 等 LLM 驱动的推理工具之间的鸿沟。

在本教程中,我们将构建 ReviewRadar —— 一个生产级的 MCP 服务器,它采用了正则表达式规则、LLM 路由和向量搜索的混合架构。为了确保 LLM 组件的高可用性和低延迟,我们将使用 n1n.ai 作为我们的主要 API 网关。

ReviewRadar 的架构设计

一个稳健的评论分析系统必须具备快速、高性价比和准确的特点。纯 LLM 的方法在实时处理数千条评论时既昂贵又缓慢。我们的架构采用了分层方法:

  1. 规则引擎 (Rules Engine):使用快速的正则表达式捕获明显的问题(例如:“崩溃”、“登录失败”)。
  2. LLM 路由器 (LLM Router):对于规则无法处理的细微情感分析和分类,将其路由至大模型。
  3. 向量数据库 (Vector DB):存储嵌入(Embeddings)以进行语义搜索和重复检测。
  4. MCP 工具 (MCP Tools):将这些功能暴露给 LLM 客户端,以便进行交互式查询。

为什么选择 MCP 服务器?

MCP (Model Context Protocol) 允许开发者以标准化的方式将本地或远程数据源及工具暴露给 AI 模型。与其为每个 AI 功能编写自定义集成代码,不如只构建一次 MCP 服务器,任何符合 MCP 标准的客户端(如 Claude Desktop)都可以立即使用您的工具。当结合来自 n1n.ai 的高速端点时,您可以在产品数据与高级推理能力之间建立无缝桥梁。

项目环境搭建

首先,使用 MCP SDK 初始化一个 TypeScript 项目:

mkdir review-radar-mcp
cd review-radar-mcp
npm init -y
npm install @modelcontextprotocol/sdk zod typescript
npm install -D @types/node

配置您的 tsconfig.json 以支持现代 ESM 语法,因为 MCP SDK 严重依赖它。

核心实现:混合逻辑控制

1. 规则引擎实现

我们定义了一组 “P0” 级别规则。这些是必须立即标记的关键问题,无需等待 LLM 响应。

const CRITICAL_KEYWORDS = [/崩溃/i, /打不开/i, /扣费/i, /骗子/i]

function checkCritical(text: string): boolean {
  return CRITICAL_KEYWORDS.some((regex) => regex.test(text))
}

2. 通过 n1n.ai 进行 LLM 路由

对于不匹配简单规则的评论,我们将其路由到 LLM。使用 n1n.ai 允许我们根据评论的复杂程度,在 Claude 3.5 Sonnet 和 DeepSeek-V3 等模型之间灵活切换。这种灵活性对于需要平衡成本和性能的生产环境至关重要。

async function classifyWithLLM(review: string) {
  const response = await fetch('https://api.n1n.ai/v1/chat/completions', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.N1N_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      model: 'claude-3-5-sonnet',
      messages: [
        { role: 'system', content: '将此评论分类为:Bug、功能请求或好评。' },
        { role: 'user', content: review },
      ],
    }),
  })
  return response.json()
}

向量搜索实现语义洞察

为了发现类似的评论(例如,“应用运行缓慢” 与 “性能卡顿”),我们需要向量搜索。我们使用 Embeddings 将评论文本表示为多维空间中的坐标。

实现步骤

  1. 生成嵌入:将评论文本发送到嵌入模型(可通过 n1n.ai 获取)。
  2. 存入向量库:使用 Pinecone 或 ChromaDB 存储向量。
  3. 查询:当用户询问 “主要的性能投诉有哪些?” 时,MCP 服务器执行向量相似度搜索。

定义 MCP 工具

现在,我们将逻辑封装为 LLM 可以调用的工具。在您的 MCP 服务器文件中:

import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

const server = new Server(
  {
    name: 'review-radar',
    version: '1.0.0',
  },
  {
    capabilities: {
      tools: {},
    },
  }
)

// 注册分析工具
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: 'analyze_review',
      description: '分析应用评论的情感和关键问题',
      inputSchema: {
        type: 'object',
        properties: {
          text: { type: 'string' },
        },
        required: ['text'],
      },
    },
  ],
}))

生产环境专家技巧 (Pro Tips)

  1. 速率限制 (Rate Limiting):在批量处理评论时,请确保您的 MCP 服务器能够处理速率限制。使用像 n1n.ai 这样的聚合器可以通过跨多个模型提供商提供更高的吞吐量来缓解这一问题。
  2. 缓存机制:为 Embeddings 实现简单的 Redis 缓存。如果两条评论完全相同,不要浪费 Token 重新计算向量。
  3. 人机回环 (Human-in-the-loop):对于规则引擎检测到的 “P0” 问题,应立即触发 Webhook 发送到 Slack 或 PagerDuty,实现秒级响应。
  4. 模型冗余:在生产环境中,API 的稳定性至关重要。通过 n1n.ai 访问 LLM,可以确保在单个供应商宕机时,快速切换到备用模型,保证业务连续性。

总结

为评论分析构建 MCP 服务器可以将原始数据转化为可落地的智能洞察。通过结合 TypeScript 的开发速度、基于规则的逻辑精度以及通过 n1n.ai 获得的 LLM 推理能力,您可以创建一个随用户规模增长而自动扩展的智能系统。

立即在 n1n.ai 获取免费 API 密钥。