Skip to content

Latest commit

 

History

History
760 lines (572 loc) · 22.7 KB

File metadata and controls

760 lines (572 loc) · 22.7 KB
OpenPrism Logo

OpenPrism

OpenPrism - 氛围写作平台

Node.js Version License GitHub Stars GitHub Forks GitHub Issues GitHub Pull Requests

中文 | English


✨ 核心特性一览

🤖 AI 智能助手 ✍️ 编译与预览 📚 模板系统
Chat / Agent 双轨历史
Tools 多轮工具调用
TexLive / Tectonic / Auto
PDF 预览与下载
ACL / CVPR / NeurIPS / ICML
模板一键切换
🔄 模板转换
经典模式 (LaTeX→LaTeX) / MinerU 模式 (PDF→MD→LaTeX)
LLM 驱动迁移 + 自动编译修复 + VLM 排版检查
🔧 高级编辑 🗂️ 项目管理 ⚙️ 灵活配置
AI 自动补全 / Diff / 诊断 多项目管理 + 文件树 + 上传 OpenAI 兼容端点
本地部署数据安全
🔍 检索能力 📊 图表生成 🧠 智能识别
WebSearch / PaperSearch 表格直出图表 公式/图表智能识别
👥 实时协作 📝 同行评审
多人协同编辑
光标同步与在线管理
AI 审稿报告 / 一致性检查
缺失引用 / 编译摘要

快速开始 功能概览 贡献指南 WeChat

📢 最新动态

Warning

🚧 模板转换功能仍在测试中
模板转换(Template Transfer)功能目前处于测试阶段,可能存在已知或未知的 Bug。如遇到问题,欢迎在 Issues 中反馈。

Tip

🆕 2025-02 · 模板转换(双模式)
支持两种转换模式:经典模式(LaTeX→LaTeX 直接迁移)和 MinerU 模式(PDF→Markdown→LaTeX,通过 MinerU API 解析)。两种模式均支持 LLM 驱动的内容迁移、自动编译错误修复,以及可选的 VLM 排版检查。

Tip

🆕 2025-02 · 实时协作上线
支持多人同时编辑同一文档,基于 CRDT 实现光标同步与冲突自动解决。当前版本需要公网服务器部署,通过邀请令牌邀请远程协作者加入。



OpenPrism 主页面
✨ 主页面预览:三栏工作区 + 编辑器 + 预览


✨ 核心功能

OpenPrism 是一个面向学术写作的本地部署 LaTeX + AI 工作台,强调高效编辑、可控改动与隐私安全。

🤖 AI 智能助手

  • Chat 模式:只读对话,不改文件,适合快速问答
  • Agent 模式:生成 Diff,用户确认后应用
  • Tools 模式:多轮工具调用,跨文件修改(如章节 + bib)
  • 任务类型:润色、改写、结构调整、翻译、自定义
  • 自动补全:Option/Alt + / 或 Cmd/Ctrl + Space 触发,Tab 接受

✍️ 编译与预览

  • 编译引擎:TexLive / Tectonic / Auto 自动回退
  • 预览工具栏:缩放、适合宽度、100%、下载 PDF
  • 编译日志:错误解析 + 一键诊断 + 跳转定位
  • 多视图:PDF / 图片列表 / Diff 视图

📚 模板系统

  • 内置模板:ACL / CVPR / NeurIPS / ICML
  • 模板转换:一键切换模板并保留正文内容

🔄 模板转换

  • 双模式:经典模式(LaTeX→LaTeX)和 MinerU 模式(PDF→Markdown→LaTeX)
  • MinerU 集成:通过 MinerU API 解析 PDF,提取 Markdown + 图片,再填充到目标模板
  • LLM 驱动迁移:AI 分析源/目标结构,制定迁移计划,自动映射内容
  • 自动编译修复:自动检测并修复 LaTeX 编译错误,支持重试循环
  • VLM 排版检查:可选的视觉排版验证,使用 VLM 检测溢出、重叠、间距等问题
  • 资源处理:自动复制图片、bib 文件和样式文件到目标项目

🗂️ 项目管理

  • 多项目管理:Projects 独立面板
  • 文件树管理:新建/重命名/删除/上传/拖拽
  • BibTeX 支持:快速创建 references.bib

