A multi-agent system that maps connections between research papers using a LangGraph workflow, ArXiv + OpenAlex APIs (both free), and semantic embeddings.
User Input (ArXiv ID / DOI / PDF / search query)
↓
Ingestion Agent → fetches metadata from ArXiv + OpenAlex + CrossRef
↓ enriches with citation counts, concepts, references
├──→ Weaver Agent → builds paper↔paper edges:
│ - citation edges (A cites B)
│ - similarity edges (vector cosine ≥ 0.75)
│ - shared-author edges
│
└──→ Alert Agent → scans ArXiv RSS for new papers daily
Both ↓
Visualizer Agent → clusters graph, generates LLM insight summary
↓
Streamlit UI → interactive PyVis graph + chat interface
# 1. Create a Python virtual environment
python -m venv venv
source venv/bin/activate # Linux / macOS
venv\Scripts\activate # Windows
# 2. Edit .env if you want OpenAI or Anthropic instead of Ollama
# 3.Install dependencies:
pip install -r requirements.txt
# 3. Start the app
streamlit run ui/app.pyBy ArXiv ID (sidebar → ArXiv tab):
2310.06825
1706.03762
2305.10601
By DOI (sidebar → DOI tab):
10.1145/3442188.3445922
By search query — ask in chat:
Find papers about transformer attention mechanisms
By PDF upload — requires GROBID:
docker run -t --rm -p 8070:8070 lfoppiano/grobid:0.8.0| API | What it provides | Rate limit |
|---|---|---|
| ArXiv | Paper metadata, abstracts, PDFs | Generous, ~3 req/s |
| OpenAlex | 200M+ papers, citation graphs, concepts | 100k/day unauthenticated |
| CrossRef | DOI resolution, reference lists | Polite pool (add email) |
| ArXiv RSS | New paper alerts by category | Daily |
Set in .env or switch in the UI sidebar:
| Provider | Local? | Notes |
|---|---|---|
| Ollama | Yes | Free, runs on your machine. ollama pull llama3 |
| OpenAI | No | Needs API key. |
| Anthropic | No | Needs API key. |
When deployed, users paste their own API key in the sidebar — it's never stored.
| Edge | Meaning | Color |
|---|---|---|
| CITES | Paper A references Paper B | Purple |
| SIMILAR_TO | Semantic cosine similarity ≥ 0.75 | Teal |
| SAME_AUTHOR | Two papers share an author | Amber |
Node size = citation count (larger = more cited).
research-agent/
app/
agents/
ingestion_agent.py ← fetches & stores papers
weaver_agent.py ← builds graph edges
alert_agent.py ← ArXiv RSS scanner
visualizer_agent.py ← graph insights via LLM
tools/
arxiv_tool.py
openalex_tool.py ← Semantic Scholar replacement
crossref_tool.py
grobid_tool.py ← PDF parsing (optional)
graph_tool.py
graph.py ← LangGraph workflow
state.py ← shared AgentState
storage/
graph_store.py ← NetworkX paper↔paper graph
vector_store.py ← ChromaDB embeddings
database.py ← SQLite metadata + alerts
core/
agent.py ← conversational LangGraph agent
llm_router.py ← OpenAI / Anthropic / Ollama switcher
ingestion/
embedder.py ← sentence-transformers (local)
pdf_parser.py ← PyMuPDF fallback
ui/
app.py ← Streamlit app
graph_viz.py ← PyVis visualization
config.py
requirements.txt