Files
freedak f7a720204a Update: 将子项目从 submodule 转为完整内容
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用
- 添加所有子项目的完整源代码
- 保留原始 .git 为 .git.bak 备份
2026-07-04 19:20:46 +08:00

174 lines
8.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 常见问题
针对反复被问到的问题给出直白、简短的回答。如需更深入的解释,请顺着
链接前往对应文档。
## 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 服务部署](../guides/web-server-deployment.md)。
你可以使用 [WebUI 远程访问](../guides/webui-remote-access.md) 把桌面
安装临时暴露给其他设备(手机、笔记本),但这是一项按实例的功能,
不是托管服务。
## 桌面应用需要登录吗?
不需要。桌面 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` 语义请参见
[配置参考](./configuration.zh.md#数据目录与工作目录的语义)。
## 支持哪些智能体与提供商?
NomiFun 作为 ACPAgent 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 服务部署](../guides/web-server-deployment.md)。
如果只是想从手机或另一台笔记本做更轻量的远程访问,又不想另起一台
服务,[WebUI 远程访问](../guides/webui-remote-access.md) 可以把
现有的桌面安装暴露到 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 与
[新手入门指南](../getting-started/) 链接出来。
## 我把管理员密码搞丢了
在 `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](../guides/web-server-deployment.md#bun-must-be-on-the-system-path)
小节。
桌面外壳同样可以产出单一二进制(`nomifun-desktop`),但用于分发时,
通常你想要的是 `bun run build` 通过平台原生打包流程产出的
产物(前提是安装包签名已配置好)。
## 另见
- [配置参考](./configuration.zh.md)
- [API 概览](./api-overview.zh.md)
- [疑难排查](./troubleshooting.zh.md)
- [Web 服务部署](../guides/web-server-deployment.zh.md)
- [作为桌面应用运行 NomiFun](../guides/desktop-app.zh.md)