Kevin Wong 75705d98ba 更新
2026-03-11 15:19:11 +08:00
2026-03-11 14:08:24 +08:00
2026-03-11 14:08:24 +08:00
2026-03-11 14:08:24 +08:00
2026-03-11 15:19:11 +08:00
2026-03-11 14:08:24 +08:00
2026-01-08 17:40:59 +08:00
2026-01-08 17:40:59 +08:00
2026-03-11 15:19:11 +08:00
2026-03-11 14:08:24 +08:00

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
No description provided
Readme 293 KiB
v2.0.1 Latest
2026-03-11 15:19:49 +08:00
Languages
JavaScript 82%
CSS 10.4%
HTML 7.6%