与 12 位思想导师对话的多 Agent 智识对话平台。选择 1 位导师时单聊,选择 2~4 位时进入手动点名辩论:先确认话题,再点击人物让他单独发言。
这是第一阶段 demo 上线版,不是正式用户系统。
- 后端:Node.js + Express 4
- 前端:纯 HTML/CSS/Vanilla JS,无构建工具
- LLM:Anthropic Messages API,默认模型
claude-haiku-4-5-20251001 - 流式输出:SSE(Server-Sent Events,浏览器保持连接,服务端一段段推回复)
- 登录:本地用户名密码,token 默认 7 天过期
- 存储:
data/users.json存用户,data/diag.json存 LLM 自检结果 - 部署:先走
zaodeploy
data/users.json 只是 demo 级存储。它适合小范围验证,不适合正式用户长期使用;后面要接 PostgreSQL 或其他正式数据库。
MentorOS/
├── server.js # Express API、登录、LLM 调用、SSE
├── agents.js # 12 位导师数据和 prompt 构建器
├── public/ # 前端页面、样式、头像
├── scripts/smoke.mjs # 上线前 smoke check
├── data/ # 运行时生成,不进 Git
├── package.json
└── .env.example
上线必须设置:
| 变量名 | 说明 |
|---|---|
ANTHROPIC_BASE_URL |
Anthropic API 网关地址,例如 https://api.anthropic.com |
ANTHROPIC_AUTH_TOKEN |
Bearer Token |
ANTHROPIC_MODEL |
模型名,默认 claude-haiku-4-5-20251001;兼容网关可填自己的模型 |
ANTHROPIC_THINKING |
可选。兼容网关如果默认输出 thinking 块,可填 disabled |
SESSION_SECRET |
32 位以上随机字符串,用来签名登录 token |
MENTOROS_REQUIRE_PROD_CONFIG |
上线建议设为 true,缺关键配置时直接启动失败 |
常用可选项:
| 变量名 | 默认值 | 说明 |
|---|---|---|
TOKEN_TTL_DAYS |
7 |
登录 token 有效天数 |
MENTOROS_DATA_DIR |
./data |
用户和诊断文件目录 |
MAX_AGENT_IDS |
4 |
单次最多选择导师数;服务端硬上限仍为 4 |
RATE_LIMIT_AUTH_MAX |
20 |
每分钟登录/注册限制 |
RATE_LIMIT_CHAT_MAX |
20 |
每分钟聊天限制 |
RATE_LIMIT_DEBATE_MAX |
30 |
每分钟点名发言限制 |
npm install
cp .env.example .env编辑 .env 后,在 zsh/bash 中加载环境变量并启动:
set -a
source .env
set +a
npm start打开 http://localhost:3000。
也可以本地放一个 llm.config.json 作为 LLM 凭证兜底:
{
"baseURL": "https://api.anthropic.com",
"authToken": "sk-ant-xxxxx",
"model": "claude-haiku-4-5-20251001"
}llm.config.json 已经在 .gitignore 中,不要提交。
node --check server.js
npm audit --omit=dev
npm run smokenpm run smoke 会随机启动一个本地端口,检查:
/health/api/agents- 未登录聊天返回 401
- 注册返回 token
- 登录返回 token
- 多人不能误走单聊接口
- 第 5 位导师和错误发言人会被拒绝
- 手动辩论一次只返回指定人物
- 人物错误称呼自己时会自动重写
它使用脚本内置的本地假 LLM,不会消耗真实 API 额度。
curl http://localhost:3000/health期望返回:
{
"ok": true,
"llmConfigured": true,
"authConfigured": true,
"dataDirWritable": true
}任何字段为 false,都先别上线。
确保平台环境变量已经设置:
ANTHROPIC_BASE_URL
ANTHROPIC_AUTH_TOKEN
ANTHROPIC_MODEL
ANTHROPIC_THINKING
SESSION_SECRET
MENTOROS_REQUIRE_PROD_CONFIG=true
如果用小米 Mimo 的 Anthropic 兼容网关,对应关系是:
ANTHROPIC_BASE_URL=https://token-plan-cn.xiaomimimo.com/anthropic
ANTHROPIC_AUTH_TOKEN=<你的 tp-... token>
ANTHROPIC_MODEL=mimo-v2.5
ANTHROPIC_THINKING=disabled
部署命令:
zaodeploy deploy --project mentoros --start "node server.js"如果平台要求显式申请数据库,可以暂时不接入代码;当前版本仍然使用 data/users.json。等核心功能验证通过,再把用户表迁到 PostgreSQL。
上线后按这个顺序测:
- 访问
/health,确认四个字段全是true。 - 打开首页,注册一个新用户。
- 退出后重新登录。
- 选择 1 位导师单聊,确认流式回复正常。
- 选择 2~4 位导师,输入话题并确认,此时不应自动生成回复。
- 依次点击不同导师,确认每次只出现当前人物的一个气泡,后发言者能回应前文。
- 连续点击同一位导师,确认可以继续深化观点且不会把自己当成辩友。
- 刷新页面,确认登录状态还在。
第一阶段跑通后,下一步建议按这个顺序做:
- 把
data/users.json迁到 PostgreSQL。 - 加服务端会话表或更完整的 token 撤销机制。
- 加按用户计费/额度记录,避免 LLM 成本失控。
- 给 LLM 错误、超时、余额不足做更明确的前端提示。