⚙️ 灵活配置

  • LLM Endpoint:兼容 OpenAI API,包括自定义 base_url
  • 本地存储:设置保存在浏览器 localStorage
  • TexLive 配置:可自定义 TexLive 资源
  • 语言切换:顶栏一键中英文切换,配置自动保存

🔍 检索与阅读

  • WebSearch:联网检索与摘要
  • PaperSearch:学术论文检索与引用信息

📊 图表与识别

  • 表格绘图:根据表格直接生成图表
  • 智能识别:公式与图表结构自动识别

📝 同行评审

  • AI 质量检查:论文质量自动评估
  • 完整审稿报告:生成详细的 Reviewer 风格审稿意见
  • 一致性检查:术语与符号一致性检测
  • 缺失引用检测:查找需要补充引用的陈述
  • 编译日志摘要:汇总编译错误与修复建议

👥 实时协作

  • 多人协同编辑:多用户同时编辑同一文档,实时同步
  • 光标与选区同步:不同用户的光标以不同颜色显示,实时可见
  • 在线用户列表:协作面板展示当前在线用户及状态
  • 邀请协作:通过邀请链接或令牌邀请他人加入协作

🎨 功能展示

🖥️ 三栏工作区


三栏工作界面
✨ 左侧 AI 助手 | 中间 LaTeX 编辑器 | 右侧 PDF 预览

✍️ 编辑页面


编辑页面
✨ LaTeX 编辑器 + 右侧预览的同步工作流

🤖 AI 智能助手


Agent 模式
✨ Agent 模式:生成可编辑建议 + Diff 预览

🧪 一键诊断


一键诊断
✨ 编译错误自动解析 + 定位

🌐 WebSearch


网络搜索
✨ 联网检索与要点提炼

📄 PaperSearch


论文检索
✨ 论文检索与引用信息获取

📊 表格直出图表


图表生成
✨ 表格数据一键生成图表

🧠 公式/图表智能识别


公式识别
✨ 识别结构并转换为可编辑内容

🔧 AI 自动补全


AI 自动补全
✨ Option/Alt + / 触发补全,Tab 接受建议

📝 同行评审


同行评审
✨ AI 质量检查:审稿报告 / 一致性检查 / 缺失引用 / 编译摘要

👥 实时协作


实时协作
✨ 多人实时协同编辑,光标同步与在线用户管理


🚀 快速开始

📋 环境要求

基础环境

  • Node.js >= 18.0.0
  • npm >= 9.0.0
  • 操作系统:Windows / macOS / Linux

LaTeX 编译环境(必需)

OpenPrism 需要 LaTeX 编译引擎来生成 PDF,请根据操作系统选择以下方案之一:

方案 1:TexLive(推荐)

  • Linux (Ubuntu/Debian):
    sudo apt-get update
    sudo apt-get install texlive-full
  • Linux (CentOS/RHEL):
    sudo yum install texlive texlive-*
  • macOS:
    brew install --cask mactex
  • Windows: 下载 TexLive 安装包

方案 2:Tectonic(轻量级)

  • Linux/macOS:
    curl --proto '=https' --tlsv1.2 -fsSL https://drop-sh.fullyjustified.net | sh
  • Windows: 下载 Tectonic 安装包

注意:TexLive 完整安装约 5-7GB,Tectonic 更轻量但功能略少。推荐 Linux 服务器使用 TexLive。

📦 安装与启动

开发环境部署

# 1. 克隆仓库
git clone https://github.com/OpenDCAI/OpenPrism.git
cd OpenPrism

# 2. 安装依赖
npm install

# 3. 启动开发服务器(前端 + 后端)
npm run dev

启动后访问:

生产环境部署

# 1. 构建前端和后端
npm run build

# 2. 启动生产服务器
npm start

Linux 服务器完整部署示例

# 1. 安装 Node.js (以 Ubuntu 为例)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

# 2. 安装 TexLive
sudo apt-get update
sudo apt-get install -y texlive-full

# 3. 验证安装
node --version  # 应显示 >= 18.0.0
pdflatex --version  # 应显示 TexLive 版本

# 4. 克隆并部署项目
git clone https://github.com/OpenDCAI/OpenPrism.git
cd OpenPrism
npm install
npm run build

