← Back
iamzulx

iamzulx/crypto-rag

Asisten crypto berbahasa Indonesia: RAG pengetahuan 267 topik + data pasar realtime (6 bursa, WebSocket, derivatif, on-chain, TVL, DeFi) + tool-calling agent + LLM synthesis

View on GitHub ↗
Stars
465
Forks
6
Watchers
465
Open issues
0
Contributors
2
Language
Python
License
MIT License
Default branch
master
Created Sep 5, 2026Updated Sep 13, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

crypto-rag

Asisten crypto berbahasa Indonesia yang menggabungkan RAG (Retrieval-Augmented Generation) dengan data pasar realtime. Menjawab pertanyaan konsep/edukasi dari korpus pengetahuan, sekaligus menyajikan harga, market cap, funding rate, TVL, dan sentimen langsung dari sumber live — tanpa API key untuk data pasar.

Filosofi arsitektur

Prinsip inti crypto RAG yang benar: jangan pernah menaruh angka pasar ke dalam vector store karena instan basi. Data numerik (harga, funding, TVL) diambil live saat query lewat tool-call; RAG hanya untuk konsep, deskripsi, dan konteks statis. Angka tidak pernah lewat LLM sehingga bebas dari halusinasi harga.

Pertanyaan
   │
   ▼
Router (deteksi intent)
   ├── Konsep/edukasi ─────► Korpus pengetahuan (FAISS) ─┐
   ├── Harga realtime ─────► 6 bursa + WebSocket          │
   ├── Derivatif/funding ─► Binance Futures               ├─► (opsional) LLM synthesis
   ├── TVL / on-chain ────► DefiLlama                      │    grounded + sitasi + timestamp
   ├── Sentimen ──────────► Fear & Greed Index             │
   └── Market cap/kategori► RAG statis koin (FAISS + RRF) ─┘

Fitur

Data pasar realtime (keyless):

  • Harga spot dari 6 bursa (Binance, OKX, Bybit, KuCoin, Kraken, Coinbase) — dibandingkan untuk spread & arbitrase
  • Streaming harga sub-detik via Binance WebSocket (--watch, --live)
  • Tren harga historis (candle OHLC Binance) + SMA & analisis arah
  • Order book depth + estimasi slippage untuk notional tertentu
  • Funding rate + open interest (Binance Futures)
  • TVL protokol & per-chain (DefiLlama)
  • Fear & Greed Index (+tren)
  • Ringkasan pasar global (total mcap, dominasi BTC/ETH) + top gainer/loser
  • On-chain live: fee & mempool Bitcoin (Mempool.space), hashrate/transaksi jaringan BTC, difficulty & countdown halving, gas fee Ethereum (EIP-1559), supply stablecoin (DefiLlama), volume DEX 24 jam, supply/epoch/inflasi Solana

RAG:

  • Retrieval hybrid: BM25 (keyword) + dense embedding (FAISS), digabung via Reciprocal Rank Fusion
  • Cross-encoder reranker opsional (--rerank)
  • Korpus pengetahuan 146+ topik Bahasa Indonesia (konsep, teknologi, kategori, trading, risiko, protokol, strategi, sejarah, jaringan, keamanan, metrik, ekosistem, praktis, protokol lanjutan, regulasi)
  • Filter kategori koin (defi, meme, AI, stablecoin, layer-1, dll.) — 615 koin ter-tag

Fitur pengguna:

  • Chat interaktif dengan memori follow-up (default bila tanpa argumen)
  • Watch mode multi-koin dengan alert harga bersyarat (BTC>65000, ETH<1800)
  • Portfolio tracker — tambah holding, hitung nilai live, P/L, alokasi
  • Streaming output LLM token-by-token (--stream)
  • Tool-calling agent — query kompleks/multi-langkah otomatis dirutekan ke LLM yang memilih tool sendiri (mis. "bandingkan funding BTC dan ETH", "koin defi mana funding tertinggi")

LLM synthesis (opsional):

  • Merangkai konteks (pengetahuan + data live) jadi jawaban natural, grounded, dengan sitasi & disclaimer
  • Kompatibel endpoint OpenAI (StepFun, OpenAI, Groq, LM Studio, Ollama, dll.)
  • Fallback otomatis ke jawaban ekstraktif bila LLM tidak tersedia

Setup

python3 -m venv venv
venv/bin/pip install requests numpy faiss-cpu fastembed websocket-client

# Ambil data koin & bangun index (sekali)
venv/bin/python fetch_data.py
venv/bin/python index.py
venv/bin/python knowledge_index.py

# (opsional) perkaya kategori koin dari CoinGecko (defi, meme, AI, gaming, dll)
venv/bin/python enrich_categories.py --pages 1
venv/bin/python index.py            # rebuild index dengan kategori baru

