配置参考
配置只有两处:jingmei.config.json 放业务配置,.env 放密钥。配置文件里只写环境变量的名字(tokenEnv、apiKeyEnv、routingSecretEnv),不写密钥本身;进程环境变量优先于 .env。所有 ID 都写成 JSON 字符串。
顶层
| 字段 | 说明 |
|---|---|
dataDir | 数据目录,默认 data;相对路径以项目根为准,支持 ~/ |
routingSecretEnv | 路由 HMAC 密钥的环境变量名,默认 ROUTING_SECRET;必须有值 |
visionModel | 可选,"provider/model"(按第一个 / 拆分)。只在有角色的主模型不能看图时,为图片生成文字描述;该模型必须支持图片输入 |
discord.guilds[] | { guildId, channelIds }:服务器 ID 与允许的频道 ID(17–20 位数字);这些频道下的 thread 也可用 |
telegram.chatIds | 允许的群 ID,如 "-1001234567890" |
voice | 可选,Fish Audio:apiKeyEnv、referenceId(32 位十六进制音色 ID)、model(s2.1-pro-free 默认,或 s2.1-pro) |
imageGeneration | 可选,{ model }:画图用的 Antigravity 模型 ID,默认 gemini-3.1-flash-image。只有登录了 antigravity provider 时画图工具才会启用,见画图 |
kline | 可选,{ enabled }:enabled 默认 false,见K 线图 |
textImage | 可选,{ enabled, thresholdChars }:enabled 默认 false;thresholdChars 是文字回复的字数上限(50–8000 的整数,默认 300),见长文转图 |
features | 可选,history、memory、soul、search、audit 五个布尔开关,默认全为 true,见可选功能 |
telemetry | 可选,{ enabled }:匿名实例统计,enabled 默认 true;环境里设置 DO_NOT_TRACK=1 同样关闭,见使用统计 |
jev | 可选,见 Jev |
localJev | 可选,进程内 LLM→Jev 包装器:baseUrl(http(s))、model(必填)、apiKeyEnv(可省略,供无鉴权本地服务)。接口需兼容 OpenAI 且支持 logprobs;省略整个段落且有 DEEPSEEK_API_KEY 时默认 DeepSeek / deepseek-flash |
events | 可选,存在即启用话题:summaryModel 必填,"provider/model"(第一个 / 拆分,启动时校验模型与认证);embeddingModel 默认 fast-bge-small-zh-v1.5(512 维),须是 fastembed 支持的模型,同时用于消息检索向量(不开话题时消息检索用默认模型)。必须能解析出远程 Jev 或本地 LLM 决策客户端 |
celebrations[] | 可选,节日与生日祝福目标,见下 |
personas[] | 角色列表,至少一个 |
联网搜索没有单独的配置段:环境里有 DEEPSEEK_API_KEY 就启用,可用 features.search: false 关闭。
personas[]
| 字段 | 说明 |
|---|---|
id | 唯一,只能用 a-z 0-9 _ - |
name | 显示名;消息里出现这个名字即视为点名 |
personaPath | 人设文件路径,必须可读 |
reactionImages | 可选,本地图库目录(含 catalog.json);路径与 personaPath 一样按项目根目录解析,也支持绝对路径和 ~/ |
provider / model | Pi 的 provider 与模型 ID |
reasoningEffort | off(默认)、minimal、low、medium、high、xhigh、max;模型不支持的档位会在启动时报错 |
routingP | 0–1。普通消息的确定性抽样候选概率,仍须通过门控与启用时的内容判断;同一群/服务器内能发言角色之和不得超过 1。设为 0 不参与随机接话,但仍可被明确或内容识别为对它说话 |
aliases | 可选,额外的点名词(每个不超过 64 字符) |
spaces | 可选,把角色限定在部分群/服务器,如 ["discord:<guildId>", "telegram:<chatId>"];省略即全部 |
sendReactionImages | 是否能发内置及本地图库表情图,默认 true |
voiceEnabled | 配置了 voice 时是否使用语音,默认 true |
imageGenerationEnabled | 登录了 Antigravity 时是否使用画图,默认 true |
discord / telegram | 该角色在对应平台的账号:{ tokenEnv, adminUserIds? }。至少要有一个;用到哪个平台,顶层就必须有哪个平台的段落。adminUserIds 是可以用 /context、/compact 的用户 ID |
本地图库不入库:把整个目录放到 personas/feiba/,在对应角色对象中加 "reactionImages": "personas/feiba",保留 "sendReactionImages": true。目录示例:
personas/
idk.local.md
feiba/
catalog.json
001_innocent.png
...catalog.json 是 id 到元数据的对象,例如 {"innocent":{"file":"feiba/001_innocent.png","name":"无辜","caption":"我什么都不知道"}}。file 默认相对于图库目录;若首段恰好是目录名(这里是 feiba/),先去掉这一段。因此旧 assets/reactions/feiba/ 整个目录可直接复制到 personas/feiba/,无需修改旧 catalog 中的 120 条路径;目录名须保持 feiba。
启动时统一校验:id 只能用 a-z 0-9 _,不能与 hello/laugh/think/hug 重名;name、caption 必须是字符串;文件必须可读,扩展名只允许 .png、.jpg、.jpeg(不区分大小写),禁止绝对路径、..、反斜杠和逃出图库目录的符号链接;额外元数据忽略。可用 id 按稳定顺序进入该角色的工具 schema,人设文件可说明选图场景,不在 system prompt 里重复列出全图库。修改目录或 catalog 后重启以重新加载。
celebrations[]
| 字段 | 说明 |
|---|---|
space | "discord:<guildId>" 或 "telegram:<chatId>",必须是已配置的空间 |
channelId | Discord:该服务器允许的频道之一;Telegram:可省略,填写时必须等于群 ID |
personaId | 发祝福的角色,必须能在该空间发言 |
timeZone | IANA 时区,如 Australia/Sydney |
calendar | china(元旦、春节、劳动节、端午、中秋、国庆)、australia(元旦、Australia Day、Good Friday、Easter Sunday、ANZAC Day、圣诞、Boxing Day)或 both |
农历节日按目标时区的公历日期换算,不依赖操作系统的农历实现;闰月不重复祝福。
生日只在配置了祝福目标的群/服务器里发送;2 月 29 日的生日在平年于 2 月 28 日祝福。
