Local-First AI Research Workbench · 单用户本地科研智能体工作台
仓库镜像(五平台同步) GitCode · Gitee · GitHub · badhope · GitHub · X33834 · GitHub · Morningstar202604 五仓同步同一套 CI:lint · typecheck ×2 · vitest ×2 · build ×2 · mock 全量回归(161 项)· promptfoo 契约评估 · Playwright 冒烟,全部公开可克隆。
SciFlow 是一个本地优先、单机部署的科研 AI 助手:输入一个研究主题,自动完成 文献调研 → 研究规划 → 大纲(人工确认)→ 分章起草(边写边查的 Agentic RAG)→ 质量门评分(不达标自动 Reflexion 回炉)→ 润色 → 引用格式化 → 投稿辅助 的科研全生命周期,并以 NotebookLM 式 RAG 知识库 + 可视化工作台沉淀过程资产。
- 零外部 AI 依赖:AI 只通过 OpenAI 兼容协议(Vercel AI SDK 传输层)对接你自己的模型 Key,兼容 Ollama / LM Studio 等本地端点。
- 本地优先:SQLite 单文件开箱即跑,你的文献、笔记、记忆、Key 全部落本地,不建多租户、不上传第三方云。
| 工作台 · 项目总览 | 全自动流水线 · 多智能体编排 |
|---|---|
![]() |
![]() |
| 论文写作 · AI 助手 + 公式渲染 | 质量评分 · 7 维雷达 + 改进建议 |
|---|---|
![]() |
![]() |
截图来自真实运行界面(本地部署 · 内置 AI 网关实测)。
- 大纲先行(outline-first):AI 生成研究计划与章节大纲,写作页编辑 / 预览 / 分栏三态切换。
- 分章起草 + Agentic RAG:每章边写边查本地知识库,文内
[n]锚点与文末列表一一对应。 - 学术润色:三段式润色(原文 + 润色文 + 理由)、中英互译、降重改写;自动保护图表与「参考文献」尾部不被洗掉。
- 多版本历史 + 版本 diff:每次定稿留存快照,逐版本 LCS 文本比对(
VersionDiffModal)。 - 一键导出:Markdown / HTML / LaTeX(.tex) / Word(.docx),投稿交稿即用。
- 8 种引用样式:APA / IEEE / Vancouver / GB/T 7714 / Nature / Chicago / Springer / ACS。
- 文内锚点重排:顺序编码制正文
[n]保持插入序;著者-年制按正文首现自动加 a/b 后缀重排(CiteReorderButton)。 - BibTeX / RIS 导入导出:文献库元数据去重指纹、
reading_status状态机(unread / reading / read / cited)。 - PRISMA 筛选 + 编码矩阵:文献调研页按纳入/排除标准筛选、编码归纳。
- 力导向引用网络:sigma.js + graphology + ForceAtlas2(WebGL 渲染)可交互图谱,直观呈现文献间引用关系。
- 本地 sqlite-vec 向量 ANN + FTS5 trigram 全文混合检索(嵌入模型不可用时自动回退全文;中文查询 3-gram OR 展开);知识库资料与文献双向绑定,命中块带来源作者/年份卡片。
- LangGraph 编排 + 人工确认点:主题验证 → 文献调研 → 大纲生成 → 大纲人工确认(interrupt) → 分章起草(并行,并发数可配)→ 7 维质量门(<80 触发 Reflexion 回炉,最多 3 轮,自动取最高分轮次定稿)→ 润色 → 引用格式化;对话工作台内直接确认与续跑。
- Checkpoint 断点续跑:服务重启后自动恢复中断任务,从草稿阶段幂等续跑。
- 模型路由:fast / strong 双档,问答润色走快模型,规划/长文/评审自动切强模型。
- 7 维质量评分:文献 / 逻辑 / 引用 / 语言 / 创新 / 图表 / 格式(0–100),Recharts 雷达图 + 历史评分对比。
- 审稿闭环:审稿意见结构化解析、逐条回复模板、修回截止日倒计时。
- 选刊匹配(按主题/范围推荐)、Cover Letter 生成、投稿状态跟踪(投稿→under review→修回→录用/拒稿→转投串联)。
- 实验沙箱:隔离
spawn执行 Python 脚本(SANDBOX_PYTHON/SANDBOX_TIMEOUT_MS可配),资源上限防护,降级时给出引导。 - 记忆中心:情景记忆(项目自动沉淀)+ 程序记忆(写作风格指令,起草自动注入)。
- 学习复盘卡 / 思维导图:流水线复盘要点结构化沉淀。
- ⌘K 命令面板:全局导航 / 新建项目 / 暗色切换;
#/hash 路由深层链接直达。 - MCP 工具台:AI 能力协议化为标准 MCP 工具,设置页逐个可视化调用,参数 JSON Schema 动态校验(Guardrail 拒参即报错)。
- 全站错误文案中文化、移动端窄屏适配、品牌渐变视觉系统。
| 端 | 技术 |
|---|---|
后端 apps/server |
NestJS 11 · TypeScript(strict)· Drizzle ORM · better-sqlite3(WAL)· Vercel AI SDK(OpenAI 兼容)· LangGraph(编排 / 断点续跑 / 人工确认)· MCP 官方 SDK · zod · helmet + pino · MSW 进程内 mock 网关 |
前端 apps/web |
React 19 · Vite 6 · TypeScript · Tailwind CSS v4 · TanStack Query / Table · Recharts · sigma.js + graphology · streamdown(流式 Markdown)· CodeMirror 6 · react-markdown + KaTeX |
桌面端 apps/desktop |
Electron 38(内嵌 Node 22,原生支持 require(ESM))· 内嵌后端(ELECTRON_RUN_AS_NODE)· 本地 SQLite(userData 隔离,打包时自动按 Electron ABI 重编原生模块)· electron-builder 三平台打包 · electron-updater 自动更新(opt-in) |
| 工程 | pnpm workspace · vitest(server 16 / web 15)· Playwright 冒烟 · promptfoo 契约评估 · GitHub Actions 三 job(类型/单测/构建 · 全量回归 · E2E+评测)· Python 3 回归脚本(161 项) |
架构概览
apps/server/src/ 后端模块(NestJS)
├── ai/ AI SDK 模型层 + Prompt 模板 + MSW mock 网关 + 全局令牌桶限流
├── projects/ 项目管理 ├── documents/ 文档/润色/翻译/引用/版本/导出
├── references/ 文献库 + 综述 ├── knowledge/ RAG 知识库(向量 + FTS5 全文)
├── pipeline/ LangGraph 编排(interrupt/checkpointer)├── agent/ Agent 执行轨迹
├── research/ 文献调研 + 质量评分 + 投稿辅助(controller 集中于此)
├── judgment/ 评审闭环 ├── experiments/ 实验沙箱
├── chat/ SSE 流式问答 ├── memory/ 情景/程序记忆
├── mcp/ MCP 工具协议化 ├── settings/ 设置/模型连通自检
├── dashboard/ 工作台聚合 ├── db/ Drizzle schema + SQLite
└── common/ 输入校验等公共件
apps/web/src/pages/ 前端页面
Dashboard(工作台) · Writing(论文写作) · Literature(文献调研) · Knowledge(知识库)
Pipeline(全自动流水线) · Quality(质量评分) · Experiments(实验记录) · Memory(记忆中心)
Chat(科研问答) · Submission(投稿辅助) · Settings(设置)
数据链条:Project → Document(多版本)→ Citation → Reference(真实可追溯);PipelineTask / AgentExecution / ReflexionLog / MemoryLog / LlmCallLog 分别记录流水线状态、Agent 执行轨迹、回炉反思、记忆沉淀与 token 成本。
要求:Node ≥ 20(CI 锁定 Node 22)、pnpm ≥ 9(本仓库锁定 pnpm@11.7.0)
# 1. 克隆并安装依赖
git clone <你的仓库镜像地址> sciflow && cd sciflow
pnpm install
# 2. 配置 AI(复制模板并填写你自己的 Key;模板已含全部变量说明)
cp apps/server/.env.example apps/server/.env
# 编辑 apps/server/.env:至少填 AI_BASE_URL / AI_API_KEY / AI_MODEL
# 3. 编译后端
pnpm --filter @sciflow/server build
# 4. 启动(两个终端)
# 后端 :3000
node apps/server/dist/main.js
# 前端 :5173
pnpm --filter @sciflow/web dev
# 5. 浏览器打开
# http://localhost:5173SQLite 首次启动自动建表(默认
apps/server/data/sciflow.db),零配置开箱即跑。 后端默认仅监听127.0.0.1;确需局域网暴露时显式设置HOST=0.0.0.0。
pnpm install && pnpm build # 先构建后端与前端
pnpm icons # 从矢量母版生成应用图标(首次)
pnpm desktop:dev # 开发调试(前端 dev server + 桌面壳)
pnpm desktop:dist # 打包当前平台安装包 → apps/desktop/release/数据落平台规范目录(Windows %APPDATA%\SciFlow),离线可用;详见 apps/desktop/README.md 与 docs/BRAND.md。
SciFlow 支持任意 OpenAI 兼容端点,只需要填 base_url + model + key:
| 变量 | 说明 | 示例值(占位,非真实 Key) |
|---|---|---|
AI_BASE_URL |
OpenAI 兼容接口地址 | https://api.deepseek.com/v1 |
AI_API_KEY |
你的 API 密钥 | sk-your-api-key-here |
AI_MODEL |
默认模型 | deepseek-chat |
AI_MODEL_FAST |
fast 档(问答/润色/翻译/评审 JSON) | 留空则回落 AI_MODEL |
AI_MODEL_STRONG |
strong 档(规划/长文起草) | 留空则回落 AI_MODEL |
AI_RPM_CAP |
每分钟 AI 调用上限(令牌桶防 429) | 8(长流水线建议 100+) |
AI_MOCK |
设为 1 启用进程内 mock 网关(MSW 拦截,无 Key / 无外网跑全链路) |
1 |
CORS_ORIGIN |
允许的前端来源(逗号分隔) | http://localhost:5173 |
兼容端点示例(任选其一,格式均为 base_url + 模型名):火山方舟 https://ark.cn-beijing.volces.com/api/v3、DeepSeek https://api.deepseek.com/v1、豆包、智谱 https://open.bigmodel.cn/api/paas/v4、Kimi https://api.moonshot.cn/v1、Ollama 本地 http://localhost:11434/v1、云知声 u2-flash 网关等。
未配置 Key 时项目管理 / 文献库 / RAG 等本地功能照常可用;AI 功能会给出明确配置提示,不返回假数据。
# 类型检查(双端,CI 强制)
pnpm --filter @sciflow/server typecheck
pnpm --filter @sciflow/web typecheck
# 单元测试(vitest:server 16 条 + web 15 条)
pnpm --filter @sciflow/server test
pnpm --filter @sciflow/web test
# 构建(双端)
pnpm --filter @sciflow/server build && pnpm --filter @sciflow/web build
# E2E 冒烟(Playwright;前置:mock 后端 :3000 + web dev :5173 均已启动)
pnpm exec playwright test
# prompt 契约评估(promptfoo,离线;前置:server build + 下方 mock HTTP 网关)
pnpm exec promptfoo eval -c evals/promptfooconfig.yamlAI_MOCK=1 时以 MSW 在进程内拦截全部 AI 调用(不占端口、零网络),按 prompt 关键词返回确定性响应(研究计划/大纲 JSON、带 [Ref:N] 的中文章节、≈87 分 7 维评分不回炉、三段式润色、RAG 答案、期刊匹配等),并支持 SSE 分块。
# 起后端(mock 模式,放宽限流)
AI_MOCK=1 AI_RPM_CAP=120 DATABASE_PATH=/tmp/sciflow_regression.db PORT=3000 \
node apps/server/dist/main.js
# 另一终端:全量回归(覆盖全部路由 + 一条流水线端到端产物断言)
SCIFLOW_BASE=http://localhost:3000 AI_MOCK=1 \
python3 scripts/full_regression.py外部工具(如 promptfoo)需要真实 HTTP 端点时:
node apps/server/scripts/mock-openai-http.mjs——复用同一路由表,监听127.0.0.1:5099。
回归基线(全新库 + mock 网关实测,见 scripts/full_regression.py):PASS 161 / FAIL 0 / KNOWN 0(KNOWN 机制保留但当前为空集:历史 11 项存量缺口已全部修复)。mock 网关仅用于测试/演示,不代表真实模型能力。
| 文档 | 内容 |
|---|---|
ARCHITECTURE.md |
架构唯一真理源:依赖地图 / 防重复造轮子守则 / 阶段进度与待办 |
docs/product-roadmap.md |
产品路线图:现状能力矩阵、设计原则、差距与缺口 |
docs/index.html |
项目官网(静态单页,浏览器直开;GitHub Pages 首页) |
docs/sciflow-code-tree.html |
全仓代码树可视化(浏览器打开) |
docs/screenshots/ |
工作台 / 流水线 / 写作 / 质量评分实机截图 |
CONTRIBUTING.md |
开发环境、提交规范、PR 流程 |
SECURITY.md |
安全设计要点与漏洞披露方式 |
CHANGELOG.md |
版本变更记录 |
- 首次启动在演示项目中预置 1 篇示例文献 + 1 份知识库资料,便于立刻体验文献绑定、RAG 检索与流水线;
- 全流程产物(文档/版本/引用/记忆)均存于本地 SQLite,删除
DATABASE_PATH指向的 db 文件即可回到干净状态。
cp apps/server/.env.example .env # 按注释填写 AI_BASE_URL / AI_API_KEY / AI_MODEL
docker compose up -d --build # 前端 nginx 静态托管 :8080 → 后端 :3000
# 容器部署需设置 CORS_ORIGIN=http://localhost:8080MIT © 2026 SciFlow Contributors



