Skip to content
NewWrPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

AI4Sec logo

AI4Sec · 本地 AI 论文研究工作台

面向安全与 AI 研究的本地论文工作台,覆盖论文导入、PDF 解析、证据化精读、跨论文检索、知识卡片、综合发现、写作导出和知识库同步。

English README

当前能力

  • 论文导入与解析:上传 PDF 或从每日推荐导入论文,使用 MinerU 解析正文、公式、表格、图片和补充材料,并保存到本地 SQLite 与文件目录。
  • 四类分析工作流:Insight Snap 做快速价值判断,Logic Lens 做结构化深读,Research Sphere 扩展引用/相关工作图谱,Smart Q&A 自动判断问题并路由到摘要、深读、图谱或单篇问答。
  • 证据化知识资产:从分析结果生成 claim、method、dataset、metric、result、limitation、question、writing snippet 等知识卡片,保留页码、片段和来源关系。
  • 本地论文库与知识空间:管理论文元数据、分组、阅读状态、笔记、批注、AI review marks、Dify 同步状态,并把不同知识空间绑定到不同 Dify dataset。
  • 每日 arXiv 推荐:按主题抓取候选论文,打分、翻译、反馈、导入、提升到知识空间,并可直接启动后续分析。
  • 跨论文检索与综合:基于本地图谱和可选 Dify RAG 做语料检索、跨论文问答、问答历史复用与删除、冲突关系发现、研究 gap 候选和综合卡片沉淀。
  • 写作与导出:从已确认卡片生成 related work/method/experiment/limitation 片段,生成论文对比表;导出以复制为主,必要时下载 Markdown、Obsidian、BibTeX、RIS、Zotero CSL JSON。
  • 运行维护:提供 LLM 运行时设置、模型连通性测试、DeepLX 翻译、健康检查、缓存清理、限流和公开发布检查。

页面入口

页面 用途
/upload 上传 PDF 并创建论文记录
/daily 每日推荐、反馈、导入和提升
/papers 论文列表、分析入口、最近运行和 PDF 查看
/library 本地论文库、分组、状态、同步、跨库问答和历史记录管理
/knowledge 知识卡片、批量审核、合并和去重
/synthesis 综合卡、冲突关系、研究 gap 看板和批量构建
/writing 草稿合成、对比表和复制优先的外部导出
/knowledge-spaces 知识空间、dataset 绑定和 Dify 文档管理
/translate DeepLX 文本翻译
/health 解析、同步、知识资产和索引健康检查
/settings LLM Base URL、模型、API Key 和 reasoning effort

架构

服务 技术栈 默认端口 说明
frontend Next.js 15 / React 19 / Tailwind 3001 Web UI、PDF 查看、SSE 运行状态和 API 代理
backend FastAPI / LangGraph / SQLite 8001 论文解析、LLM 工作流、知识资产、检索、导出和健康检查
dify-proxy FastAPI 3002 可选服务,把 Dify Dataset API Key 留在服务端

直接执行一键脚本时会同时启动 frontend、backend、dify-proxy 和本地 Dify 知识库栈。只需要核心论文工作台时仍可显式使用 minimal profile。

快速启动

需要 Docker 24+ 和 Docker Compose 2.20+。

git clone https://github.com/NewWr/ai4sec.git
cd ai4sec
./scripts/ai4sec_config.sh init

init 会复制 .env.example,并只为缺失的 APP_ACCESS_PASSWORD、APP_ACCESS_SESSION_SECRET、BACKEND_INTERNAL_API_TOKEN 和 DIFY_PROXY_TOKEN 生成四个相互独立的安全随机值;重复执行不会覆盖已有值。

编辑 .env,填写实际使用的 LLM 与 MinerU 配置:

LLM_BASEURL=https://api.openai.com/v1
LLM_APIKEY=
THINKING_MODELNAME=
MINERU_TOKEN=

