Repository navigation
Expand file tree
/
Copy pathnanobee.yaml.example
More file actions
295 lines (278 loc) · 11.2 KB
/
Copy pathnanobee.yaml.example
File metadata and controls
295 lines (278 loc) · 11.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
# Nanobee 配置文件示例
# 复制此文件为 nanobee.yaml 并填入你的 API 密钥
# 数据目录(所有运行时数据的根目录,包括用户上下文、记忆、cron 任务等)
# 相对路径基于配置文件所在目录解析
# 实例级技能自动从 <data_dir>/skills/ 加载(管理员在此配属共享技能)
# 多实例场景下每个实例有独立的 config.yaml,在各自 data_dir 子目录中
data_dir: "~/.nanobee"
# 灵魂文件路径(core.md,受 SoulGuard 完整性校验保护)
# core_md_path: "core.md"
# 网关配置(端口与多实例运行时管理)
# gateway:
# port: 8080
# # SIGTERM 后等待超时秒数
# stop_timeout: 20.0
# # 健康检查总超时秒数
# health_check_timeout: 10.0
# # 健康检查轮询间隔秒数
# health_check_interval: 1.0
# # PID 文件目录,空则自动推导为 <data_dir>/.pid/
# pid_dir: ""
# # restart 时 stop 与 start 之间的等待秒数
# restart_delay: 2.0
agents:
defaults:
# Provider 名称(对应 providers 段的键,默认 auto)
# provider: "anthropic"
# 模型名称,格式:provider/model-name
model: "anthropic/claude-sonnet-4-20250514"
# 最大输出 token 数
max_tokens: 8192
# 上下文窗口大小
context_window_tokens: 65536
# 温度参数(0-1,越高越随机)
temperature: 0.1
# 模型预设名(引用 model_presets 段,快速切换模型 + 生成参数)
# model_preset: "fast"
# 降级模型(主模型失败时按序尝试)
# 字符串 = model_presets 中的预设名;或内联配置(未填字段继承主模型)
# fallback_models:
# - "fast"
# - model: "openai/gpt-4o-mini"
# provider: "openai"
# max_tokens: 4096
# 记忆存储阈值(消息对数,超过此值时触发记忆提取与检索)
# memory_store_threshold: 20
# 最大对话循环次数(LLM 最多执行多少次思考-工具调用循环)
# max_iterations: 10
# 历史消息条数上限(超过此值×1.5 时压缩,回放时也受此限制)
# max_messages: 120
# 最大并发子代理数(超出时需等待已有子代理完成后才能创建新的)
# max_concurrent_subagents: 4
# 会话工具轨迹持久化:把本轮工具调用声明与结果一并落盘,回放历史保留
# "先调工具才宣称完成"的因果链(关闭时严格回退旧口径:只落用户原文 + 终文本)
# persist_tool_traces: false
# 是否把思维链(reasoning_content / thinking_blocks)一并落盘,默认剥离省 token
# persist_reasoning: false
# 单条工具结果落盘字符上界(与面向模型的 max_tool_result_chars 解耦)
# tool_result_persist_max_chars: 8192
# 单条工具参数落盘字符上界(write_file 类工具参数可达数十 KB)
# tool_args_persist_max_chars: 8192
# 工具白名单(非空时仅列表内工具可用,优先于 blacklist)
# whitelist:
# - read_file
# - execute_shell
# 关停排空配置(可选):约束"给在途工作多久收尾时间"的机制上界
# shutdown:
# # 在途 turn 的有界等待上界;超时的 turn 被取消并落 ABANDONED 终态
# drain_inflight_s: 10.0
# # turn 被取消后,兜底 ABANDONED 结账任务的收口窗口
# drain_cancelled_s: 2.0
# # fire-and-forget Hook 任务(审计落盘/通知)的静默排空上界
# drain_hooks_s: 5.0
# Provider 配置
providers:
# Anthropic (Claude)
anthropic:
api_key: "sk-ant-your-api-key-here"
# 可选:自定义 API 端点
# api_base: "https://api.anthropic.com"
# OpenAI 兼容接口(支持 GPT、本地模型等)
# openai_compat:
# api_key: "your-api-key"
# api_base: "https://your-api-endpoint.com/v1"
# OpenAI 官方
# openai:
# api_key: "sk-your-openai-key"
# 自定义 OpenAI 兼容端点
# custom:
# api_key: "your-api-key"
# api_base: "http://localhost:8000/v1"
# 模型预设(可选):命名的模型 + 生成参数组合,供 model_preset / fallback_models 引用
# model_presets:
# fast:
# model: "openai/gpt-4o-mini"
# provider: "openai"
# max_tokens: 4096
# temperature: 0.3
# deep:
# model: "anthropic/claude-sonnet-4-20250514"
# provider: "anthropic"
# max_tokens: 16384
# reasoning_effort: "high"
# MCP 服务器配置(可选)
# 连接 MCP 服务器并注册其工具、资源和提示
# mcp_servers:
# # 示例:stdio 类型的 MCP 服务器
# file-system:
# type: "stdio"
# command: "npx"
# args: ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
# # 可选:进程工作目录(默认回退到 data_dir,避免文件导出到 CWD)
# # cwd: "/path/to/workdir"
# # 可选:只启用特定工具
# # enabled_tools: ["read_file", "write_file"]
# # 工具调用超时时间(秒)
# # tool_timeout: 30
#
# # 示例:SSE 类型的 MCP 服务器
# # remote-server:
# # type: "sse"
# # url: "http://localhost:3001/sse"
# # headers:
# # Authorization: "Bearer your-token"
# #
# # 示例:Streamable HTTP 类型的 MCP 服务器
# # streamable-server:
# # type: "streamableHttp"
# # url: "http://localhost:3001/mcp"
# # headers:
# # X-API-Key: "your-api-key"
# 通道配置
# (实例级 enabled 控制:每个 Gateway 实例通过独立配置文件的
# channels.<name>.enabled 控制加载的通道插件,实现实例隔离)
#
# 示例:仅启用钉钉通道
# channels:
# channel_dingtalk:
# enabled: true
# client_id: "dingxxx"
# client_secret: "xxx"
# channel_http:
# enabled: false
#
# 示例:仅启用 HTTP API 通道
# channels:
# channel_dingtalk:
# enabled: false
# channel_http:
# enabled: true
# host: "127.0.0.1"
# port: 8080
#
channels:
channel_dingtalk:
enabled: true
# 消息标题(Markdown 消息的标题字段)
# markdown_title: "AI助手回复"
# client_id: "dingxxx"
# client_secret: "xxx"
# allow_from: ["*"]
# streaming: true
# ==== 媒体(附件读取)====
# 媒体读取总开关(false = 本地与远端附件均拒绝)
# enable_media_upload: true
# 远端与本地附件共用的体积上限(MB,>= 1)
# media_max_mb: 20
# 本地附件白名单根(额外放行;相对路径按 data_dir 解析)
# 注:data_dir 与入站附件目录(./media/dingtalk)始终放行
# media_local_roots:
# - "/data/shared-reports"
# - "extra_media" # 相对 data_dir
# 注:enable_chunk_upload / chunk_size_kb 尚未接线(分片上传已实现,
# 阈值/块大小当前是代码内常量)
channel_http:
enabled: false
# 监听地址(默认 127.0.0.1,建议保持默认仅本地访问)
# host: "127.0.0.1"
# 监听端口(默认 8080)
# port: 8080
# API Key(可选,配置后在请求头中传递 Authorization: Bearer <key>)
# api_key: "sk-your-http-api-key"
channel_cli:
enabled: true
# 路由配置(多租户映射)
# 格式:"{channel}:{chat_id}" → user_id
# routing:
# "cli:default": "user-alice"
# "http:chat-123": "user-bob"
# 技能配置 —— 实例技能自动从 <data_dir>/skills/ 加载(和插件机制一致)
# 三级技能机制(框架提供,零配置):
# - 内置技能(nanobee/skills/):框架打包,自动注入
# - 实例技能(<data_dir>/skills/):管理员配属,自动注入
# - 用户技能(<context_root>/skills/):用户自主管理,自动注入
#
# 无需白名单配置,框架只提供机制(扫描目录),不持有策略(哪些技能可用)。
# 安全配置
# tools:
# # SSRF 白名单 CIDR(可选):允许访问的私有/内网 CIDR 范围
# # 对工具与媒体下载(钉钉附件)的地址校验统一生效
# # 例如:Tailscale 用户可添加 "100.64.0.0/10"
# # 格式:CIDR 字符串列表
# ssrfWhitelist:
# - "100.64.0.0/10"
# 日志配置(程序自管理,loguru 文件 sink)
# 不配 file 字段(或注释掉)则不写文件,仅输出 stderr
# logging:
# # 日志目录(相对路径基于进程 CWD,建议用绝对路径)
# dir: "logs"
# # 日志文件名(支持 {instance} 占位符,多实例时替换为实例名)
# file: "gateway.log"
# # 日志级别
# level: "INFO"
# # 轮转方式:"500 MB" / "1 day" / "00:00"(每日午夜)
# rotation: "500 MB"
# # 保留天数
# retention: "30 days"
# # 是否压缩历史文件
# compression: "gz"
# # 生产环境建议开启 JSON 格式(便于 Promtail/Filebeat 采集)
# json_format: false
# 插件配置
#
# 内置插件(nanobee/builtin/)默认自动加载,无需配置。
# 实例级插件从 <data_dir>/plugins/ 自动发现,也无需声明(与实例技能一致)。
#
# 禁用内置插件两种方式(blacklist 双重作用):
# 1. 插件级:使用插件名(如 tool_shell),阻止整个插件加载
# 2. 工具级:使用工具名(如 read_file),仅隐藏该工具,插件仍加载
#
# 配置示例:
# agents:
# defaults:
# blacklist:
# - <plugin-name> # 插件级:整个插件不加载
# - <tool-name> # 工具级:仅隐藏该工具,插件仍加载
# plugins:
# <plugin-name>:
# # <plugin-specific-config>
# # 沙箱后端(子进程隔离,需要系统安装 bwrap)
# # sandbox: "bwrap"
# # 额外只读挂载(source:target 格式,可选)
# # extra_mounts:
# # - "/path/to/venv:/sandbox_venv"
# # 环境变量(通过 bwrap --setenv 注入,不进入 LLM 的 command 字段):
# # 注意:值作为 bwrap 命令行参数,对同主机能执行 ps 的用户可见。
# # PATH 语义:配的是前缀,框架自动追加 /usr/local/bin:/usr/bin:/bin
# # 请勿使用 $PATH 引用,配置文件不经过 shell 展开。
# # env:
# # PYTHONPATH: "/sandbox_venv/lib/python3.11/site-packages"
# # PATH: "/sandbox_venv/bin"
# #
# # 密钥类环境变量(同 env 机制,日志只记数量不记 key;ps 同样可见):
# # secrets:
# # TIANYANCHA_TOKEN: "your-api-token-here"
#
# audit_logger(审计日志)示例:
# 参数/结果预览截断长度(正整数,默认 2000;发生截断时 JSONL 记录
# arg_truncated / result_truncated 诚实标记):
# plugins:
# audit_logger:
# arg_max_chars: 2000
# result_max_chars: 2000
# # 截断总开关;false 时全量记录(测试/联调临时开启,跑完删掉)
# preview_truncate: true
#
# 声明式配置(config_cls):内置插件通过 pydantic 模型声明配置 schema,
# 框架在加载时统一 model_validate,自动类型强转("false"→False、"8080"→8080)、
# 约束校验(ge/le)与默认值填充;非法值自动降级为默认值,不阻塞启动。
# 因此 plugins.<name> 段无需再手写 int()/bool()/isinstance() 类型解析。
#
# 仅当实例插件不在默认的 <data_dir>/plugins/ 时,才需要配置 plugin_dirs:
# plugin_dirs:
# - <custom-plugin-dir> # 相对 data_dir 或绝对路径
#
# 完全替换内置插件(仅限测试场景):
# plugin_dirs:
# - "__replace__" # 标记:不加载内置插件
# - "<custom-builtin-dir>" # 自定义插件目录