ATRI 配置
ATRI 在初次启动后会生成 config.yml,其为 ATRI 运行配置。还会生成一个 .env.prod,为 nonebot 插件配置。
WARNING
config.yml 遵循 YAML 语法,如果你不了解 YAML 语法,你可以在这篇教程中学习。
配置详细
打开位于项目根目录的 config.yml,你会得到如下内容:(此处展示的为示例填写)
Details
# 设置参考文档: https://lokyoh.github.io/ATRI-LK-docs/config.html
ConfigVersion: "1.1.2"
BotConfig:
host: "127.0.0.1"
port: 20000
debug: false
superusers: ["1145141919"]
nickname: ["亚托莉", "ATRI"]
command_start: ["/"]
command_sep: ["."]
session_expire_timeout: 60
access_token: "atri"
proxy: ""
request_timeout: 30
timezone: "Asia/Shanghai"
BrowsConfig:
browser: "chromium"
download_host: ""
proxy_host: ""
browser_channel: ""
WebUIConfig:
username: "admin"
password: "random_str"
secret: "random_str"其中:
- ConfigVersion 为设置文件版本。请勿更改
- BotConfig 为 ATRI 主体设置。
- BrowsConfig 为浏览器配置。
配置解析
BotConfig
- host:监听地址/IP。
- port:监听端口,范围推荐 10000-60000。
- debug:是否启用调试模式。
- superusers:超级用户,又称为 ATRI 的主人/维护者,可填写多个。
- nickname:ATRI 的昵称,可填写多个。
- command_start:功能命令前缀,可填写多个。
- command_sep:功能命令分隔符,可填写多个。
- session_expire_timeout:功能索要信息超时时间,单位为秒。
- access_token:ATRI 同协议端(例如 gocqhttp)通信时的密钥。
- proxy:ATRI 运行时对外发送请求的代理,格式参考:
proxy: "http://127.0.0.1:8000"。 - request_timeout:ATRI 运行时对外发送请求的超时时间,单位为秒。
- timezone:日期模块所采用的时区。
BrowsConfig
- browser: 默认情况可不写,可选
firefox - download_host: 下载
playwright代理地址。可不写 - proxy_host: 浏览器自定代理地址。可不写
- browser_channel: 浏览器 channel 支持以下
chrome,chrome-beta,chrome-dev,chrome-canary,msedge,msedge-beta,msedge-dev,msedge-canary手动编辑可以直接使用系统自带浏览器而不用重新下载chromium。可不写
WebUIConfig
- username: 登录用户名。默认值
admin - password: 登录密码。默认值为随机生成值
- secret: jwt密钥。默认值为随机生成值
Agent配置
TIP
如果有更多需求请提交issu或联系作者。
模型配置
位置:data\config\system\provider.yml
必须至少配置一个可用的chat类型模型;建议至少配置类型为chat、tool的模型,这两个类型的模型可以使用同一模型;如果需要图片识别的话,需要额外配置一个image类型的模型。模型配置请根据自己实际需求与预算进行配置。默认配置:
Details
siliconflow:
provider_name: siliconflow
provider_type: openai
url: https://api.siliconflow.cn/v1
api_key: ""
models:
- name: siliconflow/DeepSeek-V4-Flash
model: deepseek-ai/DeepSeek-V4-Flash
temperature: 0.7
type: chat
- name: siliconflow/qwen3-vl-30
model: Qwen/Qwen3-VL-30B-A3B-Instruct
temperature: 0.7
type: image
- name: siliconflow/qwen3-30b
model: Qwen/Qwen3-30B-A3B-Instruct-2507
temperature: 0.3
type: tool其中:
- provider_name 为模型供应商名称,用于区分不同供应商,不可相同
- provider_type 为模型api接口类型,目前仅支持
openai、gemini、embedding、tts、sys1 - url 为模型api请求地址
- api_key 为请求时的密钥
- models 为供应商提供的模型
模型配置:
- name 为模型名称,用于区分不同模型,不可相同
- model 为调用时使用的模型,由供应商提供,可相同
- temperature 为模型温度参数
- type 为模型类型,可写单个值或列表(同一个模型可同时注册成多种类型)。可用类型:
chat:聊天模型;image:图片处理模型;tool:工具模型;work:工作模型;reasoning:思考模型;action:实现模型;language:语言处理模型;embedding:嵌入模型;tts:语音合成模型;sys1:SystemOne 模型。只有chat、tool、image、embedding、tts、work、sys1会被实际注册,其余名称会打一条「暂不支持」的 warning 后跳过 - pricing 为该模型的计费配置,可省略(省略即该模型不计费)。三项单价的单位都是元 / 每 100 万 Token:
- input 为输入 Token 单价
- output 为输出 Token 单价
- cache_hit 为输入中「缓存命中」部分的 Token 单价,未配置时按 0 计
配置了 pricing 的写法(仅示意其中一个模型):
- name: siliconflow/DeepSeek-V4-Flash
model: deepseek-ai/DeepSeek-V4-Flash
temperature: 0.7
type: chat
pricing:
input: 2.0
output: 8.0
cache_hit: 0.5费用如何估算
计费只用于 WebUI 智能体 →「Token 用量」页的费用展示,不影响调用逻辑:
费用 = (输入 - 缓存命中) × input + 缓存命中 × cache_hit + 输出 × output,再除以 100 万
缓存命中始终按「输入的子集」处理,不会与输入重复计价。历史用量按当前配置的单价换算:改价后历史记录的费用会随之重算,结果不会写回数据库。未配置计费的模型在费用列显示为「未计费」。
插件设置
位置:data\config\plugins\agent_config.json
默认配置:
Details
{
"model_chat": "",
"model_tool": "",
"model_image": "",
"model_tts": "",
"model_embedding": "",
"max_history": 30,
"max_thinking_times": 20,
"proactive_max_per_hour": 3,
"proactive_cooldown": 300,
"proactive_start_enabled": false,
"proactive_start_whitelist": [],
"proactive_start_bot": "",
"proactive_start_interval": 120,
"proactive_start_hour_start": 8,
"proactive_start_hour_end": 24,
"search": {
"enable": false,
"provider": "tavily",
"api_key": ""
},
"function_calling_disable": [],
"function_plugin_disable": [],
"skills_disable": [],
"skills_embed": [],
"telemetry_enabled": true,
"telemetry_include_content": false
}其中:
- model_chat 为聊天模型(思考与回复),留空 = 同类型有多个时随机挑一个
- model_tool 为工具模型(记忆总结、主动回复判断等),留空 = 按默认分配
- model_image 为图片识别模型,留空 = 按默认分配
- model_tts 为语音模型(把回复转成语音),留空 = 按默认分配。只有 OneBot 通道会发语音;没配 tts 模型时回复只发文字
- model_embedding 为向量模型,留空 = 取该类型下注册的第一个
- max_history 为保留的历史对话数最大值(包含Agent自己发送的消息),默认值30,最小值10。提高此值可使Agent获取更多历史聊天,但也会消耗更多Token
- max_thinking_times 为允许Agent最高思考次数,默认值20,最小值5。当遇到需要大量思考情况可提高此值
- proactive_max_per_hour 为每群每小时的主动发言上限,默认值3,最小值1。只约束她主动插话,被 @ 或叫到说话不受此限制
- proactive_cooldown 为两次主动发言之间的最小间隔秒数,默认值300。与上一项共同防止连续插话
- proactive_start_enabled 为是否允许她主动开口(不需要有人 @ 或叫她,自己说一句话),默认关闭
- proactive_start_whitelist 为允许主动开口的群号列表,留空 = 任何群都不会主动开口。与聊天插件的「主动聊天白名单」是两回事:那个允许她在有人说话时接话,这个允许她在没人说话时开新话题
- proactive_start_bot 为主动开口时使用的机器人 self_id(QQ 号)。机器人在多个账号下运行时必须指定真正在这些群里的实例,否则会发不出去;留空 = 用第一个已连接的 OneBot 实例
- proactive_start_interval 为同一个群两次主动开口的最小间隔分钟数,默认 120,最小值 10
- proactive_start_hour_start / proactive_start_hour_end 为允许主动开口的时段(默认 8 点到 24 点)。注意 02:00-06:00 是她的睡眠时段,即使把范围设成 0-24 也不会在那时开口
- search 为搜索配置
- function_calling_disable 为被禁用的功能调用名列表(不在列表内即启用)。
stop_thinking与send_message是核心功能,写进这个列表也会在重载后被自动剔除 - function_plugin_disable 为被禁用的功能插件名列表(不在列表内即启用)。插件被禁用时,其名下技能与功能调用同时失效
- skills_disable 为被禁用的技能名列表(不在列表内即启用)
- skills_embed 为内嵌进提示词的技能名列表,这些技能的正文每轮都会进入提示词,且不可被智能体查询
- telemetry_enabled 为是否记录行为数据(思考轮数、工具耗时、主动发言判断等),默认开启,数据写在
data\plugins\agent\telemetry\下的 jsonl 文件 - telemetry_include_content 为行为数据是否包含消息正文,默认关闭。开启后记录截断 120 字的片段,涉及聊天隐私,非排查问题不建议开启
模型选择配置:
上面五个 model_* 字段在 WebUI 里是下拉选择(选项来自 provider.yml 里已注册的模型), 留空表示按默认分配。
model_embedding 必须固定
向量只在同一个模型的语义空间内可比。改用另一个 embedding 模型后, 已有记忆的向量与新向量不在同一空间,余弦相似度会变成看起来合理的随机数。
当前实现对这种情况是安全降级:按 embedding_model 标识过滤, 旧记忆不再参与检索(查不到,而不是查错)。但这也意味着换模型后旧记忆需要全量重建 才能重新被检索到。所以除非必要,不要改动这一项。
写的模型名不存在时
会在日志里打一条 warning,说明当前实际在用哪个模型,配置本身不会被静默改掉。 例如把 model_chat 从 chat_b 改成拼错的名字,会继续用 chat_b 并告警, 而不是悄悄退回随机分配。
search配置:
- enable 为是否启用搜索,否则将没有搜索功能
- provider 为搜索供应商,目前仅支持
tavily - api_key 为请求时的密钥
建议用 WebUI 操作
function_calling_disable / function_plugin_disable / skills_disable / skills_embed 这四个列表建议直接在 WebUI 的 智能体 页面通过「功能插件」「功能调用」与「技能」标签页操作,而不是手改 JSON。详见 技能与功能调用配置。
若确实要手改,注意这些列表只记录例外(关闭的功能插件/功能/技能、内嵌的技能),清空即恢复默认(全部启用、全部技能不内嵌)。修改后需重启机器人。
YHN-LK0-024 更新
从 YHN-LK0-024 版本开始,tts 和 embedding 模型配置已迁移至 provider.yml,统一使用 provider 注册方式。请在模型配置中添加对应类型的模型即可。