企业信息化管理系统

EIMS - 助力企业数字化转型

企业信息化系统AI智能客服设计与实现

AI智能客服概述

随着大语言模型(LLM)技术的成熟,企业信息化系统中集成AI智能客服已成为提升服务效率的重要手段。本文介绍如何在EIMS系统中设计和实现AI智能客服功能,帮助企业实现7x24小时自动化客户服务。

系统架构设计

AI智能客服系统采用分层架构,确保系统的可扩展性和稳定性:

架构层次 主要功能 技术选型
接入层 多渠道接入、会话管理 Websocket、REST API
业务层 意图识别、对话管理 Koa.js、Redis
AI层 LLM调用、知识检索 ChatGPT/文心一言 API
数据层 会话存储、向量检索 MySQL、Milvus

核心功能实现

1. 对话管理

对话管理负责维护会话状态,包括上下文信息和对话历史:

// 对话管理服务
class ConversationManager {
  constructor() {
    this.sessions = new Map(); // 使用Redis存储更佳
    this.maxHistory = 10; // 保留最近10轮对话
  }

  // 创建新会话
  createSession(userId, channel) {
    const sessionId = this.generateSessionId();
    this.sessions.set(sessionId, {
      userId,
      channel,
      history: [],
      context: {},
      createdAt: Date.now()
    });
    return sessionId;
  }

  // 添加用户消息
  addUserMessage(sessionId, message) {
    const session = this.sessions.get(sessionId);
    if (!session) return null;

    session.history.push({
      role: 'user',
      content: message,
      timestamp: Date.now()
    });

    // 修剪过长的历史
    if (session.history.length > this.maxHistory * 2) {
      session.history = session.history.slice(-this.maxHistory * 2);
    }

    return session;
  }

  // 添加AI回复
  addBotMessage(sessionId, message) {
    const session = this.sessions.get(sessionId);
    if (!session) return null;

    session.history.push({
      role: 'assistant',
      content: message,
      timestamp: Date.now()
    });

    return session;
  }

  // 获取对话历史(用于LLM上下文)
  getHistoryForLLM(sessionId) {
    const session = this.sessions.get(sessionId);
    return session ? session.history : [];
  }
}

2. 意图识别

通过LLM或规则匹配识别用户意图:

// 意图识别服务
class IntentRecognizer {
  constructor() {
    // 预定义意图模板
    this.intentPatterns = {
      '查询订单': /订单|订单状态|订单查询/i,
      '修改订单': /修改订单|取消订单/i,
      '产品咨询': /产品|价格|规格|参数/i,
      '售后问题': /退货|换货|售后|维修/i,
      '账户问题': /密码|登录|账户|权限/i,
      '人工服务': /人工|客服|帮助|转人工/i
    };
  }

  async recognize(message, history = []) {
    // 方法1:规则匹配(快速响应)
    for (const [intent, pattern] of Object.entries(this.intentPatterns)) {
      if (pattern.test(message)) {
        return { intent, confidence: 0.9, method: 'rule' };
      }
    }

    // 方法2:LLM识别(更准确)
    const prompt = `
      用户消息: "${message}"

      请识别用户意图,只能选择以下之一:
      - 查询订单
      - 修改订单
      - 产品咨询
      - 售后问题
      - 账户问题
      - 人工服务
      - 其他

      只返回意图名称,不要其他内容。
    `;

    const intent = await this.callLLM(prompt);
    return { intent: intent.trim(), confidence: 0.7, method: 'llm' };
  }
}

3. RAG知识库检索

结合企业知识库,提供准确的业务答案:

// 知识库检索服务
class KnowledgeBaseService {
  constructor() {
    this.vectorStore = null; // 向量数据库
    this.docs = []; // 原始文档
  }

  // 文档向量化
  async addDocument(title, content, category) {
    const embedding = await this.getEmbedding(content);
    this.docs.push({
      id: this.docs.length + 1,
      title,
      content,
      category,
      embedding
    });
  }

  // 相似度检索
  async search(query, topK = 3) {
    const queryEmbedding = await this.getEmbedding(query);
    const results = this.docs.map(doc => ({
      doc,
      similarity: this.cosineSimilarity(queryEmbedding, doc.embedding)
    }));

    return results
      .sort((a, b) => b.similarity - a.similarity)
      .slice(0, topK);
  }

  // 构建Prompt
  buildContext(query, searchResults) {
    const context = searchResults
      .map(r => r.doc)
      .map(d => `【${d.title}】\n${d.content}`)
      .join('\n\n');

    return `
      请根据以下知识库内容回答用户问题。

      知识库内容:
      ${context}

      用户问题:${query}

      要求:
      1. 只使用知识库中的信息回答
      2. 如果知识库中没有相关信息,请说明"抱歉,我暂时没有找到相关信息,建议您联系人工客服"
      3. 回答要简洁明了
    `;
  }
}

4. 流式响应

实现打字机效果的流式输出,提升用户体验:

// 流式响应处理
router.post('/chat', async (ctx) => {
  const { message, sessionId } = ctx.request.body;

  // 设置流式响应头
  ctx.set({
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive'
  });

  const session = conversationManager.getSession(sessionId);
  conversationManager.addUserMessage(sessionId, message);

  // 检索知识库
  const searchResults = await knowledgeBase.search(message);
  const prompt = knowledgeBase.buildContext(message, searchResults);

  // 流式调用LLM
  const stream = await llm.streamChat(prompt);

  ctx.body = stream; // 直接返回流
});

多渠道接入

AI客服需要支持多种接入渠道:

人机协作模式

当AI无法解决问题时,智能转接人工客服:

// 转人工服务
async function shouldTransferToHuman(sessionId, userMessage, aiResponse) {
  // 转人工条件
  const conditions = [
    userMessage.includes('人工'), // 用户明确要求人工
    userMessage.includes('投诉'), // 投诉类问题
    aiResponse.includes('无法'), // AI表示无法处理
    session.continuousFailures >= 3, // 连续多次无法理解
    session.satisfactionScore < 3 // 用户满意度低
  ];

  // 情绪分析检测负面情绪
  const sentiment = await analyzeSentiment(userMessage);
  if (sentiment.negative > 0.7) {
    conditions.push(true);
  }

  return conditions.some(c => c);
}

效果评估与优化

持续监控和优化AI客服效果:

指标 说明 目标值
意图识别准确率 正确识别用户意图的比例 >85%
问题解决率 用户问题被成功解决的比例 >70%
平均响应时间 从接收到回复的耗时 <3秒
转人工率 需要人工介入的比例 <30%

总结

AI智能客服是企业信息化系统的重要组成部分,通过合理的设计和实现,可以显著提升客户服务效率,降低运营成本。在实际落地过程中,需要持续优化知识库、完善意图识别、提升回答准确率。

← 下一篇:企业信息化系统集成第三方服务实践 上篇:企业信息化系统用户体验优化实践 →