ArXivKB — Science Knowledge Base
Why This Skill?
🏠 100% local — crawls arXiv's free API, embeds with Ollama (nomic-embed-text), indexes in FAISS + SQLite. No cloud cost.
🔍 Semantic search on paper content — FAISS indexes PDF chunks (not just abstracts), so you find papers by what they contain.
📂 arXiv category-based — tracks official arXiv categories (155 available, 8 groups). No free-text queries.
🧹 Auto-cleanup — configurable expiry deletes old papers, PDFs, and chunks.
Install
CODEBLOCK0
Works on macOS and Linux. Installs Python deps (faiss-cpu, pdfplumber, tiktoken, arxiv, numpy), pulls nomic-embed-text via Ollama, creates data directories and DB.
Prerequisites
- - Ollama — must be installed and running (
ollama serve) - Python 3.10+
Quick Start
CODEBLOCK1
Categories
CODEBLOCK2
Categories are official arXiv codes (e.g. cs.AI, eess.IV, q-fin.ST). The full taxonomy is built in.
Ingestion
CODEBLOCK3
Pipeline: arXiv API → PDF download → text extraction (pdfplumber) → chunking (tiktoken, 500 tokens, 50 overlap) → embedding (Ollama nomic-embed-text) → FAISS + SQLite.
Paper Details
CODEBLOCK4
Statistics
CODEBLOCK5
Expiry & Cleanup
CODEBLOCK6
Configuration
No config file needed. Defaults:
| Setting | Default | Override |
|---|
| Data directory | INLINECODE10 | INLINECODE11 env or INLINECODE12 |
| Ollama endpoint |
http://localhost:11434 | — (hardcoded) |
| Embedding model |
nomic-embed-text (768d) | — (hardcoded) |
| Chunk size | 500 tokens, 50 overlap | — |
| Expiry | 90 days |
--days flag |
Data Layout
CODEBLOCK7
DB Schema
- - papers: id, arxivid, title, abstract, categories, published, status, createdat
- chunks: id, paperid, section, chunkindex, text, faissid, createdat
- translations: paperid, language, abstract, createdat (PK: paperid+language)
- categories: code, description, groupname, enabled, added_at (155 entries)
💬 Chat Commands (OpenClaw Agent)
When this skill is installed, the agent recognizes /akb as a shortcut:
| Command | Action |
|---|
| INLINECODE17 | Show enabled categories |
| INLINECODE18 |
Enable categories for crawling |
|
/akb remove cs.AI | Disable a category |
|
/akb browse | Browse all 155 arXiv categories |
|
/akb browse robotics | Filter categories by keyword |
|
/akb stats | Show paper/chunk/category counts |
|
/akb help | Show available commands |
The agent runs these via the akb CLI internally.
📱 PrivateApp Dashboard
A companion PWA dashboard is available. Provides:
- - Semantic search across paper content
- Paper detail with abstract translation (on-demand via LLM)
- Inline PDF viewing
- Category browser
- Stats (papers, chunks, categories)
Architecture
CODEBLOCK8
ArXivKB — 科学知识库
为什么选择这个技能?
🏠 完全本地化 — 爬取arXiv的免费API,使用Ollama(nomic-embed-text)进行嵌入,在FAISS + SQLite中建立索引。无需云服务费用。
🔍 论文内容语义搜索 — FAISS对PDF分块(不仅仅是摘要)建立索引,因此你可以根据论文包含的内容来查找论文。
📂 基于arXiv分类 — 追踪官方arXiv分类(共155个,8个组)。无需自由文本查询。
🧹 自动清理 — 可配置的过期策略,自动删除旧论文、PDF和分块。
安装
bash
python3 scripts/install.py
适用于 macOS 和 Linux。安装Python依赖(faiss-cpu、pdfplumber、tiktoken、arxiv、numpy),通过Ollama拉取nomic-embed-text,创建数据目录和数据库。
前提条件
- - Ollama — 必须已安装并运行(ollama serve)
- Python 3.10+
快速开始
bash
1. 添加要追踪的arXiv分类
akb categories add cs.AI cs.CV cs.LG
2. 浏览所有可用分类
akb categories browse
3. 导入近期论文(最近7天)
akb ingest
4. 查看统计信息
akb stats
分类管理
bash
akb categories list # 显示已启用的分类
akb categories browse # 浏览全部155个arXiv分类
akb categories browse robotics # 按关键词筛选
akb categories add cs.AI cs.RO # 启用分类
akb categories delete cs.AI # 禁用某个分类
分类使用官方arXiv代码(例如 cs.AI、eess.IV、q-fin.ST)。完整的分类体系已内置。
导入流程
bash
akb ingest # 爬取、下载PDF、分块、嵌入
akb ingest --days 14 # 回溯14天
akb ingest --dry-run # 仅预览
akb ingest --no-pdf # 仅索引摘要(速度更快)
流程:arXiv API → PDF下载 → 文本提取(pdfplumber)→ 分块(tiktoken,500个token,50个重叠)→ 嵌入(Ollama nomic-embed-text)→ FAISS + SQLite。
论文详情
bash
akb paper 2401.12345 # 显示标题、摘要、分类、PDF状态
统计信息
bash
akb stats # 论文数、分块数、分类数、数据库大小
过期与清理
bash
akb expire # 删除超过90天的论文(默认)
akb expire --days 30 # 覆盖设置:删除超过30天的论文
akb expire --days 30 -y # 跳过确认
配置
无需配置文件。默认设置如下:
| 设置项 | 默认值 | 覆盖方式 |
|---|
| 数据目录 | ~/workspace/arxivkb | ARXIVKBDATADIR 环境变量或 --data-dir |
| Ollama端点 |
http://localhost:11434 | —(硬编码) |
| 嵌入模型 | nomic-embed-text(768维) | —(硬编码) |
| 分块大小 | 500个token,50个重叠 | — |
| 过期时间 | 90天 | --days 参数 |
数据布局
~/workspace/arxivkb/
├── arxivkb.db # SQLite:论文、分块、翻译、分类
├── pdfs/ # 下载的PDF文件({arxiv_id}.pdf)
└── faiss/
└── arxivkb.faiss # FAISS IndexFlatIP(分块嵌入)
数据库结构
- - papers:id、arxivid、标题、摘要、分类、发布日期、状态、创建时间
- chunks:id、paperid、章节、分块索引、文本、faissid、创建时间
- translations:paperid、语言、摘要、创建时间(主键:paper_id+语言)
- categories:代码、描述、组名、已启用、添加时间(共155条)
💬 聊天命令(OpenClaw Agent)
当安装此技能后,代理会识别 /akb 作为快捷命令:
| 命令 | 操作 |
|---|
| /akb list | 显示已启用的分类 |
| /akb add cs.AI cs.RO |
启用要爬取的分类 |
| /akb remove cs.AI | 禁用某个分类 |
| /akb browse | 浏览全部155个arXiv分类 |
| /akb browse robotics | 按关键词筛选分类 |
| /akb stats | 显示论文/分块/分类数量 |
| /akb help | 显示可用命令 |
代理在内部通过 akb 命令行界面执行这些操作。
📱 PrivateApp 仪表盘
提供配套的PWA仪表盘。功能包括:
- - 论文内容的语义搜索
- 论文详情及摘要翻译(按需通过LLM)
- 内联PDF查看
- 分类浏览器
- 统计信息(论文、分块、分类)
架构
scripts/
├── cli.py # 命令行界面 — 分类、导入、论文、统计、过期
├── db.py # SQLite结构 + 增删改查
├── arxiv_crawler.py # arXiv API搜索 + PDF下载
├── arxiv_taxonomy.py # 完整arXiv分类体系(155个分类)
├── pdf_processor.py # PDF文本提取 + tiktoken分块
├── embed.py # Ollama nomic-embed-text(768维,归一化)
├── faiss_index.py # FAISS IndexFlatIP管理器
├── search.py # 语义搜索:查询 → FAISS → 按论文分组
└── install.py # 一键安装程序