- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用 - 添加所有子项目的完整源代码 - 保留原始 .git 为 .git.bak 备份
8.4 KiB
常见问题
针对反复被问到的问题给出直白、简短的回答。如需更深入的解释,请顺着 链接前往对应文档。
NomiFun 与 nomifun 有什么区别?
NomiFun 是这个开源项目与面向用户的产品名:桌面应用、WebUI 界面、 代码库、工作区、GitHub 仓库和品牌都使用这个写法。
在本代码库里,小写形式 nomifun 仅作为字面意义上的技术标识符出现
——包名(nomifun-app、nomifun-web 等)、桌面 bundle id
com.nomifun.desktop、以 NOMIFUN_ 为前缀的环境变量、仓库目录。
任何作为应用或项目品牌展示给人看的地方,都使用 "NomiFun"。
有托管版本吗?
没有。NomiFun 是一个自托管项目。不存在 SaaS 实例、不存在
nomifun.com 上的托管登录、不存在你可以注册的中心账户系统。使用它的
两种方式是:
- 安装桌面应用并在本地运行——
nomifun-desktop。 - 在你自己控制的服务器上部署
nomifun-web。参见 Web 服务部署。
你可以使用 WebUI 远程访问 把桌面 安装临时暴露给其他设备(手机、笔记本),但这是一项按实例的功能, 不是托管服务。
桌面应用需要登录吗?
不需要。桌面 WebView 通过 Tauri 外壳注入的每启动本地信任 token 被信任。 桌面窗口没有登录界面,但嵌入式后端并不是一个对所有 localhost 调用者都无鉴权 开放的服务。
Web 宿主与之相反:默认要求登录。两者的差异是有意的——桌面外壳可以信任 自己的 WebView,但网络可达的宿主必须有真正的鉴权边界。
我的数据存在哪里?
存在数据目录里。具体位置取决于你运行的是哪种宿主:
- 桌面端:默认在按用户的应用数据目录——Windows 上是
%LOCALAPPDATA%\NomiFun\Nomi,macOS 上是~/Library/Application Support/NomiFun/Nomi,Linux 上是$XDG_DATA_HOME/NomiFun/Nomi(通常为~/.local/share/NomiFun/Nomi)。 设置NOMIFUN_DATA_DIR=<absolute path>后目录会变成$NOMIFUN_DATA_DIR/Nomi(覆盖语义不变)。旧版构建把数据存在<system temp>/nomifun-data/Nomi下;若存在这样的安装,启动时会 自动搬迁到新位置,旧目录保留为备份。 - Web(
nomifun-web):你传给--data-dir(或NOMIFUN_DATA_DIR)的任何位置,按字面值生效——不附加/Nomi后缀。两者都未设置时,默认与桌面应用是同一个按用户目录,因此 开发中的bun run serve:web与已安装的应用看到的是同一份状态。 - Docker:compose 文件中定义的命名卷(
nomifun-data,挂载到/data)。
数据目录里有 SQLite 数据库(nomifun-backend.db*)、各智能体状态、
Bun 缓存、日志文件,以及任何嵌入式扩展数据。请像对待数据库一样备份
它。由于所有宿主默认指向同一个目录,后端用一把排他的 server.lock
守住它——同一数据目录上的第二个后端实例会快速失败,而不是悄悄破坏
状态。
完整生命周期与 work-dir 语义请参见
配置参考。
支持哪些智能体与提供商?
NomiFun 作为 ACP(Agent Client Protocol)后端运行的"智能体 CLI"
包括 claude、codex、gemini、nomi、codebuddy、qwen 与
opencode。每一个都是一个独立的 CLI,需要你自己在系统上安装;
NomiFun 会从 PATH 上发现它们,并据此填充注册表。运行
nomicore doctor 即可看到你的安装能识别到哪些。
至于裸模型访问(例如提供商密钥、自定义的 OpenAI 兼容端点),系统
通过 /api/providers/* 与应用内的设置 UI 支持可配置的提供商。API
密钥由你提供;NomiFun 会以静态加密的方式把它们存到数据目录。
并不存在一个会调用某个托管 NomiFun 端点的内置智能体——根本就没有 这样的端点。你配置的每一个智能体 / 提供商都由你自己控制。
NomiFun 真的纯本地吗?
应用逻辑与你的数据是本地的。但你接入的智能体未必——大多数 CLI 智能体 都会向各自的提供商(Anthropic、OpenAI、Google 等)发起出站调用。那 是你与该智能体之间的事。
NomiFun 自身在网络上做的事:
- 可选的更新检查(system info / check-update 端点)。
- 扩展市场(
/api/hub/*)——仅在你主动使用时。 - 你已配置的智能体与提供商所做的——通常是去 LLM 提供商的 API 调用。
二进制中没有遥测管道、没有 analytics SDK,也没有 SENTRY_DSN 集成。
后端不会自行回传任何数据。
扩展与技能——它们由谁来运行?
扩展(主题、助手、频道插件、设置标签页)由 nomifun-extension 从
数据目录加载。技能则是一组提示词/指令,按会话被解析进智能体的上下文。
两者都是数据目录下的本地文件;市场流程只是把它们下载到该目录。
智能体 CLI 二进制不属于扩展——它们是 NomiFun 通过 ACP 协议作为子 进程派生的外部 CLI。
我能在与 UI 不同的机器上跑智能体吗?
可以——这正是 nomifun-web 的用途。把 Web 宿主部署到你希望智能体
(及其 CLI 和它们的网络访问)所在的机器上,然后从任何浏览器访问
SPA。参见 Web 服务部署。
如果只是想从手机或另一台笔记本做更轻量的远程访问,又不想另起一台 服务,WebUI 远程访问 可以把 现有的桌面安装暴露到 LAN 上。
许可证是什么?
Apache-2.0,在工作区 Cargo.toml 中声明。你可以在标准的
Apache-2.0 条款下使用、修改、再分发,并将代码打包——包括用于商业
产品——只要保留许可证与声明完整即可。
有预构建安装包吗?
还没有官方公开发布渠道。桌面包可以本地构建,macOS Developer ID 签名已通过
bun run build:signed 脚本接好,updater 产物可用 bun run build:updater
生成;但还没有官方 installer feed 或公开 registry。当前受支持的安装路径是:
- 桌面端:
bun install && bun run build:ui && cargo run -p nomifun-desktop(或cargo build --release -p nomifun-desktop)。 - 服务端:从源码构建(
cargo build --release -p nomifun-web) 或docker compose up -d --build。
预构建安装包发布后,会从项目 README 与 新手入门指南 链接出来。
我把管理员密码搞丢了
在 nomifun-web 上,带内的恢复流程是仅本地的 WebUI 路由
(POST /api/webui/reset-password)——你可以从运行该服务的同一台
机器上调用它,它会生成一个全新的随机密码并打印出来。从远程机器
无法通过 API 恢复密码。
兜底方案是停止服务、直接编辑数据库(system_default_user.password_hash
列),然后重启。最简单的重置就是把哈希设为空字符串——下次启动
就会把当前安装当作需要重新进行首次启动设置,下一个访问者就可以
认领管理员。
桌面本地 WebView 没有密码。WebUI 远程访问有自己的管理员密码,因为它会被其他 浏览器访问。
有"单二进制"构建吗?
服务端有:nomifun-web 是一个静态链接的 Rust 二进制,再加上它要
提供的 ui/dist/ 目录。SQLite 是静态链接的,TLS 用的是 rustls——
运行时没有 libsqlite、也没有 openssl 依赖。用
cargo build --release -p nomifun-web 即可构建。
智能体运行时(bun)默认不嵌入;请把它装到系统级,或者用
NOMIFUN_EMBED_BUN=1 构建标记把它打包进二进制。参见
bun-on-PATH
小节。
桌面外壳同样可以产出单一二进制(nomifun-desktop),但用于分发时,
通常你想要的是 bun run build 通过平台原生打包流程产出的
产物(前提是安装包签名已配置好)。