LibreFang 配置参考

config.toml 完整配置参考,涵盖 LibreFang Agent OS 的所有可配置字段。


目录


概述

LibreFang 从 TOML 配置文件中读取配置:

~/.librefang/config.toml

Windows 上 ~ 解析为 C:\Users\<username>。无法确定主目录时使用系统临时目录作为备选。

关键特性:

  • 所有配置结构使用 #[serde(default)],即所有字段均为可选。省略的字段使用文档中记录的默认值。
  • 通道配置 ([channels.telegram] 等) 为 Option<T> —— 缺省时适配器禁用。包含段头(即使为空)即启用该适配器。
  • 密钥从不直接存储在 config.toml 中api_key_envbot_token_env 等字段保存的是包含实际密钥的环境变量名称
  • 敏感字段 (api_keyshared_secret) 在调试输出和日志中自动脱敏。

最小配置

最简可用配置只需设置 LLM 提供商 API 密钥环境变量:

[default_model]
provider = "anthropic"
model = "claude-sonnet-4-20250514"
api_key_env = "ANTHROPIC_API_KEY"

或使用本地 Ollama(无需 API 密钥):

[default_model]
provider = "ollama"
model = "llama3.2:latest"
base_url = "http://localhost:11434"
api_key_env = ""

完整配置示例

# --- 顶层字段 ---
home_dir = "~/.librefang"
data_dir = "~/.librefang/data"
log_level = "info"
api_listen = "127.0.0.1:50051"
network_enabled = false
api_key = ""
mode = "default"
language = "en"
usage_footer = "full"

# --- 默认 LLM 提供商 ---
[default_model]
provider = "anthropic"
model = "claude-sonnet-4-20250514"
api_key_env = "ANTHROPIC_API_KEY"

# --- 后备提供商 ---
[[fallback_providers]]
provider = "ollama"
model = "llama3.2:latest"
api_key_env = ""

[[fallback_providers]]
provider = "groq"
model = "llama-3.3-70b-versatile"
api_key_env = "GROQ_API_KEY"

# --- 记忆 ---
[memory]
embedding_model = "all-MiniLM-L6-v2"
consolidation_threshold = 10000
decay_rate = 0.1

# --- 网络 (OFP) ---
[network]
listen_addresses = ["/ip4/0.0.0.0/tcp/0"]
bootstrap_peers = []
mdns_enabled = true
max_peers = 50
shared_secret = ""

# --- Web 工具 ---
[web]
search_provider = "auto"
cache_ttl_minutes = 15

[web.brave]
api_key_env = "BRAVE_API_KEY"
max_results = 5

[web.tavily]
api_key_env = "TAVILY_API_KEY"
search_depth = "basic"
max_results = 5
include_answer = true

[web.perplexity]
api_key_env = "PERPLEXITY_API_KEY"
model = "sonar"

[web.fetch]
max_chars = 50000
max_response_bytes = 10485760
timeout_secs = 30
readability = true

# --- MCP 服务器 ---
[[mcp_servers]]
name = "filesystem"
timeout_secs = 30
env = []
[mcp_servers.transport]
type = "stdio"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]

# --- A2A 协议 ---
[a2a]
enabled = false
listen_path = "/a2a"

[[a2a.external_agents]]
name = "research-agent"
url = "https://agent.example.com/.well-known/agent.json"

# --- RBAC 用户 ---
[[users]]
name = "Alice"
role = "owner"
api_key_hash = ""
[users.channel_bindings]
telegram = "123456"
discord = "987654321"

# --- 通道适配器 ---
[channels.telegram]
bot_token_env = "TELEGRAM_BOT_TOKEN"
allowed_users = []
poll_interval_secs = 1

[channels.discord]
bot_token_env = "DISCORD_BOT_TOKEN"
allowed_guilds = []
intents = 33280

[channels.slack]
app_token_env = "SLACK_APP_TOKEN"
bot_token_env = "SLACK_BOT_TOKEN"
allowed_channels = []

配置项参考

顶层字段

