配置
Infinia 中有两个配置界面:用户设置(主题、语言、侧边栏、日志)与 AI 配置(当前后端、API 密钥、模型)。两者都通过 REST 读写,并且 AI 配置可在运行时热切换而无需重启。数据库重新配置也在此处作为一个重置端点暴露。
所有端点都要求带 X-FengYu-Token 头。参见后端。
用户设置
GET /api/settings
◄── 200 { "theme": "dark", "language": "en", "sidebarCollapsed": false,
"logLevel": "INFO", "updateApiBase": "", "computerUseEnabled": true,
"computerUse": { "available": true, "reason": null } }PUT /api/settings 接受一个部分请求体——只有你包含的键会被持久化,其余保持不变。
PUT /api/settings
Content-Type: application/json
{ "sidebarCollapsed": true }
◄── 200 { "theme": "dark", "language": "en", "sidebarCollapsed": true, "logLevel": "INFO" }| 键 | 类型 | 含义 |
|---|---|---|
theme | string | "light" 或 "dark"。参见设计系统。 |
language | string | UI 区域设置(例如 en、zh-CN)。 |
sidebarCollapsed | boolean | 侧边栏是否初始处于折叠状态。 |
logLevel | string | TRACE、DEBUG、INFO、WARN、ERROR 或 OFF。立即应用到主程序和所有 Java 插件 Worker。 |
updateApiBase | string | 留空使用 GitHub,或填写内网 FY-Proxy 更新服务的绝对 HTTP(S) 基础地址。 |
computerUseEnabled | boolean | 桌面端 computer_* 屏幕控制工具族的总开关(默认 true)。置为 false 后,下一轮对话即从 AI 目录中移除这些工具;输入动作始终保留每轮审批门。 |
computerUse | object | 只读能力探测:{available, reason}。仅桌面模式返回;纯 Web 模式为 null。 |
修改 logLevel 不会重启 Worker。宿主会更新自身的 Logback 命名空间,并向每个运行中的 Worker 发送内置 JSON-RPC 通知;之后新启动的 Worker 则通过 FENGYU_LOG_LEVEL 继承同一值。
桌面端会在创建窗口前加载 updateApiBase,因此启动自动探测与关于 → 检查更新手动操作 会使用同一通道。FY-Proxy 模式有意只支持 Infinia-<version>-win32-x64-portable.zip 和 lite Infinia-<version>-linux-x64.deb;NSIS、AppImage、macOS、JRE 与便携 Web/JAR 构建仍使用公共 GitHub 通道,指向 FY-Proxy 时会被拒绝。
AI 配置
GET /api/ai/config 返回一份脱敏快照,以便你在不暴露原始密钥的情况下渲染表单:
- API 密钥被脱敏——只显示开头和结尾的几个字符,例如
sk-1***wXYZ。 - 该快照还会报告
activeMode(当前后端)和ready(当前后端是否可用)。
GET /api/ai/config
◄── 200 {
"activeMode": "openai",
"ready": true,
"contextWindowTokens": 32768,
"openai": { "apiKey": "sk-1***wXYZ", "model": "gpt-4o", "baseUrl": "..." },
...
}contextWindowTokens 控制长对话压缩。FengYu 会在用量达到该值的 60% 时开始总结旧轮次; 默认值为 32768,0 表示禁用自动压缩。应把它设为所选模型真实的上下文窗口,而不是 模型的输出 token 上限。
更新 AI 配置
PUT /api/ai/config 接受一个部分请求体。关于来回往返有一个关键点:因为 GET 会脱敏 API 密钥,把那个脱敏值原样发回会覆盖掉真实密钥。为避免这种情况,**任何包含 *** 的 API 密钥字符串都被视为「未更改」**而不予持久化——因此脱敏值可以直接原样回传,不会丢失真实密钥。
PUT /api/ai/config
Content-Type: application/json
{ "activeMode": "anthropic", "anthropic": { "apiKey": "sk-a***9zzz", "model": "..." } }持久化之后,后端通过 BackendReactivator.reactivate() 热切换当前后端——无需重启。四种受支持的模式为 local(Ollama)、openai、anthropic 与 deepseek(OpenAI 兼容)。每种模式的作用参见 AI 对话。
测试连接
在提交一个新模式之前,可以不保存地探测它:
POST /api/ai/config/test
Content-Type: application/json
{ "mode": "deepseek", "endpoint": "...", "apiKey": "...", "model": "...", "baseUrl": "..." }
◄── 200 { "success": true, ... }用此端点可提前验证凭据与端点可达性。
MCP 客户端
FengYu 支持在 设置 → MCP 中动态添加、测试、启停和删除 MCP 服务,也支持对应的 REST API。STDIO、SSE 与 Streamable HTTP 均可在保存后立即连接,发现的工具会实时加入对话和 Agent 工具目录,不需要重启。
若要接入 mcp-chrome:
- 按其说明安装 Chrome 扩展和
mcp-chrome-bridge,并在扩展中点击 Connect。 - 在 FengYu 的 设置 → MCP 点击 添加 Chrome MCP。
- 保存预填配置:Streamable HTTP,地址
http://127.0.0.1:12306,端点/mcp。
也可以手动创建同样的配置。mcp-chrome 官方推荐的连接地址是 http://127.0.0.1:12306/mcp;FengYu 的地址字段既可填写主机地址并单独填写端点, 也可直接填写完整地址。
如果使用 Codex 风格的 STDIO 服务器文件,仍可通过 Spring AI 的启动配置加载:
java -jar FengYu-*.jar \
--spring.ai.mcp.client.stdio.servers-configuration=file:/absolute/path/mcp-servers.json也可通过 GET /api/mcp/status 和 /api/mcp/servers 检查连接。配置外部 STDIO 命令即表示 明确授权启动该命令,因此只应使用可信服务器定义,并将凭据放在受保护的本机配置中。
datasource.properties 布局
数据库连接与 AI 配置分开持久化,存放在 <运行目录>/.fengyu/config/datasource.properties,其键为:
| 键 | 含义 |
|---|---|
db.type | H2、SQLITE、MYSQL、POSTGRESQL 之一。 |
db.url | JDBC URL。 |
db.driver | JDBC 驱动类。 |
db.dialect | Hibernate 方言。 |
db.username | 数据库用户名。 |
db.password | 数据库密码,AES/GCM 加密(参见数据库)。 |
db.file.path | 嵌入式后端的文件位置。 |
db.password 使用由本地 .machineid 派生、绑定机器的 AES/GCM 密钥加密,并以 ENC(...) 包裹后存储。参见数据库 —— 密码加密。
重新配置数据库
POST /api/settings/database/reset
X-FengYu-Token: <token>这会备份当前的 datasource.properties、清空它,并重启后端进入 SETUP 模式,以便首次启动向导收集新参数。功能上等价于删除 datasource.properties 并手动重启——参见数据库 —— 重新配置。
静态秘密的存储
本地敏感信息(数据源口令、AI 供应商 API Key、MCP 服务器凭据)写入磁盘前都会用机器绑定密钥加密。默认该密钥是 .fengyu/config/.machineid 中的随机值——它把密文绑定到本机(被窃走的配置文件在其他机器上无法解密),但无法防御同一操作系统用户下的读取。
使用操作系统凭据库保管秘密的部署,可以注入该密钥而不使用文件。在启动后端前设置 FENGYU_MACHINE_KEY(系统属性或环境变量,至少 16 个字符,重启间保持不变)——例如从 macOS 钥匙串读取:
export FENGYU_MACHINE_KEY="$(security find-generic-password -s FengYu -a machine-key -w)"
java -jar Infinia.jar --token=...等价命令:Linux 上 secret-tool lookup fengyu machine-key,Windows 在启动脚本中读取凭据管理器。所有密文都与注入的密钥绑定——切换或丢失该密钥将导致已存密文无法解密(可通过设置界面重录)。设置 FENGYU_MACHINE_KEY 后,.machineid 文件不再使用也不会被创建。