05 - 命令与配置¶
本章命令语法均来自
src/cmd/sub_cmd/当前源码;README 命令手册会随发版同步,如与 README 不一致以本章为准。
.ai 命令体系¶
根命令 .ai(AI 大写同样注册),子命令别名经 ALIAS_MAP 归一(常用:priv→privilege、ses→session、st→set、ck→check、clr→clear、sb→standby、fgt→forget、memo→memory、p→private、g→group、tk→token、y→year、m→month、lcl→local、ran→random、lst→list、rm→remove)。支持 --page=<数字>(别名 --p)翻页;.ai help <一级子指令> 或 .ai <一级子指令> help 可查看对应子命令帮助(后者带更多参数时交由子命令自身处理,如 .ai tool help <函数名>)。
子命令一览(源码为准)¶
| 子命令 | 说明 | 主要用法 |
|---|---|---|
privilege |
权限管理(骰主) | .ai priv ses st <ID> <会话权限> 设置会话权限;.ai priv ses ck <ID> 检查会话权限;.ai priv st <指令> <权限限制> 修改指令权限;.ai priv show <指令>;.ai priv reset |
prompt |
查看 system prompt(骰主) | .ai prompt |
status |
查看当前会话 AI 状态 | .ai status |
ctx |
查看当前会话的上下文成本状态(冷/热、窗口与预算、本会话压缩/归档/评分调用次数、归档分片、缓存命中) | .ai ctx |
ctxset |
按本会话覆盖上下文参数(邀请者以上) | .ai ctxset 查看;.ai ctxset window=<字数>/cold=<字数>/truncate=<字数> 覆盖窗口上限/冷态窗口/冷态单条截断;.ai ctxset clr 清除(0 等价清除) |
live |
查看会话实时运行状态 | .ai live 查看当前会话(流式/运行/排队/定时器);.ai live all 全局活跃会话总览(骰主) |
ctxn |
上下文名字相关 | .ai ctxn status;.ai ctxn set [nick/card];.ai ctxn mod <0|1|2>(0 不自动改,1 昵称,2 群名片) |
timer |
定时器管理 | .ai timer lst;.ai timer clr(需邀请者以上) |
on |
开启 AI 及各触发模式(需会话权限 1) | .ai on 开启非指令正则触发;--r、--j、--c=<条>、--t=<秒>、--p=<%>、--a=<开始-结束-次数> 单独开启对应模式;可组合,如 .ai on --t --p=42 |
standby |
开启/关闭待机模式(仅记录不主动发言) | .ai standby 或 .ai standby on 开启;.ai standby off 仅关闭待机、保留其它触发模式(适合只播报不读群消息)(需邀请者以上) |
off |
关闭 AI(含非指令正则触发) | .ai off 全部关闭;--r/--j/--c/--t/--p/--a/--sb 单独关闭某模式(--sb 仅关闭待机)(需邀请者以上);未识别的参数会回显并列出可用参数,一个有效参数都没有时回复"未做任何更改"(不造成已生效的错觉) |
forget |
遗忘上下文 | .ai fgt 全部;.ai fgt assistant 清除 assistant+tool;.ai fgt user 清除 user;.ai fgt --all 清空本会话归档/窗口移出分片并重置结算水位(不影响已沉淀的长期记忆) |
role |
切换角色设定 | .ai role 查看;.ai role <名称> 切换(需邀请者以上) |
image |
图片管理 | .ai img list [lcl];.ai img itt [图片] <提示词>;.ai img find <图片ID> |
tts |
语音合成并发送 | .ai tts <文本> [--model=] [--voice=] [--rate=] [--pitch=] [--volume=] [--instruction=] [--emotion=](异步任务,完成后直接投递;不走 AI 工具的同步等待窗口) |
tti |
文字生图并发送 | .ai tti <描述> [--model=] [--size=] [--steps=] [--seed=] [--quality=] [--style=] [--negative=] [--save] [--name=](异步任务,完成后直接投递;不走同步等待窗口) |
media |
生成任务队列 | .ai media;.ai media list [页码] [--all];.ai media cancel <任务号>(别名 .ai md;运行中的任务也能取消,取消后结果被丢弃、不投递) |
memory |
记忆管理 | 见下文 |
tool |
工具管理 | 见下文 |
ignore |
群内忽略名单 | .ai ign add <用户ID>;.ai ign rm <用户ID>;.ai ign lst(仅群聊) |
block |
黑名单管理(骰主) | .ai block add <用户ID/群ID> <原因>;.ai block rm <用户ID/群ID>;.ai block list;被拉黑对象无法触发 AI 对话,指令不受影响;AI 建议拉黑默认需骰主确认,可在工具配置关闭 |
token |
token 用量统计 | 见下文 |
stop |
完全暂停当前对话(打断流式/工具链/排队,清计时器) | .ai stop |
model |
查看/绑定全局分用途模型与模型列表(骰主) | .ai model 查看各用途与连接状态;.ai model list 展示加载/最近一次拉取到内存的模型列表(不联网,按 [连接序号] 分组);.ai model pull 立即重拉全部连接并展示(无视 models 钉住清单,强制网络);.ai model <用途> 查看候选;.ai model <用途> <模型> 绑定(支持编号/裸名唯一/[序号]:模型名 精确,重名歧义会提示);旧写法 .ai model <模型名> 等价于设置 chat 用途 |
balance |
查询全部 API 连接余额(骰主) | .ai balance 并发查询全部非忽略连接余额;deepseek/moonshot/siliconflow 内置接口直接查,其余平台提示控制台入口;one-api/new-api 等网关可在连接 [request] 配 balance_url+balance_json_path(配合 auth_header_name/headers)后查询 |
pub |
公开会话目录管理 | .ai pub list(树状分段展示目录会话,仅供感知);.ai pub add(把当前会话公开到目录,幂等);.ai pub rm(无参=移出当前会话;--platform= 删整个平台 / --botid= 删该 Bot 全部 / --session= 删所有同名会话,可组合缩小,--botid/--session 需传完整 UNI-ID);AI 侧配套工具 pub_read(目录感知/读任意会话快照,路径即可读)/pub_send(向任意会话外发,路径即可发,成功后写目标会话 [system:跨端消息] 只读背景)——读写只需准确 botId/会话ID 路径,不要求会话公开到目录;原 get_context 工具已移除(pub_read 统一承担);命令默认骰主权限可用 .ai priv 调 |
mcp |
MCP 服务器管理(list/on/off/refresh) | .ai mcp list 列出当前平台可用服务器及工具开关;.ai mcp on/off [<服务器>] 按会话批量开关某服务器(或缺省全部当前平台服务器)下的工具(on 跳过禁用名单);.ai mcp refresh 重解析配置并强制重同步工具(骰主,无需重载 JS) |
skill |
技能管理(list/on/off/refresh) | .ai skill list 列出当前平台可用技能及开关(带平台标注);.ai skill on/off <技能名> 按会话开关(on/off 需邀请者以上;跨平台技能提示当前平台不可用);.ai skill refresh 强制重解析「技能列表」(骰主;平时配置变化自动生效) |
kb |
知识库管理(list/on/off/refresh) | .ai kb list 列出当前平台可用且本会话开启的库;.ai kb on/off <库ID或唯一名称> 按会话开关(on/off 需邀请者以上);.ai kb refresh 重解析「知识库配置」配置(骰主);知识库内容仍只读,检索走 knowledge_* 工具 |
subagent |
查看/管理子代理(后台任务) | .ai subagent/list 列出本会话子代理(ID/用途/状态);stop <ID\|all> 停止单个(仅中断当前轮、可续)或全部;clean 清理已结束记录 |
sample |
示例智能体(未注册到根命令) | 仅开发参考 |
memory 子命令¶
.ai memo status # 记忆状态
.ai memo add <内容> # 添加长期记忆
.ai memo list [页码] # 展示长期记忆(支持 --page)
.ai memo update <ID> <新内容> # 更新长期记忆
.ai memo delete <ID1> <ID2> --关键词 # 删除长期记忆(支持关键词过滤,物理删除不可恢复)
.ai memo clear # 清除长期记忆(物理删除不可恢复)
.ai memo obs on/off # 开启/关闭观察记忆(会话级)
.ai memo obs list # 展示观察记忆(支持 --page)
.ai memo obs view <ID> # 观察记忆详情
.ai memo obs clr # 清除观察记忆
.ai memo obs # 立即生成一次观察记忆(仅当前会话,不带 --u/--g)
.ai memo consolidate # 立即巩固一次记忆(合并重复观察、清理过期观察)
.ai memo reflect <问题> # 基于记忆推理
.ai memo mm list [页码] # 心智模型列表(支持 --page)
.ai memo mm view <ID> # 心智模型详情
.ai memo mm add <问题> [答案] # 添加/更新心智模型(不填答案时基于记忆重新生成并保留旧答案兜底;--tag=xx 范围标签;--mode=full|delta 刷新方式,缺省跟随配置且更新时保留原配置;--auto/--no-auto 显式开关自动刷新)
.ai memo mm refresh [ID] # 刷新心智模型(基于当前记忆重新推理)
.ai memo mm del <ID|问题关键词> # 删除心智模型(ID 或问题名/关键词,关键词唯一命中时直接删除)
范围:默认当前会话(私聊=个人,群聊=当前群);--u 查看/操作本人个人记忆,--g 当前群;--u=<ID>/--g=<ID> 查看他人/其他群(仅骰主);--u 与 --g 不能同用;裸 obs 不带范围参数(仅当前会话)。权限:memo 子命令普通用户可用(U),obs on/off 需会话权限 1(S)。
tool 子命令¶
.ai tool # 工具组概览(组名 + 工具数 + 开/关统计)
.ai tool <组名> # 查看组内工具与开关状态(等价 --group=<组名>)
.ai tool <函数名> # 查看工具详情与参数(等价 help <函数名>)
.ai tool all # 扁平列出全部工具(含技能/知识库)
.ai tool on|off [<组名|函数名>] # 开关整组或单个工具;无参=全部工具(on/off 需邀请者以上)
.ai tool help <函数名> # 查看工具详情与参数
.ai tool call <函数名> --参数=值 # 试用工具(call 需骰主),参数可尝试 JSON 解析
工具组 = 内置工具的 16 个能力分类(基础调度/指令/定时/触发/记忆/图片/多媒体/OB11/资源/属性/原文检索/上下文编辑/黑名单/网页/公开会话/子代理,外部插件注册的工具归「外部插件」)+ 每台 MCP 服务器各一组;组内计数只统计当前平台可用工具,禁止调用的函数 中的工具不参与统计与开关。
解析优先级:--group=<组名> 显式指定 > 函数名(精确命中即单工具,行为不变)> 组名精确命中(分类名或 MCP 服务器名)> 唯一包含匹配;on/off/help/call/list/all 为保留字,组名与它们撞名时用 --group=。
on/off 不带参数=全部工具;关闭时默认跳过核心常驻工具(list_tools/search_tools/list_mcps/call_tool/use_skill/call_ob11_api/run_ext_command/run_core_command),避免一键关掉 AI 的工具发现与执行入口,确需一并关闭加 --force;开启时跳过 禁止调用的函数。.ai mcp on/off <服务器> 与 .ai tool on/off <服务器> 等价(同一批量开关实现)。技能与知识库不参与工具组维度,其会话开关用 .ai skill on/off、.ai kb on/off,但单工具开关照旧可用(如 .ai tool off use_skill)。
token 子命令¶
.ai tk lst # 有使用记录的模型
.ai tk sum # 所有模型用量总和
.ai tk all # 各模型用量明细
.ai tk [y/m] (chart) # 最近 12 个月 / 31 天用量,chart 生成图片
.ai tk <模型名> [y/m] (chart) # 指定模型用量
.ai tk clr [<模型名>] # 清除用量记录
.ai tk use # 按用途(chat/compression/summarization/judge…)查看用量
权限体系¶
用户权限等级(PRIVILEGE_LEVEL_MAP)¶
| 等级 | 数值 | 说明 |
|---|---|---|
| blacklist | -30 | 黑名单用户 |
| user | 0 | 普通用户 |
| inviter | 40 | 邀请者 |
| admin | 50 | 群管理员 |
| owner | 60 | 群主 |
| whitelist | 70 | 白名单用户 |
| master | 100 | 骰主 |
命令权限(CmdPrivInfo)¶
每个命令/子命令有一个三元组 [会话所需权限, 会话检查通过后用户所需权限, 强触所需权限]:
- 用户权限来自
ctx.privilegeLevel(SealDice),会话权限来自session.setting.priv。 - 通过规则:会话权限 ≥ 第 1 项 且 用户权限 ≥ 第 2 项;或用户权限 ≥ 第 3 项(强触)。
- 支持
*通配与多级嵌套(子命令可再挂子命令)。 - 预置常量:
U = [0,0,0]、M = [0,100,100]、I = [0,40,40]、S = [1,40,100]。 - 自定义权限持久化在
cmdPriv存储键,.ai priv reset可恢复默认;priv命令本身不可被修改权限。
配置分组总览¶
配置在 SealDice WebUI 的插件设置中按分组展示,键名与 configs/*.ts 注册时一致。完整键清单见 03-核心模块详解 的表格;这里补充几个常用配置的实际键名:
| 分组 | 常用键名 | 说明 |
|---|---|---|
| 基础 | 日志级别、请求超时时限、请求并发上限、请求队列上限、是否开启全局待机 | 全局开关 |
| 模型 | 模型配置 | 一份 JSON(v5),取代旧的两个 TOML 框(「api连接」「模型规则」已注销、不再读取,也不做迁移——海豹的 seal.ext 没有配置写入 API,"读旧→转换→写新"的第三步做不到;详见 09-注意事项与常见问题 的升级注意)。顶层:version(固定 5,必填)、providers(至少 1 项,必填)、purposes(用途 → 模型 id 的有序数组)、groups(用途组默认请求体)。providers[]:api(必填,openai-completions/anthropic-messages/openai-responses)、baseURL(必填,须 http(s):// 开头,不再兜默认值)、apiKey(必填,明文)、provider(vendor 标识,通常不填,由 baseURL 的 host 自动识别,仅当识别失败且该地址代理某家原生接口时才手工指定)、models(留空/不写 = 启动时自动拉取;无 /models 接口的语音/生图服务如 Google Cloud TTS 就把模型写死在这里)、enabled(默认 true;false = 忽略该连接,取代旧的 ignore = 1)、displayName、timeout(秒)、request(连接级覆盖:list_url/auth_header_name/headers/timeout 及 balance_url/balance_json_path/balance_divisor/balance_currency)。providers[].models[]:id(全局唯一,被 purposes 引用)、name(发给 API 的真实模型名,可含 . : /,不需加引号)、kind(text/vision/embed/gen/tts,取代旧的 [types] 表)、contextWindow、maxTokens、request(per-model 覆盖:body/request/response/params/prompt,取代旧的 models 定向规则)、bodyMode(merge/replace,与内置预设的合成方式)。purposes 是有序数组:优先用列出的、按此顺序,首选失效自动往后切;留空取该用途首个可用模型。媒体用途(tts/image-generation)默认走内置供应商预设(按 vendor + 模型名给出原生结构,只填连接 + kind 即可用):不写 request.body 时用预设结构,写了默认整体替换预设结构(bodyMode: "merge" 改为逐键合并)并用 {占位符} + 嵌套表描述该供应商的请求体结构;request.params 声明 AI 可覆写参数(default/min/max/enum/type/desc,优先于预设自带默认),request.prompt.extra 写自由提示词,request.request/request.response 逐键覆盖预设的地址与取数路径/轮询。校验失败整份拒绝(不做部分生效)并一次报出全部问题(带 $.providers[0].models[1].name 式路径)。.ai model 查看各用途当前模型与来源(运行时覆盖/配置绑定/自动)、.ai model list(读加载/最近一次拉取到内存的列表,不联网)、.ai model pull(立即重拉全部并展示,强制网络)、.ai model <用途> <模型>(设为运行时覆盖,优先级最高、存插件存储;想进配置就填进 purposes)。列表只存内存、不持久化。修改后需重载 JS 生效 |
| 角色设定 | 角色设定 |
v1:{"version":1,"roles":[{"name":"角色名","prompt":"设定内容"}]};名称 >20 截断;$gSYSPROMPT / .ai role 选择;修改后需重载 JS 生效 |
| 上下文 | 上下文最大token、对话保存轮数、预设上下文、插入system message间隔轮数、消息压缩阈值、冷态窗口字数、冷态单条截断字数、归档保留原文、窗口上限字数、结算水位、结算最小门槛、结算空闲门槛、单次结算调用上限、原文分片保留天数、原文分片上限、待机入库配额 | 上下文最大token 默认 1000000,0/负数 = 跟随报错探测到的模型真实窗口 × 0.8(未探测到回退 100 万),显式正数优先;超过后保留最近「对话保存轮数」真实用户轮,窗口外原文先移出到 session_<id>:raw:<seq> 分片(「窗口上限字数」,可用 read_raw kind=user id=raw:序号 回查),更早内容再按「结算水位 / 结算最小门槛 / 结算空闲门槛」有界结算为观察/长期记忆;归档到 session_<id>:arc:<seq>(「归档保留原文」开时写,可用 read_raw kind=user id=arc:序号 回查;关时不写分片但仍 summarize);分片保留按「原文分片保留天数」「原文分片上限」惰性淘汰与置空,「单次结算调用上限」限制的是分片数(不是 LLM 调用数);预设上下文 role 按 user/assistant 轮流;插入间隔需小于保存轮数二分之一才生效;消息压缩阈值只在"热态"(正在对话)生效——同一批内容只尝试一次、只压新增、结果必须更短才采纳;冷态(待机且无相关活动满 10 分钟)下入库零 LLM:单条超「冷态单条截断字数」留头留尾,模型只看最近「冷态窗口字数」字,更早内容折叠为纯代码摘要;「待机入库配额」按小时限制待机群入库条数(0=不限制) |
| 消息接收 | 接收图片/指令消息/骰子发送的消息、忽略消息豹语条件、忽略消息正则表达式 | 接收图片只负责记录图片 URL;自动识别仍由图片识别条件和识图模型配置决定 |
| 事件接收 | 接收依赖通知事件、通知事件白名单 | ob11 依赖 notice/request 事件转文本录入上下文,仅作背景不触发 AI;需开启会话待机或全局待机才录入,命中会话不存在时自动新建;默认白名单收录 NapCat/OneBot 可上报的绝大多数通知/请求事件:禁言、管理变动、文件上传、群名片变更、成员增减、消息撤回、群名变更、群头衔变更、资料点赞、精华、表情回应、运气王/群荣誉、入群/好友申请等;notify 为通知大类,其子类型需单独在白名单内才收录(默认含 lucky_king/honor/group_name/title/profile_like);poke 不生成事件文本、不会录入;gray_tip(灰条,内容为 JSON 且可伪造)与 input_status(输入状态,纯噪音)未默认收录,需要可自行加入对应子类型名;机器人离线/在线文件等无会话归属的事件不录入;事件级去重防原生与 ob11 双录(3 秒窗口、去重 key 带整包内容指纹:连续但不同的事件不会互吞;重复到达时“后到覆盖先到”就地替换;机器人自身入群/退群由原生回调覆盖、依赖侧跳过);事件文本由纯代码模板生成,超长仅 head 截断兜底(不再走压缩智能体);事件原始数据随条目挂载,AI 需要完整字段时调用 read_raw kind=event 读取(原 get_event_detail 已删除,不再支持跨会话查看) |
| 消息触发 | 触发正则表达式、触发需要满足的条件、触发次数上限、触发次数补充间隔 | 令牌桶配额 |
| 图片 | 图片全局识别豹语条件、识别图片时将url转换为base64、图片识别展示截断字数 | 0/1/豹语表达式控制自动识图范围;url 转 base64 解决大模型无法访问 QQ 图床图片的问题;识别结果超过「图片识别展示截断字数」(默认 5000)时只展示开头,完整原文由 read_raw kind=image 读取(0=不截断不保留) |
| 工具 | 开启调用函数功能、切换为提示词工程、拉黑前需要骰主确认、无工具调用时续跑提示、工具方向提示、允许连续调用函数次数、媒体任务并发上限(默认 3)、媒体生成同步等待秒数(默认 5)、工具响应截断字数、禁止/默认关闭的函数与 OB11 action、可调用指令白名单、是否允许调用所有指令、指令前缀、音乐服务配置 | run_core_command 通过「后端 → 后端配置」的 backends.ob11-core-bridge 直连 ob11-core-bridge,run_ext_command 仅由插件本地实现;连续调用默认 0=不限制;媒体任务并发上限控制同时进行的语音/图片生成任务数,超出的排队;媒体生成同步等待秒数:AI 调 generate_audio/text_to_image 后先等这么多秒看是否已出结果,窗口内出结果就把结果当场返回给 AI(图片给 [img:图片ID]、语音给 record 段发送指引)、不走异步通知,超时才返回任务号走异步;填 0 关闭等待(一律走异步),该窗口不影响命令 .ai tts/.ai tti(它们始终由插件直接投递);工具响应截断默认 10000 字,截断前完整原文保留(不参与渲染/预算),由 grep_raw/read_raw 按 kind 只读检索(工具/压缩的用户消息/图片识别/事件)。原「ai语音使用的音色」下拉已移除:它服务的是协议端自带 AI 语音(NapCat/Lagrange 的 AI 语音 API,无需配置模型),AI 现用 call_ob11_api 调 get_ai_characters/send_group_ai_record 等;下拉里的「自定义」对应的插件 TTS 链路现已内置,音色改「模型规则」tts 用途的 [params].voice(默认值)或按次传参 |
| 联网 | 联网配置 + 5 个默认项 | v1 JSON:providers(dialect/baseURL/apiKey/enabled/timeout/headers;generic 另带 search/fetch 请求模板与取数路径)+ routes(search/fetch 尝试顺序)。留空 = 使用内置 SearXNG(https://searxng.fishwhite.top);失败按顺序自动回退,400/422 不换家。内置 10 家方言(DeepSeek/SearXNG/Kimi/Brave/Tavily/Serper/博查/智谱/Exa/Firecrawl)+ generic。返回条数(联网搜索返回条数,默认10)/详细程度(联网搜索详细程度,默认summary)/超时(联网搜索超时,默认20)/正文截断(联网搜索正文截断,默认5000)/失败回退(联网搜索失败回退,默认开)为独立配置项,不写进 JSON |
| MCP | 是否启用MCP、MCP服务器、MCP会话空闲回收分钟、MCP每服务器最大会话数 |
「是否启用MCP」默认关闭,开启后才会解析并连接 MCP 服务器。「MCP服务器」使用标准 mcpServers 对象:{"mcpServers":{"name":{"type":"http","url":"…","headers":{…}}}};键=服务器名,type 仅 http/streamable-http,platform 为 aiplugin4 扩展字段;stdio/SSE 跳过。插件默认空配置(不预置服务器);生成器默认示例三台:mcp-files-exec、md-html-render(platform:[QQ])、mcp-browser。工具经 tools/list 自动发现并注册(来源分组=服务器名),服务器 platform 不匹配时其工具不可见且调用被拦截。修改后 .ai mcp refresh 生效(或重载 JS);格式见 modelcontextprotocol.io/specification/latest |
| 技能 | 技能列表 |
v1:{"version":1,"skills":[{"name","description","platform","content"}]};platform 省略/[] = 所有平台;description 为空取正文首段;默认只含「录卡」技能。生成器可导入标准 SKILL.md 转 JSON。配置变化自动生效(也可 .ai skill refresh);use_skill 支持 offset 续读;.ai skill list/on/off 按会话开关 |
| 子代理 | 是否启用子代理(默认开)、最大委派深度(默认 3,0=禁止委派)、子代理禁止调用工具(留空=继承主会话全部已开启工具) | 主会话可用 subagent/spawn、subagent_fork 委派独立任务;可后台 job(run_in_background)或可续跑(continuable);子代理继承父工具面并按「子代理禁止调用工具」收窄;记录/断点落盘,重载后可续跑;.ai subagent list/stop/clean 管理 |
| 记忆 | 启用长期/观察记忆、用LLM抽取记忆/重排召回结果/合成观察记忆/推理记忆(默认开)、自动维护固定心智模型(默认开)、记忆召回新近度权重(默认0.4)/半衰期(默认60天)、长期记忆条数上限(默认100)、巩固后自动刷新心智模型(默认开)、心智模型刷新最小间隔(默认30分钟)、心智模型刷新模式(默认full)/刷新排除其它心智模型(默认开)/定时刷新间隔(默认0=关闭) | 观察记忆在上下文超 token 上限归档删除前沉淀旧对话;长期记忆条数上限 0 为不限制,超限自动物理删除最不重要的记忆(先删已被观察覆盖的细节,后删重要/置顶保护项);新近度加权只影响召回排序;固定心智模型(设定/偏好/规则)问题写死、版本化播种、注入固定优先,删除后不会自动重建;心智模型刷新模式 full=基于全部记忆重推 / delta=只按新增记忆增量更新;定时刷新仅当有新记忆时实际刷新 |
| 知识库 | 启用知识库记忆、知识库配置 |
v1:{"version":1,"libraries":[{"name","description","platform","content"}]};content 为 Markdown 正文;description 省略时用正文首段兜底。知识库只读,AI 通过 knowledge_search/knowledge_read/knowledge_list/knowledge_docs 工具检索(范围 = 当前平台可用 + 本会话开启的库),管理员用 .ai kb list/on/off/refresh 查看、按会话开关与重解析;注入只列条目索引(ID + 标题,1500 字符预算内尽可能多列,≤100 条),正文用 knowledge_read 按 ID 读取;修改后 .ai kb refresh 生效(或重载 JS);Markdown 语法见 commonmark.org/help/ |
| 回复 | 回复引用、回复最大字数、分段发送延时/基础延时/含图额外延时、禁止回复复读 | 回复过滤规则已内置硬编码 |
| 后端 | 后端配置 |
v1 JSON:backends.<后端名>.{url,token}(图床另带 publicUrl);在 aiplugin4-backends WebUI 点「复制后端配置」后整段粘贴;空=全部出厂默认;旧 8 个独立键不再读取(不迁移/不兼容);约 60 秒生效。所有后端都支持 token:启动器卡片设 token 后复制出的 JSON 会带 backends.<名>.token,插件请求带 Authorization: Bearer;设/改 token 后要重启该后端并重新复制,token 不一致会 401(日志/回答提示核对哪个 token);复制内容含明文 token,勿公开分享。md/html 渲染(MCP)在「MCP → MCP服务器」;media-fetch 是「整个响应体即音频/图片」接口必需项(空=禁用;配了就直接走后端,只产生一次上游请求);image-host.url 是插件访问地址(可为 127.0.0.1),publicUrl 是协议端与模型都能访问的对外 IP/域名(复制配置时按「图床对外地址」自动生成;没有 publicUrl 时发图用本地文件、模型用 base64);usage-chart 的 /chart 同时返回 URL 与 base64,token 模式下插件用 base64 落本地图(需后端 ≥1.0.1);核心桥默认 ws://127.0.0.1:46880/plugin |
| 论坛 | 论坛地址、论坛API Token、论坛签名密钥 | aiplugin4 专用论坛;详见 08-相关后端项目 |
| 资源 | 本地图片路径、本地语音路径(支持 语音名=路径)、本地文件路径、本地视频路径 |
供 list_resources 查询资源 ID、get_resource_path 查询实际路径/URI;当前会话发图片优先用 [img:图片ID] |
| 错误处理 | 启用报错自动处理、上下文超长自动归档重试、余额不足自动切换模型、自动切换触发错误、自动切换策略、切换后发送通知 | 模型请求报错按语义类别自动处理:上下文超长归档后自动重发;余额不足等自动把 chat 用途切到备用模型(跨厂商优先/连接顺序,写入全局覆盖并可选 ctx.notice 通知);限速/过载/服务端按 Retry-After 或退避重试;其余错误仅记日志不回复 |
模型配置 JSON 示例¶
「模型」分组下只有一个 JSON 配置项:
{
"version": 5,
"providers": [
{
"api": "openai-completions",
"baseURL": "https://api.deepseek.com/v1",
"apiKey": "sk-xxxx",
"models": [
{ "id": "flash", "name": "deepseek-v4-flash", "kind": "vision" },
{ "id": "pro", "name": "deepseek-v4-pro", "kind": "text" }
]
}
],
"purposes": { "chat": ["flash"], "compression": ["flash"], "summarization": ["flash"], "judge": ["flash"] },
"groups": [
{ "purposes": ["chat", "compression", "summarization", "judge"],
"body": { "temperature": 1, "top_p": 1, "max_tokens": 8192, "stop": null, "stream": false } }
]
}
providers[].models留空/不写 = 启动时自动拉取该连接的模型列表(OpenAI 兼容GET /models;anthropic-messages走/v1/models自动翻页),失败按连接降级展示(auth/无列表接口/超时)不影响其它连接;离线或无列表接口的服务(Google Cloud TTS 等)就把模型写死;models[].kind取text/vision/embed/gen/tts,取代旧的[types]表。⚠️ 视觉不再按模型名猜测:gpt-4o/gemini/qwen-vl这类名字不会被自动认成视觉模型,要识图必须显式写"kind": "vision";嵌入/生图/语音/reranker 仍按命名白名单推断;purposes可填chat(普通对话)/compression(消息压缩)/summarization(记忆总结)/judge(评分插话判断)/image-understanding(识图)/text-embedding(嵌入)/tts(语音合成)/image-generation(文生图),值是模型 id 的有序数组;- 媒体用途的 per-model 覆盖写在
models[].request里(body/request/response/params/prompt):request可选method/url/urlSuffix/headers/content_type/auth_header_name/timeout(url为绝对地址,urlSuffix拼在baseURL之后,urlSuffix = ""表示baseURL原样;媒体用途的request/response是逐键覆盖预设,poll_*写在request也接受); - 模型类型判定顺序:
models[].kind显式声明 > 命名终值(reranker/生图/语音/嵌入白名单) > 接口自报能力位 > 兜底纯文本。模型按类型进各用途候选:text/vision进对话候选(vision另进识图候选)、嵌入白名单(如text-embedding-*/bge-*)进嵌入候选、生图白名单(dall-e/gpt-image/wanx/flux/stable-diffusion等)进生图候选、语音白名单(tts-*/*-tts/cosyvoice/fish-speech等)进语音候选、reranker 不进任何候选。默认模型按「运行时覆盖 > 配置绑定(有序)> 该用途首个可用」三层解析;想换用.ai model <用途> <模型>。嵌入输出维度取该模型request.body.dimensions(默认 1024),配置后长期记忆与知识库启用语义检索,未配置/不匹配自动降级为关键词检索。