位于 config.toml 根级别(不在任何 [section] 内)的字段。

字段类型默认值说明
home_dirpath~/.librefangLibreFang 主目录
data_dirpath~/.librefang/dataSQLite 数据库和数据文件目录
log_levelstring"info"日志级别:tracedebuginfowarnerror
api_listenstring"127.0.0.1:50051"HTTP/WebSocket/SSE API 监听地址
network_enabledboolfalse启用 OFP 点对点网络
api_keystring""API 认证密钥。设置后除 /api/health 外所有端点需要 Authorization: Bearer <key>
modestring"default"内核运行模式
languagestring"en"CLI 输出语言代码
usage_footerstring"full"响应中附加的使用信息

mode 取值:

行为
stable保守模式:无自动更新,固定模型,冻结技能注册表
default平衡模式:标准运行
dev开发者模式:启用实验性功能

usage_footer 取值:

行为
off不显示使用信息
tokens仅显示 token 数量
cost仅显示预估费用
full同时显示 token 数量和预估费用(默认)

[default_model]

配置代理未指定模型时使用的主 LLM 提供商。

[default_model]
provider = "anthropic"
model = "claude-sonnet-4-20250514"
api_key_env = "ANTHROPIC_API_KEY"
# base_url = "https://api.anthropic.com"
字段类型默认值说明
providerstring"anthropic"提供商名称。支持:anthropicgeminiopenaigroqopenrouterdeepseektogethermistralfireworksollamavllmlmstudioperplexitycohereai21cerebrassambanovahuggingfacexaireplicate
modelstring"claude-sonnet-4-20250514"模型标识符。支持别名如 sonnethaikugpt-4ogemini-flash
api_key_envstring"ANTHROPIC_API_KEY"保存 API 密钥的环境变量名称
base_urlstring 或 nullnullAPI 基础 URL 覆盖。用于代理或自托管端点

[memory]

配置基于 SQLite 的记忆子系统,包括向量嵌入和记忆衰减。

[memory]
embedding_model = "all-MiniLM-L6-v2"
consolidation_threshold = 10000
decay_rate = 0.1
字段类型默认值说明
sqlite_pathpath 或 nullnullSQLite 数据库路径。为 null 时默认为 {data_dir}/librefang.db
embedding_modelstring"all-MiniLM-L6-v2"语义记忆搜索的向量嵌入模型
consolidation_thresholdu6410000触发自动合并的存储记忆数量阈值
decay_ratef320.1记忆置信度衰减率。0.0 = 不衰减,1.0 = 激进衰减

[network]

配置 OFP (LibreFang Protocol) 点对点网络层,使用 HMAC-SHA256 双向认证。

[network]
listen_addresses = ["/ip4/0.0.0.0/tcp/0"]
bootstrap_peers = []
mdns_enabled = true
max_peers = 50
shared_secret = "my-cluster-secret"
字段类型默认值说明
listen_addresseslist["/ip4/0.0.0.0/tcp/0"]libp2p 多地址监听列表。端口 0 表示自动分配
bootstrap_peerslist[]引导节点的多地址列表
mdns_enabledbooltrue启用 mDNS 自动发现本地网络节点
max_peersu3250最大同时连接节点数
shared_secretstring""OFP HMAC-SHA256 双向认证预共享密钥。network_enabled = true必填

[web]

配置代理工具使用的 Web 搜索和网页抓取功能。

[web]
search_provider = "auto"
cache_ttl_minutes = 15
字段类型默认值说明
search_providerstring"auto"搜索引擎选择
cache_ttl_minutesu6415搜索/抓取结果缓存时间(分钟),0 = 禁用缓存

search_provider 取值:

说明
auto级联回退:按 Tavily、Brave、Perplexity、DuckDuckGo 顺序尝试
braveBrave Search API,需要 BRAVE_API_KEY
tavilyTavily AI 搜索,需要 TAVILY_API_KEY
perplexityPerplexity AI 搜索,需要 PERPLEXITY_API_KEY
duckduckgoDuckDuckGo HTML 抓取,无需 API 密钥

