经 AI Skill Hub 精选评估,AIR-Agent 获评「强烈推荐」。这款Agent工作流在功能完整性、社区活跃度和易用性方面表现出色,AI 评分 8.0 分,适合有一定技术背景的用户使用。
AIR-Agent 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
AIR-Agent 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
# 方式一:pip 安装(推荐)
pip install air-agent
# 方式二:虚拟环境安装(推荐生产环境)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install air-agent
# 方式三:从源码安装(获取最新功能)
git clone https://github.com/ShiYu0318/AIR-Agent
cd AIR-Agent
pip install -e .
# 验证安装
python -c "import air_agent; print('安装成功')"
# 命令行使用
air-agent --help
# 基本用法
air-agent input_file -o output_file
# Python 代码中调用
import air_agent
# 示例
result = air_agent.process("input")
print(result)
# air-agent 配置文件示例(config.yml) app: name: "air-agent" debug: false log_level: "INFO" # 运行时指定配置文件 air-agent --config config.yml # 或通过环境变量配置 export AIR_AGENT_API_KEY="your-key" export AIR_AGENT_OUTPUT_DIR="./output"
| Requirement | Needed for |
|---|---|
| [Groq API key](https://console.groq.com) | Generation, summarization, LLM routing (free tier works) |
Docker, or Python 3.13 + [uv](https://github.com/astral-sh/uv) | Running the stack |
| Node.js 22+ | Frontend development only |
| [Discord bot token](https://discord.com/developers/applications) | The Discord interface only |
The image bakes the frontend build into the API container, so one service serves both.
```bash git clone https://github.com/ShiYu0318/ScholaRAGent.git cd ScholaRAGent
cp backend/.env.example backend/.env
The Docker build is multi-stage: the frontend compiles in a Node stage and its dist output is copied into the Python image, which FastAPI serves as static files behind the API routes. One container, one port.
Scaling notes. The default IndexFlatIP is exact and fine well past tens of thousands of papers; switch INDEX_TYPE=hnsw when approximate search becomes worth the recall tradeoff. The scheduler holds in-process state (dedupe sets, fired-reminder ids), so running multiple API replicas with SCHEDULER_ENABLED=1 would duplicate digests — run the scheduler in exactly one replica. Postgres + pgvector is the path to horizontal scaling, since SQLite+FAISS assumes a single writer and a local index file.
```bash
Settings live in backend/.env, which is never committed. The minimum working setup:
GROQ_API_KEY=your-groq-api-key # required
JWT_SECRET=$(openssl rand -hex 32) # recommended: ephemeral if unset
SCHEDULER_ENABLED=1 # per-user digests and reminders
STORE_BACKEND=sqlite # or postgres, with DATABASE_URL
Everything else is optional and safely skipped when unset.
| Variable | Required | Description |
|---|---|---|
GROQ_API_KEY | yes | Groq API key |
GROQ_MODEL | Model id (default llama-3.3-70b-versatile) | |
GROQ_BASE_URL | OpenAI-compatible endpoint override | |
DISCORD_BOT_TOKEN | bot | Discord bot token |
DISCORD_CHANNEL_ID | bot | Channel for the daily push |
DISCORD_GUILD_ID | Guild id for instant slash-command sync | |
ARXIV_QUERY | arXiv query (default cat:cs.AI) | |
DAILY_COUNT / REPORT_COUNT | Papers per daily push / per report | |
PUSH_HOUR / PUSH_MINUTE / PUSH_TZ_OFFSET | Default push time and timezone offset | |
EMBED_MODEL | Embedding model (default all-MiniLM-L6-v2, or BAAI/bge-m3) | |
INDEX_TYPE / HNSW_M | Vector index: flat (exact) or hnsw (approximate) | |
RERANK_ENABLED / RERANK_MODEL | Cross-encoder reranking | |
TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID | Telegram delivery | |
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASSWORD / SMTP_FROM / EMAIL_TO | Email delivery | |
LINE_CHANNEL_TOKEN / LINE_TO | LINE delivery (Messaging API) | |
GITHUB_TOKEN | Raises GitHub API rate limits | |
X_BEARER_TOKEN | X/Twitter crawler (X API v2 requires a paid plan) | |
JWT_SECRET | Auth secret; ephemeral if unset, so set it in production | |
JWT_EXPIRE_MINUTES | Token lifetime (default 7 days) | |
CORS_ORIGINS / API_PUBLIC_URL / FRONTEND_URL | Deployment URLs | |
GOOGLE / GITHUB / DISCORD_CLIENT_ID and _SECRET | OAuth sign-in and Discord linking | |
STORE_BACKEND / DATABASE_URL | sqlite (default) or postgres | |
SCHEDULER_ENABLED | Per-user digest and reminder scheduler |
Notes. The arXiv, news, Hacker News, Reddit, and GitHub crawlers need no credentials. Telegram, Email, LINE, OAuth, and X/Twitter activate only once their keys are present. Changing EMBED_MODEL changes vector dimensionality; the store detects the mismatch and rebuilds the index automatically. Leaving JWT_SECRET unset generates a random secret at startup, which invalidates every existing token on restart — acceptable locally, not in production.
docker compose up --build # SQLite + FAISS, data in ./backend/data docker compose --profile postgres up --build # Postgres + pgvector instead ```
Web UI and API: http://localhost:8000 · Interactive API docs: http://localhost:8000/docs
For the Postgres profile, also set STORE_BACKEND=postgres and DATABASE_URL in backend/.env.
cd frontend npm install npm run dev # http://localhost:5173 ```
Every endpoint is browsable live at /docs (Swagger UI) and /redoc. Unless marked public, endpoints require Authorization: Bearer <JWT> from register/login or OAuth. Streaming endpoints emit Server-Sent Events as data: {json}\n\n frames.
| Method | Path | Description |
|---|---|---|
| GET | /api/papers | List papers (?limit=&source=&query=) with reproducibility signals |
| GET | /api/paper/{id} | Paper detail with credibility and reproducibility signals |
| POST | /api/daily | Fetch today's arXiv batch, store and index it |
| GET | /api/daily/personalized | Papers ranked against your interaction profile |
| POST | /api/interactions | Log an interaction for recommendations (201) |
| GET | /api/reading | Reading kanban items (?state=to-read\|reading\|done) |
| POST | /api/reading | Add to the kanban (201) |
| PATCH | /api/reading/{paper_id} | Move between states |
| DELETE | /api/reading/{paper_id} | Remove (204) |
| GET | /api/export/csv | Export the library as CSV |
| GET | /api/export/bibtex | Export as BibTeX |
| GET | /api/export/obsidian | Export as an Obsidian-ready Markdown archive |
| Method | Path | Description |
|---|---|---|
| GET | /api/feeds | Your RSS feeds |
| POST | /api/feeds | Add a feed (201; 409 on duplicate) |
| PATCH | /api/feeds/{id} | Update title, category, or enabled state |
| DELETE | /api/feeds/{id} | Remove (204) |
| POST | /api/feeds/refresh | Fetch all enabled feeds into the library |
| GET | /api/subscriptions | Your keyword subscriptions |
| POST | /api/subscriptions | Add a subscription (201) |
| DELETE | /api/subscriptions/{name} | Remove one (204) |
| Method | Path | Description |
|---|---|---|
| GET | /api/graph/citation?seed= | Citation network around a seed, with nodes, edges, PageRank, and communities |
| GET | /api/graph/concept | Concept graph over the corpus (?refresh=1 rebuilds) |
| GET | /api/graph/global?query= | Community-report map-reduce answer for corpus-level questions |
| Method | Path | Description |
|---|---|---|
| POST | /api/deepresearch | **SSE** — events: decompose, section, synthesis, citations, done |
| POST | /api/litreview | Literature review over retrieved papers |
| POST | /api/compare | Multi-paper method comparison table |
| POST | /api/report | Structured topic report with citations |
| POST | /api/bibtex | BibTeX for retrieved papers |
| POST | /api/explain | Guided plain-language deep-read of one paper |
| POST | /api/write/{tool} | polish, contributions, review, checklist, latex, slides |
| Method | Path | Description |
|---|---|---|
| GET | /api/trends | Rising keywords by slope plus top keywords (?granularity=month\|year&top=) |
| GET | /api/trends/{keyword} | One keyword's time series and next-period forecast |
| GET | /api/digest/weekly | Weekly digest: top recent papers, keywords, LLM overview |
| GET | /api/analytics | Activity, action totals, reading pipeline, top topics (?days=) |
| Method | Path | Description |
|---|---|---|
| GET | /api/notifications/preferences | Your notification preferences |
| PUT | /api/notifications/preferences | Update them; the scheduler reschedules immediately |
| GET | /api/reminders | Open reminders (?include_done=true for all) |
| POST | /api/reminders | Create (201) |
| POST | /api/reminders/{id}/complete | Mark done |
| DELETE | /api/reminders/{id} | Delete (204) |
| GET | /api/learning-paths | Your learning paths |
| POST | /api/learning-paths | Generate a path for a topic (201) |
| PATCH | /api/learning-paths/{id} | Update items, progress, or topic |
| DELETE | /api/learning-paths/{id} | Delete (204) |
| GET | /api/skills | Your skill levels |
| PUT | /api/skills | Set a skill level (0-100) |
| Method | Path | Description |
|---|---|---|
| GET | /api/health | Store stats, scheduler status, provider readiness (booleans only) — public |
| GET | /api/sources | Data-source configuration status |
| GET | /api/memory | Agent memory items (?kind=&contains=&limit=) |
| POST | /api/memory | Add a memory item (201) |
| POST | /api/eval | RAG evaluation — engine=offline or engine=judge |
| POST | /api/agent | Tool-calling agent (503 without GROQ_API_KEY) |
Retrieval depth is chosen per question rather than fixed. Cheap questions skip retrieval entirely; multi-faceted ones get query expansion and reranking.
Why Reciprocal Rank Fusion. Dense and lexical retrievers produce scores on incomparable scales — cosine similarity against BM25 term weights. Normalizing them into a common range requires calibration that shifts with corpus and query. RRF sidesteps this entirely by discarding scores and fusing on rank alone: each result contributes 1 / (k + rank) to its document (rank counted from 1), summed across retrievers.
The constant k = 60 deliberately flattens the curve. A document ranked tenth by both retrievers scores 2/70 = 0.029, which beats a document ranked first by only one of them at 1/61 = 0.016. Cross-retriever agreement is worth more than a top position in a single ranking — exactly the behavior you want when fusing two methods that fail in different ways: vector search misses exact identifiers, BM25 misses paraphrase, and a document both agree on is unlikely to be an artifact of either failure mode. The system fetches 20 candidates per retriever before fusion, then truncates to the requested result count.
Two orthogonal routers. classify_complexity decides retrieval depth (none / simple / complex); route_query decides retrieval scope (local neighborhood versus global community reports). Both prefer an LLM classification and fall back to keyword heuristics, which keeps the pipeline working — and deterministically testable — without a model.
- Literature review generation with identified research gaps. - Multi-paper method comparison tables. - Guided deep-read explanations of dense papers. - Credibility signals from citation data and reproducibility signals from linked code. - Reading kanban (to-read / reading / done) with drag-and-drop, plus topic subscriptions. - Exports: BibTeX with generated keys, CSV, and Obsidian-ready Markdown with frontmatter and wikilinks (compatible with Juggl and Dataview). - Writing assistance: LaTeX drafts, slide outlines, polishing, contribution extraction, review suggestions, and submission checklists.
| Method | Path | Description |
|---|---|---|
| POST | /api/ask | **SSE** — streamed grounded answer; events: conversation, token, citations, done |
| GET | /api/conversations | List conversations (?query= searches titles and messages) |
| GET | /api/conversations/{id} | One conversation with messages and citations |
| PATCH | /api/conversations/{id} | Rename |
| DELETE | /api/conversations/{id} | Delete (204) |
| POST | /api/conversations/{id}/share | Create a public share link, returns {token, url} |
| GET | /api/shared/{token} | Read a shared conversation — public |
| Symptom | Cause and fix |
|---|---|
503 from /api/agent or /api/eval?engine=judge | No GROQ_API_KEY. These endpoints require generation and refuse rather than returning degraded output. |
| Every token invalid after a restart | JWT_SECRET is unset, so a random one is generated per start. Set it. |
| Retrieval returns nothing | The corpus is empty. Run **Library -> Fetch today** or POST /api/daily. |
| Vector dimension mismatch errors | EMBED_MODEL changed. The store detects this and rebuilds; delete backend/data/faiss.index if it persists. |
| Digests never arrive | SCHEDULER_ENABLED is off, the channel has no credentials, or delivery falls inside quiet hours. Check GET /api/health. |
| Slash commands missing in Discord | Global sync takes up to an hour. Set DISCORD_GUILD_ID for instant per-guild sync. |
uv sync is very slow on first run | It resolves and downloads PyTorch. Subsequent runs are cached. |
| Frontend loads but API calls fail in dev | The Vite dev server proxies /api to :8000 — make sure the backend is running there. |
AIR-Agent (RAGency) 是一款专为 AI 研究人员设计的自动化情报工具。它能够自动追踪并汇总最新的 AI 论文与社区讨论,通过将海量信息提炼为简洁的摘要,构建起一个可进行自然语言查询的知识库。系统结合了稠密/稀疏向量索引(Dense/Sparse Vector Index)与引用/概念图谱(Citation/Concept Graph),确保在回答特定问题时既能保证语义准确性,又能提供严谨的文献溯源。
本项目集成了先进的 RAG(检索增强生成)技术,能够实现自动化的文献综述、研究缺口识别以及论文深度解读。通过结合混合检索与重排序技术,AIR-Agent 不仅能处理复杂的学术查询,还能通过生成方法对比表、BibTeX 导出以及可信度信号分析,帮助开发者和研究者从繁琐的日常论文阅读中解脱出来,高效掌握 AI 领域的前沿动态。
运行本项目需要准备以下环境:1. Groq API key(可使用免费层级);2. Python 3.13 环境并安装 `uv` 包管理器,或者直接使用 Docker 进行容器化部署;3. 若需启用 Discord bot 功能,需准备 Discord bot token 及相关频道 ID;4. 若涉及前端扩展,可能需要 Node.js 22+ 环境。请确保网络环境能够正常访问 Groq 及相关 API 服务。
推荐使用 Docker Compose 进行一键部署,该方式会自动构建前端并使用 FastAPI 提供服务,最为便捷。对于开发者,也可以选择本地开发模式:首先进入 `backend` 目录,使用 `uv sync` 安装依赖(首次运行会下载 PyTorch,耗时较长),随后通过 `cp .env.example .env` 配置环境变量,最后使用 `uv run python main.py all` 同时启动 Dashboard API 与 Discord bot。
项目启动后,用户可以通过 Web Dashboard 进行交互式操作。Dashboard 界面直观易用,涵盖了从文献检索到深度阅读的所有功能模块。对于需要集成到其他系统的开发者,可以通过提供的 REST API 进行深度调用。初次使用请务必参考“First steps”完成基础配置,确保 API Key 已正确注入。
项目通过环境变量进行配置。核心参数包括 `GROQ_API_KEY`(必填)以及用于指定模型的 `GROQ_MODEL`。若需启用定时任务(如用户摘要提醒),需设置 `SCHEDULER_ENABLED=1`。存储后端支持 `sqlite` 或 `postgres`,若使用 Postgres,请务必在 `.env` 中配置 `STORE_BACKEND=postgres` 并提供正确的 `DATABASE_URL`。
本项目提供完整的 RESTful API 接口。Dashboard API 运行在 `http://localhost:8000`,并自带交互式文档 `http://localhost:8000/docs`。核心对话接口 `/api/ask` 支持 SSE(Server-Sent Events)流式输出,能够实时返回 `conversation`、`token` 及 `citations`(引用)等事件,确保用户在获取答案的同时能看到准确的文献来源。
AIR-Agent 提供了一套完整的科研工作流工具:支持自动生成带有研究缺口识别的文献综述(Literature Review);支持带引用键的 BibTeX 导出;能够自动生成不同论文间的方法对比表(Method Comparison Tables);提供引导式深度阅读功能,帮助理解晦涩论文;并结合引用计数提供可信度与影响力信号,甚至包含论文的可复现性(Reproducibility)评估。
关于检索质量,系统采用了混合检索(Hybrid Retrieval)机制,通过 Reciprocal Rank Fusion 将 BM25 词法搜索与向量搜索相结合。针对复杂查询,系统内置了 HyDE(假���性文档嵌入)、多查询重写(Multi-query Rewriting)及问题分解技术以提升召回率。此外,可选配 BGE reranker 进行交叉编码重排序,以确保回答的精准度与学术严谨性。
AIR-Agent是一个开源的AI工作流平台,具有较高的潜力和扩展性
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
AI Skill Hub 点评:AIR-Agent 的核心功能完整,质量优秀。对于自动化工程师和运维人员来说,这是一个值得纳入个人工具库的选择。建议先在非生产环境试用,再逐步推广。
| 原始名称 | AIR-Agent |
| 原始描述 | 开源AI工作流:AI Research Agent: A Full-Stack Open-Source Platform for Agentic AI Research Ass。⭐6 · Python |
| Topics | ai-agentapicrawlerdatabasepython |
| GitHub | https://github.com/ShiYu0318/AIR-Agent |
| License | MIT |
| 语言 | Python |
收录时间:2026-07-03 · 更新时间:2026-07-03 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端