最近把北途的企业网站重新做了一遍,从代码编写到部署,再到加AI功能,前后花了差不多一个月。这里把过程记下来,主要给自己留个底,也给有需要的人参考。
一、整体架构
老网站是几年前找人做的,PHP加模板引擎,后台很乱,改个图片都要动代码。这次决定重写,选了比较常见的方案:前端Vue3,后端Node.js加Express,数据库用MySQL,部署在一台普通的云服务器上。没有追新框架,够用就行。
整体结构分三层:前台展示、后台管理、AI接口服务。前后端分离,接口统一走RESTful,返回JSON。后台管理做了简单的权限控制,两种角色,管理员和编辑。
二、开发过程
先搭后端接口。产品、新闻、案例这几个模块的CRUD写起来不难,一天就完成了。中间踩了个坑:MySQL连接池没配好,并发一高就报“Connection timeout”。后来把连接池上限从10调到50,加上连接空闲回收,问题解决。
前端部分,页面不多,首页、产品列表、详情、关于我们,加起来七八个页面。用了组件复用,产品卡片和新闻卡片各写一个组件传参调用。图片做了懒加载,首屏速度从3秒多降到1秒左右。
三、AI功能部署
这次的主要改动是加了AI客服。思路是:用户提问后,先走关键词匹配查FAQ库,匹配不到再调大模型接口。一开始直接把用户问题透传给大模型,发现两个问题:一是响应慢,平均要4秒;二是偶尔会胡编产品参数。
改进方法是加了一层RAG:把公司产品资料、常见问题整理成向量库,用户提问先检索相关内容,把检索结果作为上下文一起发给模型,并在prompt里明确要求“只根据提供资料回答,没有就说不知道”。改完之后准确率明显上来了,回答基本都基于真实资料。
四、遇到的错误和改进
印象比较深的有三个错误。第一个是跨域问题,本地开发时前端调后端接口一直报CORS错误,查了半天是Express没配cors中间件,加上之后正常。这种问题不复杂,但第一次遇到容易绕弯路。
第二个是AI接口的超时处理。有一次大模型服务不稳定,请求挂起,用户那边一直转圈。后来给AI请求加了15秒超时,超时自动降级到FAQ关键词匹配,并返回“人工客服”入口。这样即使AI挂了,用户体验也不至于太差。
第三个是数据库查询慢。产品列表页一开始用了一次联表查询加排序,数据量大了之后要1秒多。用EXPLAIN分析后发现没走索引,全表扫描。给产品表的分类字段和创建时间加了联合索引,查询降到50毫秒以内。教训是:索引要提前设计好,别等慢了再补。
五、部署上线
部署用的Docker,后端和Nginx各一个容器,docker-compose统一管理。Nginx做反向代理和静态资源缓存,HTTPS用Let's Encrypt免费证书。上线前用ab压测了一下,200并发下接口响应正常,对小企业网站来说足够了。
整个过程下来,最大的感受是:别过度设计,先把核心流程跑通,再针对实际问题优化。AI功能也是,先把检索和兜底逻辑做扎实,效果自然就稳了。后面打算再补充日志监控,方便排查线上问题。