v2.0.1
Suanming Web Gateway
统一的算命网页入口:后端调用 suanming-api 获取原始命理数据,再调用 DeepSeek 生成自然语言解读;前端只需请求 /api/fortune。
功能概览
POST /api/fortune:参数校验 -> 调用suanming-api-> 调用 DeepSeek -> 返回ai_text与元数据。Documents/知识库:启动时加载 Markdown,按问题检索片段注入 Prompt(轻量 RAG)。- Token 自动管理:启动预热 + 401 自动刷新 + 并发登录去重。
- 安全控制:支持 CORS 白名单、知识库重载接口鉴权、响应里原始数据开关。
- 静态前端:单页表单,支持示例填充、状态展示、告警展示。
文件结构
Suanming-Web/
├── public/ # 前端静态资源
├── server.js # Express 网关与 API
├── knowledge-base.js # Documents 加载与检索
├── DEPLOYMENT.md # 主部署文档
├── PM2_LOGROTATE_DEPLOYMENT.md # PM2 日志轮转部署记录
├── package.json
└── .env
快速开始
1) 安装依赖
cd /home/rongye/ProgramFiles/Suanming-Web
npm install
2) 配置 .env
# HTTP
PORT=4173
# suanming-api
SUANMING_API_BASE=http://localhost:3001/api
SUANMING_EMAIL=your-email@example.com
SUANMING_PASSWORD=your-password
SUANMING_TIMEOUT_MS=12000
# DeepSeek
DEEPSEEK_API_KEY=your-deepseek-api-key
DEEPSEEK_API_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-chat
DEEPSEEK_TIMEOUT_MS=20000
# Documents 知识库
KNOWLEDGE_ENABLED=true
DOCUMENTS_DIR=./Documents
KNOWLEDGE_TOP_K=6
KNOWLEDGE_CHUNK_SIZE=1200
KNOWLEDGE_MAX_CONTEXT_CHARS=7000
RAW_SUANMING_PROMPT_LIMIT=12000
# 返回控制(生产建议 false)
INCLUDE_RAW_SUANMING=false
# CORS 白名单(逗号分隔)
# 留空 = 仅同源可用,跨域会被浏览器拦截
CORS_ALLOWED_ORIGINS=https://suanming.hbyrkj.top,http://localhost:4173
# 知识库热重载接口鉴权
KNOWLEDGE_RELOAD_AUTH_ENABLED=true
KNOWLEDGE_ADMIN_TOKEN=replace-with-a-long-random-token
生成随机 Token:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
3) 启动服务
npm run dev
# 浏览器访问 http://localhost:4173
4) PM2 启动(生产)
pm2 start server.js --name suanming-web --update-env
pm2 save
API 说明
POST /api/fortune
请求示例:
{
"type": "bazi",
"name": "张三",
"birth_date": "1990-01-01",
"birth_time": "12:00",
"gender": "male",
"is_lunar": false,
"question": "想了解近期事业与财运",
"extra_options": {
"focus": "career"
}
}
返回示例:
{
"success": true,
"data": {
"ai_text": "DeepSeek 的自然语言解读",
"meta": {
"type": "bazi",
"model": "deepseek-chat",
"elapsed_ms": 2143,
"raw_suanming_included": false,
"warnings": [],
"time_anchor": {
"current_year": 2026,
"reference_year": 2026,
"mode": "analysis_date"
},
"knowledge": {
"enabled": true,
"source_count": 6,
"sources": []
}
}
}
}
说明:当 INCLUDE_RAW_SUANMING=true 时,响应会额外包含 data.raw_suanming。
GET /api/knowledge/status
查看知识库加载状态(文档数、分片数、最后加载时间、错误信息)。
POST /api/knowledge/reload
热重载 Documents/*.md,默认需要鉴权。
请求头二选一:
X-Knowledge-Token: <KNOWLEDGE_ADMIN_TOKEN>Authorization: Bearer <KNOWLEDGE_ADMIN_TOKEN>
知识库机制(轻量 RAG)
- 启动加载:扫描
Documents/*.md-> 分片 -> 常驻内存。 - 请求检索:基于问题关键词和上下文打分,选取 Top-K 片段注入 Prompt。
- 年份策略:优先使用用户指定年份,否则对齐
raw_suanming的分析年份,降低时效偏差。 - 热更新:新增/修改文档后调用
/api/knowledge/reload即可生效,无需重启。
安全建议(生产)
- 配置
CORS_ALLOWED_ORIGINS,仅放行你的正式域名。 - 保持
KNOWLEDGE_RELOAD_AUTH_ENABLED=true,并使用强随机KNOWLEDGE_ADMIN_TOKEN。 - 建议
INCLUDE_RAW_SUANMING=false,减少敏感数据外露与响应体积。 - 建议安装
pm2-logrotate做日志轮转,防止磁盘被日志占满。
相关文档
- 部署流程:
DEPLOYMENT.md - PM2 日志轮转部署:
PM2_LOGROTATE_DEPLOYMENT.md
免责声明
本服务仅供娱乐参考,不构成任何专业建议。
Description