如果不使用本机代理,请清空 AI4SEC_BACKEND_PROXY;如果使用本机代理,保持为实际代理地址。

./start_ai4sec.sh

启动前会一次性检查全部必需配置。默认 dify profile 会启动完整知识库链路;检测到 dify-rag/docker/docker-compose.yaml 时会自动拉起该栈并保留现有 checkout 内的知识库卷。仅启动核心服务可使用 ./start_ai4sec.sh minimal。

该启动器面向可信局域网使用:自动检测本机局域网 IPv4 地址,把前端发布到所有 IPv4 网卡,并在 UFW 启用时只放行当前局域网子网。启动完成后会打印可供同一路由器设备直接访问的 IP:端口 地址。启动器固定关闭前端访问密码;后端和 Dify 代理仍只监听 127.0.0.1,内部 API 令牌保持启用。仅在已手工配置其他防火墙时使用 --no-configure-firewall。

访问:

停止服务:

docker compose --profile dify down

运行数据保存在 ./docker-data/,该目录不会提交到 Git。

配置 Dify RAG

dify-rag/ 是本地开发目录,不随本项目发布。公开部署时请单独部署 Dify,再让 AI4Sec 通过 dify-proxy 访问 Dify Dataset API。

示例:

git clone https://github.com/langgenius/dify.git dify-rag
cd dify-rag/docker
cp .env.example .env
docker compose up -d

在 AI4Sec 的 .env 中配置:

DIFY_DOCKER_NETWORK=docker_default
DIFY_API_BASE=http://dify-proxy:3002
DIFY_BASE_URL=http://nginx
DIFY_DATASET_API_KEY=
DIFY_DEFAULT_DATASET_ID=
DIFY_ANALYSIS_DATASET_ID=
DIFY_SEARCH_METHOD=keyword_search

当 AI4SEC_DIFY_COMPOSE_FILE= 为空且仓库内存在 dify-rag/docker/docker-compose.yaml 时,一键脚本会自动启动该本地栈,并把 checkout 内的既有卷明确报告为 legacy-local-unmanaged,不会静默迁移或覆盖知识库数据。没有本地 checkout 时,Dify 由外部部署管理。

新部署需要把 Dify 数据纳入 AI4Sec 统一存储根时,显式配置仓库相对路径和存储覆盖文件:

AI4SEC_DIFY_COMPOSE_FILE=dify-rag/docker/docker-compose.yaml
AI4SEC_DIFY_STORAGE_OVERRIDE_FILE=deploy/dify-storage.override.yml
AI4SEC_DIFY_PROFILES=postgresql,weaviate,collaboration
AI4SEC_DIFY_PUBLIC_URL=http://127.0.0.1:3080

启动完整服务:

./start_ai4sec.sh

默认 dify profile 会启动本地 Dify 栈以及 dify-proxy backend frontend。仍可显式执行 ./start_ai4sec.sh dify;./start_ai4sec.sh minimal 只启动核心服务。文档同步由 backend 的 durable outbox worker 唯一执行,脚本会停用遗留的 ai4sec-dify-sync 容器,真实 Dataset API Key 只注入 dify-proxy。

正常启动会先构建当前源码;镜像源临时不可用时,脚本只在确认完整本地镜像集存在后继续启动。明确使用现有镜像可执行 ./start_ai4sec.sh --skip-build。

检查集成状态:

curl http://localhost:3002/health
curl http://localhost:8001/api/system/health

两个公开健康端点成功后,可从前端知识库页面检查已认证的 Dify 集成状态。

常用配置

