经 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"
RAGency keeps you on top of fast-moving AI research without the daily manual grind. It gathers the latest papers and community discussion from many sources, distills each item into a concise summary, and builds a searchable knowledge base you can query in natural language. Retrieval spans both a dense/sparse vector index and a citation/concept graph, so the system answers specific questions and reasons about a field as a whole.
The primary interface is an interactive web dashboard (React + FastAPI, GitHub-dark aesthetic, EN/ZH bilingual): streaming Q&A with citations, shareable conversations, interactive D3 citation/concept graphs, deep-research and writing tools, a reading kanban with RSS feeds and exports, trend analytics, learning paths, and per-user notification scheduling. A Discord bot remains as a secondary interface sharing the same core, with a scheduled daily digest and slash commands. User interactions feed a preference reward model that continuously tunes recommendation ranking.
The project runs on free, local components where possible: Groq (OpenAI-compatible) for generation, sentence-transformers for local embeddings, and FAISS for vector search. Heavier options (BGE embeddings and rerankers, HNSW indexing, Postgres + pgvector, OpenAlex citation data, PDF full-text ingestion) are available behind configuration switches and degrade gracefully when their services or models are unavailable.
uv, or DockerGROQ_API_KEY=your-groq-api-key
DISCORD_BOT_TOKEN=your-bot-token DISCORD_CHANNEL_ID=your-channel-id
Single container — the image bakes the frontend build and FastAPI serves it:
```bash
SCHEDULER_ENABLED=1 # per-user digests and reminders (compose sets this) STORE_BACKEND=sqlite # or postgres (+ DATABASE_URL) ```
Everything else is optional and safely skipped when unset — the full reference:
| Variable | Required | Description |
|---|---|---|
GROQ_API_KEY | yes | Groq API key ([console.groq.com](https://console.groq.com)) |
GROQ_MODEL | Model id (default llama-3.3-70b-versatile) | |
DISCORD_BOT_TOKEN | bot | Discord bot token (required only for the bot) |
DISCORD_CHANNEL_ID | bot | Channel id for the daily push |
DISCORD_GUILD_ID | Guild id for instant slash-command sync (else global sync) | |
ARXIV_QUERY | arXiv query (default cat:cs.AI) | |
DAILY_COUNT / REPORT_COUNT | Papers fetched per daily push / per report | |
PUSH_HOUR / PUSH_MINUTE / PUSH_TZ_OFFSET | Default daily 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 | Enable BGE cross-encoder reranking | |
TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID | Enable Telegram delivery | |
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASSWORD / SMTP_FROM / EMAIL_TO | Enable Email delivery | |
LINE_CHANNEL_TOKEN / LINE_TO | Enable LINE delivery (Messaging API) | |
GITHUB_TOKEN | Optional, raises GitHub API rate limits | |
X_BEARER_TOKEN | Enables the X/Twitter crawler (X API v2 requires a paid plan) | |
JWT_SECRET | Dashboard auth secret (ephemeral if unset; set it in production) | |
JWT_EXPIRE_MINUTES | Token lifetime (default 7 days) | |
CORS_ORIGINS / API_PUBLIC_URL / FRONTEND_URL | Dashboard URLs (defaults fit local dev) | |
GOOGLE/GITHUB/DISCORD_CLIENT_ID/SECRET | OAuth sign-in and Discord account linking | |
STORE_BACKEND / DATABASE_URL | sqlite (default) or postgres with pgvector | |
SCHEDULER_ENABLED | Per-user digest/reminder scheduler (compose sets it to 1) |
The arXiv, news, Hacker News, Reddit, and GitHub crawlers work without credentials. Telegram/Email/LINE delivery, OAuth providers, and the X/Twitter crawler activate only once their keys are set. Changing EMBED_MODEL changes vector dimension; the store detects this and rebuilds the index automatically.
The dashboard is self-explanatory after First steps; every page is described in Web dashboard, and the full REST surface in API reference.
cp backend/.env.example backend/.env
```bash
Settings live in backend/.env (never committed). The minimum working configuration:
```bash
1. Create an application at the Discord Developer Portal. 2. Under Bot -> Reset Token, copy the token into DISCORD_BOT_TOKEN. 3. Under OAuth2 -> URL Generator, select scopes bot and applications.commands, grant Send Messages, Read Message History, and Embed Links, and use the generated URL to invite the bot. 4. Enable Developer Mode in Discord to copy the channel and guild IDs.
```
For Postgres, also set STORE_BACKEND=postgres and DATABASE_URL in backend/.env.
cd backend uv sync # install dependencies (includes PyTorch; first run is slow) cp .env.example .env # then fill in your keys uv run python main.py api # dashboard API at :8000 (serves frontend/dist if built) uv run python main.py bot # or: the Discord bot uv run python main.py all # or: both at once
cd frontend npm install npm run dev # UI at http://localhost:5173
`uv run` uses the project virtualenv automatically. If you prefer an activated shell:
bash source backend/.venv/bin/activate # then run: python main.py api ```
All endpoints are also browsable live at /docs (Swagger UI) and /redoc. Unless marked public, endpoints require Authorization: Bearer <JWT> obtained from register/login or OAuth. Streaming endpoints return Server-Sent Events (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 (OpenAlex) and reproducibility |
| POST | /api/daily | Fetch today's arXiv papers, store and index them |
| GET | /api/daily/personalized | Papers ranked against your interaction profile |
| POST | /api/interactions | Log an interaction (like, click, ...) for recommendations (201) |
| GET | /api/reading | Reading kanban items (?state=to-read\|reading\|done) |
| POST | /api/reading | Add a paper to the kanban (201) |
| PATCH | /api/reading/{paper_id} | Move between states |
| DELETE | /api/reading/{paper_id} | Remove from the kanban (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 zip |
| 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/enabled |
| DELETE | /api/feeds/{id} | Remove a feed (204) |
| POST | /api/feeds/refresh | Fetch all enabled feeds into the library |
| GET | /api/subscriptions | Your keyword subscriptions |
| POST | /api/subscriptions | Add a keyword subscription (201) |
| DELETE | /api/subscriptions/{name} | Remove one (204) |
| Method | Path | Description |
|---|---|---|
| GET | /api/graph/citation?seed= | Citation network around a seed (arXiv id or title), D3 nodes/edges + PageRank + communities |
| GET | /api/graph/concept | Concept graph over the library (?refresh=1 rebuilds) |
| GET | /api/graph/global?query= | Community-summary map-reduce answer for corpus-level questions |
| Method | Path | Description |
|---|---|---|
| POST | /api/deepresearch | **SSE** — decompose → per-question research → synthesis; 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} | Writing tools: polish, contributions, review, checklist, latex, slides |
| Method | Path | Description |
|---|---|---|
| GET | /api/trends | Rising keywords (slope-ranked) + 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 | Your 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 a reminder (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 (LLM, retrieval fallback) (201) |
| PATCH | /api/learning-paths/{id} | Update items/progress/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-key readiness (booleans only) — public |
| GET | /api/sources | Data-source configuration status |
| GET | /api/memory | Your agent memory items (?kind=&contains=&limit=) |
| POST | /api/memory | Add a memory item (201) |
| POST | /api/eval | RAG evaluation — engine=offline (default): precision@k, recall, MRR, lexical faithfulness; engine=judge: RAGAS-style LLM-judged faithfulness, answer relevancy, context precision/recall (503 without GROQ_API_KEY) |
| POST | /api/agent | Tool-calling agent (503 without GROQ_API_KEY) |
- Literature review generation with identified research gaps. - BibTeX export with generated citation keys. - Method comparison tables across papers. - Guided deep-read explanations of dense papers. - Credibility and impact signals from citation counts. - Reproducibility signals from linked code repositories. - Reading kanban (to-read / reading / done) with drag-and-drop, and topic subscriptions. - Obsidian export — render papers and links as Markdown notes with frontmatter and wikilinks for Obsidian, Juggl, and Dataview; CSV and BibTeX exports alongside. - Writing assistance — LaTeX drafts, slide outlines, polishing, contribution extraction, review suggestions, and submission checklists.
- Hybrid retrieval — dense vector search (FAISS, optional HNSW) fused with BM25 lexical search via Reciprocal Rank Fusion. - Query transformation — HyDE, multi-query rewriting, and question decomposition to widen recall. - Cross-encoder reranking — optional BGE reranker for second-stage precision. - Parent-document retrieval — retrieve focused child chunks, return their parent papers. - Contextual chunk embedding — situate each chunk within its document before embedding. - Semantic answer cache — short-circuit near-duplicate questions. - Traceable citations — chunk-level source markers resolve back to paper, section, and link, with a citation-accuracy metric to score grounding.
| Method | Path | Description |
|---|---|---|
| POST | /api/ask | **SSE** — streamed answer over the library; 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 |
AIR-Agent是一个开源的AI工作流平台,具有较高的潜力和扩展性
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
AI Skill Hub 点评:AIR-Agent 的核心功能完整,质量优秀。对于自动化工程师和运维人员来说,这是一个值得纳入个人工具库的选择。建议先在非生产环境试用,再逐步推广。
| 原始名称 | AIR-Agent |
| 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 类型,复制安装指令后粘贴到对应客户端