尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Every offer pays for itself. Most stores send discounts to everyone, and about two out of three go to shoppers who would have bought anyway. This engine decides, for each customer, which offer to send (or none), checks every decision against 31 business rules, and delivers it through a Telegram bot.
🎬 Demo video (3:48): not stored in the repo; rebuild it with the steps under Rebuilding the demo video.
customer data → features → segment → Claude picks an offer → 31 rules check it → Telegram
│ fails or breaks a rule
└──────────→ rules engine decides instead
| Policy | Extra net margin / week | Discount wasted on buy-anyway | Cost per extra purchase |
|---|---|---|---|
| 10% to everyone | +₹2,571 | ₹4,834 | ₹358 |
| Rules only | +₹6,801 | ₹932 | ₹103 |
| Rules + AI | +₹7,635 | ₹202 | ₹51 |
Full reports: data/eval_report.md, 30-day run: data/sim30_report.md. Customer behaviour is calibrated on public datasets (Flipkart catalog, RetailRocket clickstream, Hillstrom email test).
Needs Python 3.11+.
pip install -r requirements.txt
cp .env.example .env # add ANTHROPIC_API_KEY (and TELEGRAM_BOT_TOKEN if you want the bot)
python generate_data.py # synthetic customers → data/shop.db, data/customers.json
python run_decisions.py # decide an offer for every customer (--no-agent: rules only, no API key)
python preview.py # dashboard at http://127.0.0.1:5000
Keep DELIVERY_MODE=dry_run in .env until you really want Telegram messages to go out.
| Command | What it does |
|---|---|
python run_automation.py --once | one round of automatic decisions (events + daily check + sending) |
python show_log.py --flagged | decisions where the AI failed or broke a rule |
python evaluate.py --no-ai | compare no offers vs 10% to everyone vs rules (vs AI) |
python simulate_30d.py | 30-day forward simulation with Diwali |
python tools/experiment.py | try rule changes and measure their profit |
python calibrate.py | recalibrate personas from datasets in data/raw/ |
python -m tests.test_pipeline | tests (also test_rules_v2, test_edge_cases, test_automation, test_telegram) |
src/ engine: features, segments, agent (Claude), rules, fallback, delivery, Telegram bot, automation
config/ rules.yaml, offers, catalog, personas, response model (rules live in files, not code)
web/ dashboard page served by preview.py
data/ generated customers, CSV dataset, evaluation reports (databases are rebuilt, not committed)
docs/ data dictionary, edge cases, research notes
tests/ rule, pipeline, edge-case, automation and Telegram tests
tools/ experiments, rules PDF builder
video/ scripts that render the demo videos (story2 = latest)
The repo deploys as-is: import it at vercel.com/new (no build settings needed). vercel.json sends every request to api/index.py, which runs the same Flask app as preview.py.
ANTHROPIC_API_KEY under Project → Settings → Environment Variables so Claude decides; without it the rules engine decides.data/demo/ (rebuild with python tools/make_vercel_data.py), copied into /tmp. Changes made on the page are temporary.Vercel can't keep polling Telegram, so the bot uses a webhook: Telegram calls /api/telegram for every message and button press.
.env as TELEGRAM_WEBHOOK_SECRET=...:
python -c "import secrets; print(secrets.token_urlsafe(32))"TELEGRAM_BOT_TOKEN, TELEGRAM_WEBHOOK_SECRET (same values as .env), TELEGRAM_TEST_MODE=1 and DELIVERY_MODE=live, then redeploy.python tools/telegram_webhook.py set https://<your-app>.vercel.app (check with ... info)./test to the bot. It replies with your chat ID: add it as TELEGRAM_TEST_CHATS in Vercel (comma-separate several) and redeploy, so test copies keep arriving after the database resets.Limits: chats that pressed Start are forgotten when the instance restarts (the database lives in /tmp); at most 15 messages go out per request (SEND_MAX_PER_ROUND). While the webhook is set, a local python preview.py can't receive messages: run python tools/telegram_webhook.py delete to switch back.
data/*.db) are rebuilt by generate_data.py and run_decisions.py.data/raw/ (download them yourself): Flipkart e-commerce sample, RetailRocket events.csv, Kevin Hillstrom MineThatData email test.pip install edge-tts numpy scipy playwright && playwright install msedge # plus ffmpeg on PATH
cp data/sim_offers.db data/demo_offers.db # sim_offers.db is written by evaluate.py
PORT=5001 OFFERS_DB=data/demo_offers.db AUTOMATION=1 TELEGRAM_DISABLED=1 FORCE_DRY_RUN=1 python preview.py # keep running
python video/story2/voice.py && python video/story2/render.py && python video/story2/make.py
The render drives the real dashboard on port 5001 (dry-run, Telegram disabled). Voice is a stock neural voice; music and sound effects are synthesised in code, so there are no licensed assets.