Realizace globálního semantického vyhledávání v kanálech a botech Telegramu
Vývojář vytvořil databázi milionů účtů v Telegramu, která zahrnuje skenování a zpracování dat pro semantické vyhledávání. Projekt je postaven na 14 mikroslužbách určených pro střední a pokročilé specialisty. Hlavním zaměřením je hybridní vyhledávání podle popisů, zpráv a profilových obrázků bez nutnosti nastavovat filtry.
Bylo shromážděno více než 2,5 milionu jedinečných uživatelských jmen z Common Crawl (16 TB indexu, zpracování prostřednictvím streamování na domácím počítači za týden). Platných: 800 tisíc kanálů, 124 tisíc skupin, 94 tisíc botů. Doplňkově byly přidány veřejné katalogy a odkazy z popisů.
Skenování dat
Skenování prostřednictvím rotujících proxy serverů pomocí platných uživatelských jmen (pravidelné výrazy). Ukládají se:
- Jméno, popis, profilový obrázek (cache CDN odkazů).
- Posledních 10–15 zpráv bez stránkování (typ, text; průměrná délka textu – 530 znaků).
Přesměrování zpráv se přidává do fronty. Statistika zpráv:
- Text bez médií.
- Obrázek s popiskem.
- Zřídka: faktura, kontakt.
Pro bota: MTProto (grammers): ResolveUsername + GetFullUser pro získání popisu v rozhovoru a příkazů. Limity u ResolveUsername vyžadují opatrnost.
Zpracování okrajových případů:
- Profilové obrázky s chybou 500 CDN (např. @magiskcnshare) – přeskakování po 3 pokusech.
- Prázdné zprávy (@vlad_shoky_drum_school).
- Profilový obrázek 3,5 MB (@vip_labels) – zvýšení limitu v Axum na 4 MB.
Zpracování obrázků
Semantické vyhledávání podle profilových obrázků prostřednictvím captioning (text místo multimodálních embeddingů pro experimenty).
Možnosti a ceny za 1 milion obrázků:
| Model | Cena ($) | Tokeny/obrázek | Stav |
|---------------------|----------|----------------|------|
| GPT-4o mini (nízká kvalita)| 138 | 85 | Drahé |
| Gemini 2.5 Flash-Lite| 26 | Nízké | Batch API nestabilní |
| Gemma 3 4B (vast.ai) | ~0,24/den | - | Vybráno: RTX 4090, 1 milion za 24 hodin |
Gemma 3 4B (7. místo v benchmarku Roboflow pro captioning) – open-source, lokální spuštění. Regenerace přes OpenRouter (15 $/milión).
Databáze a vyhledávání
Testovány:
- Postgres + pg_vector: zkušenosti jsou, ale hybridní vyhledávání je obtížné ručně.
- Elasticsearch: funkční, ale vysoké nároky na RAM (Java).
Volba: ParadeDB (Elastic-like vyhledávání na Postgres 18). Problém při aktualizaci Docker image – duplikáty v UNIQUE indexech, selhání zálohy. Řešení: vrácení z zálohy (pg_dump každý den).
Hybridní vyhledávání: klíčová slova + vektorové (semantické).
Generování embeddingů
Pro bota testováno text-embedding-3-large (0,13 $/M token), ale drahé při 1 milionu dokumentů po 4000 znacích (>130 $). Přechod na bge-m3 (vícejazyčné, MTEB benchmark).
OpenAI API pro 12 tisíc embeddingů – 0,03 $. Škálování na miliony prostřednictvím OpenRouter.
Důležité:
- Shromážděno 800 tisíc+ kanálů s významem z popisů/zpráv.
- Captioning profilových obrázků Gemma 3 4B – ekonomické a přesné.
- ParadeDB pro hybridní vyhledávání bez Java stacku.
- MTProto pro bota (riziko porušení ToS, ale pouze veřejné data).
- Pravidelný růst databáze díky přesměrováním.
Projekt ukazuje end-to-end pipeline: skenování → zpracování → vektorové vyhledávání. Ideální pro prezentaci v rezumé (Big Data na milion řádcích).
— Editorial Team
Zatím žádné komentáře.