Konfigurasi LLM (opsional)

Salin config.example.json menjadi config.json lalu isi API key:

{
  "OPENAI_BASE_URL": "https://api.stepfun.ai/step_plan/v1",
  "OPENAI_API_KEY": "your-key",
  "OPENAI_MODEL": "step-3.5-flash"
}

ENV var (OPENAI_BASE_URL, OPENAI_API_KEY, OPENAI_MODEL) juga didukung dan menang atas config.json. Tanpa konfigurasi ini, sistem berjalan dengan jawaban ekstraktif.

Pemakaian

# Mode chat interaktif (default bila tanpa argumen) — punya memori follow-up
venv/bin/python rag.py
#   > apa itu Bitcoin
#   > berapa harganya sekarang     (otomatis merujuk Bitcoin)
#   > tren nya seminggu terakhir   (idem)
#   > keluar

# Konsep (RAG + LLM synthesis)
venv/bin/python rag.py "apa itu Bitcoin"
venv/bin/python rag.py "jelaskan impermanent loss"

# Harga realtime lintas bursa
venv/bin/python rag.py "harga BTC sekarang"
venv/bin/python rag.py "bandingkan harga ETH di semua exchange"
venv/bin/python rag.py --live "harga SOL"          # + harga WS sub-detik

# Tren harga historis (candle Binance)
venv/bin/python rag.py "harga BTC seminggu terakhir"
venv/bin/python rag.py "tren ETH sebulan terakhir"

# Streaming live di terminal (multi-koin + alert)
venv/bin/python rag.py --watch BTC ETH SOL          # pantau harga
venv/bin/python rag.py --watch "BTC>65000"          # alert saat tembus 65k
venv/bin/python rag.py --watch "ETH<1800" SOL       # alert ETH + pantau SOL

# Portfolio tracker
venv/bin/python rag.py "portfolio tambah 0.5 BTC harga 60000"
venv/bin/python rag.py "portfolio tambah 2 ETH"
venv/bin/python rag.py "portfolio"                   # lihat nilai & P/L

# Streaming LLM
venv/bin/python rag.py --stream "apa itu Hyperliquid"

# Data pasar
venv/bin/python rag.py "funding rate BTC"
venv/bin/python rag.py "TVL Aave"
venv/bin/python rag.py "fear and greed index"
venv/bin/python rag.py "ringkasan pasar crypto"
venv/bin/python rag.py "top gainer hari ini"
venv/bin/python rag.py "slippage beli BTC 5 juta"

# RAG statis koin
venv/bin/python rag.py "koin defi terbesar"
venv/bin/python rag.py "tren market cap Solana"

# Flag
#   --chat     mode percakapan interaktif (default bila tanpa argumen)
#   --rule     paksa jawaban ekstraktif (tanpa LLM)
#   --rerank   pakai cross-encoder reranker (lebih presisi, lebih lambat)
#   --realtime paksa mode harga realtime
#   --live     tampilkan harga WS Binance di jawaban realtime
#   --watch    streaming harga live di terminal (dukung alert: BTC>65000)
#   --stream   tampilkan jawaban LLM token-by-token
#   --agent    paksa pakai tool-calling agent (query kompleks multi-langkah)
#   --k N      jumlah dokumen yang di-retrieve (default 5)

# Evaluasi kualitas retrieval (golden set 87 query)
venv/bin/python eval_rag.py

Referensi Command Lengkap

Script setup / data

Command Fungsi
python fetch_data.py Ambil data koin (market cap, harga, histori) dari CoinGecko
python fetch_data.py --fresh Paksa ambil ulang walau cache masih segar
python fetch_data.py --limit 1000 --history 50 Atur jumlah koin & kedalaman histori
python index.py Bangun embedding + FAISS index koin
python knowledge_index.py Bangun FAISS index korpus pengetahuan
python enrich_categories.py --pages 1 Perkaya kategori koin per-kategori CoinGecko

rag.py — flag CLI

Flag Fungsi Default
--chat Mode percakapan interaktif dengan memori follow-up aktif bila tanpa argumen
--rule Paksa jawaban ekstraktif (tanpa LLM) off
--llm Paksa pakai LLM synthesis auto bila config ada
--stream Output LLM token-by-token (SSE) off
--rerank Cross-encoder reranker (presisi tinggi, lebih lambat) off
--realtime Paksa mode harga realtime lintas bursa off
--live Tampilkan harga WS Binance di jawaban realtime off
--watch Streaming harga live di terminal (multi-koin + alert) off
--k N Jumlah dokumen yang di-retrieve 5
--index PATH Lokasi file index koin data/index.json
--data PATH Lokasi file data koin data/coins.json
--history PATH Lokasi file histori data/history.json
--faiss-out PATH Lokasi FAISS index data/faiss.index

