面向安全与 AI 研究的本地论文工作台,覆盖论文导入、PDF 解析、证据化精读、跨论文检索、知识卡片、综合发现、写作导出和知识库同步。
- 论文导入与解析:上传 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。启用跨论文 RAG、Dify 文档同步或知识空间 dataset 绑定时,再启动 dify-proxy。
需要 Docker 24+ 和 Docker Compose 2.20+。
git clone https://github.com/NewWr/ai4sec.git
cd ai4sec
./scripts/ai4sec_config.sh initinit 会复制 .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启动前会一次性检查全部必需配置。默认 minimal profile 只构建并启动 backend frontend,不要求 Dify checkout、Dify 网络或 Dify API。
访问:
停止服务:
docker compose --profile dify down运行数据保存在 ./docker-data/,该目录不会提交到 Git。
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当 Dify 由其他部署工具管理时,保持 AI4SEC_DIFY_COMPOSE_FILE= 为空。需要由 AI4Sec 启动本地 Dify checkout 时,配置仓库相对路径:
AI4SEC_DIFY_COMPOSE_FILE=dify-rag/docker/docker-compose.yaml
AI4SEC_DIFY_PROFILES=postgresql,weaviate,collaboration
AI4SEC_DIFY_PUBLIC_URL=http://127.0.0.1:3080启动完整服务:
./start_ai4sec.sh difydify profile 会启动 dify-proxy backend frontend;只有 AI4SEC_DIFY_COMPOSE_FILE 非空时才会额外启动该 Dify Compose 栈。文档同步由 backend 的 durable outbox worker 唯一执行,真实 Dataset API Key 只注入 dify-proxy。
检查集成状态:
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 |
翻译页面和每日推荐翻译 |
DAILY_RECOMMENDATION_* |
每日推荐主题、数量、阈值、自动刷新时间和目标知识空间 |
AUTO_KNOWLEDGE_CARDS_ENABLED |
是否允许在知识卡片页手动构建研究方向卡片 |
RESEARCH_DISCOVERY_LLM_VERIFY_ENABLED |
是否用 LLM 复核跨论文关系候选 |
DOCUMENT_PARTITION_ENABLED / SUPPLEMENTARY_INDEX_ENABLED |
大文档分段和补充材料索引 |
APP_ACCESS_PASSWORD / APP_ACCESS_SESSION_SECRET |
前端功能页访问密码和会话签名密钥;首页仍公开 |
BACKEND_INTERNAL_API_TOKEN |
前端服务端代理访问后端的内部凭据,不得使用 NEXT_PUBLIC_* 变量 |
ADMIN_API_TOKEN |
保护 /api/admin/* 和运行时设置写入接口 |
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 # 默认最小启动;显式 dify profile 启动可选代理/栈
├── 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 开源。
