尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證更好的酒馆,有成熟的agent runtime负责长程叙事,提供Web端和RN移动端。已上线可体验,官网https://devyangcooking.cn
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗BetterTavern 是一个第一人称的互动小说应用。导入一张 SillyTavern 角色卡(或者在工作台里让 agent 帮你写一张),给主角起名字,AI 以“我”的视角写出一段故事,结尾给出两个选项;你点一个选项,或者自己写一句要做的事,它接着往下写。
它由三部分组成:服务器、手机 App 或网页(任选其一,账号通用),以及写故事的 AI 模型。
最简单的用法是打开官方服务 bettertavern.com 注册:不用配置,直接用官方模型写,新用户送 1500 点体验额度,用完可以换成自己的 API Key。 也可以自己运行服务器、用自己的模型服务,下面的安装步骤就是写给这种情况的。
**开发中。**还没有上架应用商店。Android 可以在项目主页下载安装包(默认连官方服务),iPhone 先用 Safari 打开网页版。 本页的截图里,角色和故事都是为演示写的原创内容。
目录:1 组成 · 2 安装与运行 · 3 使用 · 4 长篇故事是怎么保持连贯的 · 5 数据与隐私 · 6 服务器设置 · 7 常见问题 · 8 已知限制 · 9 更多文档
图的源文件是 docs/images/readme/overview.mmd,样式和怎么重新生成见架构图解第 15 节。
| 部分 | 做什么 | 技术 |
|---|---|---|
服务器(apps/server) | 保存账户、剧本、故事和世界设定;调用模型写故事,并在后台整理世界状态和长期记忆 | Python 3.12、FastAPI、PostgreSQL 16。分两个进程:api 处理请求、写故事,worker 做后台整理 |
手机 App(apps/mobile) | 在 iPhone、Android、iPad 上阅读和游玩 | React Native(Expo);Android 有安装包,iPhone 用 Expo Go 打开 |
网页(apps/web) | 在电脑浏览器里游玩,有侧栏和键盘快捷键,角色卡可以直接拖进窗口导入 | React + Vite |
| 模型服务 | 实际写故事的 AI | DeepSeek、OpenAI、Grok(xAI)、Gemini、Hugging Face,或任何兼容 OpenAI 接口的服务(包括本机运行的模型) |
git clone https://github.com/Hexthebaldy/BetterTavern.git
cd BetterTavern
docker compose -f deploy/docker-compose.yml run --rm --no-deps migrate bettertavern keygen >> deploy/.env
docker compose -f deploy/docker-compose.yml up -d
第一条生成两个密钥(MASTER_KEYS、AUTH_SECRET)写进 deploy/.env,第二条构建并启动。起来以后浏览器打开 http://localhost:8080 就能注册、使用。
postgres、api、worker、web 四个常驻容器,migrate 建完表就退出。web 发网页,并把接口请求转给 api。deploy/.env 里加一行 WEB_BIND=0.0.0.0,再执行一次 up -d;
它们用 http://<这台电脑的局域网 IP>:8080 访问,手机 App 的服务器地址也填这个。这是不加密的 http,只在家里或信得过的局域网这样做。端口用 WEB_PORT 改。8080,并在 deploy/.env 里加 AUTH_COOKIE_SECURE=true(网页登录的 Cookie 只走 https)。MASTER_KEYS:已保存的模型 Key 是用它加密的,丢了就解不开,只能重新填写。cp apps/server/.env.example apps/server/.env
make db-up # 用 Docker 起 PostgreSQL;用本机的 PostgreSQL 就跳过,改 .env 里的 DATABASE_URL
make install && make migrate
make dev # api,接口文档在 http://localhost:8000/docs
make worker # 另开一个终端:后台整理
开发环境不用配置密钥,第一次启动时会自动生成。详细说明见开发者指南。
网页:
make js-install
make web
浏览器打开 http://localhost:5173 。正式部署时用 make web-build 生成 apps/web/dist,由反向代理和接口放在同一个域名下。
手机:Android 直接装项目主页上的安装包(点“下载 Android 版”),打开后在登录页底部填上服务器地址(用 Docker 部署的是 http://192.168.1.10:8080 这样,从源码运行的是 :8000)。
安装时手机会提示允许浏览器或文件管理器安装应用。iPhone 还没有安装包,按下面的步骤用 Expo Go 打开(Android 也可以这样用):
cp apps/mobile/.env.example apps/mobile/.env # 把里面的地址改成电脑的局域网 IP
make mobile-install
cd apps/mobile && npm start
手机上装 Expo Go,扫终端里的二维码。手机和电脑要在同一个网络里,或者用 Tailscale 这类组网工具连起来;用蜂窝网络访问需要一个 https 地址。连不上时的排查见 apps/mobile/README.md。
同一张卡可以开好几个故事,各走各的。故事用什么语言写,由开局时的界面语言决定,之后不变。
? 查看完整的表。点阅读页左下角的指南针(网页上可以停靠在右侧)打开世界状态面板:人物、地点、物品、组织,它们之间的关系,以及已经知道的事实。
之后的段落会被撤销,世界状态和整理出来的记忆也退回到那时的样子。正在生成时不能回退。每个存档能回退的次数有上限(默认 1 次,由服务器的 ROLLBACK_LIMIT 设置),用完后按钮上会写明。
更多 → 写结局,可以写下希望的结局方向(也可以不填)。AI 会写一大段收尾,之后这个故事显示“已完结”,不能再继续;如果还有回退次数,回到结局之前的某一段可以接着玩。
模型一次能读的内容有限,故事长了以后不能把全部前文都发给它。BetterTavern 把“记住故事”拆给几个后台步骤,写故事时只发最需要的部分:
这些整理都在后台进行,不会让你多等。回退时它们一起退回。设计细节见 agent runtime 架构图解。
服务器从环境变量读取设置。开发时写在 apps/server/.env(每一项的说明见 apps/server/.env.example),Docker 部署时写在 deploy/.env。常用的几项:
| 设置 | 默认 | 说明 |
|---|---|---|
MASTER_KEYS、AUTH_SECRET | 开发环境自动生成 | 加密模型 Key 的主密钥、签发登录令牌的密钥。生产环境必须配置,用 bettertavern keygen 生成 |
DATABASE_URL | PostgreSQL 的地址 | |
ALLOW_PRIVATE_ENDPOINTS | false | 是否允许模型地址指向内网(例如本机的 Ollama)。多人共用的服务器不要打开 |
OUTBOUND_PROXY | 访问模型服务时走的代理 | |
ROLLBACK_LIMIT | 1 | 每个存档能回退几次 |
CHAPTER_SOFT_TOKENS、CHAPTER_HARD_TOKENS | 8000、16000 | 一章多长时整理一次章节摘要 |
DIRECTOR_TIMEOUT_S | 600 | 写一段的总时长上限(秒) |
WORKER_CONCURRENCY | 4 | worker 同时处理几个后台任务 |
ENABLE_PROBE_ENDPOINTS | 开发环境打开,生产环境关闭 | “设置 → 连接测试”用的接口 |
PLATFORM_API_KEY | 官方模型:用运营方自己的 Key 给用户直接用、按用量扣点数。不配就没有,用户只用自己的 Key(见 docs/ops.md 第 9 节) | |
CONTENT_POLICY | open | sfw 时写故事、写卡的提示词里加内容边界(官方服务用);用户存的角色卡不审核 |
**手机连不上服务器。**先在手机浏览器里打开 http://<电脑的局域网 IP>:8000/health(用 Docker 部署的是 :8080),打不开说明网络不通(不在同一个网络、防火墙、IP 变了)。排查步骤见 apps/mobile/README.md。
**添加模型时提示地址“解析到内网或保留地址”。**本机开着 Clash 等代理的 fake-ip 模式时,所有域名都会解析到保留地址。把模型服务的域名加进代理的 fake-ip-filter,或者在自己用的服务器上设 ALLOW_PRIVATE_ENDPOINTS=true。
**世界状态一直停在开局。**检查 worker 有没有在运行(make worker,或 Docker 的 worker 容器);再看世界状态面板里的提示。如果说后台模型不能调用工具,在设置里换一个后台模型,或者点“测试这个模型”重新确认。
**文字不是一段段出来,而是最后一下子全出现。**中间的反向代理或隧道在缓冲 SSE。在 设置 → 连接测试 里测一下,结果是“轮询降级”就说明有一跳在缓冲;按 deploy/nginx.example.conf 关掉缓冲。
**“回到这里”点不了。**正在生成时不能回退;这个存档的回退次数用完了也不行(按钮上会写明)。
**换了主密钥以后模型都用不了。**旧的 Key 是用旧主密钥加密的。把旧主密钥保留在 MASTER_KEYS 的后面(逗号隔开,第一个用于加密,其余只用于解密),或者重新填写各个模型的 Key。
还没解决的技术问题列在待优化清单。