Contoh per kategori intent

Kategori Contoh command
Konsep/edukasi python rag.py "apa itu Bitcoin" · "jelaskan proof of stake" · "apa itu MEV"
Harga realtime python rag.py "harga BTC sekarang" · "bandingkan harga ETH di semua exchange"
Harga live WS python rag.py --live "harga SOL"
Tren historis python rag.py "harga BTC seminggu terakhir" · "tren ETH sebulan"
Derivatif python rag.py "funding rate BTC" · "open interest ETH"
Order book python rag.py "likuiditas BTC" · "slippage beli BTC 5 juta"
Sentimen python rag.py "fear and greed index" · "tren sentimen seminggu"
TVL / DeFi python rag.py "TVL Aave" · "TVL per chain"
On-chain python rag.py "fee bitcoin" · "hashrate jaringan bitcoin" · "supply stablecoin" · "supply sol"
Overview pasar python rag.py "ringkasan pasar crypto" · "dominasi BTC"
Top movers python rag.py "top gainer hari ini" · "top loser"
Kategori koin python rag.py "koin defi terbesar" · "koin meme" · "koin AI" · "koin RWA"
RAG statis python rag.py "koin market cap terbesar" · "tren market cap Solana"
Watch + alert python rag.py --watch BTC ETH SOL · --watch "BTC>65000" · --watch "ETH<1800"
Portfolio python rag.py "portfolio tambah 0.5 BTC harga 60000" · "portfolio" · "portfolio hapus BTC"

Environment variable

Variabel Fungsi
OPENAI_BASE_URL Endpoint LLM (OpenAI-compatible). Menang atas config.json
OPENAI_API_KEY API key LLM
OPENAI_MODEL Nama model (mis. step-3.5-flash)
CRYPTO_RAG_DEBUG=1 Tampilkan log error WebSocket ke stderr

Tips Performa

  • Startup ~15-17 detik per run one-shot didominasi loading model embedding. Untuk banyak pertanyaan, pakai mode --chat: model di-load sekali, tiap pertanyaan berikutnya 0.1-1 detik.
  • Data live di-cache dengan TTL pendek (harga 3s, funding/overview 30-60s, TVL 5m). Panggilan berulang koin yang sama hampir instan.
  • LLM synthesis menambah 8-9 detik (latency API). Pakai --stream agar jawaban mulai tampil lebih cepat, atau --rule untuk jawaban instan tanpa LLM.
  • Query non-semantik (harga, funding, TVL, kategori, market cap) tidak butuh LLM dan sangat cepat setelah warm.

Struktur modul

File Fungsi
rag.py Router utama + orkestrasi tool + generator jawaban
fetch_data.py Ambil data koin (CoinGecko): market cap, harga, kategori, histori
index.py Bangun embedding + FAISS index koin
knowledge_index.py Bangun FAISS index korpus pengetahuan
realtime.py Agregator harga 6 bursa + order book + slippage
stream.py Streaming harga Binance WebSocket
history.py Candle OHLC historis + analisis tren (SMA)
market.py Funding rate, OI, TVL, Fear & Greed, overview, movers
onchain.py On-chain live: fee/mempool BTC, hashrate, stablecoin & SOL supply
agent.py Tool-calling agent (LLM pilih tool untuk query multi-langkah)
eval_rag.py Evaluasi kualitas retrieval (golden set, hit@k, MRR)
alerts.py Parse alert + check kondisi harga
portfolio.py Tracker holding + valuasi live
symbols.py Normalisasi simbol lintas platform
cache.py Cache TTL in-memory
rerank.py Cross-encoder reranker
llm.py Sintesis jawaban via LLM (OpenAI-compatible)
common.py Util format, tokenisasi, HTTP helper (retry+429), trend_text
enrich_categories.py Perkaya kategori koin per-kategori CoinGecko
knowledge/*.md Korpus pengetahuan crypto (Bahasa Indonesia)

Sumber data

Sumber Data API key
Binance (REST + WS) harga spot, order book, funding, OI tidak
OKX, Bybit, KuCoin, Kraken, Coinbase harga spot tidak
DefiLlama TVL protokol & chain, supply stablecoin tidak
alternative.me Fear & Greed Index tidak
Mempool.space + Blockchain.info fee/mempool BTC, hashrate, transaksi tidak
Solana RPC supply SOL tidak
CoinGecko market cap, kategori, histori, global tidak (free tier)

Catatan

  • Bukan nasihat keuangan. Semua jawaban bersifat edukatif (DYOR).
  • Data pasar bergantung ketersediaan bursa; koin tanpa stream trade (mis. delisted) memakai fallback REST.