[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-2300":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":15,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":16,"starSnapshotCount":16,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},2300,"GankAIGC","mumu-0922\u002FGankAIGC","mumu-0922","GankAIGC在线网站","https:\u002F\u002Fga.mumubuku.top",null,"Python",305,38,101,3,0,117,56.27,"Other",false,"main",true,[],"2026-06-12 04:00:14","﻿\u003Cdiv align=\"center\">\n  \u003Cimg src=\"package\u002Ffrontend\u002Fpublic\u002Fgankaigc-logo.svg\" alt=\"GankAIGC Logo\" width=\"96\" \u002F>\n\n# GankAIGC\n\n**论文降 AI、学术润色与原创性表达增强工具**\n\n[![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.11%20recommended-3776AB?logo=python&logoColor=white)](https:\u002F\u002Fwww.python.org\u002F)\n[![FastAPI](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FFastAPI-Backend-009688?logo=fastapi&logoColor=white)](https:\u002F\u002Ffastapi.tiangolo.com\u002F)\n[![React](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FReact%2018-Frontend-61DAFB?logo=react&logoColor=111)](https:\u002F\u002Freact.dev\u002F)\n[![PostgreSQL](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPostgreSQL-Only-4169E1?logo=postgresql&logoColor=white)](https:\u002F\u002Fwww.postgresql.org\u002F)\n[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-Deploy-2496ED?logo=docker&logoColor=white)](https:\u002F\u002Fwww.docker.com\u002F)\n[![Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fmumu-0922\u002FGankAIGC?label=Release)](https:\u002F\u002Fgithub.com\u002Fmumu-0922\u002FGankAIGC\u002Freleases\u002Flatest)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-CC%20BY--NC--SA%204.0-lightgrey)](LICENSE)\n\n\u003C\u002Fdiv>\n\n---\n\n## ✨ 项目简介\n\nGankAIGC 是一个面向论文文本的降 AI 与学术润色工具，采用 **FastAPI + React\u002FVite + PostgreSQL** 架构，支持源码运行、Docker 部署和 Windows 一键整合包。\n\n---\n\n## 🧪 降 AI 效果展示\n\n以下来自朱雀 AI 检测，用于展示中文与英文文本处理前后的检测变化；实际效果会受原文质量、模型配置和处理模式影响。\n\n### 中文文本\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd width=\"50%\" align=\"center\">\u003Cstrong>降 AI 前\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd width=\"50%\" align=\"center\">\u003Cstrong>降 AI 后\u003C\u002Fstrong>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>\u003Cimg src=\"docs\u002Fassets\u002Fzhuque-chinese-before.png\" alt=\"中文文本降 AI 前朱雀 AI 检测截图\" \u002F>\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"docs\u002Fassets\u002Fzhuque-chinese-after.png\" alt=\"中文文本降 AI 后朱雀 AI 检测截图\" \u002F>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n### 英文文本\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd width=\"50%\" align=\"center\">\u003Cstrong>降 AI 前\u003C\u002Fstrong>\u003C\u002Ftd>\n    \u003Ctd width=\"50%\" align=\"center\">\u003Cstrong>降 AI 后\u003C\u002Fstrong>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>\u003Cimg src=\"docs\u002Fassets\u002Fzhuque-english-before.png\" alt=\"英文文本降 AI 前朱雀 AI 检测截图\" \u002F>\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"docs\u002Fassets\u002Fzhuque-english-after.png\" alt=\"英文文本降 AI 后朱雀 AI 检测截图\" \u002F>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n---\n\n## 🧩 核心功能\n\n| 功能         | 说明                                                                            |\n| ------------ | ------------------------------------------------------------------------------- |\n| 📝 论文降 AI  | 支持论文润色、原创性增强、润色 + 增强、感情文章润色等模式                       |\n| 👤 账号体系   | 用户通过邀请码注册，登录后进入工作台，可修改昵称和查看个人信息                  |\n| 📨 邀请机制   | 管理员可创建或批量生成邀请码，支持复制和导出；普通用户只能生成 1 个自己的邀请码 |\n| 🍺 啤酒额度   | 用户使用兑换码充值啤酒；平台模式按字符折算啤酒；管理员可批量生成、复制和导出兑换码 |\n| 🔑 自带 API   | 用户可保存自己的 OpenAI 兼容接口配置，使用 BYOK 模式处理任务                    |\n| 📚 论文项目   | 支持按论文项目归档任务，查看历史会话、分段结果和改写记录                        |\n| 📦 结果导出   | 支持导出 Word `.docx` 和 Markdown `.md`                                         |\n| 📢 后台公告   | 管理员可发布维护通知、模型切换通知和使用说明，用户工作台实时展示               |\n| 🖥 Windows 包 | Release 提供一键整合包，内置便携 PostgreSQL，解压后双击 `start.bat`             |\n| 🛠 管理后台   | 数据面板、会话监控、用户管理、兑换码、封禁\u002F解封、操作日志、系统配置             |\n\n---\n\n## 🏗 技术栈\n\n- **后端**：FastAPI、SQLAlchemy、Alembic、PostgreSQL、JWT、OpenAI Python SDK\n- **前端**：React 18、Vite、Tailwind CSS、React Router、Axios、Lucide React\n- **任务处理**：PostgreSQL 队列；Docker 部署使用独立 worker\n- **部署**：Docker Compose + PostgreSQL；Windows 一键包内置便携 PostgreSQL\n- **打包**：PyInstaller、`build-oneclick.ps1`\n\n---\n\n## 📁 项目结构\n\n```text\nGankAIGC\u002F\n├── package\u002F\n│   ├── main.py                  # 一体化启动入口，提供 API 与前端静态页面\n│   ├── backend\u002F\n│   │   ├── app\u002Froutes\u002F          # auth、user、admin、optimization 等 API\n│   │   ├── app\u002Fservices\u002F        # AI 调用、啤酒、配置、任务队列等业务逻辑\n│   │   ├── app\u002Fmodels\u002F          # SQLAlchemy 数据模型\n│   │   ├── migrations\u002F          # Alembic 数据库迁移\n│   │   └── tests\u002F               # pytest 测试\n│   ├── frontend\u002F\n│   │   ├── src\u002Fpages\u002F           # 页面\n│   │   ├── src\u002Fcomponents\u002F      # 组件\n│   │   └── src\u002Fapi\u002F             # 前端 API 封装\n│   ├── static\u002F                  # 前端生产构建产物\n│   ├── requirements.txt\n│   ├── build.ps1                # Windows 普通 exe 构建脚本\n│   ├── build-oneclick.ps1       # Windows 一键整合包构建脚本\n│   ├── windows-oneclick\u002F        # 一键包 start\u002Fstop\u002Fenv 模板\n│   └── build.sh                 # Linux\u002FmacOS 普通可执行文件构建脚本\n├── docker-compose.yml\n├── docker-compose.local.yml     # 本地暴露 PostgreSQL 5432 的附加配置\n├── Dockerfile\n├── scripts\u002F                     # 启动诊断、PostgreSQL 备份\u002F恢复脚本\n├── docs\u002F                        # 部署、运维、维护清单和 README 图片资源\n└── .env.docker.example          # Docker 环境变量模板，不是真实密钥\n```\n\n---\n\n## 🚀 运行与部署\n\n按使用场景选择一种方式：\n\n| 方式 | 适合场景 | 一句话说明 |\n| ---- | -------- | ---------- |\n| `python main.py` 源码运行 | 本机开发、调试、个人使用 | 需要 Python 和 PostgreSQL，可用 Docker 只启动数据库 |\n| Docker Compose 部署 | 本机 Docker、VPS、正式上线 | 一次启动 Web、worker、PostgreSQL 和自动备份 |\n| Windows 一键整合包 | Windows 新手直接使用 | Release 下载后解压，双击 `start.bat`，内置便携 PostgreSQL |\n| 云端网站运行 | 不想自行部署、直接体验 | 访问云端网站，邀请码进群获得 |\n\nWindows 用户如果只想直接使用，优先下载：\n\n```text\nhttps:\u002F\u002Fgithub.com\u002Fmumu-0922\u002FGankAIGC\u002Freleases\u002Flatest\n```\n\n通用访问地址：\n\n- 🌐 用户首页：\u003Chttp:\u002F\u002Flocalhost:9800>\n- 🛠 管理后台：\u003Chttp:\u002F\u002Flocalhost:9800\u002Fadmin>\n- 📖 API 文档：\u003Chttp:\u002F\u002Flocalhost:9800\u002Fdocs>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>1. 源码运行：python main.py\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n这种方式需要 **Python + PostgreSQL**。如果不想手动安装 PostgreSQL，推荐用 Docker 只启动数据库，项目本体仍用 `python main.py` 跑。\n\n#### 1）拉取项目\n\nWindows \u002F Linux 都一样：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmumu-0922\u002FGankAIGC.git\ncd GankAIGC\n```\n\n#### 2）准备 PostgreSQL 数据库（推荐 Docker 方式）\n\nWindows PowerShell：\n\n```powershell\nCopy-Item .env.docker.example .env.docker\nnotepad .env.docker\n```\n\nLinux：\n\n```bash\ncp .env.docker.example .env.docker\nnano .env.docker\n```\n\n在 `.env.docker` 里至少修改数据库密码：\n\n```env\nPOSTGRES_PASSWORD=换成你自己的数据库密码\n```\n\n然后只启动 PostgreSQL：\n\n```bash\ndocker compose --env-file .env.docker -f docker-compose.yml -f docker-compose.local.yml up -d postgres\n```\n\n> 如果你已经自己安装了 PostgreSQL，也可以不用这一步，但需要手动创建 `ai_polish` 用户和 `ai_polish` 数据库。\n\n#### 3）安装 Python 依赖\n\nWindows PowerShell：\n\n```powershell\ncd package\npython -m venv venv\n.\\venv\\Scripts\\Activate.ps1\npython -m pip install -r requirements.txt\n```\n\nLinux：\n\n```bash\ncd package\npython3 -m venv venv\nsource venv\u002Fbin\u002Factivate\npython -m pip install -r requirements.txt\n```\n\n推荐使用 Python 3.11。\n\n#### 4）生成并修改配置文件\n\n第一次运行会在 `package\u002F.env` 生成配置模板：\n\n```bash\npython main.py\n```\n\n打开 `package\u002F.env`，重点修改这些配置：\n\n```env\nDATABASE_URL=postgresql:\u002F\u002Fai_polish:你在.env.docker里的POSTGRES_PASSWORD@127.0.0.1:5432\u002Fai_polish\nSECRET_KEY=随机长字符串\nADMIN_USERNAME=admin\nADMIN_PASSWORD=你的后台密码\nENCRYPTION_KEY=Fernet加密密钥\n\nPOLISH_MODEL=gpt-5.5\nPOLISH_API_KEY=你的API密钥\nPOLISH_BASE_URL=https:\u002F\u002Fapi.openai.com\u002Fv1\n\nENHANCE_MODEL=gpt-5.5\nENHANCE_API_KEY=你的API密钥\nENHANCE_BASE_URL=https:\u002F\u002Fapi.openai.com\u002Fv1\n\nEMOTION_MODEL=gpt-5.5\nEMOTION_API_KEY=你的API密钥\nEMOTION_BASE_URL=https:\u002F\u002Fapi.openai.com\u002Fv1\n```\n\n如果你在 Windows 一键包或本机源码运行时使用 `cliproxy`、`new-api` 这类本地代理，\nBase URL 请使用 `http:\u002F\u002F127.0.0.1:8317\u002Fv1` 这种 HTTP 地址，并同时满足：\n\n```env\nSERVER_HOST=127.0.0.1\nALLOW_LOCAL_MODEL_PROXY=true\nPOLISH_BASE_URL=http:\u002F\u002F127.0.0.1:8317\u002Fv1\n```\n\n修改 `SERVER_HOST` 或 `ALLOW_LOCAL_MODEL_PROXY` 后建议重启服务；本地代理安全边界按服务启动时的绑定地址判断。\n\n不要把本机代理写成 `https:\u002F\u002F127.0.0.1:8317\u002Fv1`。本地代理模式只放行\n`http:\u002F\u002F127.0.0.1:端口\u002Fv1`、`http:\u002F\u002Flocalhost:端口\u002Fv1`、`http:\u002F\u002F[::1]:端口\u002Fv1`\n或本地 Docker 场景的 `http:\u002F\u002Fhost.docker.internal:端口\u002Fv1`。\n\n本地 Docker 访问宿主机代理时，Base URL 可写成\n`http:\u002F\u002Fhost.docker.internal:8317\u002Fv1`。公网或 VPS 部署不要开启本地代理模式；\n`SERVER_HOST=0.0.0.0` 时系统会拒绝本地 HTTP 代理，必须使用公网 HTTPS\n代理地址，例如 `https:\u002F\u002Fproxy.example.com\u002Fv1`。\n\n生成密钥示例：\n\n```bash\npython -c \"import secrets; print(secrets.token_urlsafe(32))\"\npython -c \"from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())\"\n```\n\n第一个填 `SECRET_KEY`，第二个填 `ENCRYPTION_KEY`。\n\n#### 5）启动项目\n\n```bash\npython main.py\n```\n\n访问：\n\n```text\nhttp:\u002F\u002Flocalhost:9800\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>2. Docker Compose 部署\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nDocker Compose 会一次启动完整服务：\n\n- `app`：GankAIGC Web 应用。\n- `worker`：后台任务处理进程。\n- `postgres`：PostgreSQL 16 数据库。\n\n数据库数据保存在 Docker volume `postgres_data` 中。重建 `app` \u002F `worker` 容器不会删除数据。\n\n#### 1）拉取项目并复制配置\n\nWindows PowerShell：\n\n```powershell\ngit clone https:\u002F\u002Fgithub.com\u002Fmumu-0922\u002FGankAIGC.git\ncd GankAIGC\nCopy-Item .env.docker.example .env.docker\nnotepad .env.docker\n```\n\nLinux \u002F VPS：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmumu-0922\u002FGankAIGC.git\ncd GankAIGC\ncp .env.docker.example .env.docker\nnano .env.docker\n```\n\n#### 2）修改 `.env.docker`\n\n至少修改：\n\n```env\nPOSTGRES_PASSWORD=换成强数据库密码\nSECRET_KEY=换成随机长字符串\nADMIN_USERNAME=admin\nADMIN_PASSWORD=换成后台强密码\nENCRYPTION_KEY=换成Fernet加密密钥\nALLOWED_ORIGINS=http:\u002F\u002Flocalhost:9800\n```\n\n如果部署到 VPS，并直接用 IP 访问：\n\n```env\nALLOWED_ORIGINS=http:\u002F\u002F你的服务器IP:9800\n```\n\n如果绑定域名：\n\n```env\nALLOWED_ORIGINS=https:\u002F\u002F你的域名\n```\n\n生成密钥：\n\n```bash\npython3 -c \"import secrets; print(secrets.token_urlsafe(32))\"\npython3 -c \"from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())\"\n```\n\nDocker 会自动根据 `POSTGRES_PASSWORD` 拼出容器内的 `DATABASE_URL`，一般不要在 `.env.docker` 里手动添加 `DATABASE_URL`。\n\n还可以在 `.env.docker` 中配置平台 API：\n\n```env\nPOLISH_MODEL=gpt-5.5\nPOLISH_API_KEY=你的API密钥\nPOLISH_BASE_URL=https:\u002F\u002Fapi.openai.com\u002Fv1\n```\n\nDocker\u002FVPS 公网部署必须使用公网 HTTPS Base URL，不要开启本地代理模式：\n\n```env\nALLOW_LOCAL_MODEL_PROXY=false\n```\n\n只有本机 Docker 测试需要连接宿主机上的本地代理时，才可以把服务改成本机绑定：\n\n```env\nSERVER_HOST=127.0.0.1\nALLOW_LOCAL_MODEL_PROXY=true\nPOLISH_BASE_URL=http:\u002F\u002Fhost.docker.internal:8317\u002Fv1\n```\n\n修改 `SERVER_HOST` 或 `ALLOW_LOCAL_MODEL_PROXY` 后建议重启服务；本地代理安全边界按服务启动时的绑定地址判断。\n\n#### 3）启动\n\n```bash\ndocker compose --env-file .env.docker up --build -d\n```\n\n#### 4）检查状态\n\n```bash\ndocker compose --env-file .env.docker ps\ncurl http:\u002F\u002F127.0.0.1:9800\u002Fhealth\n```\n\n返回类似下面内容表示正常：\n\n```json\n{\"status\":\"healthy\"}\n```\n\n查看日志：\n\n```bash\ndocker compose --env-file .env.docker logs -f app\ndocker compose --env-file .env.docker logs -f worker\ndocker compose --env-file .env.docker logs -f backup\n```\n\nDocker 部署默认会启动自动数据库备份服务，备份文件保存在宿主机 `backups\u002F`：\n\n```env\nBACKUP_RETENTION_DAYS=14\nBACKUP_INTERVAL_SECONDS=86400\n```\n\n需要立刻手动备份一次：\n\n```bash\ndocker compose --env-file .env.docker run --rm -e RUN_ONCE=true backup\n```\n\n停止服务但保留数据库数据：\n\n```bash\ndocker compose --env-file .env.docker down\n```\n\n更新项目：\n\n```bash\ngit fetch --tags origin main\ngit pull --ff-only origin main\ndocker compose --env-file .env.docker up -d --build\n```\n\n进入管理后台，点击左上角版本号，可以检查 GitHub 最新 Release 并复制 SSH 升级命令。后台不会直接控制 Docker；需要 SSH 到 VPS 的项目目录手动执行上面的命令。\n\n> 不要随便执行 `docker compose down -v`、`docker volume rm gankaigc_postgres_data`。这些命令会删除 PostgreSQL 数据卷，用户、邀请码、兑换码、会话和啤酒流水都会丢失。\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>3. Windows 一键整合包\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n解压后双击 `start.bat` 即可运行。\n\n> 注意：解压路径必须全是英文，路径中不要包含中文、空格或特殊符号。\n\n> **重要：一键包本地部署后，你自己就是管理员。**\n> 用户注册需要邀请码；邀请码需要登录管理后台后，在「用户管理」→「邀请码管理」里自己生成。\n> 后台账号密码首次启动会显示在窗口里，也会保存到 `logs\u002Ffirst-run-admin.txt`。\n\n#### 直接下载使用\n\n进入 [Releases](https:\u002F\u002Fgithub.com\u002Fmumu-0922\u002FGankAIGC\u002Freleases\u002Flatest)，下载：\n\n```text\nGankAIGC-Windows-OneClick.zip\n```\n\n使用方式：\n\n1. 解压 `GankAIGC-Windows-OneClick.zip`。\n2. 双击 `start.bat`。\n3. 首次运行会自动初始化内置 PostgreSQL，并生成 `.env`、数据库密码、后台密码、JWT 密钥和加密密钥。\n4. 后台账号密码会显示在窗口里，也会保存到 `logs\u002Ffirst-run-admin.txt`。\n5. 停止服务双击 `stop.bat`。\n\n> 注意：不要删除 `data\u002F`，否则用户、邀请码、兑换码、会话等数据会丢失。\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>4. 云端网站运行\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n网址：\u003Chttps:\u002F\u002Fga.mumubuku.top>\n\n邀请码进群获得，QQ群：`1071743320`\n\n\u003C\u002Fdetails>\n\n---\n\n## ⚙️ 配置说明\n\n源码运行读取 `package\u002F.env`；打包后的 exe 读取 exe 同目录 `.env`；Docker 读取 `.env.docker`。\n\n项目 **只支持 PostgreSQL**。核心配置示例见下方。\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>展开查看核心配置示例\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```properties\nSERVER_HOST=0.0.0.0\nSERVER_PORT=9800\nAPP_ENV=development\nALLOWED_ORIGINS=http:\u002F\u002Flocalhost:9800\n\nDATABASE_URL=postgresql:\u002F\u002Fai_polish:数据库密码@127.0.0.1:5432\u002Fai_polish\n\nADMIN_USERNAME=admin\nADMIN_PASSWORD=replace-with-strong-password\nSECRET_KEY=replace-with-random-secret\nENCRYPTION_KEY=replace-with-fernet-key\n\nPOLISH_MODEL=gpt-5.5\nPOLISH_API_KEY=KEY\nPOLISH_BASE_URL=https:\u002F\u002Fapi.openai.com\u002Fv1\n\nENHANCE_MODEL=gpt-5.5\nENHANCE_API_KEY=KEY\nENHANCE_BASE_URL=https:\u002F\u002Fapi.openai.com\u002Fv1\n\nCOMPRESSION_MODEL=gpt-5.5\nCOMPRESSION_API_KEY=KEY\nCOMPRESSION_BASE_URL=https:\u002F\u002Fapi.openai.com\u002Fv1\n\nMAX_CONCURRENT_USERS=5\nAPI_REQUEST_INTERVAL=6\nREGISTRATION_ENABLED=true\nWORD_FORMATTER_ENABLED=false\nADMIN_DATABASE_MANAGER_ENABLED=true\nADMIN_DATABASE_WRITE_ENABLED=false\n```\n\n关键说明：\n\n- `REGISTRATION_ENABLED=false`：关闭邀请码注册，已有用户仍可登录。\n- `WORD_FORMATTER_ENABLED=false`：不挂载 Word 排版 API，也不会出现在 OpenAPI 文档中。\n- `ADMIN_DATABASE_WRITE_ENABLED=false`：数据库管理器保持只读，生产环境建议保持关闭。\n- `ENCRYPTION_KEY`：用于加密用户保存的自带 API 配置，必须妥善保存。\n\n\u003C\u002Fdetails>\n\n---\n\n## 🧭 使用流程\n\n1. 管理员访问 `\u002Fadmin` 登录后台。\n2. 在「用户管理」中创建或批量生成注册邀请码，也可复制\u002F导出邀请码。\n3. 用户通过邀请码注册并登录。\n4. 管理员创建或批量生成啤酒兑换码，用户在前台兑换啤酒。\n5. 管理员可在「公告」中发布维护通知、模型切换通知或使用说明。\n6. 用户进入工作台，选择平台啤酒模式或自带 API 模式。\n7. 提交论文文本，等待任务处理完成。\n8. 查看分段结果、改写记录，并导出 `.docx` 或 `.md`。\n\n---\n\n## 🛠 管理后台\n\n后台地址：\n\n```text\nhttp:\u002F\u002Flocalhost:9800\u002Fadmin\n```\n\n默认账号为 `admin`；默认密码仅适合本地开发，部署前必须通过 `ADMIN_PASSWORD` 修改。\n\n后台包含：\n\n- 📊 **数据面板**：用户、任务、完成率、模式统计等。\n- ⏳ **会话监控**：排队、处理中、历史任务。\n- 🛡 **运维状态**：检查数据库、worker、自动备份、版本更新、初始化事项和模型连接。\n- 👥 **用户管理**：新版后台分为用户列表、邀请码管理、兑换码、啤酒流水、API 配置。\n- 📢 **公告管理**：发布、启用\u002F隐藏、删除公告，用户工作台展示启用中的公告。\n- 🧾 **操作日志**：记录创建邀请码、创建兑换码、充值啤酒、公告、封禁\u002F解封、配置变更。\n- 🗄 **数据库管理**：默认只读，白名单表可查，敏感字段脱敏。\n- ⚙️ **系统配置**：模型、Base URL、并发、请求间隔、思考模式等。\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>展开查看用户管理细节\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n用户管理内部分为 5 个工作区：\n\n- **用户列表**：按 ID、用户名、昵称搜索，按状态和 API 配置筛选；支持封禁\u002F启用、充值啤酒、设置\u002F取消无限啤酒。\n- **邀请码管理**：支持单个创建、批量生成 `10\u002F50\u002F100`、多选复制、CSV\u002FTXT 导出和停用\u002F启用。\n- **兑换码**：支持单个创建、批量生成 `10\u002F50\u002F100`、多选复制、CSV\u002FTXT 导出。\n- **啤酒流水**：查看充值、兑换、降 AI 消耗和失败退款记录。\n- **API 配置**：只展示用户自带 API 的 Base URL、模型名和 API Key 后四位，不展示完整密钥。\n\n\u003C\u002Fdetails>\n\n---\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>🗄 数据库迁移、备份与恢复\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n### 数据库迁移\n\n新库或升级部署时执行：\n\n```powershell\ncd package\u002Fbackend\npython -m alembic upgrade head\n```\n\n### 备份 PostgreSQL\n\n如果本机安装了 `pg_dump`：\n\n```powershell\n$env:DATABASE_URL=\"postgresql:\u002F\u002Fai_polish:数据库密码@127.0.0.1:5432\u002Fai_polish\"\nPowerShell -NoProfile -ExecutionPolicy Bypass -File scripts\u002Fbackup-postgres.ps1\nRemove-Item Env:\\DATABASE_URL\n```\n\n如果 PostgreSQL 在 Docker 容器 `gankaigc-postgres` 中，也可以使用容器内的 `pg_dump`：\n\n```powershell\nNew-Item -ItemType Directory -Force backups\n$ts = Get-Date -Format \"yyyyMMdd_HHmmss\"\n$file = \"gankaigc_ai_polish_$ts.dump\"\ndocker exec gankaigc-postgres pg_dump -U ai_polish -d ai_polish -F c -f \"\u002Ftmp\u002F$file\"\ndocker cp \"gankaigc-postgres:\u002Ftmp\u002F$file\" \".\\backups\\$file\"\ndocker exec gankaigc-postgres rm \"\u002Ftmp\u002F$file\"\n```\n\n备份、恢复和换机器说明见：[PostgreSQL 运维指南](docs\u002Fpostgresql-operations.md)。\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>❓ 常见问题\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n### 端口被占用怎么办？\n\n关闭占用 `9800` 的旧进程，或修改 `.env` \u002F `.env.docker` 中的端口配置。\n\n### 启动提示 PostgreSQL 连接失败？\n\n优先检查：\n\n- PostgreSQL 是否启动。\n- `DATABASE_URL` 是否以 `postgresql:\u002F\u002F` 或 `postgresql+psycopg:\u002F\u002F` 开头。\n- 用户名、密码、数据库名和端口是否正确。\n- Docker 部署是否使用了 `docker compose --env-file .env.docker ...`。\n\n### 用户无法使用自带 API？\n\n确认用户已保存 Base URL、API Key 和模型名称，并且服务端配置了有效的 `ENCRYPTION_KEY`。\n\n如果提示“你正在使用本地\u002F内网模型地址”，按部署方式处理：\n\n- Windows 一键包本机使用：后台把 `SERVER_HOST` 改为 `127.0.0.1`，打开“允许本地 HTTP 模型代理”，Base URL 填 `http:\u002F\u002F127.0.0.1:端口\u002Fv1`。\n- 本地 Docker 测试：Base URL 填 `http:\u002F\u002Fhost.docker.internal:端口\u002Fv1`。\n- 云端\u002FVPS\u002F公网部署：不要填 `127.0.0.1`、`localhost`、`192.168.x.x`、`10.x.x.x` 或 `172.16-31.x.x`，必须使用公网 HTTPS 地址，例如 `https:\u002F\u002Fproxy.example.com\u002Fv1`。\n\n### AI 调用失败？\n\n检查 API Key、Base URL、模型名称和网络连通性。不要把真实 API Key 提交到仓库。\n\n\u003C\u002Fdetails>\n\n## 🔐 安全提醒\n\n发布到公网前必须完成：\n\n- 修改 `ADMIN_PASSWORD`。\n- 修改 `SECRET_KEY`。\n- 修改 `POSTGRES_PASSWORD`。\n- 设置有效的 `ENCRYPTION_KEY`。\n- 备份 PostgreSQL 数据库。\n- 不要提交 `.env`、`.env.docker`、数据库 dump、日志和真实 API Key。\n- 保持默认浏览器安全响应头开启，包括 CSP、点击劫持防护、MIME 嗅探防护、来源策略和权限策略。\n- 公网或 VPS 部署不要开启本地 HTTP 模型代理，模型 Base URL 使用公网 HTTPS 地址。\n\n---\n\n## 📄 许可证\n\n本项目基于 BypassAIGC 深度修改，继续采用 **CC BY-NC-SA 4.0** 协议发布。\n\n未经相关版权方授权，禁止商业使用。\n\n完整署名与来源见 [NOTICE](NOTICE)。\n\n---\n\n## 🙏 致谢\n\n[![感谢 linux.do 社区](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F感谢-linux.do%20社区-00A971?style=for-the-badge)](https:\u002F\u002Flinux.do)\n\n---\n\n## 💬 QQ 群\n\nQQ群：`1071743320`\n\n---\n\n## ⭐ Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=mumu-0922\u002FGankAIGC&type=date&legend=top-left)](https:\u002F\u002Fwww.star-history.com\u002F?repos=mumu-0922%2FGankAIGC&type=date&legend=top-left)\n","GankAIGC 是一个专为论文降 AI、学术润色与原创性表达增强设计的在线工具。该项目采用 FastAPI 构建后端服务，React 18 作为前端框架，并使用 PostgreSQL 存储数据，支持 Docker 部署和 Windows 一键安装包。其核心功能包括论文文本润色、用户账号体系、邀请码机制、啤酒额度充值系统、自带 API 支持及论文项目管理等。适用于需要提升论文或文章原创性和质量的场景，尤其适合科研人员、学生以及内容创作者使用。",2,"2026-06-11 02:49:20","CREATED_QUERY"]