# 5. 配置环境变量(可选)
cat > .env << EOF
OPENPRISM_LLM_ENDPOINT=https://api.openai.com/v1/chat/completions
OPENPRISM_LLM_API_KEY=your-api-key
OPENPRISM_LLM_MODEL=gpt-4o-mini
OPENPRISM_DATA_DIR=/var/openprism/data
PORT=8787
EOF

# 6. 启动服务
npm start

# 7. 使用 PM2 守护进程(推荐)
sudo npm install -g pm2
pm2 start npm --name "openprism" -- start
pm2 save
pm2 startup

⚙️ 配置说明

环境变量配置

在项目根目录创建 .env 文件(可选):

# LLM 配置
OPENPRISM_LLM_ENDPOINT=https://api.openai.com/v1/chat/completions
OPENPRISM_LLM_API_KEY=your-api-key
OPENPRISM_LLM_MODEL=gpt-4o-mini

# 数据存储路径
OPENPRISM_DATA_DIR=./data

# 后端服务端口
PORT=8787

# MinerU API 配置(用于 PDF→MD→LaTeX 转换)
OPENPRISM_MINERU_API_BASE=https://mineru.net/api/v4
OPENPRISM_MINERU_TOKEN=your-mineru-token

LLM 配置

OpenPrism 支持任何 OpenAI 兼容接口,包括自定义 base_url:

方式 1:环境变量配置

# .env 文件
OPENPRISM_LLM_ENDPOINT=https://api.openai.com/v1/chat/completions
OPENPRISM_LLM_API_KEY=sk-your-api-key
OPENPRISM_LLM_MODEL=gpt-4o-mini

方式 2:前端设置面板

  • 在前端界面点击"设置"按钮
  • 填写 API Endpoint、API Key 和 Model
  • 配置自动保存在浏览器 localStorage

模型配置设置
✨ LLM 配置设置面板

支持的第三方服务示例:

  • OpenAI: https://api.openai.com/v1
  • Azure OpenAI: https://your-resource.openai.azure.com/openai/deployments/your-deployment
  • 其他兼容服务: https://api.apiyi.com/v1

LaTeX 编译配置

支持的编译引擎:

  • pdflatex - 标准 LaTeX 引擎
  • xelatex - 支持 Unicode 和中文
  • lualatex - 支持 Lua 脚本
  • latexmk - 自动化构建工具
  • tectonic - 现代轻量级引擎

配置方式:

  1. 在前端"设置"面板选择编译引擎
  2. 设置为 "Auto" 可自动回退到可用引擎
  3. 可自定义 TexLive 资源路径

数据存储配置

默认数据存储在 ./data 目录,可通过环境变量修改:

# 自定义数据目录
OPENPRISM_DATA_DIR=/var/openprism/data

目录结构:

data/
├── projects/           # 用户项目
│   ├── project-1/
│   │   ├── main.tex
│   │   └── references.bib
│   └── project-2/
└── templates/          # 模板缓存

👥 协作模式使用指南

OpenPrism 内置基于 CRDT(Yjs)+ WebSocket 的实时协作系统,支持多人同时编辑同一文档,无需第三方服务。

协作环境变量

.env 中添加以下配置:

# 令牌签名密钥(生产环境务必修改)
OPENPRISM_COLLAB_TOKEN_SECRET=your-secure-random-string

# 是否强制令牌验证(默认 true,本地开发可设为 false)
OPENPRISM_COLLAB_REQUIRE_TOKEN=true

# 令牌有效期,单位秒(默认 86400 = 24 小时)
OPENPRISM_COLLAB_TOKEN_TTL=86400

使用步骤

  1. 部署服务:将 OpenPrism 部署到有公网 IP 的服务器,配置域名与 HTTPS
  2. 生成邀请:在编辑页面的协作面板中点击「生成邀请链接」
  3. 分享链接:将生成的链接发送给协作者
  4. 加入协作:协作者打开链接,令牌自动验证后进入编辑器
  5. 实时编辑:多人光标实时可见,编辑内容自动同步,冲突自动解决
Nginx 反向代理配置(推荐,适合有公网服务器)

协作依赖 WebSocket,Nginx 需要配置升级头:

server {
    listen 443 ssl;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:8787;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

提示:本地访问(127.0.0.1)默认免令牌验证,适合本地开发调试。

无公网服务器?使用内网穿透(ngrok)

没有公网服务器也可以远程协作,OpenPrism 内置了隧道支持,一条命令即可将本地服务暴露到公网。

快速开始(ngrok,推荐)

  1. 注册 ngrok 免费账号,获取 authtoken
  2. 运行以下命令:
export NGROK_AUTHTOKEN=your_token_here

npm run tunnel:ngrok
  1. 启动后终端会输出公网 URL,将该 URL 发给协作者即可:
  OpenPrism started at http://localhost:8787

  Tunnel active (ngrok):
  Public URL: https://xxxx.ngrok-free.app
  Share this URL to collaborate remotely!
  1. 协作者在浏览器打开该 URL,即可实时协作编辑

其他隧道方案

方案 命令 说明
localtunnel npm run tunnel 零配置,但可能不稳定
Cloudflare Tunnel npm run tunnel:cf 需安装 cloudflared

注意:隧道默认关闭,普通 npm start 不会创建隧道。也可通过环境变量手动指定:OPENPRISM_TUNNEL=ngrok npm start


🎯 使用指南(简版)

  1. 创建项目:在 Projects 面板新建项目并选择模板
  2. 编写论文:在 Files 树中编辑 LaTeX
  3. AI 修改:切换 Agent / Tools,生成 diff 并确认应用
  4. 编译预览:点击“编译 PDF”,在右侧预览
  5. 导出 PDF:在预览工具栏点击“下载 PDF”

📁 项目结构

OpenPrism/
├── apps/
│   ├── frontend/              # React + Vite 前端
│   │   ├── src/
│   │   │   ├── app/App.tsx     # 主应用逻辑
│   │   │   ├── app/TransferPanel.tsx  # 模板转换 UI
│   │   │   ├── api/client.ts   # API 调用
│   │   │   └── latex/          # TexLive 集成
│   └── backend/               # Fastify 后端
│       └── src/
│           ├── index.js        # API / 编译 / LLM 代理
│           ├── routes/transfer.js  # 转换 API 端点
│           └── services/
│               ├── mineruService.js        # MinerU API 集成
│               └── transferAgent/          # LangGraph 转换工作流
│                   ├── graph.js            # 经典转换图
│                   ├── graphMineru.js       # MinerU 转换图
│                   ├── state.js            # 转换状态定义
│                   └── nodes/              # 工作流节点
├── templates/                 # LaTeX 模板(ACL/CVPR/NeurIPS/ICML)
├── data/                      # 项目存储目录(默认)
└── README.md

🗺️ Roadmap

功能 状态 说明
👥 私域协作编辑 Done 多人实时协同编辑,光标同步与在线用户管理(当前需公网服务器部署)
🌐 无服务器协作 Planned 支持无公网服务器的本地协作:① 内置内网穿透集成(ngrok / Cloudflare Tunnel)一键暴露本地服务;② 基于 WebRTC 的 P2P 点对点直连,数据不经第三方中转
🔍 增强 WebSearch Planned 增强联网检索能力,接入第三方 Search API(如 Google / Baidu / SerpAPI),提升搜索质量与覆盖范围
📚 模板转换(双模式) Done 经典模式(LaTeX→LaTeX)和 MinerU 模式(PDF→MD→LaTeX)双模式模板转换,支持 LLM 驱动迁移、自动编译修复和 VLM 排版检查
📸 版本快照与回滚 Planned 项目版本管理,支持快照保存与一键回滚
📖 引用检索助手 Planned 自动检索相关文献并生成 BibTeX 引用

🤝 贡献指南

欢迎提交 Issue 或 PR:

  1. Fork 仓库
  2. 新建分支
  3. 提交变更
  4. 发起 PR

开发命令:

npm run dev
npm run dev:frontend
npm run dev:backend
npm run build

📄 开源协议

MIT License. See LICENSE.


🙏 致谢

  • Tectonic
  • CodeMirror
  • PDF.js
  • LangChain
  • React / Fastify

如果这个项目对你有帮助,请给我们一个 ⭐️ Star!

GitHub stars GitHub forks


OpenPrism 微信交流群
扫码加入微信交流群

Made with ❤️ by OpenPrism Team