变量 作用
LLM_BASEURL / LLM_APIKEY / THINKING_MODELNAME OpenAI 兼容 LLM 地址、密钥和可选模型列表,多个模型用逗号分隔
MINERU_TOKEN PDF 解析必需
EASYSCHOLAR_SECRET_KEY / TAVILY_KEY 期刊/会议分级和 Web 兜底检索
UNPAYWALL_EMAIL / CORE_API_KEY / ELSEVIER_API_KEY / WILEY_TDM_TOKEN Research Sphere 参考文献全文获取
DIFY_* Dify RAG、同步和知识空间 dataset 绑定
DEEPLX_API_BASE / DEEPLX_API_KEY 无翻译运行时配置时,用于初始化内置 DeepLX profile;可在“系统设置 → Translation”中改为独立的 OpenAI 兼容翻译 LLM
DAILY_RECOMMENDATION_* 每日推荐主题、数量、阈值、自动刷新时间和目标知识空间
PROJECT_WORKSPACE_ENABLED 是否启用 owner-scoped Research Project API 和项目工作区
LEGACY_AI_WRITES_ENABLED 是否允许已退役的卡片、关系、gap、写作 AI 写入,默认关闭;历史数据仍可读取
AUTO_KNOWLEDGE_CARDS_ENABLED 是否允许自动知识卡片生成,默认关闭
RESEARCH_DISCOVERY_LLM_VERIFY_ENABLED 是否用 LLM 复核跨论文关系候选
DOCUMENT_PARTITION_ENABLED / SUPPLEMENTARY_INDEX_ENABLED 大文档分段和补充材料索引
APP_ACCESS_PASSWORD / APP_ACCESS_SESSION_SECRET 直接使用 Compose 时的可选前端访问密码和会话签名密钥;start_ai4sec.sh 固定关闭该密码
BACKEND_INTERNAL_API_TOKEN 前端服务端代理访问后端的内部凭据,不得使用 NEXT_PUBLIC_* 变量
ADMIN_API_TOKEN 保护 /api/admin/* 和运行时设置写入接口

“系统设置 → Translation”中的 URL、API Key 和模型保存在持久化存储根的 translation_runtime_config.json 中,与 Research LLM 的 llm_runtime_config.json 完全独立。翻译执行不会读取或回退到 LLM_BASEURL、LLM_APIKEY、THINKING_MODELNAME;空白密钥表示保留已保存密钥, 只有勾选“清空”才会删除密钥。便携导出会移除翻译密钥,同时保留 profile 名称、 URL、模型和 active 选择。 | ENABLE_DOCS=false | 生产环境关闭 Swagger/OpenAPI |

完整变量见 .env.example。

本地开发

后端:

cd backend
uv sync
BACKEND_INTERNAL_API_TOKEN="dev-internal-token" \
uv run uvicorn app.main:app --reload --port 8000
uv run pytest

前端:

cd frontend
npm install
BACKEND_URL="http://127.0.0.1:8000" \
BACKEND_INTERNAL_API_TOKEN="dev-internal-token" \
APP_ACCESS_PASSWORD="dev-password" \
APP_ACCESS_SESSION_SECRET="dev-session-secret" \
npm run dev
npm run build

生产构建不读取运行时密码或 session secret。部署契约检查可直接运行 ./scripts/test_deployment_config.sh。

项目结构

ai4sec/
├── backend/          # FastAPI、LangGraph 工作流、SQLite、PDF/LLM/Dify/知识资产服务
├── frontend/         # Next.js 页面、组件、PDF 查看和 API 客户端
├── dify-proxy/       # 可选 Dify Dataset API 代理
├── docs/             # 发布与部署说明
├── scripts/          # 配置预检、部署契约和公开发布检查脚本
├── start_ai4sec.sh   # 默认启动 AI4Sec、Dify 代理和本地知识库完整栈
├── docker-compose.yml
└── .env.example

隐私与公开发布

不要提交 .env、docker-data/、.local-dev-data/、backend/data/、dify-rag/、ai4sec-dify-sync/state/*.db、PDF、数据库、解析产物或任何 API Key。使用以下命令构建公开发布产物:

scripts/export_public_release.sh --output /tmp/ai4sec-public

导出产物只有一个干净提交,并会自动执行发布扫描;它保留当前工作树源码,但不复制既有 Git 历史。

许可证

本项目以 MIT License 开源。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages