配置文件
Zhin.js 在项目根目录自动发现主配置文件,支持 YAML(zhin.config.yml / .yaml)、JSON(zhin.config.json)和 TOML(zhin.config.toml)。发现优先级:.yml → .yaml → .json → .toml。
配置遵循“约定大于配置”:运行时会把默认约定作为 base,再把用户配置 deep merge 进去。普通对象按字段合并;plugins、plugin_dirs、services 等数组字段如果显式写出,就表示完整覆盖默认数组,省略则使用默认约定。
配置文件位置
配置文件位于项目根目录:
my-bot/
├── zhin.config.yml ← 主配置文件(也可使用 .yaml / .json / .toml)
├── .env ← 环境变量(令牌、密码等敏感信息)
├── src/
└── package.json基础配置
日志级别
控制输出的日志详细程度:
# 日志级别 (0=debug, 1=info, 2=warn, 3=error)
log_level: 1级别说明:
0(debug) - 输出所有日志,包括调试信息(开发时使用)1(info) - 输出普通信息和以上(推荐)2(warn) - 只输出警告和错误3(error) - 只输出错误信息
调试模式
debug: true # 启用调试模式,会输出更多内部信息插件目录
指定插件的搜索路径:
plugin_dirs:
- node_modules # npm 安装的插件
- ./src/plugins # 你的本地插件说明:
- 默认值为
node_modules和./src/plugins,通常可以省略。 node_modules- 通过 npm/pnpm 安装的插件包./src/plugins- 你自己编写的插件文件- 框架按列表顺序搜索,先找到即加载
核心服务
启用框架的核心服务:
services:
- process # 进程管理(终端适配器)
- config # 配置管理
- command # 命令系统
- component # 组件系统
- permission # 权限管理
- cron # 定时任务说明:这些是框架的核心功能,通常不需要修改。框架还会自动注册 dispatcher(消息调度)和 skill(AI 技能)服务。
插件列表
启用要使用的插件:
plugins:
- "@zhin.js/host-router" # HTTP 服务
- "@zhin.js/host-api" # Host 管理面 API(REST + Console 协议)
- "@zhin.js/adapter-sandbox" # 终端适配器
- "@zhin.js/adapter-icqq" # ICQQ 适配器
- my-plugin # 你的本地插件注意:
- npm 插件使用完整包名(如
@zhin.js/host-router) - 本地插件使用文件名(如
my-plugin对应src/plugins/my-plugin.ts) - 一旦写出
plugins数组,就表示完整插件列表;如果要保留默认 HTTP、Console、Sandbox 插件,需要一并写出。
机器人配置(bots)
bots 数组定义了每个平台的机器人实例。每个 bot 通过 context 字段关联到对应的适配器:
bots:
# ICQQ (QQ):须先 `icqq login`,再配置同名 QQ 号
- context: icqq
name: "${ICQQ_ACCOUNT}"
# QQ 官方机器人
- context: qq
name: qq-bot
appid: "${QQ_APPID}"
secret: "${QQ_SECRET}"
# KOOK 机器人
- context: kook
name: kook-bot
token: "${KOOK_TOKEN}"
# Discord 机器人
- context: discord
name: discord-bot
token: "${DISCORD_TOKEN}"说明:
context必须与适配器名称匹配(如icqq、qq、kook、discord)- 使用
${VAR}引用.env文件中的环境变量 - 一个适配器可以配置多个 bot(不同账号)
数据库配置
配置数据存储:
database:
dialect: sqlite # 数据库类型
filename: ./data/database.db # 数据库文件路径支持的数据库类型:
sqlite- SQLite(推荐,无需额外配置)mysql- MySQL(需要额外安装驱动)postgres- PostgreSQL(需要额外安装驱动)
SQLite 配置:
database:
dialect: sqlite
filename: ./data/database.db # 相对于项目根目录MySQL 配置:
database:
dialect: mysql
host: localhost
port: 3306
username: root
password: ${DB_PASSWORD} # 从环境变量读取
database: zhinAI 配置
配置 AI 大模型集成:
ai:
enabled: true # 是否启用 AI
defaultProvider: ollama # 默认 AI 提供者
# AI 提供者配置
providers:
ollama:
host: "http://127.0.0.1:11434"
# models 可省略 — ModelRegistry 自动发现并按 Tier 评分排序
openai:
apiKey: "${OPENAI_API_KEY}"
baseURL: "https://api.openai.com/v1"
# models 可省略 — 自动通过 /v1/models 发现
# 会话配置(省略时使用框架默认:DB 模式 maxHistory 200 / expireMs 7 天;内存模式 100 / 24 小时)
sessions:
useDatabase: true
maxHistory: 50
expireMs: 3600000
# 上下文管理(@zhin.js/ai ContextManager)
context:
enabled: true
maxRecentMessages: 100
summaryThreshold: 50
keepAfterSummary: 10
maxContextTokens: 4000
# 触发配置(默认前缀:#、AI:、ai:)
trigger:
respondToAt: true
respondToPrivate: true
prefixes: ["#", "AI:", "ai:"]
ignorePrefixes: ["/", "!", "!"]
timeout: 60000Agent 配置
AI Agent 的行为控制在 ai.agent 下配置:
ai:
agent:
chatModel: '' # 留空自动选择最优
visionModel: ''
execSecurity: allowlist # deny / allowlist / full(默认 deny,示例为 allowlist)
execPreset: custom # readonly / network / development / custom(默认 custom)
execAllowlist: ["docker"] # 与 preset 合并
execApprovalMode: deny # ask / allow / deny(默认 deny);见 [advanced/ai.md](/advanced/ai#交互式审批-execapprovalmode-ask)
maxIterations: 15 # 默认 15
contextTokens: 128000
maxHistoryShare: 0.5
toneAwareness: true
modelSizeHint: "" # small / medium / large,留空按模型名推断
skillInstructionMaxChars: 0 # 0 = 按 modelSizeHint 自动推断
maxSubagentIterations: 25 # 默认 25
phaseTrace: false # 输出 Agent 回合 phase 日志(也可用 ZHIN_AGENT_PHASE_TRACE=1)
modelHarness: # 按 provider 模式 / model id 覆盖 harness(与 TS 默认 deep merge)
providerPatterns:
"open*":
maxIterations: 7
models:
"openai:gpt-4o":
maxIterations: 9完整配置项说明详见 AI 模块文档 — Agent 配置详解。
Advanced AI 开关
以下能力属于 Advanced,Stable 脚手架与 minimal-bot 默认关闭。概念说明见 Agent 概念入门,MCP 实操见 MCP 集成。
ai:
# 本地知识图谱 memory MCP(默认 false)
memoryMcp: false
# 外部 MCP Server 列表(默认 [])
mcpServers:
- name: filesystem
transport: stdio
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp/zhin-mcp-test"]
# GitHub MCP(可选;配合 @zhin.js/adapter-github,见 /adapters/github)
githubMcp:
token: "${GITHUB_PERSONAL_ACCESS_TOKEN}"
agent:
# deferred Worker 工具编排(Stable 默认 false)
toolSearch: false
phaseTrace: false # Agent 阶段日志,排障时可开 trueSDK 依赖
使用 mcpServers 或 memoryMcp: true 前请安装:pnpm add @modelcontextprotocol/sdk
说明:
- AI 模块需要配置至少一个 provider 才能工作
models列表现在是可选的 — 框架通过 ModelRegistry 自动发现可用模型并按 Tier 评分排序chatModel/visionModel可指定首选模型,留空则自动选择最优模型- 当首选模型不可用时,系统自动降级到次优模型
modelHarness会在 TypeScript 默认 harness 之上做 deep merge:对象按字段合并,数组(如后续扩展字段)显式写出时完整覆盖默认数组phaseTrace(或环境变量ZHIN_AGENT_PHASE_TRACE=1)可输出稳定的[AGENT_PHASE]阶段日志,便于排障与回归对照- 支持 Ollama(本地模型)、OpenAI、以及其他兼容 OpenAI API 的服务(含中转/聚合服务)
- 详见 AI 模块文档
HTTP 服务配置
配置 Web 服务器和 API:
http:
port: 8086 # 端口号
host: "127.0.0.1" # 监听地址,默认仅本机;部署/代理场景改为 "0.0.0.0"
token: ${HTTP_TOKEN} # API 访问令牌(从环境变量读取,不填自动生成)
base: /api # API 基础路径
trustProxy: false # 通过 Cloudflare/Nginx 等反向代理访问时设为 true认证方式:Token 认证,仅保护 API 路径(/api/*)。在 Remote Console 登录时填写 API Base(与 Host 监听地址一致,如 http://127.0.0.1:8086)和 Token;:8086 仅提供 API,不提供内置网页 UI。
Token 传递方式:
- Header:
Authorization: Bearer <token>
以 /pub 为前缀的路径为公开入口,无需认证(如 /pub/health、/pub/github/webhook 等)。
通过 Cloudflare 等反向代理公网访问时,建议:
http:
port: 8086
host: "0.0.0.0" # 监听所有网卡,便于隧道或端口转发
token: ${HTTP_TOKEN}
base: /api
trustProxy: true # 信任 X-Forwarded-Host / X-Forwarded-Proto- 使用 Cloudflare Tunnel 时,在
cloudflared配置中将url指向http://localhost:8086(或本机http://127.0.0.1:8086)即可。 - Cloudflare 控制台 SSL/TLS 建议使用「完全」或「完全(严格)」,由 Cloudflare 提供 HTTPS。
进程保活与开机自启
Zhin.js 提供三种进程保活方案:
方案一:系统服务(推荐生产环境)
通过 systemd(Linux)或 launchd(macOS)实现系统级进程监督,确保守护进程本身也被监督。
优点:
- ✅ 系统级监督,守护进程崩溃也能自动重启
- ✅ 开机自启动
- ✅ 无需额外依赖
- ✅ 与系统日志集成
安装步骤:
# 1. 构建项目
pnpm build
# 2. 安装系统服务
zhin install-service
# 3. Linux (systemd)
sudo systemctl daemon-reload
sudo systemctl enable your-bot.service
sudo systemctl start your-bot.service
# 查看状态和日志
sudo systemctl status your-bot.service
sudo journalctl -u your-bot.service -f
# 4. macOS (launchd)
launchctl load ~/Library/LaunchAgents/com.zhinjs.your-bot.plist
launchctl start com.zhinjs.your-bot
# 查看状态
launchctl list | grep your-bot
tail -f logs/launchd-stdout.log
# 5. Windows (NSSM)
# 先安装 NSSM: choco install nssm 或 scoop install nssm
zhin install-service
.\install-service.ps1 # 以管理员身份运行
nssm start your-bot
# 查看状态
nssm status your-bot
type logs\nssm-stdout.log卸载服务:
zhin uninstall-service方案二:PM2
适合需要多进程管理、监控面板的场景。
pnpm build
pnpm pm2:start
# 开机自启
pm2 startup
pm2 save方案三:内置守护模式
轻量简单,适合开发/测试环境。
pnpm build
pnpm daemon # 或 zhin start --daemon注意:内置守护模式的守护进程本身不受系统监督,如果守护进程崩溃则需要手动重启。
方案对比
| 方案 | 平台支持 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|---|
| 系统服务 | Linux, macOS, Windows | • 系统级监督 • 开机自启 • 无需额外依赖 | • 需要系统权限 • 配置稍复杂 | 生产环境首选 |
| PM2 | 全平台 | • 功能丰富 • 监控面板 • 集群模式 | • 需要额外依赖 • 占用资源 | 多进程管理 |
| 内置守护 | 全平台 | • 轻量简单 • 无需依赖 | • 无系统级监督 | 开发/测试环境 |
Windows 特别说明
NSSM vs 任务计划程序:
NSSM(推荐):
- ✅ 真正的 Windows 服务
- ✅ 自动重启、日志轮转
- ✅ 服务管理界面(
services.msc) - ❌ 需要额外安装(
choco install nssm或scoop install nssm)
任务计划程序:
- ✅ Windows 内置,无需安装
- ✅ 开机自启
- ❌ 功能较弱,重启策略有限
- ❌ 管理不如服务方便
安装 NSSM:
# 方式一:Chocolatey
choco install nssm
# 方式二:Scoop
scoop install nssm
# 方式三:手动下载
# https://nssm.cc/downloadWeb 控制台配置
@zhin.js/host-api 在 @zhin.js/host-router 的 Router 上注册 管理面 API(系统/插件/Bot REST、PageManager、/api/console/*、/api/events 等)。UI 在 Remote Console(独立仓库 zhin-console)。详见 console-remote.md。
hostApi:
enabled: true # 是否启用 Host API(非 Host 静态页)
lazyLoad: false # 是否延迟初始化 PageManager(与 Remote UI 无关)环境变量
Zhin.js 支持在配置文件中通过 ${VAR} 引用环境变量:
# 基础用法
token: ${HTTP_TOKEN}
# 带默认值
port: ${PORT:-8086} # 如果 PORT 未设置,使用 8086在项目根目录的 .env 文件中设置:
HTTP_TOKEN=your_secure_token
ICQQ_ACCOUNT=123456789 # ICQQ:仅 QQ 号;登录在 icqq login / CLI 中完成,勿写入 zhin.config为什么使用环境变量?
- 安全 - 令牌和密码不会提交到 Git
- 灵活 - 不同环境使用不同配置
- 标准 - 符合 12-Factor App 原则
插件配置
本地插件
本地插件是你自己编写的插件文件。
目录结构:
src/
└── plugins/
├── hello.ts # 插件文件
└── todo.ts # 另一个插件配置:
plugin_dirs:
- ./src/plugins # 插件目录
plugins:
- hello # 加载 src/plugins/hello.ts
- todo # 加载 src/plugins/todo.tsnpm 插件
npm 插件是通过包管理器安装的插件。
安装插件:
pnpm add @zhin.js/plugin-music配置:
plugins:
- "@zhin.js/host-router" # HTTP 服务
- "@zhin.js/plugin-music" # 音乐插件插件级配置
部分插件支持在主配置文件中设置自己的配置,键名为插件名:
# HTTP 插件配置
http:
port: 8086
# Host API 插件配置
hostApi:
enabled: true
# 自定义插件配置(通过 addConfig 注册)
my-plugin:
apiKey: "${MY_API_KEY}"
timeout: 5000禁用插件
注释掉不需要的插件:
plugins:
- "@zhin.js/host-router"
# - "@zhin.js/plugin-music" # 已禁用热重载
Zhin.js 支持配置热重载,修改配置文件后自动生效(仅在 zhin dev 模式下)。
自动重载的配置
- 插件列表 - 添加/删除插件自动重载
- 插件配置 - 修改插件配置自动重载
- 日志级别 - 修改日志级别立即生效
需要重启的配置
- 端口号 - 修改 HTTP 端口需要重启
- 数据库连接 - 修改数据库配置需要重启
- 核心服务 - 修改
services列表需要重启
完整示例
log_level: 1
debug: false
database:
dialect: sqlite
filename: ./data/zhin.db
plugin_dirs:
- node_modules
- ./src/plugins
services:
- process
- config
- command
- component
- permission
- cron
plugins:
- my-plugin
- "@zhin.js/host-router"
- "@zhin.js/host-api"
- "@zhin.js/adapter-sandbox"
- "@zhin.js/adapter-icqq"
bots:
- context: icqq
name: "${ICQQ_ACCOUNT}"
http:
port: 8086
token: ${HTTP_TOKEN}
hostApi:
enabled: true
lazyLoad: false
ai:
enabled: true
defaultProvider: ollama
providers:
ollama:
host: "http://127.0.0.1:11434"
trigger:
respondToAt: true
respondToPrivate: true