[web.brave]

字段类型默认值说明
api_key_envstring"BRAVE_API_KEY"API 密钥环境变量
max_resultsusize5最大搜索结果数
countrystring""国家/地区代码(如 "US"),空 = 无过滤
search_langstring""语言代码(如 "en"),空 = 无过滤
freshnessstring""时效过滤:"pd" 过去一天、"pw" 过去一周、"pm" 过去一月

[web.tavily]

字段类型默认值说明
api_key_envstring"TAVILY_API_KEY"API 密钥环境变量
search_depthstring"basic"搜索深度:"basic" 快速、"advanced" 深度分析
max_resultsusize5最大搜索结果数
include_answerbooltrue是否包含 AI 生成的摘要

[web.perplexity]

字段类型默认值说明
api_key_envstring"PERPLEXITY_API_KEY"API 密钥环境变量
modelstring"sonar"搜索查询使用的 Perplexity 模型

[web.fetch]

字段类型默认值说明
max_charsusize50000抓取内容最大字符数
max_response_bytesusize10485760 (10 MB)HTTP 响应体最大字节数
timeout_secsu6430HTTP 请求超时(秒)
readabilitybooltrue启用 HTML 到 Markdown 的可读性提取

[channels]

共 40 个通道适配器,均在 [channels.<name>] 下配置。每个通道为 Option<T> —— 省略段即禁用。每个通道均支持 default_agent 字段和 overrides 子表。

[channels.telegram]

[channels.telegram]
bot_token_env = "TELEGRAM_BOT_TOKEN"
allowed_users = []
poll_interval_secs = 1
字段类型默认值说明
bot_token_envstring"TELEGRAM_BOT_TOKEN"Bot Token 环境变量
allowed_userslist of i64[]允许的用户 ID,空 = 允许所有
default_agentstring 或 nullnull消息路由的代理名称
poll_interval_secsu641长轮询间隔(秒)

[channels.discord]

