Skip to content

ATRI 配置 ​

ATRI 在初次启动后会生成 config.yml,其为 ATRI 运行配置。还会生成一个 .env.prod,为 nonebot 插件配置。

WARNING

config.yml 遵循 YAML 语法,如果你不了解 YAML 语法,你可以在这篇教程中学习。

配置详细 ​

打开位于项目根目录的 config.yml,你会得到如下内容:(此处展示的为示例填写)

Details
yaml
# 设置参考文档: 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
yaml
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 的写法(仅示意其中一个模型):

yaml
- 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
json
{
    "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 注册方式。请在模型配置中添加对应类型的模型即可。

最后更新于:

Released under the CC-BY-SA-4.0 License.