基于 Node.js + 大模型的 AI 客服系统
·
引言
- 痛点引入:博客文章越来越多,读者找不到想看的内容;评论区冷清,互动少;自己没时间回复每一条留言。
- 解决方案:给博客装一个 AI 智能助手,24 小时在线,能聊天、能搜文章、能回答问题。

项目介绍
核心功能:
- 智能对话(基于大语言模型)
- 博客文章搜索与推荐
- FAQ 知识库自动匹配
- 支持多模型切换(聊天/图像生成)
- 限流保护,防止滥用
技术栈:Node.js + Express + Axios + 大模型 API
关键技术实现
文章索引与搜索
// 从 Hexo 的 _posts 目录读取文章
// 解析 front-matter(标题、日期、标签、分类)
// 构建可搜索的文章对象数组
const POSTS_DIR = '/www/wwwroot/myblog/source/_posts';
亮点:直接读取源文件,无需数据库,部署简单。
FAQ 知识库设计
// JSON 格式存储常见问题
// 关键词匹配 + 评分机制
// 匹配成功直接返回,无需调用大模型(省钱+快速)
const FAQ_FILE = path.join(__dirname, 'faq.json');
亮点:80% 的常见问题走 FAQ,只有复杂问题才调用大模型。
多模型支持
// 支持聊天模型 + 图像生成模型
// 用户可切换模型
// 统一接口封装
#ai-chatbot-input-area
#ai-chatbot-model-menu
div.ai-chatbot-model-item(data-model="sensenova-6.7-flash-lite" data-type="chat" onclick="selectModel('sensenova-6.7-flash-lite', 'Sensenova 6.7 Lite', 'chat')")
span Sensenova 6.7 Lite
span.ai-chatbot-model-desc 文本对话
div.ai-chatbot-model-item(data-model="sensenova-u1-fast" data-type="image" onclick="selectModel('sensenova-u1-fast', 'Sensenova U1', 'image')")
span Sensenova U1
span.ai-chatbot-model-desc 图像生成
div.ai-chatbot-model-item(data-model="deepseek-v4-flash" data-type="chat" onclick="selectModel('deepseek-v4-flash', 'DeepSeek V4', 'chat')")
span DeepSeek V4
span.ai-chatbot-model-desc 深度对话
限流与安全防护
// IP 级别:60 秒内最多 20 次请求
// 防止 API Key 被刷爆
// 错误处理与降级
function getClientIP(req) {
return req.headers['x-forwarded-for']?.split(',')[0]?.trim() ||
req.connection?.remoteAddress ||
req.socket?.remoteAddress;
}
const RATE_LIMIT = {};
const RATE_LIMIT_WINDOW = 60000;
const RATE_LIMIT_MAX = 20;
前端集成
- 聊天窗口的 UI 设计
- 位置控制
- 与 Hexo 主题的融合
- 调用后端 API 的 JavaScript 代码
// 发送消息到后端
async function sendMessage(message) {
const response = await fetch('https://your-api.com/api/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message, history: chatHistory })
});
const data = await response.json();
return data.reply;
}
部署与运维
部署方式
|
方式 |
适用场景 |
命令 |
|
本地开发 |
调试测试 |
|
|
服务器部署 |
生产环境 |
|
环境变量配置
API_KEY=your-api-key
BOT_NAME=AI助手
BOT_AVATAR=https://your-avatar-url
SERVICE_PORT=5004
自动重启与监控
- 使用
pm2进程管理 - 配合 Nginx 反向代理
- 日志轮转
效果展示
对话示例
用户:推荐一些MySQL相关的文章
用户:你是谁

用户:樱花纷飞的放学路上,两个身影隔着三米的距离一前一后走着。女生抱着书包,马尾辫随着步伐轻轻晃动,耳朵尖泛着可疑的红。男生双手插兜,假装在看远处的天空,却每隔几秒就用余光偷瞄前面的背影。一阵风吹过,樱花瓣纷纷扬扬落在两人之间,像一条粉色的河。画面定格在女生突然停下脚步、男生差点撞上去的刹那,两人错愕的对视中,一片花瓣恰好停在女生的睫毛上。背景虚化,前景花瓣清晰,浪漫氛围拉满。

性能数据
- 平均响应时间:~500ms(FAQ)/ ~2s(大模型)
- 支持并发:取决于 API 限额
- 文章索引:自动加载,无需手动更新
遇到的问题与解决方案
|
问题 |
解决方案 |
|
大模型 API 费用高 |
FAQ 优先匹配,减少 API 调用 |
|
文章更新后索引不同步 |
提供 |
|
前端样式与主题冲突 |
使用 CSS 变量,适配 Anzhiyu 主题 |
|
响应慢 |
增加 timeout 处理,超时返回友好提示 |
总结
- 项目价值:让博客从"静态展示"变成"动态交互"
- 学习收获:Node.js 服务开发、大模型 API 调用、全文检索思路
- 体验地址:blog.mingliangstar.com
更多推荐


所有评论(0)