[channels.discord]
bot_token_env = "DISCORD_BOT_TOKEN"
allowed_guilds = []
intents = 33280
字段类型默认值说明
bot_token_envstring"DISCORD_BOT_TOKEN"Bot Token 环境变量
allowed_guildslist of u64[]允许的服务器 ID,空 = 允许所有
default_agentstring 或 nullnull消息路由的代理名称
intentsu6433280Gateway intents 位掩码(默认 = GUILD_MESSAGES | MESSAGE_CONTENT

[channels.slack]

字段类型默认值说明
app_token_envstring"SLACK_APP_TOKEN"App Token 环境变量 (xapp-),用于 Socket Mode
bot_token_envstring"SLACK_BOT_TOKEN"Bot Token 环境变量 (xoxb-),用于 REST API
allowed_channelslist[]允许的频道 ID,空 = 允许所有
default_agentstring 或 nullnull消息路由的代理名称

[channels.whatsapp]

字段类型默认值说明
access_token_envstring"WHATSAPP_ACCESS_TOKEN"Cloud API 访问令牌环境变量
verify_token_envstring"WHATSAPP_VERIFY_TOKEN"Webhook 验证令牌环境变量
phone_number_idstring""WhatsApp Business 电话号码 ID
webhook_portu168443Webhook 监听端口
allowed_userslist[]允许的电话号码,空 = 允许所有

[channels.signal]

字段类型默认值说明
api_urlstring"http://localhost:8080"signal-cli REST API 地址
phone_numberstring""Bot 注册的电话号码
allowed_userslist[]允许的电话号码,空 = 允许所有

[channels.matrix]

字段类型默认值说明
homeserver_urlstring"https://matrix.org"Matrix 主服务器 URL
user_idstring""Bot 用户 ID(如 "@librefang:matrix.org"
access_token_envstring"MATRIX_ACCESS_TOKEN"访问令牌环境变量
allowed_roomslist[]监听的房间 ID,空 = 所有已加入房间

[channels.email]

字段类型默认值说明
imap_hoststring""IMAP 服务器主机名
imap_portu16993IMAP 端口(993 = TLS)
smtp_hoststring""SMTP 服务器主机名
smtp_portu16587SMTP 端口(587 = STARTTLS)
usernamestring""邮箱地址
password_envstring"EMAIL_PASSWORD"密码环境变量
poll_interval_secsu6430IMAP 轮询间隔(秒)
folderslist["INBOX"]监控的 IMAP 文件夹
allowed_senderslist[]允许的发件人,空 = 所有

[channels.teams]

字段类型默认值说明
app_idstring""Azure Bot App ID
app_password_envstring"TEAMS_APP_PASSWORD"Bot Framework 密码环境变量
webhook_portu163978Webhook 端口
allowed_tenantslist[]允许的 Azure AD 租户 ID

其他通道适配器

以下通道配置模式相同 —— 包含段头即启用,均支持 default_agent 字段:

通道关键字段说明
mattermostserver_url, token_envMattermost 机器人
ircserver, port, nick, channelsIRC 聊天
google_chatservice_account_env, space_idsGoogle Chat
twitchoauth_token_env, channels, nickTwitch 聊天
rocketchatserver_url, token_env, user_idRocket.Chat
zulipserver_url, bot_email, api_key_envZulip
xmppjid, password_env, server, roomsXMPP/Jabber
linechannel_secret_env, access_token_envLINE
viberauth_token_env, webhook_urlViber
messengerpage_token_env, verify_token_envFacebook Messenger
redditclient_id, client_secret_env, subredditsReddit
mastodoninstance_url, access_token_envMastodon
blueskyidentifier, app_password_envBluesky
feishuapp_id, app_secret_env飞书/Lark
revoltbot_token_env, api_urlRevolt
nextcloudserver_url, token_envNextcloud Talk
guildedbot_token_env, server_idsGuilded
keybaseusername, paperkey_envKeybase
threemathreema_id, secret_envThreema
nostrprivate_key_env, relaysNostr
webexbot_token_envWebex
pumblebot_token_envPumble
flockbot_token_envFlock
twisttoken_env, workspace_idTwist
mumblehost, port, usernameMumble
dingtalkaccess_token_env, secret_env钉钉
discoursebase_url, api_key_env, api_usernameDiscourse 论坛
gittertoken_env, room_idGitter
ntfyserver_url, topic, token_envntfy 通知
gotifyserver_url, app_token_env, client_token_envGotify
webhooksecret_env, listen_port, callback_url通用 Webhook
linkedinaccess_token_env, organization_idLinkedIn

[[mcp_servers]]

MCP (Model Context Protocol) 服务器连接,提供外部工具集成。每个条目为一个 [[mcp_servers]] 数组元素。

[[mcp_servers]]
name = "filesystem"
timeout_secs = 30
env = []

[mcp_servers.transport]
type = "stdio"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
[[mcp_servers]]
name = "remote-api"
timeout_secs = 60
env = ["GITHUB_PERSONAL_ACCESS_TOKEN"]

[mcp_servers.transport]
type = "sse"
url = "https://mcp.example.com/sse"
字段类型默认值说明
namestring必填MCP 服务器名称。工具命名空间为 mcp_{name}_{tool}
timeout_secsu6430请求超时(秒)
envlist[]传递给子进程的环境变量名(仅 stdio 传输)

传输方式 (按 type 区分):

type字段说明
stdiocommand, args启动子进程,通过 stdin/stdout 的 JSON-RPC 通信
sseurl连接到 HTTP Server-Sent Events 端点

[a2a]

Agent-to-Agent 协议配置,启用跨 LibreFang 实例的代理间通信。

[a2a]
enabled = true
listen_path = "/a2a"

[[a2a.external_agents]]
name = "research-agent"
url = "https://agent.example.com/.well-known/agent.json"
字段类型默认值说明
enabledboolfalse是否启用 A2A 协议
listen_pathstring"/a2a"A2A 端点 URL 前缀
external_agentslist[]外部 A2A 代理列表

external_agents 条目:

字段类型说明
namestring外部代理显示名称
urlstringAgent Card 端点 URL(通常为 /.well-known/agent.json

[[fallback_providers]]

后备提供商链。当主 LLM 提供商 ([default_model]) 失败时,按顺序尝试这些提供商。

[[fallback_providers]]
provider = "ollama"
model = "llama3.2:latest"
api_key_env = ""

[[fallback_providers]]
provider = "groq"
model = "llama-3.3-70b-versatile"
api_key_env = "GROQ_API_KEY"
字段类型默认值说明
providerstring""提供商名称(如 "ollama""groq""openai"
modelstring""该提供商的模型标识符
api_key_envstring""API 密钥环境变量名。本地提供商(ollama 等)可为空
base_urlstring 或 nullnull基础 URL 覆盖。为 null 时使用目录默认值

[[users]]

RBAC 多用户配置。用户可分配角色并绑定到通道平台身份。

[[users]]
name = "Alice"
role = "owner"
api_key_hash = "sha256_hash_of_api_key"

[users.channel_bindings]
telegram = "123456"
discord = "987654321"
字段类型默认值说明
namestring必填用户显示名称
rolestring"user"RBAC 角色
channel_bindingsmap{}通道平台名到平台用户 ID 的映射
api_key_hashstring 或 nullnull用户个人 API 密钥的 SHA256 哈希

角色层级(从高到低):

角色说明
owner完全管理权限,可管理所有代理、用户和配置
admin可管理代理和大多数设置,不能修改 owner 账户
user可与代理交互,有限的管理能力
viewer只读访问,可查看代理响应但不能发送消息

通道覆盖配置

每个通道适配器支持 [channels.<name>.overrides] 子表,用于按通道自定义代理行为。

[channels.telegram.overrides]
model = "claude-haiku-4-5-20251001"
system_prompt = "You are a concise Telegram assistant."
dm_policy = "respond"
group_policy = "mention_only"
rate_limit_per_user = 10
threading = true
output_format = "telegram_html"
usage_footer = "tokens"
字段类型默认值说明
modelstring 或 nullnull该通道的模型覆盖
system_promptstring 或 nullnull该通道的系统提示覆盖
dm_policystring"respond"私信处理策略
group_policystring"mention_only"群聊处理策略
rate_limit_per_useru320每用户每分钟最大消息数,0 = 无限制
threadingboolfalse启用线程回复(支持的平台)
output_formatstring 或 nullnull输出格式覆盖
usage_footerstring 或 nullnull使用信息页脚覆盖:offtokenscostfull

dm_policy 取值: respond(回复所有私信)、allowed_only(仅回复允许列表用户)、ignore(忽略所有私信)

group_policy 取值: all(回复所有消息)、mention_only(仅 @提及时回复)、commands_only(仅响应斜杠命令)、ignore(忽略所有群消息)

output_format 取值: markdown(标准 Markdown)、telegram_html(Telegram HTML 子集)、slack_mrkdwn(Slack mrkdwn)、plain_text(纯文本)


环境变量

LLM 提供商密钥

变量说明
ANTHROPIC_API_KEYAnthropic API 密钥(Claude 系列)
GEMINI_API_KEYGoogle Gemini API 密钥(别名:GOOGLE_API_KEY
OPENAI_API_KEYOpenAI API 密钥
GROQ_API_KEYGroq API 密钥
DEEPSEEK_API_KEYDeepSeek API 密钥
PERPLEXITY_API_KEYPerplexity API 密钥
OPENROUTER_API_KEYOpenRouter API 密钥
TOGETHER_API_KEYTogether AI API 密钥
MISTRAL_API_KEYMistral AI API 密钥
FIREWORKS_API_KEYFireworks AI API 密钥
COHERE_API_KEYCohere API 密钥
AI21_API_KEYAI21 Labs API 密钥
CEREBRAS_API_KEYCerebras API 密钥
SAMBANOVA_API_KEYSambaNova API 密钥
HUGGINGFACE_API_KEYHugging Face API 密钥
XAI_API_KEYxAI (Grok) API 密钥
REPLICATE_API_KEYReplicate API 密钥

Web 搜索密钥

变量说明
BRAVE_API_KEYBrave Search API 密钥
TAVILY_API_KEYTavily Search API 密钥
PERPLEXITY_API_KEYPerplexity Search API 密钥(与 LLM 提供商共用)

通道令牌

变量通道说明
TELEGRAM_BOT_TOKENTelegramBot API 令牌
DISCORD_BOT_TOKENDiscordBot 令牌
SLACK_APP_TOKENSlackApp 级令牌 (xapp-)
SLACK_BOT_TOKENSlackBot 令牌 (xoxb-)
WHATSAPP_ACCESS_TOKENWhatsAppCloud API 访问令牌
MATRIX_ACCESS_TOKENMatrix主服务器访问令牌
EMAIL_PASSWORDEmail邮箱密码或应用专用密码
TEAMS_APP_PASSWORDTeamsAzure Bot Framework 密码
MATTERMOST_TOKENMattermostBot 令牌
TWITCH_OAUTH_TOKENTwitchOAuth 令牌
GOOGLE_CHAT_SERVICE_ACCOUNTGoogle Chat服务账号 JSON 密钥
LINE_CHANNEL_ACCESS_TOKENLINE频道访问令牌
MASTODON_ACCESS_TOKENMastodon访问令牌
BLUESKY_APP_PASSWORDBluesky应用密码
FEISHU_APP_SECRET飞书应用密钥
DINGTALK_ACCESS_TOKEN钉钉Webhook 访问令牌

完整的通道令牌列表请参考英文版本,此处仅列出常用通道。


验证

KernelConfig::validate() 在启动时运行,返回警告列表(非致命错误)。内核仍会启动,但会记录每个警告。

验证内容

对每个已启用的通道,验证器检查对应环境变量是否已设置且非空。

Web 搜索提供商,验证器检查:

提供商检查项
braveweb.brave.api_key_env
tavilyweb.tavily.api_key_env
perplexityweb.perplexity.api_key_env
duckduckgo无需检查
auto无需检查(级联回退处理缺失密钥)

不验证的内容

  • [default_model]api_key_env 不在 validate() 中检查。缺失密钥在运行时首次使用驱动时报错。
  • [network]shared_secret 不会与 network_enabled 交叉验证。
  • MCP 服务器配置不在配置加载时验证,连接错误在后台 MCP 连接阶段出现。

相关配置

部分子系统有独立配置,不属于 config.toml 但值得了解:

会话压缩(运行时)

通过 CompactionConfig 内部配置(目前未在 config.toml 中暴露):

字段默认值说明
threshold80会话消息数超过此值时触发压缩
keep_recent20压缩后保留的最近消息数
max_summary_tokens1024压缩消息摘要的最大 token 数

WASM 沙箱(运行时)

通过 SandboxConfig 内部配置(目前未在 config.toml 中暴露):

字段默认值说明
fuel_limit1000000最大 CPU 指令预算,0 = 无限制
max_memory_bytes16777216 (16 MB)WASM 线性内存上限
timeout_secsnull (30s 回退)基于 epoch 的墙钟超时

模型路由(每代理清单)

通过代理清单中的 ModelRoutingConfig 配置:

字段默认值说明
simple_model"claude-haiku-4-5-20251001"简单查询使用的模型
medium_model"claude-sonnet-4-20250514"中等复杂度查询使用的模型
complex_model"claude-sonnet-4-20250514"复杂查询使用的模型
simple_threshold100低于此 token 数归类为简单查询
complex_threshold500高于此 token 数归类为复杂查询

自主运行护栏(每代理清单)

通过代理清单中的 AutonomousConfig 配置:

字段默认值说明
quiet_hoursnull静默时段 Cron 表达式(代理在此窗口暂停)
max_iterations50每次调用的最大工具使用迭代次数
max_restarts10永久停止前的最大自动重启次数
heartbeat_interval_secs30心跳健康检查间隔(秒)
heartbeat_channelnull发送心跳状态的通道(如 "telegram"